mirror of
https://github.com/lupettohf/kv4p-sharp.git
synced 2025-01-19 01:36:30 +08:00
Compare commits
2 Commits
25510f8e19
...
9747599c63
Author | SHA1 | Date | |
---|---|---|---|
|
9747599c63 | ||
|
f8389e0ddf |
|
@ -1,6 +1,6 @@
|
|||
# KV4P-Sharp
|
||||
|
||||
KV4P-Sharp is a C# library designed to communicate with KV4P USB VHF radios. It facilitates control over radio operations through serial communication but does not handle audio encoding or decoding. Users must manage audio processing separately by encoding/decoding audio data as PCM 44100Hz, 8-bit mono.
|
||||
KV4P-Sharp is a C# library designed to communicate with KV4P USB VHF radios. It facilitates control over radio operations through serial communication but does not handle audio encoding or decoding. Users must manage audio processing separately by encoding/decoding audio data as PCM ~44100~ 16000Hz, 8-bit mono.
|
||||
|
||||
## Features
|
||||
- Control transmit (PTT) and receive (RX) modes.
|
||||
|
|
|
@ -44,10 +44,10 @@ public class RadioController : IDisposable
|
|||
}
|
||||
|
||||
private RadioMode currentMode = RadioMode.STARTUP;
|
||||
private const int MIN_FIRMWARE_VER = 1;
|
||||
private const int MIN_FIRMWARE_VER = 4;
|
||||
private string versionStrBuffer = "";
|
||||
|
||||
private const int AUDIO_SAMPLE_RATE = 44100;
|
||||
private const int AUDIO_SAMPLE_RATE = 16000;
|
||||
|
||||
// Synchronization locks
|
||||
private readonly object _syncLock = new object();
|
||||
|
@ -148,13 +148,14 @@ public class RadioController : IDisposable
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tunes the radio to the specified frequencies with tone and squelch level.
|
||||
/// Tunes the radio to the specified frequencies with tone, squelch level, and bandwidth.
|
||||
/// </summary>
|
||||
/// <param name="txFrequencyStr">Transmit frequency as a string (e.g., "146.520").</param>
|
||||
/// <param name="rxFrequencyStr">Receive frequency as a string (e.g., "146.520").</param>
|
||||
/// <param name="tone">Tone value as an integer (00 to 99).</param>
|
||||
/// <param name="squelchLevel">Squelch level as an integer (0 to 9).</param>
|
||||
public void TuneToFrequency(string txFrequencyStr, string rxFrequencyStr, int tone, int squelchLevel)
|
||||
/// <param name="wideband">True for 25kHz bandwidth, false for 12.5kHz bandwidth.</param>
|
||||
public void TuneToFrequency(string txFrequencyStr, string rxFrequencyStr, int tone, int squelchLevel, bool wideband)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(txFrequencyStr))
|
||||
throw new ArgumentException("Transmit frequency cannot be null or empty.", nameof(txFrequencyStr));
|
||||
|
@ -172,8 +173,9 @@ public class RadioController : IDisposable
|
|||
if (squelchStr.Length != 1)
|
||||
throw new ArgumentException("Squelch level must be a single digit (0-9).", nameof(squelchLevel));
|
||||
|
||||
// Build parameters string
|
||||
string paramsStr = txFrequencyStr + rxFrequencyStr + toneStr + squelchStr;
|
||||
// Build parameters string with bandwidth setting
|
||||
string bandwidthSetting = wideband ? "W" : "N";
|
||||
string paramsStr = txFrequencyStr + rxFrequencyStr + toneStr + squelchStr + bandwidthSetting;
|
||||
SendCommand(ESP32Command.TUNE_TO, paramsStr);
|
||||
}
|
||||
|
||||
|
@ -256,7 +258,7 @@ public class RadioController : IDisposable
|
|||
}
|
||||
else if (mode == RadioMode.STARTUP)
|
||||
{
|
||||
// Handle firmware version check
|
||||
// Handle firmware version check with updated minimum version
|
||||
string dataStr = System.Text.Encoding.UTF8.GetString(data);
|
||||
lock (_versionStrBufferLock)
|
||||
{
|
||||
|
@ -271,7 +273,7 @@ public class RadioController : IDisposable
|
|||
{
|
||||
if (verInt < MIN_FIRMWARE_VER)
|
||||
{
|
||||
OnErrorOccurred(new ErrorEventArgs(new InvalidOperationException("Unsupported firmware version.")));
|
||||
OnErrorOccurred(new ErrorEventArgs(new InvalidOperationException($"Unsupported firmware version. Version 4 or higher is required.")));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -279,7 +281,6 @@ public class RadioController : IDisposable
|
|||
{
|
||||
currentMode = RadioMode.RX;
|
||||
}
|
||||
// No need to initialize audio playback
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue
Block a user