Un-unroll some loops and save a few bytes
This commit is contained in:
@@ -16,6 +16,7 @@
|
|||||||
#include "app/spectrum.h"
|
#include "app/spectrum.h"
|
||||||
#include "am_fix.h"
|
#include "am_fix.h"
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
#ifdef ENABLE_SCAN_RANGES
|
#ifdef ENABLE_SCAN_RANGES
|
||||||
#include "chFrScanner.h"
|
#include "chFrScanner.h"
|
||||||
@@ -37,7 +38,6 @@ struct FrequencyBandInfo {
|
|||||||
|
|
||||||
const uint16_t RSSI_MAX_VALUE = 65535;
|
const uint16_t RSSI_MAX_VALUE = 65535;
|
||||||
|
|
||||||
static uint16_t R30, R37, R3D, R43, R47, R48, R7E;
|
|
||||||
static uint32_t initialFreq;
|
static uint32_t initialFreq;
|
||||||
static char String[32];
|
static char String[32];
|
||||||
|
|
||||||
@@ -221,24 +221,29 @@ static void ToggleAFBit(bool on) {
|
|||||||
BK4819_WriteRegister(BK4819_REG_47, reg);
|
BK4819_WriteRegister(BK4819_REG_47, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const BK4819_REGISTER_t registers_to_save[] ={
|
||||||
|
BK4819_REG_30,
|
||||||
|
BK4819_REG_37,
|
||||||
|
BK4819_REG_3D,
|
||||||
|
BK4819_REG_43,
|
||||||
|
BK4819_REG_47,
|
||||||
|
BK4819_REG_48,
|
||||||
|
BK4819_REG_7E,
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t registers_stack [sizeof(registers_to_save)];
|
||||||
|
|
||||||
static void BackupRegisters() {
|
static void BackupRegisters() {
|
||||||
R30 = BK4819_ReadRegister(BK4819_REG_30);
|
for (uint32_t i = 0; i < ARRAY_SIZE(registers_to_save); i++){
|
||||||
R37 = BK4819_ReadRegister(BK4819_REG_37);
|
registers_stack[i] = BK4819_ReadRegister(registers_to_save[i]);
|
||||||
R3D = BK4819_ReadRegister(BK4819_REG_3D);
|
}
|
||||||
R43 = BK4819_ReadRegister(BK4819_REG_43);
|
|
||||||
R47 = BK4819_ReadRegister(BK4819_REG_47);
|
|
||||||
R48 = BK4819_ReadRegister(BK4819_REG_48);
|
|
||||||
R7E = BK4819_ReadRegister(BK4819_REG_7E);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RestoreRegisters() {
|
static void RestoreRegisters() {
|
||||||
BK4819_WriteRegister(BK4819_REG_30, R30);
|
|
||||||
BK4819_WriteRegister(BK4819_REG_37, R37);
|
for (uint32_t i = 0; i < ARRAY_SIZE(registers_to_save); i++){
|
||||||
BK4819_WriteRegister(BK4819_REG_3D, R3D);
|
BK4819_WriteRegister(registers_to_save[i], registers_stack[i]);
|
||||||
BK4819_WriteRegister(BK4819_REG_43, R43);
|
}
|
||||||
BK4819_WriteRegister(BK4819_REG_47, R47);
|
|
||||||
BK4819_WriteRegister(BK4819_REG_48, R48);
|
|
||||||
BK4819_WriteRegister(BK4819_REG_7E, R7E);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ToggleAFDAC(bool on) {
|
static void ToggleAFDAC(bool on) {
|
||||||
@@ -272,8 +277,8 @@ bool IsCenterMode() { return settings.scanStepIndex < S_STEP_2_5kHz; }
|
|||||||
// scan step in 0.01khz
|
// scan step in 0.01khz
|
||||||
uint16_t GetScanStep() { return scanStepValues[settings.scanStepIndex]; }
|
uint16_t GetScanStep() { return scanStepValues[settings.scanStepIndex]; }
|
||||||
|
|
||||||
uint16_t GetStepsCount()
|
uint16_t GetStepsCount()
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_SCAN_RANGES
|
#ifdef ENABLE_SCAN_RANGES
|
||||||
if(gScanRangeStart) {
|
if(gScanRangeStart) {
|
||||||
return (gScanRangeStop - gScanRangeStart) / GetScanStep();
|
return (gScanRangeStop - gScanRangeStart) / GetScanStep();
|
||||||
@@ -425,10 +430,10 @@ static void UpdatePeakInfo() {
|
|||||||
|
|
||||||
static void SetRssiHistory(uint16_t idx, uint16_t rssi)
|
static void SetRssiHistory(uint16_t idx, uint16_t rssi)
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_SCAN_RANGES
|
#ifdef ENABLE_SCAN_RANGES
|
||||||
if(scanInfo.measurementsCount > 128) {
|
if(scanInfo.measurementsCount > 128) {
|
||||||
uint8_t i = (uint32_t)ARRAY_SIZE(rssiHistory) * 1000 / scanInfo.measurementsCount * idx / 1000;
|
uint8_t i = (uint32_t)ARRAY_SIZE(rssiHistory) * 1000 / scanInfo.measurementsCount * idx / 1000;
|
||||||
if(rssiHistory[i] < rssi || isListening)
|
if(rssiHistory[i] < rssi || isListening)
|
||||||
rssiHistory[i] = rssi;
|
rssiHistory[i] = rssi;
|
||||||
rssiHistory[(i+1)%128] = 0;
|
rssiHistory[(i+1)%128] = 0;
|
||||||
return;
|
return;
|
||||||
@@ -437,8 +442,8 @@ static void SetRssiHistory(uint16_t idx, uint16_t rssi)
|
|||||||
rssiHistory[idx] = rssi;
|
rssiHistory[idx] = rssi;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Measure()
|
static void Measure()
|
||||||
{
|
{
|
||||||
uint16_t rssi = scanInfo.rssi = GetRssi();
|
uint16_t rssi = scanInfo.rssi = GetRssi();
|
||||||
SetRssiHistory(scanInfo.i, rssi);
|
SetRssiHistory(scanInfo.i, rssi);
|
||||||
}
|
}
|
||||||
@@ -490,6 +495,7 @@ static void UpdateScanStep(bool inc) {
|
|||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
settings.frequencyChangeStep = GetBW() >> 1;
|
settings.frequencyChangeStep = GetBW() >> 1;
|
||||||
RelaunchScan();
|
RelaunchScan();
|
||||||
ResetBlacklist();
|
ResetBlacklist();
|
||||||
@@ -846,7 +852,7 @@ static void OnKeyDown(uint8_t key) {
|
|||||||
case KEY_5:
|
case KEY_5:
|
||||||
#ifdef ENABLE_SCAN_RANGES
|
#ifdef ENABLE_SCAN_RANGES
|
||||||
if(!gScanRangeStart)
|
if(!gScanRangeStart)
|
||||||
#endif
|
#endif
|
||||||
FreqInput();
|
FreqInput();
|
||||||
break;
|
break;
|
||||||
case KEY_0:
|
case KEY_0:
|
||||||
@@ -1146,7 +1152,7 @@ static void UpdateScan() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(scanInfo.measurementsCount < 128)
|
if(scanInfo.measurementsCount < 128)
|
||||||
memset(&rssiHistory[scanInfo.measurementsCount], 0,
|
memset(&rssiHistory[scanInfo.measurementsCount], 0,
|
||||||
sizeof(rssiHistory) - scanInfo.measurementsCount*sizeof(rssiHistory[0]));
|
sizeof(rssiHistory) - scanInfo.measurementsCount*sizeof(rssiHistory[0]));
|
||||||
|
|
||||||
redrawScreen = true;
|
redrawScreen = true;
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
#ifndef BK4819_REGS_H
|
#ifndef BK4819_REGS_H
|
||||||
#define BK4819_REGS_H
|
#define BK4819_REGS_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char *name;
|
const char *name;
|
||||||
@@ -387,4 +388,3 @@ enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
233
driver/bk4819.c
233
driver/bk4819.c
@@ -14,7 +14,10 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h> // NULL
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "settings.h"
|
||||||
|
|
||||||
#include "../audio.h"
|
#include "../audio.h"
|
||||||
#include "../bsp/dp32g030/gpio.h"
|
#include "../bsp/dp32g030/gpio.h"
|
||||||
@@ -243,7 +246,7 @@ void BK4819_SetAGC(bool enable)
|
|||||||
if(!(regVal & (1 << 15)) == enable)
|
if(!(regVal & (1 << 15)) == enable)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
BK4819_WriteRegister(BK4819_REG_7E, (regVal & ~(1 << 15) & ~(0b111 << 12))
|
BK4819_WriteRegister(BK4819_REG_7E, (regVal & ~(1 << 15) & ~(0b111 << 12))
|
||||||
| (!enable << 15) // 0 AGC fix mode
|
| (!enable << 15) // 0 AGC fix mode
|
||||||
| (3u << 12) // 3 AGC fix index
|
| (3u << 12) // 3 AGC fix index
|
||||||
);
|
);
|
||||||
@@ -272,7 +275,7 @@ void BK4819_InitAGC(bool amModulation)
|
|||||||
//
|
//
|
||||||
// <15:10> ???
|
// <15:10> ???
|
||||||
//
|
//
|
||||||
// <9:8> LNA Gain Short
|
// <9:8> LNA Gain Short
|
||||||
// 3 = 0dB <<< 1o11 read from spectrum reference manual
|
// 3 = 0dB <<< 1o11 read from spectrum reference manual
|
||||||
// 2 = -24dB -19 -11
|
// 2 = -24dB -19 -11
|
||||||
// 1 = -30dB -24 -16
|
// 1 = -30dB -24 -16
|
||||||
@@ -310,12 +313,12 @@ void BK4819_InitAGC(bool amModulation)
|
|||||||
BK4819_WriteRegister(BK4819_REG_11, 0x027B); // 0x027B / 000000 10 011 11 011 / -43dB
|
BK4819_WriteRegister(BK4819_REG_11, 0x027B); // 0x027B / 000000 10 011 11 011 / -43dB
|
||||||
BK4819_WriteRegister(BK4819_REG_10, 0x007A); // 0x007A / 000000 00 011 11 010 / -58dB
|
BK4819_WriteRegister(BK4819_REG_10, 0x007A); // 0x007A / 000000 00 011 11 010 / -58dB
|
||||||
if(amModulation) {
|
if(amModulation) {
|
||||||
BK4819_WriteRegister(BK4819_REG_14, 0x0000);
|
BK4819_WriteRegister(BK4819_REG_14, 0x0000);
|
||||||
BK4819_WriteRegister(BK4819_REG_49, (0 << 14) | (50 << 7) | (32 << 0));
|
BK4819_WriteRegister(BK4819_REG_49, (0 << 14) | (50 << 7) | (32 << 0));
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
BK4819_WriteRegister(BK4819_REG_14, 0x0019); // 0x0019 / 000000 00 000 11 001 / -79dB
|
BK4819_WriteRegister(BK4819_REG_14, 0x0019); // 0x0019 / 000000 00 000 11 001 / -79dB
|
||||||
BK4819_WriteRegister(BK4819_REG_49, (0 << 14) | (84 << 7) | (56 << 0)); //0x2A38 / 00 1010100 0111000 / 84, 56
|
BK4819_WriteRegister(BK4819_REG_49, (0 << 14) | (84 << 7) | (56 << 0)); //0x2A38 / 00 1010100 0111000 / 84, 56
|
||||||
}
|
}
|
||||||
|
|
||||||
BK4819_WriteRegister(BK4819_REG_7B, 0x8420);
|
BK4819_WriteRegister(BK4819_REG_7B, 0x8420);
|
||||||
@@ -338,7 +341,7 @@ int8_t BK4819_GetRxGain_dB(void)
|
|||||||
struct {
|
struct {
|
||||||
uint16_t _ : 5;
|
uint16_t _ : 5;
|
||||||
uint16_t agcSigStrength : 7;
|
uint16_t agcSigStrength : 7;
|
||||||
int16_t gainIdx : 3;
|
int16_t gainIdx : 3;
|
||||||
uint16_t agcEnab : 1;
|
uint16_t agcEnab : 1;
|
||||||
};
|
};
|
||||||
uint16_t __raw;
|
uint16_t __raw;
|
||||||
@@ -605,89 +608,54 @@ void BK4819_SetFilterBandwidth(const BK4819_FilterBandwidth_t Bandwidth, const b
|
|||||||
//
|
//
|
||||||
// <1:0> 0 ???
|
// <1:0> 0 ???
|
||||||
|
|
||||||
uint16_t val;
|
uint16_t val = 0;
|
||||||
|
|
||||||
switch (Bandwidth)
|
switch (Bandwidth)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case BK4819_FILTER_BW_WIDE: // 25kHz
|
case BK4819_FILTER_BW_WIDE: // 25kHz
|
||||||
if (weak_no_different)
|
val = (4u << 12) | // *3 RF filter bandwidth
|
||||||
{ // make the RX bandwidth the same with weak signals
|
(6u << 6) | // *0 AFTxLPF2 filter Band Width
|
||||||
val =
|
(2u << 4) | // 2 BW Mode Selection
|
||||||
(0u << 15) | // 0
|
(1u << 3) | // 1
|
||||||
(4u << 12) | // *3 RF filter bandwidth
|
(0u << 2); // 0 Gain after FM Demodulation
|
||||||
(4u << 9) | // *0 RF filter bandwidth when signal is weak
|
|
||||||
(6u << 6) | // *0 AFTxLPF2 filter Band Width
|
if (weak_no_different) {
|
||||||
(2u << 4) | // 2 BW Mode Selection
|
// make the RX bandwidth the same with weak signals
|
||||||
(1u << 3) | // 1
|
val |= (4u << 9); // *0 RF filter bandwidth when signal is weak
|
||||||
(0u << 2) | // 0 Gain after FM Demodulation
|
} else {
|
||||||
(0u << 0); // 0
|
/// with weak RX signals the RX bandwidth is reduced
|
||||||
}
|
val |= (2u << 9); // *0 RF filter bandwidth when signal is weak
|
||||||
else
|
|
||||||
{ // with weak RX signals the RX bandwidth is reduced
|
|
||||||
val = // 0x3028); // 0 011 000 000 10 1 0 00
|
|
||||||
(0u << 15) | // 0
|
|
||||||
(4u << 12) | // *3 RF filter bandwidth
|
|
||||||
(2u << 9) | // *0 RF filter bandwidth when signal is weak
|
|
||||||
(6u << 6) | // *0 AFTxLPF2 filter Band Width
|
|
||||||
(2u << 4) | // 2 BW Mode Selection
|
|
||||||
(1u << 3) | // 1
|
|
||||||
(0u << 2) | // 0 Gain after FM Demodulation
|
|
||||||
(0u << 0); // 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BK4819_FILTER_BW_NARROW: // 12.5kHz
|
case BK4819_FILTER_BW_NARROW: // 12.5kHz
|
||||||
if (weak_no_different)
|
val = (4u << 12) | // *4 RF filter bandwidth
|
||||||
{
|
(0u << 6) | // *1 AFTxLPF2 filter Band Width
|
||||||
val =
|
(0u << 4) | // 0 BW Mode Selection
|
||||||
(0u << 15) | // 0
|
(1u << 3) | // 1
|
||||||
(4u << 12) | // *4 RF filter bandwidth
|
(0u << 2); // 0 Gain after FM Demodulation
|
||||||
(4u << 9) | // *0 RF filter bandwidth when signal is weak
|
|
||||||
(0u << 6) | // *1 AFTxLPF2 filter Band Width
|
if (weak_no_different) {
|
||||||
(0u << 4) | // 0 BW Mode Selection
|
val |= (4u << 9); // *0 RF filter bandwidth when signal is weak
|
||||||
(1u << 3) | // 1
|
} else {
|
||||||
(0u << 2) | // 0 Gain after FM Demodulation
|
val |= (2u << 9);
|
||||||
(0u << 0); // 0
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
val = // 0x4048); // 0 100 000 001 00 1 0 00
|
|
||||||
(0u << 15) | // 0
|
|
||||||
(4u << 12) | // *4 RF filter bandwidth
|
|
||||||
(2u << 9) | // *0 RF filter bandwidth when signal is weak
|
|
||||||
(0u << 6) | // *1 AFTxLPF2 filter Band Width
|
|
||||||
(0u << 4) | // 0 BW Mode Selection
|
|
||||||
(1u << 3) | // 1
|
|
||||||
(0u << 2) | // 0 Gain after FM Demodulation
|
|
||||||
(0u << 0); // 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BK4819_FILTER_BW_NARROWER: // 6.25kHz
|
case BK4819_FILTER_BW_NARROWER: // 6.25kHz
|
||||||
if (weak_no_different)
|
val = (3u << 12) | // 3 RF filter bandwidth
|
||||||
{
|
(3u << 9) | // *0 RF filter bandwidth when signal is weak
|
||||||
val =
|
(1u << 6) | // 1 AFTxLPF2 filter Band Width
|
||||||
(0u << 15) | // 0
|
(1u << 4) | // 1 BW Mode Selection
|
||||||
(3u << 12) | // 3 RF filter bandwidth
|
(1u << 3) | // 1
|
||||||
(3u << 9) | // *0 RF filter bandwidth when signal is weak
|
(0u << 2); // 0 Gain after FM Demodulation
|
||||||
(1u << 6) | // 1 AFTxLPF2 filter Band Width
|
|
||||||
(1u << 4) | // 1 BW Mode Selection
|
if (weak_no_different) {
|
||||||
(1u << 3) | // 1
|
val |= (3u << 9);
|
||||||
(0u << 2) | // 0 Gain after FM Demodulation
|
} else {
|
||||||
(0u << 0); // 0
|
val |= (0u << 9); // 0 RF filter bandwidth when signal is weak
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
val =
|
|
||||||
(0u << 15) | // 0
|
|
||||||
(3u << 12) | // 3 RF filter bandwidth
|
|
||||||
(0u << 9) | // 0 RF filter bandwidth when signal is weak
|
|
||||||
(1u << 6) | // 1 AFTxLPF2 filter Band Width
|
|
||||||
(1u << 4) | // 1 BW Mode Selection
|
|
||||||
(1u << 3) | // 1
|
|
||||||
(0u << 2) | // 1 Gain after FM Demodulation
|
|
||||||
(0u << 0); // 0
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -843,7 +811,7 @@ void BK4819_RX_TurnOn(void)
|
|||||||
BK4819_WriteRegister(BK4819_REG_30, 0);
|
BK4819_WriteRegister(BK4819_REG_30, 0);
|
||||||
|
|
||||||
|
|
||||||
BK4819_WriteRegister(BK4819_REG_30,
|
BK4819_WriteRegister(BK4819_REG_30,
|
||||||
BK4819_REG_30_ENABLE_VCO_CALIB |
|
BK4819_REG_30_ENABLE_VCO_CALIB |
|
||||||
BK4819_REG_30_DISABLE_UNKNOWN |
|
BK4819_REG_30_DISABLE_UNKNOWN |
|
||||||
BK4819_REG_30_ENABLE_RX_LINK |
|
BK4819_REG_30_ENABLE_RX_LINK |
|
||||||
@@ -1024,7 +992,7 @@ void BK4819_PlayTone(uint16_t Frequency, bool bTuningGainSwitch)
|
|||||||
void BK4819_PlaySingleTone(const unsigned int tone_Hz, const unsigned int delay, const unsigned int level, const bool play_speaker)
|
void BK4819_PlaySingleTone(const unsigned int tone_Hz, const unsigned int delay, const unsigned int level, const bool play_speaker)
|
||||||
{
|
{
|
||||||
BK4819_EnterTxMute();
|
BK4819_EnterTxMute();
|
||||||
|
|
||||||
if (play_speaker)
|
if (play_speaker)
|
||||||
{
|
{
|
||||||
AUDIO_AudioPathOn();
|
AUDIO_AudioPathOn();
|
||||||
@@ -1033,7 +1001,7 @@ void BK4819_PlaySingleTone(const unsigned int tone_Hz, const unsigned int delay,
|
|||||||
else
|
else
|
||||||
BK4819_SetAF(BK4819_AF_MUTE);
|
BK4819_SetAF(BK4819_AF_MUTE);
|
||||||
|
|
||||||
|
|
||||||
BK4819_WriteRegister(BK4819_REG_70, BK4819_REG_70_ENABLE_TONE1 | ((level & 0x7f) << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN));
|
BK4819_WriteRegister(BK4819_REG_70, BK4819_REG_70_ENABLE_TONE1 | ((level & 0x7f) << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN));
|
||||||
|
|
||||||
BK4819_EnableTXLink();
|
BK4819_EnableTXLink();
|
||||||
@@ -1050,7 +1018,7 @@ void BK4819_PlaySingleTone(const unsigned int tone_Hz, const unsigned int delay,
|
|||||||
AUDIO_AudioPathOff();
|
AUDIO_AudioPathOff();
|
||||||
BK4819_SetAF(BK4819_AF_MUTE);
|
BK4819_SetAF(BK4819_AF_MUTE);
|
||||||
}
|
}
|
||||||
|
|
||||||
BK4819_WriteRegister(BK4819_REG_70, 0x0000);
|
BK4819_WriteRegister(BK4819_REG_70, 0x0000);
|
||||||
BK4819_WriteRegister(BK4819_REG_30, 0xC1FE);
|
BK4819_WriteRegister(BK4819_REG_30, 0xC1FE);
|
||||||
BK4819_ExitTxMute();
|
BK4819_ExitTxMute();
|
||||||
@@ -1150,7 +1118,7 @@ void BK4819_ExitBypass(void)
|
|||||||
uint16_t regVal = BK4819_ReadRegister(BK4819_REG_7E);
|
uint16_t regVal = BK4819_ReadRegister(BK4819_REG_7E);
|
||||||
|
|
||||||
// 0x302E / 0 011 000000 101 110
|
// 0x302E / 0 011 000000 101 110
|
||||||
BK4819_WriteRegister(BK4819_REG_7E, (regVal & ~(0b111 << 3))
|
BK4819_WriteRegister(BK4819_REG_7E, (regVal & ~(0b111 << 3))
|
||||||
|
|
||||||
| (5u << 3) // 5 DC Filter band width for Tx (MIC In)
|
| (5u << 3) // 5 DC Filter band width for Tx (MIC In)
|
||||||
|
|
||||||
@@ -1266,33 +1234,46 @@ void BK4819_EnableTXLink(void)
|
|||||||
|
|
||||||
void BK4819_PlayDTMF(char Code)
|
void BK4819_PlayDTMF(char Code)
|
||||||
{
|
{
|
||||||
uint16_t tone1 = 0;
|
|
||||||
uint16_t tone2 = 0;
|
|
||||||
|
|
||||||
|
struct DTMF_TonePair {
|
||||||
|
uint16_t tone1;
|
||||||
|
uint16_t tone2;
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct DTMF_TonePair tones[] = {
|
||||||
|
{941, 1336},
|
||||||
|
{697, 1209},
|
||||||
|
{697, 1336},
|
||||||
|
{697, 1477},
|
||||||
|
{770, 1209},
|
||||||
|
{770, 1336},
|
||||||
|
{770, 1477},
|
||||||
|
{852, 1209},
|
||||||
|
{852, 1336},
|
||||||
|
{852, 1477},
|
||||||
|
{697, 1633},
|
||||||
|
{770, 1633},
|
||||||
|
{852, 1633},
|
||||||
|
{941, 1633},
|
||||||
|
{941, 1209},
|
||||||
|
{941, 1477},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const struct DTMF_TonePair *pSelectedTone = NULL;
|
||||||
switch (Code)
|
switch (Code)
|
||||||
{
|
{
|
||||||
case '0': tone1 = 941; tone2 = 1336; break;
|
case '0'...'9': pSelectedTone = &tones[0 + Code - '0']; break;
|
||||||
case '1': tone1 = 697; tone2 = 1209; break;
|
case 'A'...'D': pSelectedTone = &tones[10 + Code - 'A']; break;
|
||||||
case '2': tone1 = 697; tone2 = 1336; break;
|
case '*': pSelectedTone = &tones[14]; break;
|
||||||
case '3': tone1 = 697; tone2 = 1477; break;
|
case '#': pSelectedTone = &tones[15]; break;
|
||||||
case '4': tone1 = 770; tone2 = 1209; break;
|
default: pSelectedTone = NULL;
|
||||||
case '5': tone1 = 770; tone2 = 1336; break;
|
|
||||||
case '6': tone1 = 770; tone2 = 1477; break;
|
|
||||||
case '7': tone1 = 852; tone2 = 1209; break;
|
|
||||||
case '8': tone1 = 852; tone2 = 1336; break;
|
|
||||||
case '9': tone1 = 852; tone2 = 1477; break;
|
|
||||||
case 'A': tone1 = 697; tone2 = 1633; break;
|
|
||||||
case 'B': tone1 = 770; tone2 = 1633; break;
|
|
||||||
case 'C': tone1 = 852; tone2 = 1633; break;
|
|
||||||
case 'D': tone1 = 941; tone2 = 1633; break;
|
|
||||||
case '*': tone1 = 941; tone2 = 1209; break;
|
|
||||||
case '#': tone1 = 941; tone2 = 1477; break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tone1 > 0)
|
if (pSelectedTone) {
|
||||||
BK4819_WriteRegister(BK4819_REG_71, (((uint32_t)tone1 * 103244) + 5000) / 10000); // with rounding
|
BK4819_WriteRegister(BK4819_REG_71, (((uint32_t)pSelectedTone->tone1 * 103244) + 5000) / 10000); // with rounding
|
||||||
if (tone2 > 0)
|
BK4819_WriteRegister(BK4819_REG_72, (((uint32_t)pSelectedTone->tone2 * 103244) + 5000) / 10000); // with rounding
|
||||||
BK4819_WriteRegister(BK4819_REG_72, (((uint32_t)tone2 * 103244) + 5000) / 10000); // with rounding
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BK4819_PlayDTMFString(const char *pString, bool bDelayFirst, uint16_t FirstCodePersistTime, uint16_t HashCodePersistTime, uint16_t CodePersistTime, uint16_t CodeInternalTime)
|
void BK4819_PlayDTMFString(const char *pString, bool bDelayFirst, uint16_t FirstCodePersistTime, uint16_t HashCodePersistTime, uint16_t CodePersistTime, uint16_t CodeInternalTime)
|
||||||
@@ -1707,7 +1688,7 @@ void BK4819_PrepareFSKReceive(void)
|
|||||||
BK4819_WriteRegister(BK4819_REG_59, 0x3068);
|
BK4819_WriteRegister(BK4819_REG_59, 0x3068);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BK4819_PlayRoger(void)
|
void BK4819_PlayRogerNormal(void)
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
const uint32_t tone1_Hz = 500;
|
const uint32_t tone1_Hz = 500;
|
||||||
@@ -1744,28 +1725,38 @@ void BK4819_PlayRoger(void)
|
|||||||
|
|
||||||
void BK4819_PlayRogerMDC(void)
|
void BK4819_PlayRogerMDC(void)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
struct reg_value {
|
||||||
|
BK4819_REGISTER_t reg;
|
||||||
|
uint16_t value;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct reg_value RogerMDC_Configuration [] = {
|
||||||
|
{ BK4819_REG_58, 0x37C3 }, // FSK Enable,
|
||||||
|
// RX Bandwidth FFSK 1200/1800
|
||||||
|
// 0xAA or 0x55 Preamble
|
||||||
|
// 11 RX Gain,
|
||||||
|
// 101 RX Mode
|
||||||
|
// TX FFSK 1200/1800
|
||||||
|
{ BK4819_REG_72, 0x3065 }, // Set Tone-2 to 1200Hz
|
||||||
|
{ BK4819_REG_70, 0x00E0 }, // Enable Tone-2 and Set Tone2 Gain
|
||||||
|
{ BK4819_REG_5D, 0x0D00 }, // Set FSK data length to 13 bytes
|
||||||
|
{ BK4819_REG_59, 0x8068 }, // 4 byte sync length, 6 byte preamble, clear TX FIFO
|
||||||
|
{ BK4819_REG_59, 0x0068 }, // Same, but clear TX FIFO is now unset (clearing done)
|
||||||
|
{ BK4819_REG_5A, 0x5555 }, // First two sync bytes
|
||||||
|
{ BK4819_REG_5B, 0x55AA }, // End of sync bytes. Total 4 bytes: 555555aa
|
||||||
|
{ BK4819_REG_5C, 0xAA30 }, // Disable CRC
|
||||||
|
};
|
||||||
|
|
||||||
BK4819_SetAF(BK4819_AF_MUTE);
|
BK4819_SetAF(BK4819_AF_MUTE);
|
||||||
|
|
||||||
BK4819_WriteRegister(BK4819_REG_58, 0x37C3); // FSK Enable,
|
for (unsigned int i = 0; i < ARRAY_SIZE(RogerMDC_Configuration); i++) {
|
||||||
// RX Bandwidth FFSK 1200/1800
|
BK4819_WriteRegister(RogerMDC_Configuration[i].reg, RogerMDC_Configuration[i].value);
|
||||||
// 0xAA or 0x55 Preamble
|
}
|
||||||
// 11 RX Gain,
|
|
||||||
// 101 RX Mode
|
|
||||||
// TX FFSK 1200/1800
|
|
||||||
BK4819_WriteRegister(BK4819_REG_72, 0x3065); // Set Tone-2 to 1200Hz
|
|
||||||
BK4819_WriteRegister(BK4819_REG_70, 0x00E0); // Enable Tone-2 and Set Tone2 Gain
|
|
||||||
BK4819_WriteRegister(BK4819_REG_5D, 0x0D00); // Set FSK data length to 13 bytes
|
|
||||||
BK4819_WriteRegister(BK4819_REG_59, 0x8068); // 4 byte sync length, 6 byte preamble, clear TX FIFO
|
|
||||||
BK4819_WriteRegister(BK4819_REG_59, 0x0068); // Same, but clear TX FIFO is now unset (clearing done)
|
|
||||||
BK4819_WriteRegister(BK4819_REG_5A, 0x5555); // First two sync bytes
|
|
||||||
BK4819_WriteRegister(BK4819_REG_5B, 0x55AA); // End of sync bytes. Total 4 bytes: 555555aa
|
|
||||||
BK4819_WriteRegister(BK4819_REG_5C, 0xAA30); // Disable CRC
|
|
||||||
|
|
||||||
// Send the data from the roger table
|
// Send the data from the roger table
|
||||||
for (i = 0; i < 7; i++)
|
for (unsigned int i = 0; i < ARRAY_SIZE(FSK_RogerTable); i++) {
|
||||||
BK4819_WriteRegister(BK4819_REG_5F, FSK_RogerTable[i]);
|
BK4819_WriteRegister(BK4819_REG_5F, FSK_RogerTable[i]);
|
||||||
|
}
|
||||||
|
|
||||||
SYSTEM_DelayMs(20);
|
SYSTEM_DelayMs(20);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user