This commit is contained in:
@@ -30,7 +30,7 @@ typedef enum {
|
|||||||
|
|
||||||
RXState rxState = Ready;
|
RXState rxState = Ready;
|
||||||
|
|
||||||
uint8_t SMSResponseCounterTarget = 6;
|
uint8_t SMSResponseCounterTarget = 6;
|
||||||
|
|
||||||
void FSKModem_TimeSlice500ms(void) {
|
void FSKModem_TimeSlice500ms(void) {
|
||||||
if (SMSResponseCounter && FUNCTION_IsRx() && SMSResponseCounter++ > SMSResponseCounterTarget) {
|
if (SMSResponseCounter && FUNCTION_IsRx() && SMSResponseCounter++ > SMSResponseCounterTarget) {
|
||||||
@@ -65,54 +65,73 @@ void FSKModem_TimeSlice500ms(void) {
|
|||||||
void MSG_ConfigureFSK(bool rx) {
|
void MSG_ConfigureFSK(bool rx) {
|
||||||
BK4819_WriteRegister(BK4819_REG_70, TONE2_ENABLE_BIT | (96U << 0));
|
BK4819_WriteRegister(BK4819_REG_70, TONE2_ENABLE_BIT | (96U << 0));
|
||||||
|
|
||||||
|
// Compute tone frequency control word (for 26 MHz XTAL)
|
||||||
|
#define BK4819_FREQ_WORD(freq_hz) ((uint16_t)((freq_hz) * 10.32444f))
|
||||||
|
|
||||||
|
// Tone word macro for 26MHz XTAL (app note: freq * 10.32444)
|
||||||
|
#undef BK4819_FREQ_WORD
|
||||||
|
#define BK4819_FREQ_WORD(freq_hz) ((uint16_t)((freq_hz) * 10.32444f))
|
||||||
|
|
||||||
switch (gEeprom.FSKMode) {
|
switch (gEeprom.FSKMode) {
|
||||||
case MOD_AFSK_2400:
|
case MOD_AFSK_2400:
|
||||||
TONE2_FREQ = 24779U; // Estimated
|
TONE2_FREQ = BK4819_FREQ_WORD(2400.0f);
|
||||||
break;
|
break;
|
||||||
case MOD_AFSK_1200:
|
case MOD_AFSK_1200:
|
||||||
TONE2_FREQ = 12389U;
|
TONE2_FREQ = BK4819_FREQ_WORD(1200.0f);
|
||||||
break;
|
break;
|
||||||
case MOD_FSK_700:
|
case MOD_FSK_700:
|
||||||
TONE2_FREQ = 7227U;
|
TONE2_FREQ = BK4819_FREQ_WORD(700.0f);
|
||||||
break;
|
break;
|
||||||
case MOD_FSK_450:
|
case MOD_FSK_450:
|
||||||
TONE2_FREQ = 4646U;
|
TONE2_FREQ = BK4819_FREQ_WORD(450.0f);
|
||||||
break;
|
break;
|
||||||
case MOD_FSK_1200_2400:
|
case MOD_FSK_1200_2400:
|
||||||
TONE2_FREQ = 12389U; // Default to 1200Hz, dynamic switching may be required
|
TONE2_FREQ = BK4819_FREQ_WORD(1200.0f);
|
||||||
break;
|
break;
|
||||||
case MOD_NOAA_SAME:
|
case MOD_NOAA_SAME:
|
||||||
TONE2_FREQ = 2083U; // NOAA SAME uses 2083.3 Hz for mark and 1562.5 Hz for space
|
TONE2_FREQ = BK4819_FREQ_WORD(2083.3f);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
TONE2_FREQ = BK4819_FREQ_WORD(1200.0f);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BK4819_WriteRegister(BK4819_REG_72, TONE2_FREQ);
|
BK4819_WriteRegister(BK4819_REG_72, TONE2_FREQ);
|
||||||
|
|
||||||
// uint16_t fskConfig = FSK_ENABLE_BIT | FSK_RX_BW_1_2K | FSK_RX_GAIN_DEFAULT | FSK_PREAMBLE_TYPE_AA;
|
// Base config (enable + preamble type AA)
|
||||||
// if (gEeprom.FSKMode == MOD_AFSK_1200) {
|
|
||||||
// fskConfig = FSK_ENABLE_BIT | FSK_TX_MODE_FSK_1_2K_2_4K | FSK_RX_MODE_FSK_1_2K_2_4K_NOAA;
|
|
||||||
// }
|
|
||||||
|
|
||||||
uint16_t fskConfig = FSK_ENABLE_BIT | FSK_PREAMBLE_TYPE_AA;
|
uint16_t fskConfig = FSK_ENABLE_BIT | FSK_PREAMBLE_TYPE_AA;
|
||||||
|
|
||||||
|
// Compose the correct fields into REG_58:
|
||||||
|
// - TX mode bits are at <15:13> (use your FSK_TX_MODE_* macros which are <<13)
|
||||||
|
// - RX mode bits are at <12:10> (use your FSK_RX_MODE_* macros which are <<10)
|
||||||
|
// - RX BW bits are at <3:1> (use your FSK_RX_BW_* macros which are <<1)
|
||||||
switch (gEeprom.FSKMode) {
|
switch (gEeprom.FSKMode) {
|
||||||
|
case MOD_AFSK_1200:
|
||||||
|
fskConfig |= FSK_TX_MODE_FFSK_1200_1800 /*<<13 in macro*/
|
||||||
|
| FSK_RX_MODE_FFSK_1200_1800 /*<<10 in macro*/
|
||||||
|
| FSK_RX_BW_FFSK_1200_1800; /*<<1 in macro*/
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MOD_AFSK_2400:
|
||||||
|
fskConfig |= FSK_TX_MODE_FFSK_1200_2400
|
||||||
|
| FSK_RX_MODE_FFSK_1200_2400
|
||||||
|
| FSK_RX_BW_2_4K_FFSK_1200_2400;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MOD_NOAA_SAME:
|
||||||
|
fskConfig |= FSK_TX_MODE_NOAA_SAME
|
||||||
|
| FSK_RX_MODE_FSK_1_2K_2_4K_NOAA
|
||||||
|
| FSK_RX_BW_NOAA_SAME;
|
||||||
|
break;
|
||||||
|
|
||||||
case MOD_FSK_700:
|
case MOD_FSK_700:
|
||||||
case MOD_FSK_450:
|
case MOD_FSK_450:
|
||||||
case MOD_FSK_1200_2400:
|
case MOD_FSK_1200_2400:
|
||||||
fskConfig |= FSK_TX_MODE_FSK_1_2K_2_4K | FSK_RX_MODE_FSK_1_2K_2_4K_NOAA | FSK_RX_BW_1_2K;
|
|
||||||
break;
|
|
||||||
case MOD_AFSK_1200:
|
|
||||||
fskConfig |= FSK_TX_MODE_FFSK_1200_1800 | FSK_RX_MODE_FFSK_1200_1800 | FSK_RX_BW_FFSK_1200_1800;
|
|
||||||
break;
|
|
||||||
case MOD_AFSK_2400:
|
|
||||||
fskConfig |= FSK_TX_MODE_FFSK_1200_2400 | FSK_RX_MODE_FFSK_1200_2400 | FSK_RX_BW_2_4K_FFSK_1200_2400;
|
|
||||||
break;
|
|
||||||
case MOD_NOAA_SAME:
|
|
||||||
fskConfig |= FSK_TX_MODE_NOAA_SAME | FSK_RX_MODE_FSK_1_2K_2_4K_NOAA | FSK_RX_BW_NOAA_SAME;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
// Unsupported mode; keep previous setting
|
// binary FSK 1.2k/2.4k - use default FSK TX/RX modes and 1.2k BW
|
||||||
|
fskConfig |= FSK_TX_MODE_FSK_1_2K_2_4K
|
||||||
|
| FSK_RX_MODE_FSK_1_2K_2_4K_NOAA
|
||||||
|
| FSK_RX_BW_1_2K;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,19 +146,19 @@ void MSG_ConfigureFSK(bool rx) {
|
|||||||
BK4819_WriteRegister(BK4819_REG_5E, (64U << 3) | (1U << 0));
|
BK4819_WriteRegister(BK4819_REG_5E, (64U << 3) | (1U << 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Data length (REG_5D<15:8>)
|
||||||
size_t size = sizeof(dataPacket);
|
size_t size = sizeof(dataPacket);
|
||||||
if (rx) {
|
if (rx) size = (((size + 1) / 2) * 2) + 2;
|
||||||
size = (((size + 1) / 2) * 2) + 2;
|
|
||||||
}
|
|
||||||
BK4819_WriteRegister(BK4819_REG_5D, (size << 8));
|
BK4819_WriteRegister(BK4819_REG_5D, (size << 8));
|
||||||
|
|
||||||
BK4819_FskClearFifo();
|
BK4819_FskClearFifo();
|
||||||
|
|
||||||
|
// REG_59: clear flags, preamble len, sync len etc.
|
||||||
uint16_t fskParams = FSK_SYNC_LEN_BIT | ((rx ? 0U : 15U) << 4);
|
uint16_t fskParams = FSK_SYNC_LEN_BIT | ((rx ? 0U : 15U) << 4);
|
||||||
if (gCurrentVfo->SCRAMBLING_TYPE > 0) {
|
if (gCurrentVfo->SCRAMBLING_TYPE > 0) fskParams |= FSK_SCRAMBLE_ENABLE;
|
||||||
fskParams |= FSK_SCRAMBLE_ENABLE;
|
|
||||||
}
|
|
||||||
BK4819_WriteRegister(BK4819_REG_59, fskParams);
|
BK4819_WriteRegister(BK4819_REG_59, fskParams);
|
||||||
|
|
||||||
|
// Clear interrupt flags
|
||||||
BK4819_WriteRegister(BK4819_REG_02, 0);
|
BK4819_WriteRegister(BK4819_REG_02, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@
|
|||||||
|
|
||||||
#define DataPacketDataSize (21)
|
#define DataPacketDataSize (21)
|
||||||
|
|
||||||
#define SEQParameterEEPROM 0x1BD0
|
#define SEQParameterEEPROM 0x1D00
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t dest; //4bytes
|
uint32_t dest; //4bytes
|
||||||
|
|||||||
@@ -47,6 +47,7 @@
|
|||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "ui/inputbox.h"
|
#include "ui/inputbox.h"
|
||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
|
#include "messages.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
static void toggle_chan_scanlist(void) { // toggle the selected channels scanlist setting
|
static void toggle_chan_scanlist(void) { // toggle the selected channels scanlist setting
|
||||||
@@ -677,6 +678,7 @@ static void MAIN_Key_MENU(bool bKeyPressed, bool bKeyHeld) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (gWasFKeyPressed && bKeyPressed) {
|
if (gWasFKeyPressed && bKeyPressed) {
|
||||||
|
MESSAGES_GET();
|
||||||
gRequestDisplayScreen = DISPLAY_MESSAGES;
|
gRequestDisplayScreen = DISPLAY_MESSAGES;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,8 @@ void MESSAGES_SAVE() {
|
|||||||
if (msgIndex >= MESSAGES_COUNT) {
|
if (msgIndex >= MESSAGES_COUNT) {
|
||||||
msgIndex = 0;
|
msgIndex = 0;
|
||||||
}
|
}
|
||||||
Data[1]++;
|
msgIndex++;
|
||||||
|
Data[1] = msgIndex;
|
||||||
EEPROM_WriteBuffer(SEQParameterEEPROM, Data);
|
EEPROM_WriteBuffer(SEQParameterEEPROM, Data);
|
||||||
EEPROM_WriteBuffer(MESSAGES_START + (msgIndex * sizeof(StoredPacket)) + 0,
|
EEPROM_WriteBuffer(MESSAGES_START + (msgIndex * sizeof(StoredPacket)) + 0,
|
||||||
(uint8_t *) &inBoundPacket + 4); // metadata
|
(uint8_t *) &inBoundPacket + 4); // metadata
|
||||||
@@ -121,7 +122,7 @@ void MESSAGES_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) {
|
|||||||
if (bKeyPressed) {
|
if (bKeyPressed) {
|
||||||
memset(dataPacket.data, 0, DataPacketDataSize);
|
memset(dataPacket.data, 0, DataPacketDataSize);
|
||||||
prepareDataPacket();
|
prepareDataPacket();
|
||||||
//dataPacket.flags = 0x80 | (gCurrentVfo->OUTPUT_POWER & 0x07);
|
dataPacket.flags = 0x80 | (gCurrentVfo->OUTPUT_POWER & 0x07);
|
||||||
if (dataPacket.src == 665 || dataPacket.src == 664) {
|
if (dataPacket.src == 665 || dataPacket.src == 664) {
|
||||||
|
|
||||||
uint8_t out[5];
|
uint8_t out[5];
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
#include "../driver/keyboard.h"
|
#include "../driver/keyboard.h"
|
||||||
#include "../driver/eeprom.h"
|
#include "../driver/eeprom.h"
|
||||||
|
|
||||||
#define MESSAGES_START (0x1D00)
|
#define MESSAGES_START (0x1D08)
|
||||||
#define MESSAGES_COUNT (6)
|
#define MESSAGES_COUNT (6)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
Reference in New Issue
Block a user