From 3f9d46dc2ae866adbde5af78052974ab48248695 Mon Sep 17 00:00:00 2001 From: Silvano Seva Date: Wed, 31 Mar 2021 16:57:35 +0200 Subject: [PATCH] Fixed C6000_setModOffset in MD-UV3x0 HR_C6000 driver, now behaves in the same way as TYT firmware does. Provides a fix for #21, although it still have to be sharpened a bit. --- platform/drivers/baseband/HR_C6000.c | 4 ++-- platform/drivers/baseband/HR_C6000_UV3x0.c | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/platform/drivers/baseband/HR_C6000.c b/platform/drivers/baseband/HR_C6000.c index 38298db6..12bb5faa 100644 --- a/platform/drivers/baseband/HR_C6000.c +++ b/platform/drivers/baseband/HR_C6000.c @@ -279,8 +279,8 @@ void C6000_setModOffset(uint16_t offset) void C6000_setModAmplitude(uint8_t iAmp, uint8_t qAmp) { - _writeReg(0x00, 0x45, iAmp); // Mod2 magnitude (HR_C6000) - _writeReg(0x00, 0x46, qAmp); // Mod1 magnitude (HR_C6000) + _writeReg(0x04, 0x45, iAmp); // Mod2 magnitude (HR_C6000) + _writeReg(0x04, 0x46, qAmp); // Mod1 magnitude (HR_C6000) } void C6000_setMod2Bias(uint8_t bias) diff --git a/platform/drivers/baseband/HR_C6000_UV3x0.c b/platform/drivers/baseband/HR_C6000_UV3x0.c index 6f34483f..766d10d8 100644 --- a/platform/drivers/baseband/HR_C6000_UV3x0.c +++ b/platform/drivers/baseband/HR_C6000_UV3x0.c @@ -175,17 +175,23 @@ void C6000_terminate() void C6000_setModOffset(uint16_t offset) { - uint8_t offUpper = (offset >> 8) & 0x03; - uint8_t offLower = offset & 0xFF; + /* + * Same as original TYT firmware. + * Reference: functions @0802e7d4 and @080546cc in S18.16 binary image + */ + uint8_t offUpper = (offset < 0x80) ? 0x03 : 0x00; + uint8_t offLower = offset + 0x80; - _writeReg(0x04, 0x48, offUpper); - _writeReg(0x04, 0x47, offLower); + _writeReg(0x04, 0x48, offUpper); // Two-point bias, upper value + _writeReg(0x04, 0x47, offLower); // Two-point bias, lower value + + _writeReg(0x04, 0x04, offLower); // Bias value for TX, Q-channel } void C6000_setModAmplitude(uint8_t iAmp, uint8_t qAmp) { - _writeReg(0x00, 0x45, iAmp); // Mod2 magnitude (HR_C6000) - _writeReg(0x00, 0x46, qAmp); // Mod1 magnitude (HR_C6000) + _writeReg(0x04, 0x45, iAmp); // Mod2 magnitude (HR_C6000) + _writeReg(0x04, 0x46, qAmp); // Mod1 magnitude (HR_C6000) } void C6000_setMod2Bias(uint8_t bias)