Compare commits
10 Commits
107d89c137
...
f4ff2e6048
| Author | SHA1 | Date | |
|---|---|---|---|
|
f4ff2e6048
|
|||
|
|
ba5257f2f6 | ||
|
|
aee4406cff | ||
|
|
448a201308 | ||
|
|
9a312c3526 | ||
|
|
7f146a5857 | ||
|
|
710ff8fac1 | ||
|
|
08af06564c | ||
|
|
03f761348b | ||
|
|
96acae8014 |
@@ -4,12 +4,12 @@
|
|||||||
# 1 = enable
|
# 1 = enable
|
||||||
|
|
||||||
# ---- STOCK QUANSHENG FEATURES ----
|
# ---- STOCK QUANSHENG FEATURES ----
|
||||||
ENABLE_FMRADIO ?= 0
|
ENABLE_FMRADIO ?= 1
|
||||||
ENABLE_UART ?= 1
|
ENABLE_UART ?= 1
|
||||||
ENABLE_AIRCOPY ?= 0
|
ENABLE_AIRCOPY ?= 0
|
||||||
ENABLE_NOAA ?= 0
|
ENABLE_NOAA ?= 0
|
||||||
ENABLE_VOICE ?= 0
|
ENABLE_VOICE ?= 0
|
||||||
ENABLE_VOX ?= 1
|
ENABLE_VOX ?= 0
|
||||||
ENABLE_ALARM ?= 0
|
ENABLE_ALARM ?= 0
|
||||||
ENABLE_TX1750 ?= 1
|
ENABLE_TX1750 ?= 1
|
||||||
ENABLE_PWRON_PASSWORD ?= 0
|
ENABLE_PWRON_PASSWORD ?= 0
|
||||||
@@ -17,15 +17,15 @@ ENABLE_DTMF_CALLING ?= 0
|
|||||||
ENABLE_FLASHLIGHT ?= 1
|
ENABLE_FLASHLIGHT ?= 1
|
||||||
|
|
||||||
# ---- CUSTOM MODS ----
|
# ---- CUSTOM MODS ----
|
||||||
ENABLE_SPECTRUM ?= 0
|
ENABLE_SPECTRUM ?= 1
|
||||||
ENABLE_BIG_FREQ ?= 1
|
ENABLE_BIG_FREQ ?= 0
|
||||||
ENABLE_SMALL_BOLD ?= 1
|
ENABLE_SMALL_BOLD ?= 0
|
||||||
ENABLE_CUSTOM_MENU_LAYOUT ?= 1
|
ENABLE_CUSTOM_MENU_LAYOUT ?= 1
|
||||||
ENABLE_KEEP_MEM_NAME ?= 1
|
ENABLE_KEEP_MEM_NAME ?= 1
|
||||||
ENABLE_WIDE_RX ?= 1
|
ENABLE_WIDE_RX ?= 1
|
||||||
ENABLE_TX_WHEN_AM ?= 0
|
ENABLE_TX_WHEN_AM ?= 0
|
||||||
ENABLE_F_CAL_MENU ?= 0
|
ENABLE_F_CAL_MENU ?= 1
|
||||||
ENABLE_CTCSS_TAIL_PHASE_SHIFT ?= 0
|
ENABLE_CTCSS_TAIL_PHASE_SHIFT ?= 1
|
||||||
ENABLE_BOOT_BEEPS ?= 0
|
ENABLE_BOOT_BEEPS ?= 0
|
||||||
ENABLE_SHOW_CHARGE_LEVEL ?= 0
|
ENABLE_SHOW_CHARGE_LEVEL ?= 0
|
||||||
ENABLE_REVERSE_BAT_SYMBOL ?= 0
|
ENABLE_REVERSE_BAT_SYMBOL ?= 0
|
||||||
@@ -36,26 +36,26 @@ ENABLE_FASTER_CHANNEL_SCAN ?= 1
|
|||||||
ENABLE_RSSI_BAR ?= 1
|
ENABLE_RSSI_BAR ?= 1
|
||||||
ENABLE_AUDIO_BAR ?= 1
|
ENABLE_AUDIO_BAR ?= 1
|
||||||
ENABLE_COPY_CHAN_TO_VFO ?= 1
|
ENABLE_COPY_CHAN_TO_VFO ?= 1
|
||||||
ENABLE_REDUCE_LOW_MID_TX_POWER ?= 0
|
ENABLE_REDUCE_LOW_MID_TX_POWER ?= 1
|
||||||
ENABLE_BYP_RAW_DEMODULATORS ?= 0
|
ENABLE_BYP_RAW_DEMODULATORS ?= 1
|
||||||
ENABLE_BLMIN_TMP_OFF ?= 0
|
ENABLE_BLMIN_TMP_OFF ?= 1
|
||||||
ENABLE_SCAN_RANGES ?= 1
|
ENABLE_SCAN_RANGES ?= 1
|
||||||
ENABLE_FEAT_F4HWN ?= 1
|
ENABLE_FEAT_F4HWN ?= 1
|
||||||
ENABLE_FEAT_F4HWN_SCREENSHOT ?= 0
|
ENABLE_FEAT_F4HWN_SCREENSHOT ?= 0
|
||||||
ENABLE_FEAT_F4HWN_SPECTRUM ?= 1
|
ENABLE_FEAT_F4HWN_SPECTRUM ?= 1
|
||||||
ENABLE_FEAT_F4HWN_RX_TX_TIMER ?= 1
|
ENABLE_FEAT_F4HWN_RX_TX_TIMER ?= 0
|
||||||
ENABLE_FEAT_F4HWN_CHARGING_C ?= 0
|
ENABLE_FEAT_F4HWN_CHARGING_C ?= 0
|
||||||
ENABLE_FEAT_F4HWN_SLEEP ?= 1
|
ENABLE_FEAT_F4HWN_SLEEP ?= 1
|
||||||
ENABLE_FEAT_F4HWN_RESUME_STATE ?= 1
|
ENABLE_FEAT_F4HWN_RESUME_STATE ?= 1
|
||||||
ENABLE_FEAT_F4HWN_NARROWER ?= 1
|
ENABLE_FEAT_F4HWN_NARROWER ?= 1
|
||||||
ENABLE_FEAT_F4HWN_INV ?= 1
|
ENABLE_FEAT_F4HWN_INV ?= 0
|
||||||
ENABLE_FEAT_F4HWN_CTR ?= 1
|
ENABLE_FEAT_F4HWN_CTR ?= 1
|
||||||
ENABLE_FEAT_F4HWN_RESCUE_OPS ?= 0
|
ENABLE_FEAT_F4HWN_RESCUE_OPS ?= 0
|
||||||
ENABLE_FEAT_F4HWN_VOL ?= 0
|
ENABLE_FEAT_F4HWN_VOL ?= 1
|
||||||
ENABLE_FEAT_F4HWN_RESET_CHANNEL ?= 0
|
ENABLE_FEAT_F4HWN_RESET_CHANNEL ?= 0
|
||||||
ENABLE_FEAT_F4HWN_PMR ?= 0
|
ENABLE_FEAT_F4HWN_PMR ?= 0
|
||||||
ENABLE_FEAT_F4HWN_GMRS_FRS_MURS ?= 0
|
ENABLE_FEAT_F4HWN_GMRS_FRS_MURS ?= 0
|
||||||
ENABLE_FEAT_F4HWN_CA ?= 1
|
ENABLE_FEAT_F4HWN_CA ?= 0
|
||||||
ENABLE_FEAT_F4HWN_DEBUG ?= 0
|
ENABLE_FEAT_F4HWN_DEBUG ?= 0
|
||||||
ENABLE_REGA ?= 0
|
ENABLE_REGA ?= 0
|
||||||
|
|
||||||
@@ -138,6 +138,7 @@ OBJS += app/app.o
|
|||||||
OBJS += app/chFrScanner.o
|
OBJS += app/chFrScanner.o
|
||||||
OBJS += app/common.o
|
OBJS += app/common.o
|
||||||
OBJS += app/dtmf.o
|
OBJS += app/dtmf.o
|
||||||
|
OBJS += app/fskmodem.o
|
||||||
ifeq ($(ENABLE_REGA),1)
|
ifeq ($(ENABLE_REGA),1)
|
||||||
OBJS += app/rega.o
|
OBJS += app/rega.o
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -97,6 +97,8 @@ Special thanks to Jean-Cyrille F6IWW (2 times), Fabrice 14RC123, David F4BPP, Ol
|
|||||||
* improve ScnRev menu (CARRIER from 250ms to 20s, STOP, TIMEOUT from 5s to 2m)
|
* improve ScnRev menu (CARRIER from 250ms to 20s, STOP, TIMEOUT from 5s to 2m)
|
||||||
* improve KeyLck menu (OFF, delay from 15s to 10m)
|
* improve KeyLck menu (OFF, delay from 15s to 10m)
|
||||||
* add HAM CA F Lock band (for Canadian zone),
|
* add HAM CA F Lock band (for Canadian zone),
|
||||||
|
* add PMR 446 F Lock band,
|
||||||
|
* add FRS/GMRS/MURS F Lock band,
|
||||||
* remove blink and SOS functionality,
|
* remove blink and SOS functionality,
|
||||||
* remove AM Fix menu (AM Fix is ENABLED by default),
|
* remove AM Fix menu (AM Fix is ENABLED by default),
|
||||||
* add support of 3500mAh battery,
|
* add support of 3500mAh battery,
|
||||||
@@ -116,13 +118,14 @@ Special thanks to Jean-Cyrille F6IWW (2 times), Fabrice 14RC123, David F4BPP, Ol
|
|||||||
* scan lists [1, 2, 3],
|
* scan lists [1, 2, 3],
|
||||||
* scan all (all channels with ou without list),
|
* scan all (all channels with ou without list),
|
||||||
* add scan list shortcuts,
|
* add scan list shortcuts,
|
||||||
* add scan resume mode on startup,
|
* add resume mode on startup (scan, bandscope and broadcast FM),
|
||||||
* new actions:
|
* new actions:
|
||||||
* RX MODE,
|
* RX MODE,
|
||||||
* MAIN ONLY,
|
* MAIN ONLY,
|
||||||
* PTT,
|
* PTT,
|
||||||
* WIDE NARROW,
|
* WIDE NARROW,
|
||||||
* 1750Hz,
|
* 1750Hz,
|
||||||
|
* MUTE,
|
||||||
* POWER HIGH (RescueOps),
|
* POWER HIGH (RescueOps),
|
||||||
* REMOVE OFFSET (RescueOps),
|
* REMOVE OFFSET (RescueOps),
|
||||||
* new key combinations:
|
* new key combinations:
|
||||||
|
|||||||
+35
-43
@@ -36,7 +36,7 @@
|
|||||||
#include "screenshot.h"
|
#include "screenshot.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const uint16_t Obfuscation[8] = { 0x6C16, 0xE614, 0x912E, 0x400D, 0x3521, 0x40D5, 0x0313, 0x80E9 };
|
static const uint16_t Obfuscation[8] = {0x6C16, 0xE614, 0x912E, 0x400D, 0x3521, 0x40D5, 0x0313, 0x80E9};
|
||||||
|
|
||||||
AIRCOPY_State_t gAircopyState;
|
AIRCOPY_State_t gAircopyState;
|
||||||
uint16_t gAirCopyBlockNumber;
|
uint16_t gAirCopyBlockNumber;
|
||||||
@@ -45,16 +45,13 @@ uint8_t gAirCopyIsSendMode;
|
|||||||
|
|
||||||
uint16_t g_FSK_Buffer[36];
|
uint16_t g_FSK_Buffer[36];
|
||||||
|
|
||||||
static void AIRCOPY_clear()
|
static void AIRCOPY_clear() {
|
||||||
{
|
for (uint8_t i = 0; i < 15; i++) {
|
||||||
for (uint8_t i = 0; i < 15; i++)
|
|
||||||
{
|
|
||||||
crc[i] = 0;
|
crc[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AIRCOPY_SendMessage(void)
|
bool AIRCOPY_SendMessage(void) {
|
||||||
{
|
|
||||||
static uint8_t gAircopySendCountdown = 1;
|
static uint8_t gAircopySendCountdown = 1;
|
||||||
|
|
||||||
if (gAircopyState != AIRCOPY_TRANSFER) {
|
if (gAircopyState != AIRCOPY_TRANSFER) {
|
||||||
@@ -77,9 +74,9 @@ bool AIRCOPY_SendMessage(void)
|
|||||||
|
|
||||||
if (++gAirCopyBlockNumber >= 0x78) {
|
if (++gAirCopyBlockNumber >= 0x78) {
|
||||||
gAircopyState = AIRCOPY_COMPLETE;
|
gAircopyState = AIRCOPY_COMPLETE;
|
||||||
#ifdef ENABLE_FEAT_F4HWN_SCREENSHOT
|
#ifdef ENABLE_FEAT_F4HWN_SCREENSHOT
|
||||||
getScreenShot();
|
getScreenShot();
|
||||||
#endif
|
#endif
|
||||||
//NVIC_SystemReset();
|
//NVIC_SystemReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,8 +91,7 @@ bool AIRCOPY_SendMessage(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AIRCOPY_StorePacket(void)
|
void AIRCOPY_StorePacket(void) {
|
||||||
{
|
|
||||||
if (gFSKWriteIndex < 36) {
|
if (gFSKWriteIndex < 36) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -138,16 +134,15 @@ void AIRCOPY_StorePacket(void)
|
|||||||
|
|
||||||
if (Offset == 0x1E00) {
|
if (Offset == 0x1E00) {
|
||||||
gAircopyState = AIRCOPY_COMPLETE;
|
gAircopyState = AIRCOPY_COMPLETE;
|
||||||
#ifdef ENABLE_FEAT_F4HWN_SCREENSHOT
|
#ifdef ENABLE_FEAT_F4HWN_SCREENSHOT
|
||||||
getScreenShot();
|
getScreenShot();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
gAirCopyBlockNumber++;
|
gAirCopyBlockNumber++;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AIRCOPY_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
static void AIRCOPY_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) {
|
||||||
{
|
|
||||||
if (bKeyHeld || !bKeyPressed) {
|
if (bKeyHeld || !bKeyPressed) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -194,8 +189,7 @@ static void AIRCOPY_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
|||||||
gRequestDisplayScreen = DISPLAY_AIRCOPY;
|
gRequestDisplayScreen = DISPLAY_AIRCOPY;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AIRCOPY_Key_EXIT(bool bKeyPressed, bool bKeyHeld)
|
static void AIRCOPY_Key_EXIT(bool bKeyPressed, bool bKeyHeld) {
|
||||||
{
|
|
||||||
if (bKeyHeld || !bKeyPressed) {
|
if (bKeyHeld || !bKeyPressed) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -220,8 +214,7 @@ static void AIRCOPY_Key_EXIT(bool bKeyPressed, bool bKeyHeld)
|
|||||||
gRequestDisplayScreen = DISPLAY_AIRCOPY;
|
gRequestDisplayScreen = DISPLAY_AIRCOPY;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AIRCOPY_Key_MENU(bool bKeyPressed, bool bKeyHeld)
|
static void AIRCOPY_Key_MENU(bool bKeyPressed, bool bKeyHeld) {
|
||||||
{
|
|
||||||
if (bKeyHeld || !bKeyPressed) {
|
if (bKeyHeld || !bKeyPressed) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -242,29 +235,28 @@ static void AIRCOPY_Key_MENU(bool bKeyPressed, bool bKeyHeld)
|
|||||||
gAircopyState = AIRCOPY_TRANSFER;
|
gAircopyState = AIRCOPY_TRANSFER;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AIRCOPY_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
void AIRCOPY_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) {
|
||||||
{
|
|
||||||
switch (Key) {
|
switch (Key) {
|
||||||
case KEY_0:
|
case KEY_0:
|
||||||
case KEY_1:
|
case KEY_1:
|
||||||
case KEY_2:
|
case KEY_2:
|
||||||
case KEY_3:
|
case KEY_3:
|
||||||
case KEY_4:
|
case KEY_4:
|
||||||
case KEY_5:
|
case KEY_5:
|
||||||
case KEY_6:
|
case KEY_6:
|
||||||
case KEY_7:
|
case KEY_7:
|
||||||
case KEY_8:
|
case KEY_8:
|
||||||
case KEY_9:
|
case KEY_9:
|
||||||
AIRCOPY_Key_DIGITS(Key, bKeyPressed, bKeyHeld);
|
AIRCOPY_Key_DIGITS(Key, bKeyPressed, bKeyHeld);
|
||||||
break;
|
break;
|
||||||
case KEY_MENU:
|
case KEY_MENU:
|
||||||
AIRCOPY_Key_MENU(bKeyPressed, bKeyHeld);
|
AIRCOPY_Key_MENU(bKeyPressed, bKeyHeld);
|
||||||
break;
|
break;
|
||||||
case KEY_EXIT:
|
case KEY_EXIT:
|
||||||
AIRCOPY_Key_EXIT(bKeyPressed, bKeyHeld);
|
AIRCOPY_Key_EXIT(bKeyPressed, bKeyHeld);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,13 +23,21 @@
|
|||||||
#include "frequencies.h"
|
#include "frequencies.h"
|
||||||
#include "radio.h"
|
#include "radio.h"
|
||||||
|
|
||||||
void APP_EndTransmission(void);
|
void APP_EndTransmission(void);
|
||||||
void APP_StartListening(FUNCTION_Type_t function);
|
|
||||||
|
void APP_StartListening(FUNCTION_Type_t function);
|
||||||
|
|
||||||
uint32_t APP_SetFreqByStepAndLimits(VFO_Info_t *pInfo, int8_t direction, uint32_t lower, uint32_t upper);
|
uint32_t APP_SetFreqByStepAndLimits(VFO_Info_t *pInfo, int8_t direction, uint32_t lower, uint32_t upper);
|
||||||
|
|
||||||
uint32_t APP_SetFrequencyByStep(VFO_Info_t *pInfo, int8_t direction);
|
uint32_t APP_SetFrequencyByStep(VFO_Info_t *pInfo, int8_t direction);
|
||||||
void APP_Update(void);
|
|
||||||
void APP_TimeSlice10ms(void);
|
void APP_Update(void);
|
||||||
void APP_TimeSlice500ms(void);
|
|
||||||
|
void APP_TimeSlice10ms(void);
|
||||||
|
|
||||||
|
void APP_TimeSlice500ms(void);
|
||||||
|
|
||||||
|
void APP_EndTransmission(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
+47
-47
@@ -248,7 +248,7 @@ void DTMF_HandleRequest(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gRxVfo->DTMF_DECODING_ENABLE && !gSetting_KILLED)
|
if (!gRxVfo->DTMF_DECODING_ENABLE)
|
||||||
{ // D-DCD is disabled or we're alive
|
{ // D-DCD is disabled or we're alive
|
||||||
DTMF_clear_RX();
|
DTMF_clear_RX();
|
||||||
return;
|
return;
|
||||||
@@ -266,28 +266,28 @@ void DTMF_HandleRequest(void)
|
|||||||
if (CompareMessage(gDTMF_RX + Offset, String, strlen(String), true))
|
if (CompareMessage(gDTMF_RX + Offset, String, strlen(String), true))
|
||||||
{ // bugger
|
{ // bugger
|
||||||
|
|
||||||
if (gEeprom.PERMIT_REMOTE_KILL)
|
// if (gEeprom.PERMIT_REMOTE_KILL)
|
||||||
{
|
// {
|
||||||
gSetting_KILLED = true; // oooerr !
|
// gSetting_KILLED = true; // oooerr !
|
||||||
|
//
|
||||||
DTMF_clear_RX();
|
// DTMF_clear_RX();
|
||||||
|
//
|
||||||
SETTINGS_SaveSettings();
|
// SETTINGS_SaveSettings();
|
||||||
|
//
|
||||||
gDTMF_ReplyState = DTMF_REPLY_AB;
|
// gDTMF_ReplyState = DTMF_REPLY_AB;
|
||||||
|
//
|
||||||
#ifdef ENABLE_FMRADIO
|
// #ifdef ENABLE_FMRADIO
|
||||||
if (gFmRadioMode)
|
// if (gFmRadioMode)
|
||||||
{
|
// {
|
||||||
FM_TurnOff();
|
// FM_TurnOff();
|
||||||
GUI_SelectNextDisplay(DISPLAY_MAIN);
|
// GUI_SelectNextDisplay(DISPLAY_MAIN);
|
||||||
}
|
// }
|
||||||
#endif
|
// #endif
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
gDTMF_ReplyState = DTMF_REPLY_NONE;
|
gDTMF_ReplyState = DTMF_REPLY_NONE;
|
||||||
}
|
// }
|
||||||
|
|
||||||
gDTMF_CallState = DTMF_CALL_STATE_NONE;
|
gDTMF_CallState = DTMF_CALL_STATE_NONE;
|
||||||
|
|
||||||
@@ -297,30 +297,30 @@ void DTMF_HandleRequest(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gDTMF_RX_index >= 9)
|
// if (gDTMF_RX_index >= 9)
|
||||||
{ // look for the REVIVE code
|
// { // look for the REVIVE code
|
||||||
|
//
|
||||||
sprintf(String, "%s%c%s", gEeprom.ANI_DTMF_ID, gEeprom.DTMF_SEPARATE_CODE, gEeprom.REVIVE_CODE);
|
// sprintf(String, "%s%c%s", gEeprom.ANI_DTMF_ID, gEeprom.DTMF_SEPARATE_CODE, gEeprom.REVIVE_CODE);
|
||||||
|
//
|
||||||
Offset = gDTMF_RX_index - strlen(String);
|
// Offset = gDTMF_RX_index - strlen(String);
|
||||||
|
//
|
||||||
if (CompareMessage(gDTMF_RX + Offset, String, strlen(String), true))
|
// if (CompareMessage(gDTMF_RX + Offset, String, strlen(String), true))
|
||||||
{ // shit, we're back !
|
// { // shit, we're back !
|
||||||
|
//
|
||||||
gSetting_KILLED = false;
|
// gSetting_KILLED = false;
|
||||||
|
//
|
||||||
DTMF_clear_RX();
|
// DTMF_clear_RX();
|
||||||
|
//
|
||||||
SETTINGS_SaveSettings();
|
// SETTINGS_SaveSettings();
|
||||||
|
//
|
||||||
gDTMF_ReplyState = DTMF_REPLY_AB;
|
// gDTMF_ReplyState = DTMF_REPLY_AB;
|
||||||
gDTMF_CallState = DTMF_CALL_STATE_NONE;
|
// gDTMF_CallState = DTMF_CALL_STATE_NONE;
|
||||||
|
//
|
||||||
gUpdateDisplay = true;
|
// gUpdateDisplay = true;
|
||||||
gUpdateStatus = true;
|
// gUpdateStatus = true;
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (gDTMF_RX_index >= 2)
|
if (gDTMF_RX_index >= 2)
|
||||||
{ // look for ACK reply
|
{ // look for ACK reply
|
||||||
@@ -360,7 +360,7 @@ void DTMF_HandleRequest(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gSetting_KILLED || gDTMF_CallState != DTMF_CALL_STATE_NONE)
|
if (gDTMF_CallState != DTMF_CALL_STATE_NONE)
|
||||||
{ // we've been killed or expecting a reply
|
{ // we've been killed or expecting a reply
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+316
-215
@@ -20,15 +20,21 @@
|
|||||||
#include "app/app.h"
|
#include "app/app.h"
|
||||||
#include "app/chFrScanner.h"
|
#include "app/chFrScanner.h"
|
||||||
#include "app/common.h"
|
#include "app/common.h"
|
||||||
|
|
||||||
#ifdef ENABLE_FMRADIO
|
#ifdef ENABLE_FMRADIO
|
||||||
#include "app/fm.h"
|
|
||||||
|
#include "app/fm.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "app/generic.h"
|
#include "app/generic.h"
|
||||||
#include "app/main.h"
|
#include "app/main.h"
|
||||||
#include "app/scanner.h"
|
#include "app/scanner.h"
|
||||||
|
|
||||||
#ifdef ENABLE_SPECTRUM
|
#ifdef ENABLE_SPECTRUM
|
||||||
|
|
||||||
#include "app/spectrum.h"
|
#include "app/spectrum.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
@@ -43,32 +49,46 @@
|
|||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
static void toggle_chan_scanlist(void)
|
#define T9Count 9
|
||||||
{ // toggle the selected channels scanlist setting
|
|
||||||
|
const char T9Table[10][T9Count] = {
|
||||||
|
{'#', '(', ')', ';', ':', '<', '>', '/', '0'},
|
||||||
|
{',', '.', '?', '&', '!', ' ', '-', '_', '1'},
|
||||||
|
{'a', 'b', 'c', 'A', 'B', 'C', '[', ']', '2'},
|
||||||
|
{'d', 'e', 'f', 'D', 'E', 'F', '@', '%', '3'},
|
||||||
|
{'g', 'h', 'i', 'G', 'H', 'I', '~', '$', '4'},
|
||||||
|
{'j', 'k', 'l', 'J', 'K', 'L', '|', '*', '5'},
|
||||||
|
{'m', 'n', 'o', 'M', 'N', 'O', '{', '}', '6'},
|
||||||
|
{'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', '7'},
|
||||||
|
{'t', 'u', 'v', 'T', 'U', 'V', '"', '\'', '8'},
|
||||||
|
{'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9'}
|
||||||
|
};
|
||||||
|
|
||||||
|
static void toggle_chan_scanlist(void) { // toggle the selected channels scanlist setting
|
||||||
|
|
||||||
if (SCANNER_IsScanning())
|
if (SCANNER_IsScanning())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(!IS_MR_CHANNEL(gTxVfo->CHANNEL_SAVE)) {
|
if (!IS_MR_CHANNEL(gTxVfo->CHANNEL_SAVE)) {
|
||||||
#ifdef ENABLE_SCAN_RANGES
|
#ifdef ENABLE_SCAN_RANGES
|
||||||
gScanRangeStart = gScanRangeStart ? 0 : gTxVfo->pRX->Frequency;
|
gScanRangeStart = gScanRangeStart ? 0 : gTxVfo->pRX->Frequency;
|
||||||
gScanRangeStop = gEeprom.VfoInfo[!gEeprom.TX_VFO].freq_config_RX.Frequency;
|
gScanRangeStop = gEeprom.VfoInfo[!gEeprom.TX_VFO].freq_config_RX.Frequency;
|
||||||
if(gScanRangeStart > gScanRangeStop)
|
if (gScanRangeStart > gScanRangeStop)
|
||||||
SWAP(gScanRangeStart, gScanRangeStop);
|
SWAP(gScanRangeStart, gScanRangeStop);
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove exclude
|
// Remove exclude
|
||||||
if(gMR_ChannelExclude[gTxVfo->CHANNEL_SAVE] == true)
|
if (gMR_ChannelExclude[gTxVfo->CHANNEL_SAVE] == true) {
|
||||||
{
|
|
||||||
gMR_ChannelExclude[gTxVfo->CHANNEL_SAVE] = false;
|
gMR_ChannelExclude[gTxVfo->CHANNEL_SAVE] = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t scanTmp = gTxVfo->SCANLIST1_PARTICIPATION | (gTxVfo->SCANLIST2_PARTICIPATION << 1) | (gTxVfo->SCANLIST3_PARTICIPATION << 2);
|
uint8_t scanTmp = gTxVfo->SCANLIST1_PARTICIPATION | (gTxVfo->SCANLIST2_PARTICIPATION << 1) |
|
||||||
|
(gTxVfo->SCANLIST3_PARTICIPATION << 2);
|
||||||
|
|
||||||
scanTmp = (scanTmp++ < 7) ? scanTmp: 0;
|
scanTmp = (scanTmp++ < 7) ? scanTmp : 0;
|
||||||
|
|
||||||
gTxVfo->SCANLIST1_PARTICIPATION = (scanTmp >> 0) & 0x01;
|
gTxVfo->SCANLIST1_PARTICIPATION = (scanTmp >> 0) & 0x01;
|
||||||
gTxVfo->SCANLIST2_PARTICIPATION = (scanTmp >> 1) & 0x01;
|
gTxVfo->SCANLIST2_PARTICIPATION = (scanTmp >> 1) & 0x01;
|
||||||
@@ -77,11 +97,10 @@ static void toggle_chan_scanlist(void)
|
|||||||
SETTINGS_UpdateChannel(gTxVfo->CHANNEL_SAVE, gTxVfo, true, true, true);
|
SETTINGS_UpdateChannel(gTxVfo->CHANNEL_SAVE, gTxVfo, true, true, true);
|
||||||
|
|
||||||
gVfoConfigureMode = VFO_CONFIGURE;
|
gVfoConfigureMode = VFO_CONFIGURE;
|
||||||
gFlagResetVfos = true;
|
gFlagResetVfos = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void processFKeyFunction(const KEY_Code_t Key, const bool beep)
|
static void processFKeyFunction(const KEY_Code_t Key, const bool beep) {
|
||||||
{
|
|
||||||
uint8_t Vfo = gEeprom.TX_VFO;
|
uint8_t Vfo = gEeprom.TX_VFO;
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
||||||
@@ -101,21 +120,21 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep)
|
|||||||
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
||||||
|
|
||||||
switch (Key) {
|
switch (Key) {
|
||||||
case KEY_0:
|
case KEY_0:
|
||||||
#ifdef ENABLE_FMRADIO
|
#ifdef ENABLE_FMRADIO
|
||||||
ACTION_FM();
|
ACTION_FM();
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_1:
|
case KEY_1:
|
||||||
if (!IS_FREQ_CHANNEL(gTxVfo->CHANNEL_SAVE)) {
|
if (!IS_FREQ_CHANNEL(gTxVfo->CHANNEL_SAVE)) {
|
||||||
gWasFKeyPressed = false;
|
gWasFKeyPressed = false;
|
||||||
gUpdateStatus = true;
|
gUpdateStatus = true;
|
||||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
||||||
|
|
||||||
#ifdef ENABLE_COPY_CHAN_TO_VFO
|
#ifdef ENABLE_COPY_CHAN_TO_VFO
|
||||||
if (!gEeprom.VFO_OPEN || gCssBackgroundScan) {
|
if (!gEeprom.VFO_OPEN || gCssBackgroundScan) {
|
||||||
@@ -125,17 +144,15 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep)
|
|||||||
|
|
||||||
if (gScanStateDir != SCAN_OFF) {
|
if (gScanStateDir != SCAN_OFF) {
|
||||||
if (gCurrentFunction != FUNCTION_INCOMING ||
|
if (gCurrentFunction != FUNCTION_INCOMING ||
|
||||||
gRxReceptionMode == RX_MODE_NONE ||
|
gRxReceptionMode == RX_MODE_NONE ||
|
||||||
gScanPauseDelayIn_10ms == 0)
|
gScanPauseDelayIn_10ms == 0) { // scan is running (not paused)
|
||||||
{ // scan is running (not paused)
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint8_t vfo = gEeprom.TX_VFO;
|
const uint8_t vfo = gEeprom.TX_VFO;
|
||||||
|
|
||||||
if (IS_MR_CHANNEL(gEeprom.ScreenChannel[vfo]))
|
if (IS_MR_CHANNEL(gEeprom.ScreenChannel[vfo])) { // copy channel to VFO, then swap to the VFO
|
||||||
{ // copy channel to VFO, then swap to the VFO
|
|
||||||
|
|
||||||
gEeprom.ScreenChannel[vfo] = FREQ_CHANNEL_FIRST + gEeprom.VfoInfo[vfo].Band;
|
gEeprom.ScreenChannel[vfo] = FREQ_CHANNEL_FIRST + gEeprom.VfoInfo[vfo].Band;
|
||||||
gEeprom.VfoInfo[vfo].CHANNEL_SAVE = gEeprom.ScreenChannel[vfo];
|
gEeprom.VfoInfo[vfo].CHANNEL_SAVE = gEeprom.ScreenChannel[vfo];
|
||||||
@@ -156,9 +173,9 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_WIDE_RX
|
#ifdef ENABLE_WIDE_RX
|
||||||
if(gTxVfo->Band == BAND7_470MHz && gTxVfo->pRX->Frequency < _1GHz_in_KHz) {
|
if (gTxVfo->Band == BAND7_470MHz && gTxVfo->pRX->Frequency < _1GHz_in_KHz) {
|
||||||
gTxVfo->pRX->Frequency = _1GHz_in_KHz;
|
gTxVfo->pRX->Frequency = _1GHz_in_KHz;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
gTxVfo->Band += 1;
|
gTxVfo->Band += 1;
|
||||||
@@ -166,18 +183,18 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep)
|
|||||||
if (gTxVfo->Band == BAND5_350MHz && !gSetting_350EN) {
|
if (gTxVfo->Band == BAND5_350MHz && !gSetting_350EN) {
|
||||||
// skip if not enabled
|
// skip if not enabled
|
||||||
gTxVfo->Band += 1;
|
gTxVfo->Band += 1;
|
||||||
} else if (gTxVfo->Band >= BAND_N_ELEM){
|
} else if (gTxVfo->Band >= BAND_N_ELEM) {
|
||||||
// go arround if overflowed
|
// go arround if overflowed
|
||||||
gTxVfo->Band = BAND1_50MHz;
|
gTxVfo->Band = BAND1_50MHz;
|
||||||
}
|
}
|
||||||
|
|
||||||
gEeprom.ScreenChannel[Vfo] = FREQ_CHANNEL_FIRST + gTxVfo->Band;
|
gEeprom.ScreenChannel[Vfo] = FREQ_CHANNEL_FIRST + gTxVfo->Band;
|
||||||
gEeprom.FreqChannel[Vfo] = FREQ_CHANNEL_FIRST + gTxVfo->Band;
|
gEeprom.FreqChannel[Vfo] = FREQ_CHANNEL_FIRST + gTxVfo->Band;
|
||||||
|
|
||||||
gRequestSaveVFO = true;
|
gRequestSaveVFO = true;
|
||||||
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
|
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
|
||||||
|
|
||||||
gRequestDisplayScreen = DISPLAY_MAIN;
|
gRequestDisplayScreen = DISPLAY_MAIN;
|
||||||
|
|
||||||
if (beep)
|
if (beep)
|
||||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
||||||
@@ -185,18 +202,18 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_2:
|
case KEY_2:
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
gVfoConfigureMode = VFO_CONFIGURE;
|
gVfoConfigureMode = VFO_CONFIGURE;
|
||||||
#endif
|
#endif
|
||||||
COMMON_SwitchVFOs();
|
COMMON_SwitchVFOs();
|
||||||
if (beep)
|
if (beep)
|
||||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_3:
|
case KEY_3:
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
gVfoConfigureMode = VFO_CONFIGURE;
|
gVfoConfigureMode = VFO_CONFIGURE;
|
||||||
#endif
|
#endif
|
||||||
COMMON_SwitchVFOMode();
|
COMMON_SwitchVFOMode();
|
||||||
if (beep)
|
if (beep)
|
||||||
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
||||||
@@ -204,11 +221,11 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_4:
|
case KEY_4:
|
||||||
gWasFKeyPressed = false;
|
gWasFKeyPressed = false;
|
||||||
|
|
||||||
gBackup_CROSS_BAND_RX_TX = gEeprom.CROSS_BAND_RX_TX;
|
gBackup_CROSS_BAND_RX_TX = gEeprom.CROSS_BAND_RX_TX;
|
||||||
gEeprom.CROSS_BAND_RX_TX = CROSS_BAND_OFF;
|
gEeprom.CROSS_BAND_RX_TX = CROSS_BAND_OFF;
|
||||||
gUpdateStatus = true;
|
gUpdateStatus = true;
|
||||||
if (beep)
|
if (beep)
|
||||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
||||||
|
|
||||||
@@ -217,7 +234,7 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_5:
|
case KEY_5:
|
||||||
if(beep) {
|
if (beep) {
|
||||||
#ifdef ENABLE_NOAA
|
#ifdef ENABLE_NOAA
|
||||||
if (!IS_NOAA_CHANNEL(gTxVfo->CHANNEL_SAVE)) {
|
if (!IS_NOAA_CHANNEL(gTxVfo->CHANNEL_SAVE)) {
|
||||||
gEeprom.ScreenChannel[Vfo] = gEeprom.NoaaChannel[gEeprom.TX_VFO];
|
gEeprom.ScreenChannel[Vfo] = gEeprom.NoaaChannel[gEeprom.TX_VFO];
|
||||||
@@ -234,8 +251,7 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep)
|
|||||||
APP_RunSpectrum();
|
APP_RunSpectrum();
|
||||||
gRequestDisplayScreen = DISPLAY_MAIN;
|
gRequestDisplayScreen = DISPLAY_MAIN;
|
||||||
#endif
|
#endif
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
toggle_chan_scanlist();
|
toggle_chan_scanlist();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,15 +276,15 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep)
|
|||||||
|
|
||||||
case KEY_9:
|
case KEY_9:
|
||||||
if (RADIO_CheckValidChannel(gEeprom.CHAN_1_CALL, false, 0)) {
|
if (RADIO_CheckValidChannel(gEeprom.CHAN_1_CALL, false, 0)) {
|
||||||
gEeprom.MrChannel[Vfo] = gEeprom.CHAN_1_CALL;
|
gEeprom.MrChannel[Vfo] = gEeprom.CHAN_1_CALL;
|
||||||
gEeprom.ScreenChannel[Vfo] = gEeprom.CHAN_1_CALL;
|
gEeprom.ScreenChannel[Vfo] = gEeprom.CHAN_1_CALL;
|
||||||
#ifdef ENABLE_VOICE
|
#ifdef ENABLE_VOICE
|
||||||
AUDIO_SetVoiceID(0, VOICE_ID_CHANNEL_MODE);
|
AUDIO_SetVoiceID(0, VOICE_ID_CHANNEL_MODE);
|
||||||
AUDIO_SetDigitVoice(1, gEeprom.CHAN_1_CALL + 1);
|
AUDIO_SetDigitVoice(1, gEeprom.CHAN_1_CALL + 1);
|
||||||
gAnotherVoiceID = (VOICE_ID_t)0xFE;
|
gAnotherVoiceID = (VOICE_ID_t)0xFE;
|
||||||
#endif
|
#endif
|
||||||
gRequestSaveVFO = true;
|
gRequestSaveVFO = true;
|
||||||
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
|
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,46 +294,42 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep)
|
|||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN // Set Squelch F + UP or Down and Step F + SIDE1 or F + SIDE2
|
#ifdef ENABLE_FEAT_F4HWN // Set Squelch F + UP or Down and Step F + SIDE1 or F + SIDE2
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
gEeprom.SQUELCH_LEVEL = (gEeprom.SQUELCH_LEVEL < 9) ? gEeprom.SQUELCH_LEVEL + 1: 9;
|
gEeprom.SQUELCH_LEVEL = (gEeprom.SQUELCH_LEVEL < 9) ? gEeprom.SQUELCH_LEVEL + 1 : 9;
|
||||||
gVfoConfigureMode = VFO_CONFIGURE;
|
gVfoConfigureMode = VFO_CONFIGURE;
|
||||||
gWasFKeyPressed = false;
|
gWasFKeyPressed = false;
|
||||||
break;
|
break;
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
gEeprom.SQUELCH_LEVEL = (gEeprom.SQUELCH_LEVEL > 0) ? gEeprom.SQUELCH_LEVEL - 1: 0;
|
gEeprom.SQUELCH_LEVEL = (gEeprom.SQUELCH_LEVEL > 0) ? gEeprom.SQUELCH_LEVEL - 1 : 0;
|
||||||
gVfoConfigureMode = VFO_CONFIGURE;
|
gVfoConfigureMode = VFO_CONFIGURE;
|
||||||
gWasFKeyPressed = false;
|
gWasFKeyPressed = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_SIDE1:
|
case KEY_SIDE1:
|
||||||
uint8_t a = FREQUENCY_GetSortedIdxFromStepIdx(gTxVfo->STEP_SETTING);
|
uint8_t a = FREQUENCY_GetSortedIdxFromStepIdx(gTxVfo->STEP_SETTING);
|
||||||
if (a < STEP_N_ELEM - 1)
|
if (a < STEP_N_ELEM - 1) {
|
||||||
{
|
|
||||||
gTxVfo->STEP_SETTING = FREQUENCY_GetStepIdxFromSortedIdx(a + 1);
|
gTxVfo->STEP_SETTING = FREQUENCY_GetStepIdxFromSortedIdx(a + 1);
|
||||||
}
|
}
|
||||||
if (IS_FREQ_CHANNEL(gTxVfo->CHANNEL_SAVE))
|
if (IS_FREQ_CHANNEL(gTxVfo->CHANNEL_SAVE)) {
|
||||||
{
|
|
||||||
gRequestSaveChannel = 1;
|
gRequestSaveChannel = 1;
|
||||||
}
|
}
|
||||||
gVfoConfigureMode = VFO_CONFIGURE;
|
gVfoConfigureMode = VFO_CONFIGURE;
|
||||||
gWasFKeyPressed = false;
|
gWasFKeyPressed = false;
|
||||||
break;
|
break;
|
||||||
case KEY_SIDE2:
|
case KEY_SIDE2:
|
||||||
uint8_t b = FREQUENCY_GetSortedIdxFromStepIdx(gTxVfo->STEP_SETTING);
|
uint8_t b = FREQUENCY_GetSortedIdxFromStepIdx(gTxVfo->STEP_SETTING);
|
||||||
if (b > 0)
|
if (b > 0) {
|
||||||
{
|
|
||||||
gTxVfo->STEP_SETTING = FREQUENCY_GetStepIdxFromSortedIdx(b - 1);
|
gTxVfo->STEP_SETTING = FREQUENCY_GetStepIdxFromSortedIdx(b - 1);
|
||||||
}
|
}
|
||||||
if (IS_FREQ_CHANNEL(gTxVfo->CHANNEL_SAVE))
|
if (IS_FREQ_CHANNEL(gTxVfo->CHANNEL_SAVE)) {
|
||||||
{
|
|
||||||
gRequestSaveChannel = 1;
|
gRequestSaveChannel = 1;
|
||||||
}
|
}
|
||||||
gVfoConfigureMode = VFO_CONFIGURE;
|
gVfoConfigureMode = VFO_CONFIGURE;
|
||||||
gWasFKeyPressed = false;
|
gWasFKeyPressed = false;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
gUpdateStatus = true;
|
gUpdateStatus = true;
|
||||||
gWasFKeyPressed = false;
|
gWasFKeyPressed = false;
|
||||||
|
|
||||||
if (beep)
|
if (beep)
|
||||||
@@ -326,8 +338,7 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void channelMove(uint16_t Channel)
|
void channelMove(uint16_t Channel) {
|
||||||
{
|
|
||||||
const uint8_t Vfo = gEeprom.TX_VFO;
|
const uint8_t Vfo = gEeprom.TX_VFO;
|
||||||
|
|
||||||
if (!RADIO_CheckValidChannel(Channel, false, 0)) {
|
if (!RADIO_CheckValidChannel(Channel, false, 0)) {
|
||||||
@@ -340,14 +351,14 @@ void channelMove(uint16_t Channel)
|
|||||||
|
|
||||||
gBeepToPlay = BEEP_NONE;
|
gBeepToPlay = BEEP_NONE;
|
||||||
|
|
||||||
#ifdef ENABLE_VOICE
|
#ifdef ENABLE_VOICE
|
||||||
gAnotherVoiceID = (VOICE_ID_t)Key;
|
gAnotherVoiceID = (VOICE_ID_t)Key;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
gEeprom.MrChannel[Vfo] = (uint8_t)Channel;
|
gEeprom.MrChannel[Vfo] = (uint8_t) Channel;
|
||||||
gEeprom.ScreenChannel[Vfo] = (uint8_t)Channel;
|
gEeprom.ScreenChannel[Vfo] = (uint8_t) Channel;
|
||||||
//gRequestSaveVFO = true;
|
//gRequestSaveVFO = true;
|
||||||
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
|
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
||||||
gRemoveOffset = false;
|
gRemoveOffset = false;
|
||||||
@@ -355,7 +366,7 @@ void channelMove(uint16_t Channel)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
RADIO_ConfigureChannel(gEeprom.TX_VFO, gVfoConfigureMode);
|
RADIO_ConfigureChannel(gEeprom.TX_VFO, gVfoConfigureMode);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -392,7 +403,7 @@ void channelMoveSwitch(void) {
|
|||||||
|
|
||||||
channelMove(Channel - 1);
|
channelMove(Channel - 1);
|
||||||
SETTINGS_SaveVfoIndices();
|
SETTINGS_SaveVfoIndices();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -400,18 +411,17 @@ void channelMoveSwitch(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) {
|
||||||
{
|
|
||||||
if (bKeyHeld) { // key held down
|
if (bKeyHeld) { // key held down
|
||||||
if (bKeyPressed) {
|
if (bKeyPressed) {
|
||||||
if (gScreenToDisplay == DISPLAY_MAIN) {
|
if (gScreenToDisplay == DISPLAY_MAIN) {
|
||||||
if (gInputBoxIndex > 0) { // delete any inputted chars
|
if (gInputBoxIndex > 0) { // delete any inputted chars
|
||||||
gInputBoxIndex = 0;
|
gInputBoxIndex = 0;
|
||||||
gRequestDisplayScreen = DISPLAY_MAIN;
|
gRequestDisplayScreen = DISPLAY_MAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
gWasFKeyPressed = false;
|
gWasFKeyPressed = false;
|
||||||
gUpdateStatus = true;
|
gUpdateStatus = true;
|
||||||
|
|
||||||
processFKeyFunction(Key, false);
|
processFKeyFunction(Key, false);
|
||||||
}
|
}
|
||||||
@@ -419,21 +429,20 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bKeyPressed)
|
if (bKeyPressed) { // key is pressed
|
||||||
{ // key is pressed
|
|
||||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; // beep when key is pressed
|
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; // beep when key is pressed
|
||||||
return; // don't use the key till it's released
|
return; // don't use the key till it's released
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gWasFKeyPressed) { // F-key wasn't pressed
|
if (!gWasFKeyPressed) { // F-key wasn't pressed
|
||||||
|
|
||||||
if (gScanStateDir != SCAN_OFF){
|
if (gScanStateDir != SCAN_OFF) {
|
||||||
switch(Key) {
|
switch (Key) {
|
||||||
case KEY_0...KEY_5:
|
case KEY_0...KEY_5:
|
||||||
gEeprom.SCAN_LIST_DEFAULT = Key;
|
gEeprom.SCAN_LIST_DEFAULT = Key;
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESUME_STATE
|
#ifdef ENABLE_FEAT_F4HWN_RESUME_STATE
|
||||||
SETTINGS_WriteCurrentState();
|
SETTINGS_WriteCurrentState();
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -453,18 +462,17 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
|||||||
|
|
||||||
gKeyInputCountdown = (key_input_timeout_500ms / 4); // short time...
|
gKeyInputCountdown = (key_input_timeout_500ms / 4); // short time...
|
||||||
|
|
||||||
#ifdef ENABLE_VOICE
|
#ifdef ENABLE_VOICE
|
||||||
gAnotherVoiceID = (VOICE_ID_t)Key;
|
gAnotherVoiceID = (VOICE_ID_t)Key;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// #ifdef ENABLE_NOAA
|
// #ifdef ENABLE_NOAA
|
||||||
// if (!IS_NOAA_CHANNEL(gTxVfo->CHANNEL_SAVE))
|
// if (!IS_NOAA_CHANNEL(gTxVfo->CHANNEL_SAVE))
|
||||||
// #endif
|
// #endif
|
||||||
if (IS_FREQ_CHANNEL(gTxVfo->CHANNEL_SAVE))
|
if (IS_FREQ_CHANNEL(gTxVfo->CHANNEL_SAVE)) { // user is entering a frequency
|
||||||
{ // user is entering a frequency
|
|
||||||
|
|
||||||
#ifdef ENABLE_VOICE
|
#ifdef ENABLE_VOICE
|
||||||
gAnotherVoiceID = (VOICE_ID_t)Key;
|
gAnotherVoiceID = (VOICE_ID_t)Key;
|
||||||
@@ -478,8 +486,9 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
|||||||
// do nothing
|
// do nothing
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
gKeyInputCountdown = (gInputBoxIndex == totalDigits) ? (key_input_timeout_500ms / 16) : (key_input_timeout_500ms / 3);
|
gKeyInputCountdown = (gInputBoxIndex == totalDigits) ? (key_input_timeout_500ms / 16) : (
|
||||||
|
key_input_timeout_500ms / 3);
|
||||||
|
|
||||||
const char *inputStr = INPUTBOX_GetAscii();
|
const char *inputStr = INPUTBOX_GetAscii();
|
||||||
uint8_t inputLength = gInputBoxIndex;
|
uint8_t inputLength = gInputBoxIndex;
|
||||||
@@ -500,21 +509,19 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
|||||||
// clamp the frequency entered to some valid value
|
// clamp the frequency entered to some valid value
|
||||||
if (Frequency < frequencyBandTable[0].lower) {
|
if (Frequency < frequencyBandTable[0].lower) {
|
||||||
Frequency = frequencyBandTable[0].lower;
|
Frequency = frequencyBandTable[0].lower;
|
||||||
}
|
} else if (Frequency >= BX4819_band1.upper && Frequency < BX4819_band2.lower) {
|
||||||
else if (Frequency >= BX4819_band1.upper && Frequency < BX4819_band2.lower) {
|
|
||||||
const uint32_t center = (BX4819_band1.upper + BX4819_band2.lower) / 2;
|
const uint32_t center = (BX4819_band1.upper + BX4819_band2.lower) / 2;
|
||||||
Frequency = (Frequency < center) ? BX4819_band1.upper : BX4819_band2.lower;
|
Frequency = (Frequency < center) ? BX4819_band1.upper : BX4819_band2.lower;
|
||||||
}
|
} else if (Frequency > frequencyBandTable[BAND_N_ELEM - 1].upper) {
|
||||||
else if (Frequency > frequencyBandTable[BAND_N_ELEM - 1].upper) {
|
|
||||||
Frequency = frequencyBandTable[BAND_N_ELEM - 1].upper;
|
Frequency = frequencyBandTable[BAND_N_ELEM - 1].upper;
|
||||||
}
|
}
|
||||||
|
|
||||||
const FREQUENCY_Band_t band = FREQUENCY_GetBand(Frequency);
|
const FREQUENCY_Band_t band = FREQUENCY_GetBand(Frequency);
|
||||||
|
|
||||||
if (gTxVfo->Band != band) {
|
if (gTxVfo->Band != band) {
|
||||||
gTxVfo->Band = band;
|
gTxVfo->Band = band;
|
||||||
gEeprom.ScreenChannel[Vfo] = band + FREQ_CHANNEL_FIRST;
|
gEeprom.ScreenChannel[Vfo] = band + FREQ_CHANNEL_FIRST;
|
||||||
gEeprom.FreqChannel[Vfo] = band + FREQ_CHANNEL_FIRST;
|
gEeprom.FreqChannel[Vfo] = band + FREQ_CHANNEL_FIRST;
|
||||||
|
|
||||||
SETTINGS_SaveVfoIndices();
|
SETTINGS_SaveVfoIndices();
|
||||||
|
|
||||||
@@ -523,8 +530,8 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
|||||||
|
|
||||||
Frequency = FREQUENCY_RoundToStep(Frequency, gTxVfo->StepFrequency);
|
Frequency = FREQUENCY_RoundToStep(Frequency, gTxVfo->StepFrequency);
|
||||||
|
|
||||||
if (Frequency >= BX4819_band1.upper && Frequency < BX4819_band2.lower)
|
if (Frequency >= BX4819_band1.upper &&
|
||||||
{ // clamp the frequency to the limit
|
Frequency < BX4819_band2.lower) { // clamp the frequency to the limit
|
||||||
const uint32_t center = (BX4819_band1.upper + BX4819_band2.lower) / 2;
|
const uint32_t center = (BX4819_band1.upper + BX4819_band2.lower) / 2;
|
||||||
Frequency = (Frequency < center) ? BX4819_band1.upper - gTxVfo->StepFrequency : BX4819_band2.lower;
|
Frequency = (Frequency < center) ? BX4819_band1.upper - gTxVfo->StepFrequency : BX4819_band2.lower;
|
||||||
}
|
}
|
||||||
@@ -535,50 +542,47 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
#ifdef ENABLE_NOAA
|
#ifdef ENABLE_NOAA
|
||||||
else
|
else
|
||||||
if (IS_NOAA_CHANNEL(gTxVfo->CHANNEL_SAVE))
|
if (IS_NOAA_CHANNEL(gTxVfo->CHANNEL_SAVE))
|
||||||
{ // user is entering NOAA channel
|
{ // user is entering NOAA channel
|
||||||
if (gInputBoxIndex != 2) {
|
if (gInputBoxIndex != 2) {
|
||||||
#ifdef ENABLE_VOICE
|
#ifdef ENABLE_VOICE
|
||||||
gAnotherVoiceID = (VOICE_ID_t)Key;
|
gAnotherVoiceID = (VOICE_ID_t)Key;
|
||||||
#endif
|
#endif
|
||||||
gRequestDisplayScreen = DISPLAY_MAIN;
|
gRequestDisplayScreen = DISPLAY_MAIN;
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
gInputBoxIndex = 0;
|
|
||||||
|
|
||||||
uint8_t Channel = (gInputBox[0] * 10) + gInputBox[1];
|
|
||||||
if (Channel >= 1 && Channel <= ARRAY_SIZE(NoaaFrequencyTable)) {
|
|
||||||
Channel += NOAA_CHANNEL_FIRST;
|
|
||||||
#ifdef ENABLE_VOICE
|
|
||||||
gAnotherVoiceID = (VOICE_ID_t)Key;
|
|
||||||
#endif
|
|
||||||
gEeprom.NoaaChannel[Vfo] = Channel;
|
|
||||||
gEeprom.ScreenChannel[Vfo] = Channel;
|
|
||||||
gRequestSaveVFO = true;
|
|
||||||
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
gInputBoxIndex = 0;
|
||||||
|
|
||||||
|
uint8_t Channel = (gInputBox[0] * 10) + gInputBox[1];
|
||||||
|
if (Channel >= 1 && Channel <= ARRAY_SIZE(NoaaFrequencyTable)) {
|
||||||
|
Channel += NOAA_CHANNEL_FIRST;
|
||||||
|
#ifdef ENABLE_VOICE
|
||||||
|
gAnotherVoiceID = (VOICE_ID_t)Key;
|
||||||
|
#endif
|
||||||
|
gEeprom.NoaaChannel[Vfo] = Channel;
|
||||||
|
gEeprom.ScreenChannel[Vfo] = Channel;
|
||||||
|
gRequestSaveVFO = true;
|
||||||
|
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
gRequestDisplayScreen = DISPLAY_MAIN;
|
gRequestDisplayScreen = DISPLAY_MAIN;
|
||||||
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
gWasFKeyPressed = false;
|
gWasFKeyPressed = false;
|
||||||
gUpdateStatus = true;
|
gUpdateStatus = true;
|
||||||
|
|
||||||
if(Key == 8)
|
if (Key == 8) {
|
||||||
{
|
|
||||||
ACTION_BackLightOnDemand();
|
ACTION_BackLightOnDemand();
|
||||||
return;
|
return;
|
||||||
}
|
} else if (Key == 9) {
|
||||||
else if(Key == 9)
|
|
||||||
{
|
|
||||||
ACTION_BackLight();
|
ACTION_BackLight();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -586,8 +590,7 @@ static void MAIN_Key_DIGITS(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
|||||||
processFKeyFunction(Key, true);
|
processFKeyFunction(Key, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld)
|
static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld) {
|
||||||
{
|
|
||||||
if (!bKeyHeld && bKeyPressed) { // exit key pressed
|
if (!bKeyHeld && bKeyPressed) { // exit key pressed
|
||||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
||||||
|
|
||||||
@@ -615,8 +618,7 @@ static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld)
|
|||||||
if (gInputBoxIndex == 0)
|
if (gInputBoxIndex == 0)
|
||||||
gAnotherVoiceID = VOICE_ID_CANCEL;
|
gAnotherVoiceID = VOICE_ID_CANCEL;
|
||||||
#endif
|
#endif
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
gScanKeepResult = false;
|
gScanKeepResult = false;
|
||||||
CHFRSCANNER_Stop();
|
CHFRSCANNER_Stop();
|
||||||
|
|
||||||
@@ -636,36 +638,33 @@ static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (bKeyHeld && bKeyPressed) { // exit key held down
|
if (bKeyHeld && bKeyPressed) { // exit key held down
|
||||||
if (gInputBoxIndex > 0 || gDTMF_InputBox_Index > 0 || gDTMF_InputMode)
|
if (gInputBoxIndex > 0 || gDTMF_InputBox_Index > 0 ||
|
||||||
{ // cancel key input mode (channel/frequency entry)
|
gDTMF_InputMode) { // cancel key input mode (channel/frequency entry)
|
||||||
gDTMF_InputMode = false;
|
gDTMF_InputMode = false;
|
||||||
gDTMF_InputBox_Index = 0;
|
gDTMF_InputBox_Index = 0;
|
||||||
memset(gDTMF_String, 0, sizeof(gDTMF_String));
|
memset(gDTMF_String, 0, sizeof(gDTMF_String));
|
||||||
gInputBoxIndex = 0;
|
gInputBoxIndex = 0;
|
||||||
gRequestDisplayScreen = DISPLAY_MAIN;
|
gRequestDisplayScreen = DISPLAY_MAIN;
|
||||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MAIN_Key_MENU(bool bKeyPressed, bool bKeyHeld)
|
static void MAIN_Key_MENU(bool bKeyPressed, bool bKeyHeld) {
|
||||||
{
|
|
||||||
if (bKeyPressed && !bKeyHeld) // menu key pressed
|
if (bKeyPressed && !bKeyHeld) // menu key pressed
|
||||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
||||||
|
|
||||||
if (bKeyHeld) { // menu key held down (long press)
|
if (bKeyHeld) { // menu key held down (long press)
|
||||||
if (bKeyPressed) { // long press MENU key
|
if (bKeyPressed) { // long press MENU key
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
// Exclude work with list 1, 2, 3 or all list
|
// Exclude work with list 1, 2, 3 or all list
|
||||||
if(gScanStateDir != SCAN_OFF)
|
if (gScanStateDir != SCAN_OFF) {
|
||||||
{
|
if (FUNCTION_IsRx()) {
|
||||||
if(FUNCTION_IsRx())
|
|
||||||
{
|
|
||||||
gMR_ChannelExclude[gTxVfo->CHANNEL_SAVE] = true;
|
gMR_ChannelExclude[gTxVfo->CHANNEL_SAVE] = true;
|
||||||
|
|
||||||
gVfoConfigureMode = VFO_CONFIGURE;
|
gVfoConfigureMode = VFO_CONFIGURE;
|
||||||
gFlagResetVfos = true;
|
gFlagResetVfos = true;
|
||||||
|
|
||||||
lastFoundFrqOrChan = lastFoundFrqOrChanOld;
|
lastFoundFrqOrChan = lastFoundFrqOrChanOld;
|
||||||
|
|
||||||
@@ -674,18 +673,18 @@ static void MAIN_Key_MENU(bool bKeyPressed, bool bKeyHeld)
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
gWasFKeyPressed = false;
|
gWasFKeyPressed = false;
|
||||||
|
|
||||||
if (gScreenToDisplay == DISPLAY_MAIN) {
|
if (gScreenToDisplay == DISPLAY_MAIN) {
|
||||||
if (gInputBoxIndex > 0) { // delete any inputted chars
|
if (gInputBoxIndex > 0) { // delete any inputted chars
|
||||||
gInputBoxIndex = 0;
|
gInputBoxIndex = 0;
|
||||||
gRequestDisplayScreen = DISPLAY_MAIN;
|
gRequestDisplayScreen = DISPLAY_MAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
gWasFKeyPressed = false;
|
gWasFKeyPressed = false;
|
||||||
gUpdateStatus = true;
|
gUpdateStatus = true;
|
||||||
|
|
||||||
ACTION_Handle(KEY_MENU, bKeyPressed, bKeyHeld);
|
ACTION_Handle(KEY_MENU, bKeyPressed, bKeyHeld);
|
||||||
}
|
}
|
||||||
@@ -696,7 +695,7 @@ static void MAIN_Key_MENU(bool bKeyPressed, bool bKeyHeld)
|
|||||||
|
|
||||||
if (!bKeyPressed && !gDTMF_InputMode) { // menu key released
|
if (!bKeyPressed && !gDTMF_InputMode) { // menu key released
|
||||||
const bool bFlag = !gInputBoxIndex;
|
const bool bFlag = !gInputBoxIndex;
|
||||||
gInputBoxIndex = 0;
|
gInputBoxIndex = 0;
|
||||||
|
|
||||||
if (bFlag) {
|
if (bFlag) {
|
||||||
if (gScanStateDir != SCAN_OFF) {
|
if (gScanStateDir != SCAN_OFF) {
|
||||||
@@ -704,28 +703,26 @@ static void MAIN_Key_MENU(bool bKeyPressed, bool bKeyHeld)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
||||||
if(gEeprom.MENU_LOCK == false) {
|
if(gEeprom.MENU_LOCK == false) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
gFlagRefreshSetting = true;
|
gFlagRefreshSetting = true;
|
||||||
gRequestDisplayScreen = DISPLAY_MENU;
|
gRequestDisplayScreen = DISPLAY_MENU;
|
||||||
#ifdef ENABLE_VOICE
|
#ifdef ENABLE_VOICE
|
||||||
gAnotherVoiceID = VOICE_ID_MENU;
|
gAnotherVoiceID = VOICE_ID_MENU;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
gRequestDisplayScreen = DISPLAY_MAIN;
|
gRequestDisplayScreen = DISPLAY_MAIN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MAIN_Key_STAR(bool bKeyPressed, bool bKeyHeld)
|
static void MAIN_Key_STAR(bool bKeyPressed, bool bKeyHeld) {
|
||||||
{
|
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
||||||
if(gEeprom.MENU_LOCK == true) {
|
if(gEeprom.MENU_LOCK == true) {
|
||||||
@@ -735,16 +732,16 @@ static void MAIN_Key_STAR(bool bKeyPressed, bool bKeyHeld)
|
|||||||
|
|
||||||
if (gCurrentFunction == FUNCTION_TRANSMIT)
|
if (gCurrentFunction == FUNCTION_TRANSMIT)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (gInputBoxIndex) {
|
if (gInputBoxIndex) {
|
||||||
if (!bKeyHeld && bKeyPressed)
|
if (!bKeyHeld && bKeyPressed)
|
||||||
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bKeyHeld && !gWasFKeyPressed){ // long press
|
if (bKeyHeld && !gWasFKeyPressed) { // long press
|
||||||
if (!bKeyPressed) // released
|
if (!bKeyPressed) // released
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESUME_STATE
|
#ifdef ENABLE_FEAT_F4HWN_RESUME_STATE
|
||||||
@@ -768,61 +765,55 @@ static void MAIN_Key_STAR(bool bKeyPressed, bool bKeyHeld)
|
|||||||
if (bKeyPressed) { // just pressed
|
if (bKeyPressed) { // just pressed
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// just released
|
// just released
|
||||||
|
|
||||||
if (!gWasFKeyPressed) // pressed without the F-key
|
if (!gWasFKeyPressed) // pressed without the F-key
|
||||||
{
|
{
|
||||||
if (gScanStateDir == SCAN_OFF
|
if (gScanStateDir == SCAN_OFF
|
||||||
#ifdef ENABLE_NOAA
|
#ifdef ENABLE_NOAA
|
||||||
&& !IS_NOAA_CHANNEL(gTxVfo->CHANNEL_SAVE)
|
&& !IS_NOAA_CHANNEL(gTxVfo->CHANNEL_SAVE)
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_SCAN_RANGES
|
#ifdef ENABLE_SCAN_RANGES
|
||||||
&& gScanRangeStart == 0
|
&& gScanRangeStart == 0
|
||||||
#endif
|
#endif
|
||||||
)
|
) { // start entering a DTMF string
|
||||||
{ // start entering a DTMF string
|
|
||||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
||||||
memcpy(gDTMF_InputBox, gDTMF_String, MIN(sizeof(gDTMF_InputBox), sizeof(gDTMF_String) - 1));
|
memcpy(gDTMF_InputBox, gDTMF_String, MIN(sizeof(gDTMF_InputBox), sizeof(gDTMF_String) - 1));
|
||||||
gDTMF_InputBox_Index = 0;
|
gDTMF_InputBox_Index = 0;
|
||||||
gDTMF_InputMode = true;
|
gDTMF_InputMode = true;
|
||||||
|
|
||||||
gKeyInputCountdown = key_input_timeout_500ms;
|
gKeyInputCountdown = key_input_timeout_500ms;
|
||||||
|
|
||||||
gRequestDisplayScreen = DISPLAY_MAIN;
|
gRequestDisplayScreen = DISPLAY_MAIN;
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
||||||
}
|
} else { // with the F-key
|
||||||
else
|
|
||||||
{ // with the F-key
|
|
||||||
gWasFKeyPressed = false;
|
gWasFKeyPressed = false;
|
||||||
|
|
||||||
#ifdef ENABLE_NOAA
|
#ifdef ENABLE_NOAA
|
||||||
if (IS_NOAA_CHANNEL(gTxVfo->CHANNEL_SAVE)) {
|
if (IS_NOAA_CHANNEL(gTxVfo->CHANNEL_SAVE)) {
|
||||||
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// scan the CTCSS/DCS code
|
// scan the CTCSS/DCS code
|
||||||
gBackup_CROSS_BAND_RX_TX = gEeprom.CROSS_BAND_RX_TX;
|
gBackup_CROSS_BAND_RX_TX = gEeprom.CROSS_BAND_RX_TX;
|
||||||
gEeprom.CROSS_BAND_RX_TX = CROSS_BAND_OFF;
|
gEeprom.CROSS_BAND_RX_TX = CROSS_BAND_OFF;
|
||||||
|
|
||||||
SCANNER_Start(true);
|
SCANNER_Start(true);
|
||||||
gRequestDisplayScreen = DISPLAY_SCANNER;
|
gRequestDisplayScreen = DISPLAY_SCANNER;
|
||||||
}
|
}
|
||||||
|
|
||||||
//gPttWasReleased = true; Fixed issue #138
|
//gPttWasReleased = true; Fixed issue #138
|
||||||
gUpdateStatus = true;
|
gUpdateStatus = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MAIN_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction)
|
static void MAIN_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction) {
|
||||||
{
|
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN // Set Squelch F + UP or Down
|
#ifdef ENABLE_FEAT_F4HWN // Set Squelch F + UP or Down
|
||||||
if(gWasFKeyPressed) {
|
if (gWasFKeyPressed) {
|
||||||
switch(Direction)
|
switch (Direction) {
|
||||||
{
|
|
||||||
case 1:
|
case 1:
|
||||||
processFKeyFunction(KEY_UP, false);
|
processFKeyFunction(KEY_UP, false);
|
||||||
break;
|
break;
|
||||||
@@ -855,8 +846,7 @@ static void MAIN_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction)
|
|||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
} else { // short pressed
|
||||||
else { // short pressed
|
|
||||||
if (gInputBoxIndex > 0) {
|
if (gInputBoxIndex > 0) {
|
||||||
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
||||||
return;
|
return;
|
||||||
@@ -907,7 +897,7 @@ static void MAIN_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
gRequestSaveVFO = true;
|
gRequestSaveVFO = true;
|
||||||
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
|
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -920,8 +910,13 @@ static void MAIN_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction)
|
|||||||
gPttWasReleased = true;
|
gPttWasReleased = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MAIN_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
void updatePrevChar(KEY_Code_t Key) {
|
||||||
{
|
if (Key != prevKey) {
|
||||||
|
prevKey = Key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MAIN_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) {
|
||||||
#ifdef ENABLE_FMRADIO
|
#ifdef ENABLE_FMRADIO
|
||||||
if (gFmRadioMode && Key != KEY_PTT && Key != KEY_EXIT) {
|
if (gFmRadioMode && Key != KEY_PTT && Key != KEY_EXIT) {
|
||||||
if (!bKeyHeld && bKeyPressed)
|
if (!bKeyHeld && bKeyPressed)
|
||||||
@@ -932,13 +927,12 @@ void MAIN_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
|||||||
|
|
||||||
if (gDTMF_InputMode && bKeyPressed && !bKeyHeld) {
|
if (gDTMF_InputMode && bKeyPressed && !bKeyHeld) {
|
||||||
const char Character = DTMF_GetCharacter(Key);
|
const char Character = DTMF_GetCharacter(Key);
|
||||||
if (Character != 0xFF)
|
if (Character != 0xFF) { // add key to DTMF string
|
||||||
{ // add key to DTMF string
|
|
||||||
DTMF_Append(Character);
|
DTMF_Append(Character);
|
||||||
gKeyInputCountdown = key_input_timeout_500ms;
|
gKeyInputCountdown = key_input_timeout_500ms;
|
||||||
gRequestDisplayScreen = DISPLAY_MAIN;
|
gRequestDisplayScreen = DISPLAY_MAIN;
|
||||||
gPttWasReleased = true;
|
gPttWasReleased = true;
|
||||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -949,31 +943,138 @@ void MAIN_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
|||||||
// Key = KEY_SIDE2; // what's this doing ???
|
// Key = KEY_SIDE2; // what's this doing ???
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
if (Key == KEY_9 && bKeyHeld) {
|
||||||
|
if (bKeyPressed) {
|
||||||
|
if (gEnteringSMS == SMS_NOT_ENTERING) {
|
||||||
|
gEnteringSMS = SMS_ENTERING_DEST;
|
||||||
|
updatePrevChar(Key);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Key == KEY_MENU) {
|
||||||
|
if (gEnteringSMS == SMS_ENTERING_DEST) {
|
||||||
|
if (bKeyPressed) {
|
||||||
|
memset(dataPacket.data, 0, DataPacketDataSize);
|
||||||
|
prepareDataPacket();
|
||||||
|
dataPacket.flags = 126;
|
||||||
|
gEnteringSMS = SMS_ENTERING_MESSAGE;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (gEnteringSMS == SMS_ENTERING_MESSAGE) {
|
||||||
|
if (bKeyPressed) {
|
||||||
|
if (strlen((char *) dataPacket.data)) {
|
||||||
|
BK4819_ToggleGpioOut(BK4819_GPIO5_PIN1_RED, true);
|
||||||
|
AUDIO_AudioPathOff();
|
||||||
|
gEnableSpeaker = false;
|
||||||
|
RADIO_PrepareTX();
|
||||||
|
if (gCurrentVfo->SCRAMBLING_TYPE > 0)
|
||||||
|
BK4819_EnableScramble(gCurrentVfo->SCRAMBLING_TYPE - 1);
|
||||||
|
else
|
||||||
|
BK4819_DisableScramble();
|
||||||
|
MSG_FSKSendData();
|
||||||
|
AUDIO_AudioPathOn();
|
||||||
|
gEnableSpeaker = true;
|
||||||
|
BK4819_ExitTxMute();
|
||||||
|
MSG_EnableRX(true);
|
||||||
|
gVfoConfigureMode = VFO_CONFIGURE;
|
||||||
|
BK4819_ToggleGpioOut(BK4819_GPIO5_PIN1_RED, false);
|
||||||
|
dataPTR = dataPacket.data;
|
||||||
|
memset(dataPacket.data, 0, DataPacketDataSize);
|
||||||
|
gEnteringSMS = SMS_NOT_ENTERING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Key == KEY_EXIT && gEnteringSMS != SMS_NOT_ENTERING) {
|
||||||
|
if (bKeyHeld) {
|
||||||
|
if (bKeyPressed) {
|
||||||
|
gEnteringSMS = SMS_NOT_ENTERING;
|
||||||
|
dataPTR = dataPacket.data;
|
||||||
|
memset(dataPacket.data, 0, DataPacketDataSize);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (bKeyPressed) {
|
||||||
|
if (gEnteringSMS == SMS_ENTERING_MESSAGE) {
|
||||||
|
if (dataPacket.data <= dataPTR) {
|
||||||
|
*dataPTR = '\0';
|
||||||
|
if (dataPacket.data < dataPTR) {
|
||||||
|
dataPTR--;
|
||||||
|
}
|
||||||
|
*dataPTR = '\0';
|
||||||
|
}
|
||||||
|
} else if (gEnteringSMS == SMS_ENTERING_DEST) {
|
||||||
|
dataPacket.dest /= 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updatePrevChar(Key);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gEnteringSMS != SMS_NOT_ENTERING && !bKeyHeld) {
|
||||||
|
if (!dataPTR) {
|
||||||
|
dataPTR = dataPacket.data;
|
||||||
|
}
|
||||||
|
if (gEnteringSMS == SMS_ENTERING_MESSAGE) {
|
||||||
|
if (bKeyPressed) {
|
||||||
|
if (prevKey != Key) {
|
||||||
|
dataPTR++;
|
||||||
|
if (dataPTR - dataPacket.data >= DataPacketDataSize) {
|
||||||
|
dataPTR = dataPacket.data;
|
||||||
|
}
|
||||||
|
prevLetter = 0;
|
||||||
|
}
|
||||||
|
*(dataPTR - 1) = T9Table[Key][(prevLetter++) % T9Count];
|
||||||
|
updatePrevChar(Key);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
} else if (gEnteringSMS == SMS_ENTERING_DEST) {
|
||||||
|
if (bKeyPressed) {
|
||||||
|
dataPacket.dest *= 10;
|
||||||
|
dataPacket.dest += Key;
|
||||||
|
prevLetter = 0;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch (Key) {
|
switch (Key) {
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
case KEY_SIDE1:
|
case KEY_SIDE1:
|
||||||
case KEY_SIDE2:
|
case KEY_SIDE2:
|
||||||
#endif
|
#endif
|
||||||
case KEY_0...KEY_9:
|
case
|
||||||
MAIN_Key_DIGITS(Key, bKeyPressed, bKeyHeld);
|
KEY_0...KEY_9
|
||||||
|
:
|
||||||
|
MAIN_Key_DIGITS(Key, bKeyPressed, bKeyHeld
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case KEY_MENU:
|
case KEY_MENU:
|
||||||
MAIN_Key_MENU(bKeyPressed, bKeyHeld);
|
MAIN_Key_MENU(bKeyPressed, bKeyHeld
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
MAIN_Key_UP_DOWN(bKeyPressed, bKeyHeld, 1);
|
MAIN_Key_UP_DOWN(bKeyPressed, bKeyHeld,
|
||||||
|
1);
|
||||||
break;
|
break;
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
MAIN_Key_UP_DOWN(bKeyPressed, bKeyHeld, -1);
|
MAIN_Key_UP_DOWN(bKeyPressed, bKeyHeld,
|
||||||
|
-1);
|
||||||
break;
|
break;
|
||||||
case KEY_EXIT:
|
case KEY_EXIT:
|
||||||
MAIN_Key_EXIT(bKeyPressed, bKeyHeld);
|
MAIN_Key_EXIT(bKeyPressed, bKeyHeld
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case KEY_STAR:
|
case KEY_STAR:
|
||||||
MAIN_Key_STAR(bKeyPressed, bKeyHeld);
|
MAIN_Key_STAR(bKeyPressed, bKeyHeld
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case KEY_F:
|
case KEY_F:
|
||||||
GENERIC_Key_F(bKeyPressed, bKeyHeld);
|
GENERIC_Key_F(bKeyPressed, bKeyHeld
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case KEY_PTT:
|
case KEY_PTT:
|
||||||
GENERIC_Key_PTT(bKeyPressed);
|
GENERIC_Key_PTT(bKeyPressed);
|
||||||
|
|||||||
+448
-558
File diff suppressed because it is too large
Load Diff
+457
-675
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -60,8 +60,8 @@ broadcast() {
|
|||||||
&& cp f4hwn.broadcast* compiled-firmware/"
|
&& cp f4hwn.broadcast* compiled-firmware/"
|
||||||
}
|
}
|
||||||
|
|
||||||
voxless() {
|
basic() {
|
||||||
echo "Voxless compilation..."
|
echo "Basic compilation..."
|
||||||
docker run --rm -v "${PWD}/compiled-firmware:/app/compiled-firmware" $IMAGE_NAME /bin/bash -c "cd /app && make -s \
|
docker run --rm -v "${PWD}/compiled-firmware:/app/compiled-firmware" $IMAGE_NAME /bin/bash -c "cd /app && make -s \
|
||||||
ENABLE_SPECTRUM=1 \
|
ENABLE_SPECTRUM=1 \
|
||||||
ENABLE_FMRADIO=1 \
|
ENABLE_FMRADIO=1 \
|
||||||
@@ -78,9 +78,9 @@ voxless() {
|
|||||||
ENABLE_FEAT_F4HWN_CTR=0 \
|
ENABLE_FEAT_F4HWN_CTR=0 \
|
||||||
ENABLE_FEAT_F4HWN_NARROWER=0 \
|
ENABLE_FEAT_F4HWN_NARROWER=0 \
|
||||||
ENABLE_FEAT_F4HWN_RESCUE_OPS=0 \
|
ENABLE_FEAT_F4HWN_RESCUE_OPS=0 \
|
||||||
EDITION_STRING=Voxless \
|
EDITION_STRING=Basic \
|
||||||
TARGET=f4hwn.voxless \
|
TARGET=f4hwn.basic \
|
||||||
&& cp f4hwn.voxless* compiled-firmware/"
|
&& cp f4hwn.basic* compiled-firmware/"
|
||||||
}
|
}
|
||||||
|
|
||||||
rescueops() {
|
rescueops() {
|
||||||
@@ -111,8 +111,8 @@ case "$1" in
|
|||||||
broadcast)
|
broadcast)
|
||||||
broadcast
|
broadcast
|
||||||
;;
|
;;
|
||||||
voxless)
|
basic)
|
||||||
voxless
|
basic
|
||||||
;;
|
;;
|
||||||
rescueops)
|
rescueops)
|
||||||
rescueops
|
rescueops
|
||||||
@@ -121,10 +121,10 @@ case "$1" in
|
|||||||
bandscope
|
bandscope
|
||||||
broadcast
|
broadcast
|
||||||
rescueops
|
rescueops
|
||||||
voxless
|
basic
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Usage: $0 {custom|bandscope|broadcast|voxless|standard|all}"
|
echo "Usage: $0 {custom|bandscope|broadcast|basic|standard|all}"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -68,12 +68,6 @@ void BACKLIGHT_InitHardware()
|
|||||||
|
|
||||||
static void BACKLIGHT_Sound(void)
|
static void BACKLIGHT_Sound(void)
|
||||||
{
|
{
|
||||||
if (gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_SOUND || gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_ALL)
|
|
||||||
{
|
|
||||||
AUDIO_PlayBeep(BEEP_880HZ_60MS_DOUBLE_BEEP);
|
|
||||||
AUDIO_PlayBeep(BEEP_880HZ_60MS_DOUBLE_BEEP);
|
|
||||||
}
|
|
||||||
|
|
||||||
gK5startup = false;
|
gK5startup = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ enum BK4819_REGISTER_t {
|
|||||||
BK4819_REG_3D = 0x3DU,
|
BK4819_REG_3D = 0x3DU,
|
||||||
BK4819_REG_3E = 0x3EU,
|
BK4819_REG_3E = 0x3EU,
|
||||||
BK4819_REG_3F = 0x3FU,
|
BK4819_REG_3F = 0x3FU,
|
||||||
|
BK4819_REG_40 = 0x40U,
|
||||||
BK4819_REG_43 = 0x43U,
|
BK4819_REG_43 = 0x43U,
|
||||||
BK4819_REG_46 = 0x46U,
|
BK4819_REG_46 = 0x46U,
|
||||||
BK4819_REG_47 = 0x47U,
|
BK4819_REG_47 = 0x47U,
|
||||||
@@ -96,6 +97,7 @@ enum BK4819_REGISTER_t {
|
|||||||
BK4819_REG_5A = 0x5AU,
|
BK4819_REG_5A = 0x5AU,
|
||||||
BK4819_REG_5B = 0x5BU,
|
BK4819_REG_5B = 0x5BU,
|
||||||
BK4819_REG_5C = 0x5CU,
|
BK4819_REG_5C = 0x5CU,
|
||||||
|
BK4819_REG_5E = 0x5EU,
|
||||||
BK4819_REG_5D = 0x5DU,
|
BK4819_REG_5D = 0x5DU,
|
||||||
BK4819_REG_5F = 0x5FU,
|
BK4819_REG_5F = 0x5FU,
|
||||||
BK4819_REG_63 = 0x63U,
|
BK4819_REG_63 = 0x63U,
|
||||||
|
|||||||
@@ -48,6 +48,21 @@ __inline uint16_t scale_freq(const uint16_t freq)
|
|||||||
return (((uint32_t)freq * 1353245u) + (1u << 16)) >> 17; // with rounding
|
return (((uint32_t)freq * 1353245u) + (1u << 16)) >> 17; // with rounding
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BK4819_FskEnableTx(void){
|
||||||
|
const uint16_t fsk_reg59 = BK4819_ReadRegister(BK4819_REG_59);
|
||||||
|
BK4819_WriteRegister(BK4819_REG_59, (1u << 11) | fsk_reg59);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BK4819_FskClearFifo(void){
|
||||||
|
const uint16_t fsk_reg59 = BK4819_ReadRegister(BK4819_REG_59);
|
||||||
|
BK4819_WriteRegister(BK4819_REG_59, (1u << 15) | (1u << 14) | fsk_reg59);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BK4819_FskEnableRx(void){
|
||||||
|
const uint16_t fsk_reg59 = BK4819_ReadRegister(BK4819_REG_59);
|
||||||
|
BK4819_WriteRegister(BK4819_REG_59, (1u << 12) | fsk_reg59);
|
||||||
|
}
|
||||||
|
|
||||||
void BK4819_Init(void)
|
void BK4819_Init(void)
|
||||||
{
|
{
|
||||||
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN);
|
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN);
|
||||||
|
|||||||
@@ -77,6 +77,11 @@ void BK4819_InitAGC(bool amModulation);
|
|||||||
|
|
||||||
void BK4819_ToggleGpioOut(BK4819_GPIO_PIN_t Pin, bool bSet);
|
void BK4819_ToggleGpioOut(BK4819_GPIO_PIN_t Pin, bool bSet);
|
||||||
|
|
||||||
|
void BK4819_ResetFSK(void);
|
||||||
|
void BK4819_FskClearFifo(void);
|
||||||
|
void BK4819_FskEnableRx(void);
|
||||||
|
void BK4819_FskEnableTx(void);
|
||||||
|
|
||||||
void BK4819_SetCDCSSCodeWord(uint32_t CodeWord);
|
void BK4819_SetCDCSSCodeWord(uint32_t CodeWord);
|
||||||
void BK4819_SetCTCSSFrequency(uint32_t BaudRate);
|
void BK4819_SetCTCSSFrequency(uint32_t BaudRate);
|
||||||
void BK4819_SetTailDetection(const uint32_t freq_10Hz);
|
void BK4819_SetTailDetection(const uint32_t freq_10Hz);
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ KEY_Code_t gKeyReading0 = KEY_INVALID;
|
|||||||
KEY_Code_t gKeyReading1 = KEY_INVALID;
|
KEY_Code_t gKeyReading1 = KEY_INVALID;
|
||||||
uint16_t gDebounceCounter = 0;
|
uint16_t gDebounceCounter = 0;
|
||||||
bool gWasFKeyPressed = false;
|
bool gWasFKeyPressed = false;
|
||||||
|
uint8_t prevLetter = 0;
|
||||||
|
KEY_Code_t prevKey = KEY_INVALID;
|
||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
|
|
||||||
|
|||||||
+4
-2
@@ -47,8 +47,10 @@ typedef enum KEY_Code_e KEY_Code_t;
|
|||||||
|
|
||||||
extern KEY_Code_t gKeyReading0;
|
extern KEY_Code_t gKeyReading0;
|
||||||
extern KEY_Code_t gKeyReading1;
|
extern KEY_Code_t gKeyReading1;
|
||||||
extern uint16_t gDebounceCounter;
|
extern uint16_t gDebounceCounter;
|
||||||
extern bool gWasFKeyPressed;
|
extern bool gWasFKeyPressed;
|
||||||
|
extern uint8_t prevLetter;
|
||||||
|
extern KEY_Code_t prevKey;
|
||||||
|
|
||||||
KEY_Code_t KEYBOARD_Poll(void);
|
KEY_Code_t KEYBOARD_Poll(void);
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -4084,9 +4084,9 @@ called in the following order:
|
|||||||
a=>b [label="GetVersion ()", textcolor="gray", linecolor="gray"];
|
a=>b [label="GetVersion ()", textcolor="gray", linecolor="gray"];
|
||||||
--- [label="Obtain driver features"];
|
--- [label="Obtain driver features"];
|
||||||
a=>b [label="GetCapabilities (...)", textcolor="gray", linecolor="gray"];
|
a=>b [label="GetCapabilities (...)", textcolor="gray", linecolor="gray"];
|
||||||
--- [label="Setup software resources"];
|
--- [label="Sup software resources"];
|
||||||
a=>b [label="Initialize (...)", textcolor="red", linecolor="red"];
|
a=>b [label="Initialize (...)", textcolor="red", linecolor="red"];
|
||||||
--- [label="Setup the peripheral"];
|
--- [label="Sup the peripheral"];
|
||||||
a=>b [label="PowerControl (ARM_POWER_FULL)", textcolor="red", linecolor="red"];
|
a=>b [label="PowerControl (ARM_POWER_FULL)", textcolor="red", linecolor="red"];
|
||||||
--- [label="Operate with the peripheral"];
|
--- [label="Operate with the peripheral"];
|
||||||
a=>b [label="Data Transfer Functions"];
|
a=>b [label="Data Transfer Functions"];
|
||||||
|
|||||||
@@ -18,202 +18,202 @@
|
|||||||
|
|
||||||
// removed last and middle column which was all 0x00
|
// removed last and middle column which was all 0x00
|
||||||
// also the space char is not needed
|
// also the space char is not needed
|
||||||
const uint8_t gFontBig[95 - 1][16 - 2] =
|
//const uint8_t gFontBig[95 - 1][16 - 2] =
|
||||||
{
|
//{
|
||||||
#if 0
|
//#if 0
|
||||||
// {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // , 0x00}, // ' '
|
//// {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // , 0x00}, // ' '
|
||||||
{0x00, 0x00, 0x70, 0xF8, 0xF8, 0x70, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x00}, // , 0x00}, // '!'
|
// {0x00, 0x00, 0x70, 0xF8, 0xF8, 0x70, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x00}, // , 0x00}, // '!'
|
||||||
{0x00, 0x1E, 0x3E, 0x00, 0x00, 0x3E, 0x1E, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // , 0x00}, // '"'
|
// {0x00, 0x1E, 0x3E, 0x00, 0x00, 0x3E, 0x1E, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // , 0x00}, // '"'
|
||||||
{0x40, 0xF0, 0xF0, 0x40, 0xF0, 0xF0, 0x40, /*0x00,*/ 0x04, 0x1F, 0x1F, 0x04, 0x1F, 0x1F, 0x04}, // , 0x00}, // '#'
|
// {0x40, 0xF0, 0xF0, 0x40, 0xF0, 0xF0, 0x40, /*0x00,*/ 0x04, 0x1F, 0x1F, 0x04, 0x1F, 0x1F, 0x04}, // , 0x00}, // '#'
|
||||||
{0x70, 0xF8, 0x88, 0x8F, 0x8F, 0x98, 0x30, /*0x00,*/ 0x06, 0x0C, 0x08, 0x38, 0x38, 0x0F, 0x07}, // , 0x00}, // '$'
|
// {0x70, 0xF8, 0x88, 0x8F, 0x8F, 0x98, 0x30, /*0x00,*/ 0x06, 0x0C, 0x08, 0x38, 0x38, 0x0F, 0x07}, // , 0x00}, // '$'
|
||||||
{0x60, 0x60, 0x00, 0x00, 0x80, 0xC0, 0x60, /*0x00,*/ 0x18, 0x0C, 0x06, 0x03, 0x01, 0x18, 0x18}, // , 0x00}, // '%'
|
// {0x60, 0x60, 0x00, 0x00, 0x80, 0xC0, 0x60, /*0x00,*/ 0x18, 0x0C, 0x06, 0x03, 0x01, 0x18, 0x18}, // , 0x00}, // '%'
|
||||||
{0x00, 0xB0, 0xF8, 0xC8, 0x78, 0xB0, 0x80, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x11, 0x0F, 0x1F, 0x10}, // , 0x00}, // '&'
|
// {0x00, 0xB0, 0xF8, 0xC8, 0x78, 0xB0, 0x80, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x11, 0x0F, 0x1F, 0x10}, // , 0x00}, // '&'
|
||||||
{0x00, 0x20, 0x3E, 0x1E, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // , 0x00}, // '''
|
// {0x00, 0x20, 0x3E, 0x1E, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // , 0x00}, // '''
|
||||||
{0x00, 0x00, 0xE0, 0xF0, 0x18, 0x08, 0x00, /*0x00,*/ 0x00, 0x00, 0x07, 0x0F, 0x18, 0x10, 0x00}, // , 0x00}, // '('
|
// {0x00, 0x00, 0xE0, 0xF0, 0x18, 0x08, 0x00, /*0x00,*/ 0x00, 0x00, 0x07, 0x0F, 0x18, 0x10, 0x00}, // , 0x00}, // '('
|
||||||
{0x00, 0x00, 0x08, 0x18, 0xF0, 0xE0, 0x00, /*0x00,*/ 0x00, 0x00, 0x10, 0x18, 0x0F, 0x07, 0x00}, // , 0x00}, // ')'
|
// {0x00, 0x00, 0x08, 0x18, 0xF0, 0xE0, 0x00, /*0x00,*/ 0x00, 0x00, 0x10, 0x18, 0x0F, 0x07, 0x00}, // , 0x00}, // ')'
|
||||||
{0x00, 0x40, 0xC0, 0x80, 0x80, 0xC0, 0x40, /*0x00,*/ 0x01, 0x05, 0x07, 0x03, 0x03, 0x07, 0x05}, // , 0x01}, // '*'
|
// {0x00, 0x40, 0xC0, 0x80, 0x80, 0xC0, 0x40, /*0x00,*/ 0x01, 0x05, 0x07, 0x03, 0x03, 0x07, 0x05}, // , 0x01}, // '*'
|
||||||
{0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, /*0x00,*/ 0x00, 0x01, 0x01, 0x07, 0x07, 0x01, 0x01}, // , 0x00}, // '+'
|
// {0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, /*0x00,*/ 0x00, 0x01, 0x01, 0x07, 0x07, 0x01, 0x01}, // , 0x00}, // '+'
|
||||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x20, 0x3C, 0x1C, 0x00, 0x00}, // , 0x00}, // ','
|
// {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x20, 0x3C, 0x1C, 0x00, 0x00}, // , 0x00}, // ','
|
||||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, // , 0x00}, // '-'
|
// {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, // , 0x00}, // '-'
|
||||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00}, // , 0x00}, // '.'
|
// {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00}, // , 0x00}, // '.'
|
||||||
{0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, /*0x00,*/ 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00}, // , 0x00}, // '/'
|
// {0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, /*0x00,*/ 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00}, // , 0x00}, // '/'
|
||||||
{0xF0, 0xF8, 0x08, 0x88, 0x48, 0xF8, 0xF0, /*0x00,*/ 0x0F, 0x1F, 0x12, 0x11, 0x10, 0x1F, 0x0F}, // , 0x00}, // '0'
|
// {0xF0, 0xF8, 0x08, 0x88, 0x48, 0xF8, 0xF0, /*0x00,*/ 0x0F, 0x1F, 0x12, 0x11, 0x10, 0x1F, 0x0F}, // , 0x00}, // '0'
|
||||||
{0x00, 0x20, 0x30, 0xF8, 0xF8, 0x00, 0x00, /*0x00,*/ 0x00, 0x10, 0x10, 0x1F, 0x1F, 0x10, 0x10}, // , 0x00}, // '1'
|
// {0x00, 0x20, 0x30, 0xF8, 0xF8, 0x00, 0x00, /*0x00,*/ 0x00, 0x10, 0x10, 0x1F, 0x1F, 0x10, 0x10}, // , 0x00}, // '1'
|
||||||
{0x10, 0x18, 0x08, 0x88, 0xC8, 0x78, 0x30, /*0x00,*/ 0x1C, 0x1E, 0x13, 0x11, 0x10, 0x18, 0x18}, // , 0x00}, // '2'
|
// {0x10, 0x18, 0x08, 0x88, 0xC8, 0x78, 0x30, /*0x00,*/ 0x1C, 0x1E, 0x13, 0x11, 0x10, 0x18, 0x18}, // , 0x00}, // '2'
|
||||||
{0x10, 0x18, 0x88, 0x88, 0x88, 0xF8, 0x70, /*0x00,*/ 0x08, 0x18, 0x10, 0x10, 0x10, 0x1F, 0x0F}, // , 0x00}, // '3'
|
// {0x10, 0x18, 0x88, 0x88, 0x88, 0xF8, 0x70, /*0x00,*/ 0x08, 0x18, 0x10, 0x10, 0x10, 0x1F, 0x0F}, // , 0x00}, // '3'
|
||||||
{0x80, 0xC0, 0x60, 0x30, 0xF8, 0xF8, 0x00, /*0x00,*/ 0x01, 0x01, 0x01, 0x11, 0x1F, 0x1F, 0x11}, // , 0x00}, // '4'
|
// {0x80, 0xC0, 0x60, 0x30, 0xF8, 0xF8, 0x00, /*0x00,*/ 0x01, 0x01, 0x01, 0x11, 0x1F, 0x1F, 0x11}, // , 0x00}, // '4'
|
||||||
{0xF8, 0xF8, 0x88, 0x88, 0x88, 0x88, 0x08, /*0x00,*/ 0x08, 0x18, 0x10, 0x10, 0x11, 0x1F, 0x0F}, // , 0x00}, // '5'
|
// {0xF8, 0xF8, 0x88, 0x88, 0x88, 0x88, 0x08, /*0x00,*/ 0x08, 0x18, 0x10, 0x10, 0x11, 0x1F, 0x0F}, // , 0x00}, // '5'
|
||||||
{0xE0, 0xF0, 0x98, 0x88, 0x88, 0x80, 0x00, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x10, 0x10, 0x1F, 0x0F}, // , 0x00}, // '6'
|
// {0xE0, 0xF0, 0x98, 0x88, 0x88, 0x80, 0x00, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x10, 0x10, 0x1F, 0x0F}, // , 0x00}, // '6'
|
||||||
{0x18, 0x18, 0x08, 0x08, 0x88, 0xF8, 0x78, /*0x00,*/ 0x00, 0x00, 0x1E, 0x1F, 0x01, 0x00, 0x00}, // , 0x00}, // '7'
|
// {0x18, 0x18, 0x08, 0x08, 0x88, 0xF8, 0x78, /*0x00,*/ 0x00, 0x00, 0x1E, 0x1F, 0x01, 0x00, 0x00}, // , 0x00}, // '7'
|
||||||
{0x70, 0xF8, 0x88, 0x88, 0x88, 0xF8, 0x70, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x10, 0x10, 0x1F, 0x0F}, // , 0x00}, // '8'
|
// {0x70, 0xF8, 0x88, 0x88, 0x88, 0xF8, 0x70, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x10, 0x10, 0x1F, 0x0F}, // , 0x00}, // '8'
|
||||||
{0x70, 0xF8, 0x88, 0x88, 0x88, 0xF8, 0xF0, /*0x00,*/ 0x00, 0x10, 0x10, 0x10, 0x18, 0x0F, 0x07}, // , 0x00}, // '9'
|
// {0x70, 0xF8, 0x88, 0x88, 0x88, 0xF8, 0xF0, /*0x00,*/ 0x00, 0x10, 0x10, 0x10, 0x18, 0x0F, 0x07}, // , 0x00}, // '9'
|
||||||
{0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00}, // , 0x00}, // ':'
|
// {0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00}, // , 0x00}, // ':'
|
||||||
{0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x10, 0x1C, 0x0C, 0x00, 0x00}, // , 0x00}, // ';'
|
// {0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x10, 0x1C, 0x0C, 0x00, 0x00}, // , 0x00}, // ';'
|
||||||
{0x00, 0x00, 0x80, 0xC0, 0x60, 0x30, 0x10, /*0x00,*/ 0x00, 0x01, 0x03, 0x06, 0x0C, 0x18, 0x10}, // , 0x00}, // '<'
|
// {0x00, 0x00, 0x80, 0xC0, 0x60, 0x30, 0x10, /*0x00,*/ 0x00, 0x01, 0x03, 0x06, 0x0C, 0x18, 0x10}, // , 0x00}, // '<'
|
||||||
{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /*0x00,*/ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04}, // , 0x00}, // '='
|
// {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /*0x00,*/ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04}, // , 0x00}, // '='
|
||||||
{0x00, 0x10, 0x30, 0x60, 0xC0, 0x80, 0x00, /*0x00,*/ 0x00, 0x10, 0x18, 0x0C, 0x06, 0x03, 0x01}, // , 0x00}, // '>'
|
// {0x00, 0x10, 0x30, 0x60, 0xC0, 0x80, 0x00, /*0x00,*/ 0x00, 0x10, 0x18, 0x0C, 0x06, 0x03, 0x01}, // , 0x00}, // '>'
|
||||||
{0x30, 0x38, 0x08, 0x88, 0xC8, 0x78, 0x30, /*0x00,*/ 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x00}, // , 0x00}, // '?'
|
// {0x30, 0x38, 0x08, 0x88, 0xC8, 0x78, 0x30, /*0x00,*/ 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x00, 0x00}, // , 0x00}, // '?'
|
||||||
{0xE0, 0xF0, 0x10, 0x90, 0x90, 0xF0, 0xE0, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x17, 0x17, 0x17, 0x03}, // , 0x00}, // '@'
|
// {0xE0, 0xF0, 0x10, 0x90, 0x90, 0xF0, 0xE0, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x17, 0x17, 0x17, 0x03}, // , 0x00}, // '@'
|
||||||
{0xC0, 0xE0, 0x30, 0x18, 0x30, 0xE0, 0xC0, /*0x00,*/ 0x1F, 0x1F, 0x01, 0x01, 0x01, 0x1F, 0x1F}, // , 0x00}, // 'A'
|
// {0xC0, 0xE0, 0x30, 0x18, 0x30, 0xE0, 0xC0, /*0x00,*/ 0x1F, 0x1F, 0x01, 0x01, 0x01, 0x1F, 0x1F}, // , 0x00}, // 'A'
|
||||||
{0x08, 0xF8, 0xF8, 0x88, 0x88, 0xF8, 0x70, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x10, 0x1F, 0x0F}, // , 0x00}, // 'B'
|
// {0x08, 0xF8, 0xF8, 0x88, 0x88, 0xF8, 0x70, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x10, 0x1F, 0x0F}, // , 0x00}, // 'B'
|
||||||
{0xE0, 0xF0, 0x18, 0x08, 0x08, 0x18, 0x30, /*0x00,*/ 0x07, 0x0F, 0x18, 0x10, 0x10, 0x18, 0x0C}, // , 0x00}, // 'C'
|
// {0xE0, 0xF0, 0x18, 0x08, 0x08, 0x18, 0x30, /*0x00,*/ 0x07, 0x0F, 0x18, 0x10, 0x10, 0x18, 0x0C}, // , 0x00}, // 'C'
|
||||||
{0x08, 0xF8, 0xF8, 0x08, 0x18, 0xF0, 0xE0, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x18, 0x0F, 0x07}, // , 0x00}, // 'D'
|
// {0x08, 0xF8, 0xF8, 0x08, 0x18, 0xF0, 0xE0, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x18, 0x0F, 0x07}, // , 0x00}, // 'D'
|
||||||
{0x08, 0xF8, 0xF8, 0x88, 0xC8, 0x18, 0x38, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x11, 0x18, 0x1C}, // , 0x00}, // 'E'
|
// {0x08, 0xF8, 0xF8, 0x88, 0xC8, 0x18, 0x38, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x11, 0x18, 0x1C}, // , 0x00}, // 'E'
|
||||||
{0x08, 0xF8, 0xF8, 0x88, 0xC8, 0x18, 0x38, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x01, 0x00, 0x00}, // , 0x00}, // 'F'
|
// {0x08, 0xF8, 0xF8, 0x88, 0xC8, 0x18, 0x38, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x01, 0x00, 0x00}, // , 0x00}, // 'F'
|
||||||
{0xE0, 0xF0, 0x18, 0x08, 0x08, 0x18, 0x30, /*0x00,*/ 0x07, 0x0F, 0x18, 0x11, 0x11, 0x0F, 0x1F}, // , 0x00}, // 'G'
|
// {0xE0, 0xF0, 0x18, 0x08, 0x08, 0x18, 0x30, /*0x00,*/ 0x07, 0x0F, 0x18, 0x11, 0x11, 0x0F, 0x1F}, // , 0x00}, // 'G'
|
||||||
{0xF8, 0xF8, 0x80, 0x80, 0x80, 0xF8, 0xF8, /*0x00,*/ 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x1F}, // , 0x00}, // 'H'
|
// {0xF8, 0xF8, 0x80, 0x80, 0x80, 0xF8, 0xF8, /*0x00,*/ 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x1F}, // , 0x00}, // 'H'
|
||||||
{0x00, 0x00, 0x08, 0xF8, 0xF8, 0x08, 0x00, /*0x00,*/ 0x00, 0x00, 0x10, 0x1F, 0x1F, 0x10, 0x00}, // , 0x00}, // 'I'
|
// {0x00, 0x00, 0x08, 0xF8, 0xF8, 0x08, 0x00, /*0x00,*/ 0x00, 0x00, 0x10, 0x1F, 0x1F, 0x10, 0x00}, // , 0x00}, // 'I'
|
||||||
{0x00, 0x00, 0x00, 0x08, 0xF8, 0xF8, 0x08, /*0x00,*/ 0x0E, 0x1E, 0x10, 0x10, 0x1F, 0x0F, 0x00}, // , 0x00}, // 'J'
|
// {0x00, 0x00, 0x00, 0x08, 0xF8, 0xF8, 0x08, /*0x00,*/ 0x0E, 0x1E, 0x10, 0x10, 0x1F, 0x0F, 0x00}, // , 0x00}, // 'J'
|
||||||
{0x08, 0xF8, 0xF8, 0x80, 0xE0, 0x78, 0x18, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x01, 0x03, 0x1E, 0x1C}, // , 0x00}, // 'K'
|
// {0x08, 0xF8, 0xF8, 0x80, 0xE0, 0x78, 0x18, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x01, 0x03, 0x1E, 0x1C}, // , 0x00}, // 'K'
|
||||||
{0x08, 0xF8, 0xF8, 0x08, 0x00, 0x00, 0x00, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x10, 0x18, 0x1C}, // , 0x00}, // 'L'
|
// {0x08, 0xF8, 0xF8, 0x08, 0x00, 0x00, 0x00, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x10, 0x18, 0x1C}, // , 0x00}, // 'L'
|
||||||
{0xF8, 0xF8, 0x70, 0xE0, 0x70, 0xF8, 0xF8, /*0x00,*/ 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x1F}, // , 0x00}, // 'M'
|
// {0xF8, 0xF8, 0x70, 0xE0, 0x70, 0xF8, 0xF8, /*0x00,*/ 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x1F}, // , 0x00}, // 'M'
|
||||||
{0xF8, 0xF8, 0x70, 0xE0, 0xC0, 0xF8, 0xF8, /*0x00,*/ 0x1F, 0x1F, 0x00, 0x00, 0x01, 0x1F, 0x1F}, // , 0x00}, // 'N'
|
// {0xF8, 0xF8, 0x70, 0xE0, 0xC0, 0xF8, 0xF8, /*0x00,*/ 0x1F, 0x1F, 0x00, 0x00, 0x01, 0x1F, 0x1F}, // , 0x00}, // 'N'
|
||||||
{0xE0, 0xF0, 0x18, 0x08, 0x18, 0xF0, 0xE0, /*0x00,*/ 0x07, 0x0F, 0x18, 0x10, 0x18, 0x0F, 0x07}, // , 0x00}, // 'O'
|
// {0xE0, 0xF0, 0x18, 0x08, 0x18, 0xF0, 0xE0, /*0x00,*/ 0x07, 0x0F, 0x18, 0x10, 0x18, 0x0F, 0x07}, // , 0x00}, // 'O'
|
||||||
{0x08, 0xF8, 0xF8, 0x88, 0x88, 0xF8, 0x70, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x00, 0x00, 0x00}, // , 0x00}, // 'P'
|
// {0x08, 0xF8, 0xF8, 0x88, 0x88, 0xF8, 0x70, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x00, 0x00, 0x00}, // , 0x00}, // 'P'
|
||||||
{0xF0, 0xF8, 0x08, 0x08, 0x08, 0xF8, 0xF0, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x1C, 0x78, 0x7F, 0x4F}, // , 0x00}, // 'Q'
|
// {0xF0, 0xF8, 0x08, 0x08, 0x08, 0xF8, 0xF0, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x1C, 0x78, 0x7F, 0x4F}, // , 0x00}, // 'Q'
|
||||||
{0x08, 0xF8, 0xF8, 0x88, 0x88, 0xF8, 0x70, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x00, 0x01, 0x1F, 0x1E}, // , 0x00}, // 'R'
|
// {0x08, 0xF8, 0xF8, 0x88, 0x88, 0xF8, 0x70, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x00, 0x01, 0x1F, 0x1E}, // , 0x00}, // 'R'
|
||||||
{0x30, 0x78, 0xC8, 0x88, 0x88, 0x38, 0x30, /*0x00,*/ 0x0C, 0x1C, 0x10, 0x10, 0x11, 0x1F, 0x0E}, // , 0x00}, // 'S'
|
// {0x30, 0x78, 0xC8, 0x88, 0x88, 0x38, 0x30, /*0x00,*/ 0x0C, 0x1C, 0x10, 0x10, 0x11, 0x1F, 0x0E}, // , 0x00}, // 'S'
|
||||||
{0x00, 0x38, 0x18, 0xF8, 0xF8, 0x18, 0x38, /*0x00,*/ 0x00, 0x00, 0x10, 0x1F, 0x1F, 0x10, 0x00}, // , 0x00}, // 'T'
|
// {0x00, 0x38, 0x18, 0xF8, 0xF8, 0x18, 0x38, /*0x00,*/ 0x00, 0x00, 0x10, 0x1F, 0x1F, 0x10, 0x00}, // , 0x00}, // 'T'
|
||||||
{0xF8, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0xF8, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x10, 0x10, 0x1F, 0x0F}, // , 0x00}, // 'U'
|
// {0xF8, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0xF8, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x10, 0x10, 0x1F, 0x0F}, // , 0x00}, // 'U'
|
||||||
{0xF8, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0xF8, /*0x00,*/ 0x03, 0x07, 0x0C, 0x18, 0x0C, 0x07, 0x03}, // , 0x00}, // 'V'
|
// {0xF8, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0xF8, /*0x00,*/ 0x03, 0x07, 0x0C, 0x18, 0x0C, 0x07, 0x03}, // , 0x00}, // 'V'
|
||||||
{0xF8, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0xF8, /*0x00,*/ 0x07, 0x1F, 0x1C, 0x07, 0x1C, 0x1F, 0x07}, // , 0x00}, // 'W'
|
// {0xF8, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0xF8, /*0x00,*/ 0x07, 0x1F, 0x1C, 0x07, 0x1C, 0x1F, 0x07}, // , 0x00}, // 'W'
|
||||||
{0x18, 0x78, 0xE0, 0x80, 0xE0, 0x78, 0x18, /*0x00,*/ 0x18, 0x1E, 0x07, 0x01, 0x07, 0x1E, 0x18}, // , 0x00}, // 'X'
|
// {0x18, 0x78, 0xE0, 0x80, 0xE0, 0x78, 0x18, /*0x00,*/ 0x18, 0x1E, 0x07, 0x01, 0x07, 0x1E, 0x18}, // , 0x00}, // 'X'
|
||||||
{0x00, 0x78, 0xF8, 0x80, 0x80, 0xF8, 0x78, /*0x00,*/ 0x00, 0x00, 0x10, 0x1F, 0x1F, 0x10, 0x00}, // , 0x00}, // 'Y'
|
// {0x00, 0x78, 0xF8, 0x80, 0x80, 0xF8, 0x78, /*0x00,*/ 0x00, 0x00, 0x10, 0x1F, 0x1F, 0x10, 0x00}, // , 0x00}, // 'Y'
|
||||||
{0x38, 0x18, 0x08, 0x88, 0xC8, 0x78, 0x38, /*0x00,*/ 0x1C, 0x1E, 0x13, 0x11, 0x10, 0x18, 0x1C}, // , 0x00}, // 'Z'
|
// {0x38, 0x18, 0x08, 0x88, 0xC8, 0x78, 0x38, /*0x00,*/ 0x1C, 0x1E, 0x13, 0x11, 0x10, 0x18, 0x1C}, // , 0x00}, // 'Z'
|
||||||
{0x00, 0x00, 0xF8, 0xF8, 0x08, 0x08, 0x00, /*0x00,*/ 0x00, 0x00, 0x1F, 0x1F, 0x10, 0x10, 0x00}, // , 0x00}, // '['
|
// {0x00, 0x00, 0xF8, 0xF8, 0x08, 0x08, 0x00, /*0x00,*/ 0x00, 0x00, 0x1F, 0x1F, 0x10, 0x10, 0x00}, // , 0x00}, // '['
|
||||||
{0x70, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x01, 0x03, 0x07, 0x0E, 0x1C}, // , 0x00}, // '"\'
|
// {0x70, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x01, 0x03, 0x07, 0x0E, 0x1C}, // , 0x00}, // '"\'
|
||||||
{0x00, 0x00, 0x08, 0x08, 0xF8, 0xF8, 0x00, /*0x00,*/ 0x00, 0x00, 0x10, 0x10, 0x1F, 0x1F, 0x00}, // , 0x00}, // ']'
|
// {0x00, 0x00, 0x08, 0x08, 0xF8, 0xF8, 0x00, /*0x00,*/ 0x00, 0x00, 0x10, 0x10, 0x1F, 0x1F, 0x00}, // , 0x00}, // ']'
|
||||||
{0x10, 0x18, 0x0E, 0x07, 0x0E, 0x18, 0x10, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // , 0x00}, // '^'
|
// {0x10, 0x18, 0x0E, 0x07, 0x0E, 0x18, 0x10, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // , 0x00}, // '^'
|
||||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}, // , 0x40}, // '_'
|
// {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40}, // , 0x40}, // '_'
|
||||||
{0x00, 0x00, 0x07, 0x0F, 0x08, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // , 0x00}, // '`'
|
// {0x00, 0x00, 0x07, 0x0F, 0x08, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // , 0x00}, // '`'
|
||||||
{0x00, 0x40, 0x40, 0x40, 0xC0, 0x80, 0x00, /*0x00,*/ 0x0E, 0x1F, 0x11, 0x11, 0x0F, 0x1F, 0x10}, // , 0x00}, // 'a'
|
// {0x00, 0x40, 0x40, 0x40, 0xC0, 0x80, 0x00, /*0x00,*/ 0x0E, 0x1F, 0x11, 0x11, 0x0F, 0x1F, 0x10}, // , 0x00}, // 'a'
|
||||||
{0x08, 0xF8, 0xF8, 0x40, 0xC0, 0x80, 0x00, /*0x00,*/ 0x10, 0x1F, 0x0F, 0x10, 0x10, 0x1F, 0x0F}, // , 0x00}, // 'b'
|
// {0x08, 0xF8, 0xF8, 0x40, 0xC0, 0x80, 0x00, /*0x00,*/ 0x10, 0x1F, 0x0F, 0x10, 0x10, 0x1F, 0x0F}, // , 0x00}, // 'b'
|
||||||
{0x80, 0xC0, 0x40, 0x40, 0x40, 0xC0, 0x80, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x10, 0x10, 0x18, 0x08}, // , 0x00}, // 'c'
|
// {0x80, 0xC0, 0x40, 0x40, 0x40, 0xC0, 0x80, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x10, 0x10, 0x18, 0x08}, // , 0x00}, // 'c'
|
||||||
{0x00, 0x80, 0xC0, 0x48, 0xF8, 0xF8, 0x00, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x10, 0x0F, 0x1F, 0x10}, // , 0x00}, // 'd'
|
// {0x00, 0x80, 0xC0, 0x48, 0xF8, 0xF8, 0x00, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x10, 0x0F, 0x1F, 0x10}, // , 0x00}, // 'd'
|
||||||
{0x80, 0xC0, 0x40, 0x40, 0x40, 0xC0, 0x80, /*0x00,*/ 0x0F, 0x1F, 0x11, 0x11, 0x11, 0x19, 0x09}, // , 0x00}, // 'e'
|
// {0x80, 0xC0, 0x40, 0x40, 0x40, 0xC0, 0x80, /*0x00,*/ 0x0F, 0x1F, 0x11, 0x11, 0x11, 0x19, 0x09}, // , 0x00}, // 'e'
|
||||||
{0x80, 0xF0, 0xF8, 0x88, 0x18, 0x30, 0x00, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x00, 0x00, 0x00}, // , 0x00}, // 'f'
|
// {0x80, 0xF0, 0xF8, 0x88, 0x18, 0x30, 0x00, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x00, 0x00, 0x00}, // , 0x00}, // 'f'
|
||||||
{0x80, 0xC0, 0x40, 0x40, 0x80, 0xC0, 0x40, /*0x00,*/ 0x4F, 0xDF, 0x90, 0x90, 0xFF, 0x7F, 0x00}, // , 0x00}, // 'g'
|
// {0x80, 0xC0, 0x40, 0x40, 0x80, 0xC0, 0x40, /*0x00,*/ 0x4F, 0xDF, 0x90, 0x90, 0xFF, 0x7F, 0x00}, // , 0x00}, // 'g'
|
||||||
{0x08, 0xF8, 0xF8, 0x80, 0x40, 0xC0, 0x80, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x00, 0x00, 0x1F, 0x1F}, // , 0x00}, // 'h'
|
// {0x08, 0xF8, 0xF8, 0x80, 0x40, 0xC0, 0x80, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x00, 0x00, 0x1F, 0x1F}, // , 0x00}, // 'h'
|
||||||
{0x00, 0x00, 0x40, 0xD8, 0xD8, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x10, 0x1F, 0x1F, 0x10, 0x00}, // , 0x00}, // 'i'
|
// {0x00, 0x00, 0x40, 0xD8, 0xD8, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x10, 0x1F, 0x1F, 0x10, 0x00}, // , 0x00}, // 'i'
|
||||||
{0x00, 0x00, 0x00, 0x00, 0x40, 0xD8, 0xD8, /*0x00,*/ 0x00, 0x60, 0xE0, 0x80, 0x80, 0xFF, 0x7F}, // , 0x00}, // 'j'
|
// {0x00, 0x00, 0x00, 0x00, 0x40, 0xD8, 0xD8, /*0x00,*/ 0x00, 0x60, 0xE0, 0x80, 0x80, 0xFF, 0x7F}, // , 0x00}, // 'j'
|
||||||
{0x08, 0xF8, 0xF8, 0x00, 0x80, 0xC0, 0x40, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x03, 0x07, 0x1C, 0x18}, // , 0x00}, // 'k'
|
// {0x08, 0xF8, 0xF8, 0x00, 0x80, 0xC0, 0x40, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x03, 0x07, 0x1C, 0x18}, // , 0x00}, // 'k'
|
||||||
{0x00, 0x00, 0x08, 0xF8, 0xF8, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x10, 0x1F, 0x1F, 0x10, 0x00}, // , 0x00}, // 'l'
|
// {0x00, 0x00, 0x08, 0xF8, 0xF8, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x10, 0x1F, 0x1F, 0x10, 0x00}, // , 0x00}, // 'l'
|
||||||
{0xC0, 0xC0, 0xC0, 0x80, 0xC0, 0xC0, 0x80, /*0x00,*/ 0x1F, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x1F}, // , 0x00}, // 'm'
|
// {0xC0, 0xC0, 0xC0, 0x80, 0xC0, 0xC0, 0x80, /*0x00,*/ 0x1F, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x1F}, // , 0x00}, // 'm'
|
||||||
{0x40, 0xC0, 0x80, 0x40, 0x40, 0xC0, 0x80, /*0x00,*/ 0x00, 0x1F, 0x1F, 0x00, 0x00, 0x1F, 0x1F}, // , 0x00}, // 'n'
|
// {0x40, 0xC0, 0x80, 0x40, 0x40, 0xC0, 0x80, /*0x00,*/ 0x00, 0x1F, 0x1F, 0x00, 0x00, 0x1F, 0x1F}, // , 0x00}, // 'n'
|
||||||
{0x80, 0xC0, 0x40, 0x40, 0x40, 0xC0, 0x80, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x10, 0x10, 0x1F, 0x0F}, // , 0x00}, // 'o'
|
// {0x80, 0xC0, 0x40, 0x40, 0x40, 0xC0, 0x80, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x10, 0x10, 0x1F, 0x0F}, // , 0x00}, // 'o'
|
||||||
{0x40, 0xC0, 0x80, 0x40, 0x40, 0xC0, 0x80, /*0x00,*/ 0x80, 0xFF, 0xFF, 0x90, 0x10, 0x1F, 0x0F}, // , 0x00}, // 'p'
|
// {0x40, 0xC0, 0x80, 0x40, 0x40, 0xC0, 0x80, /*0x00,*/ 0x80, 0xFF, 0xFF, 0x90, 0x10, 0x1F, 0x0F}, // , 0x00}, // 'p'
|
||||||
{0x80, 0xC0, 0x40, 0x40, 0x80, 0xC0, 0x40, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x90, 0xFF, 0xFF, 0x80}, // , 0x00}, // 'q'
|
// {0x80, 0xC0, 0x40, 0x40, 0x80, 0xC0, 0x40, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x90, 0xFF, 0xFF, 0x80}, // , 0x00}, // 'q'
|
||||||
{0x40, 0xC0, 0x80, 0xC0, 0x40, 0xC0, 0x80, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x00, 0x00, 0x01}, // , 0x00}, // 'r'
|
// {0x40, 0xC0, 0x80, 0xC0, 0x40, 0xC0, 0x80, /*0x00,*/ 0x10, 0x1F, 0x1F, 0x10, 0x00, 0x00, 0x01}, // , 0x00}, // 'r'
|
||||||
{0x80, 0xC0, 0x40, 0x40, 0x40, 0xC0, 0x80, /*0x00,*/ 0x08, 0x19, 0x13, 0x12, 0x16, 0x1C, 0x08}, // , 0x00}, // 's'
|
// {0x80, 0xC0, 0x40, 0x40, 0x40, 0xC0, 0x80, /*0x00,*/ 0x08, 0x19, 0x13, 0x12, 0x16, 0x1C, 0x08}, // , 0x00}, // 's'
|
||||||
{0x40, 0x40, 0xF0, 0xF8, 0x40, 0x40, 0x00, /*0x00,*/ 0x00, 0x00, 0x0F, 0x1F, 0x10, 0x18, 0x08}, // , 0x00}, // 't'
|
// {0x40, 0x40, 0xF0, 0xF8, 0x40, 0x40, 0x00, /*0x00,*/ 0x00, 0x00, 0x0F, 0x1F, 0x10, 0x18, 0x08}, // , 0x00}, // 't'
|
||||||
{0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x10, 0x0F, 0x1F, 0x10}, // , 0x00}, // 'u'
|
// {0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, /*0x00,*/ 0x0F, 0x1F, 0x10, 0x10, 0x0F, 0x1F, 0x10}, // , 0x00}, // 'u'
|
||||||
{0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, /*0x00,*/ 0x00, 0x07, 0x0F, 0x18, 0x18, 0x0F, 0x07}, // , 0x00}, // 'v'
|
// {0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, /*0x00,*/ 0x00, 0x07, 0x0F, 0x18, 0x18, 0x0F, 0x07}, // , 0x00}, // 'v'
|
||||||
{0xC0, 0xC0, 0x00, 0x00, 0x00, 0xC0, 0xC0, /*0x00,*/ 0x0F, 0x1F, 0x18, 0x0E, 0x18, 0x1F, 0x0F}, // , 0x00}, // 'w'
|
// {0xC0, 0xC0, 0x00, 0x00, 0x00, 0xC0, 0xC0, /*0x00,*/ 0x0F, 0x1F, 0x18, 0x0E, 0x18, 0x1F, 0x0F}, // , 0x00}, // 'w'
|
||||||
{0x40, 0xC0, 0x80, 0x00, 0x80, 0xC0, 0x40, /*0x00,*/ 0x10, 0x18, 0x0F, 0x07, 0x0F, 0x18, 0x10}, // , 0x00}, // 'x'
|
// {0x40, 0xC0, 0x80, 0x00, 0x80, 0xC0, 0x40, /*0x00,*/ 0x10, 0x18, 0x0F, 0x07, 0x0F, 0x18, 0x10}, // , 0x00}, // 'x'
|
||||||
{0xC0, 0xC0, 0x00, 0x00, 0x00, 0xC0, 0xC0, /*0x00,*/ 0x8F, 0x9F, 0x90, 0x90, 0xD0, 0x7F, 0x3F}, // , 0x00}, // 'y'
|
// {0xC0, 0xC0, 0x00, 0x00, 0x00, 0xC0, 0xC0, /*0x00,*/ 0x8F, 0x9F, 0x90, 0x90, 0xD0, 0x7F, 0x3F}, // , 0x00}, // 'y'
|
||||||
{0xC0, 0xC0, 0x40, 0x40, 0xC0, 0xC0, 0x40, /*0x00,*/ 0x18, 0x1C, 0x16, 0x13, 0x11, 0x18, 0x18}, // , 0x00}, // 'z'
|
// {0xC0, 0xC0, 0x40, 0x40, 0xC0, 0xC0, 0x40, /*0x00,*/ 0x18, 0x1C, 0x16, 0x13, 0x11, 0x18, 0x18}, // , 0x00}, // 'z'
|
||||||
{0x00, 0x80, 0x80, 0xF0, 0x78, 0x08, 0x08, /*0x00,*/ 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x10, 0x10}, // , 0x00}, // '{'
|
// {0x00, 0x80, 0x80, 0xF0, 0x78, 0x08, 0x08, /*0x00,*/ 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x10, 0x10}, // , 0x00}, // '{'
|
||||||
{0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x00, 0x00}, // , 0x00}, // '|'
|
// {0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x00, 0x00}, // , 0x00}, // '|'
|
||||||
{0x00, 0x08, 0x08, 0x78, 0xF0, 0x80, 0x80, /*0x00,*/ 0x00, 0x10, 0x10, 0x1F, 0x0F, 0x00, 0x00}, // , 0x00}, // '}'
|
// {0x00, 0x08, 0x08, 0x78, 0xF0, 0x80, 0x80, /*0x00,*/ 0x00, 0x10, 0x10, 0x1F, 0x0F, 0x00, 0x00}, // , 0x00}, // '}'
|
||||||
{0x10, 0x18, 0x08, 0x18, 0x10, 0x18, 0x08, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // , 0x00} // '->'
|
// {0x10, 0x18, 0x08, 0x18, 0x10, 0x18, 0x08, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // , 0x00} // '->'
|
||||||
#else
|
//#else
|
||||||
// {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // ' '
|
// // {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // ' '
|
||||||
{0x00, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x0D, 0x0D, 0x00, 0x00}, // '!'
|
// {0x00, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x0D, 0x0D, 0x00, 0x00}, // '!'
|
||||||
{0x00, 0x0F, 0x1F, 0x00, 0x00, 0x1F, 0x0F, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '"'
|
// {0x00, 0x0F, 0x1F, 0x00, 0x00, 0x1F, 0x0F, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '"'
|
||||||
{0x20, 0xF8, 0xF8, 0x20, 0xF8, 0xF8, 0x20, /*0x00,*/ 0x02, 0x0F, 0x0F, 0x02, 0x0F, 0x0F, 0x02}, // '#'
|
// {0x20, 0xF8, 0xF8, 0x20, 0xF8, 0xF8, 0x20, /*0x00,*/ 0x02, 0x0F, 0x0F, 0x02, 0x0F, 0x0F, 0x02}, // '#'
|
||||||
{0x70, 0xF8, 0x88, 0x8E, 0x8E, 0x98, 0x10, /*0x00,*/ 0x04, 0x0C, 0x08, 0x38, 0x38, 0x0F, 0x07}, // '$'
|
// {0x70, 0xF8, 0x88, 0x8E, 0x8E, 0x98, 0x10, /*0x00,*/ 0x04, 0x0C, 0x08, 0x38, 0x38, 0x0F, 0x07}, // '$'
|
||||||
{0x30, 0x30, 0x00, 0x80, 0xC0, 0x60, 0x30, /*0x00,*/ 0x0C, 0x06, 0x03, 0x01, 0x00, 0x0C, 0x0C}, // '%'
|
// {0x30, 0x30, 0x00, 0x80, 0xC0, 0x60, 0x30, /*0x00,*/ 0x0C, 0x06, 0x03, 0x01, 0x00, 0x0C, 0x0C}, // '%'
|
||||||
{0x80, 0xD8, 0x7C, 0xE4, 0xBC, 0xD8, 0x40, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x07, 0x0F, 0x08}, // '&'
|
// {0x80, 0xD8, 0x7C, 0xE4, 0xBC, 0xD8, 0x40, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x07, 0x0F, 0x08}, // '&'
|
||||||
{0x00, 0x10, 0x1F, 0x0F, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '''
|
// {0x00, 0x10, 0x1F, 0x0F, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '''
|
||||||
{0x00, 0x00, 0xF0, 0xF8, 0x0C, 0x04, 0x00, /*0x00,*/ 0x00, 0x00, 0x03, 0x07, 0x0C, 0x08, 0x00}, // '('
|
// {0x00, 0x00, 0xF0, 0xF8, 0x0C, 0x04, 0x00, /*0x00,*/ 0x00, 0x00, 0x03, 0x07, 0x0C, 0x08, 0x00}, // '('
|
||||||
{0x00, 0x00, 0x04, 0x0C, 0xF8, 0xF0, 0x00, /*0x00,*/ 0x00, 0x00, 0x08, 0x0C, 0x07, 0x03, 0x00}, // ')'
|
// {0x00, 0x00, 0x04, 0x0C, 0xF8, 0xF0, 0x00, /*0x00,*/ 0x00, 0x00, 0x08, 0x0C, 0x07, 0x03, 0x00}, // ')'
|
||||||
{0x00, 0x80, 0xA0, 0xE0, 0xC0, 0xE0, 0xA0, /*0x80,*/ 0x00, 0x00, 0x02, 0x03, 0x01, 0x03, 0x02}, // '*'
|
// {0x00, 0x80, 0xA0, 0xE0, 0xC0, 0xE0, 0xA0, /*0x80,*/ 0x00, 0x00, 0x02, 0x03, 0x01, 0x03, 0x02}, // '*'
|
||||||
{0x00, 0x80, 0x80, 0xE0, 0xE0, 0x80, 0x80, /*0x00,*/ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00}, // '+'
|
// {0x00, 0x80, 0x80, 0xE0, 0xE0, 0x80, 0x80, /*0x00,*/ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00}, // '+'
|
||||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x10, 0x1E, 0x0E, 0x00, 0x00}, // ','
|
// {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x10, 0x1E, 0x0E, 0x00, 0x00}, // ','
|
||||||
{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '-'
|
// {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '-'
|
||||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00}, // '.'
|
// {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00}, // '.'
|
||||||
{0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x30, /*0x00,*/ 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00}, // '/'
|
// {0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x30, /*0x00,*/ 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00}, // '/'
|
||||||
{0xF8, 0xFC, 0x04, 0x04, 0x04, 0xFC, 0xF8, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // '0'
|
// {0xF8, 0xFC, 0x04, 0x04, 0x04, 0xFC, 0xF8, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // '0'
|
||||||
{0x00, 0x10, 0x18, 0xFC, 0xFC, 0x00, 0x00, /*0x00,*/ 0x00, 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08}, // '1'
|
// {0x00, 0x10, 0x18, 0xFC, 0xFC, 0x00, 0x00, /*0x00,*/ 0x00, 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08}, // '1'
|
||||||
{0x18, 0x1C, 0x04, 0x84, 0xC4, 0x7C, 0x38, /*0x00,*/ 0x0C, 0x0E, 0x0B, 0x09, 0x08, 0x08, 0x08}, // '2'
|
// {0x18, 0x1C, 0x04, 0x84, 0xC4, 0x7C, 0x38, /*0x00,*/ 0x0C, 0x0E, 0x0B, 0x09, 0x08, 0x08, 0x08}, // '2'
|
||||||
{0x18, 0x1C, 0x44, 0x44, 0x44, 0xFC, 0xB8, /*0x00,*/ 0x06, 0x0E, 0x08, 0x08, 0x08, 0x0F, 0x07}, // '3'
|
// {0x18, 0x1C, 0x44, 0x44, 0x44, 0xFC, 0xB8, /*0x00,*/ 0x06, 0x0E, 0x08, 0x08, 0x08, 0x0F, 0x07}, // '3'
|
||||||
{0x80, 0xC0, 0x60, 0x30, 0x18, 0xFC, 0xFC, /*0x00,*/ 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0x0F}, // '4'
|
// {0x80, 0xC0, 0x60, 0x30, 0x18, 0xFC, 0xFC, /*0x00,*/ 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0x0F}, // '4'
|
||||||
{0x7C, 0x7C, 0x44, 0x44, 0x44, 0xC4, 0x84, /*0x00,*/ 0x04, 0x0C, 0x08, 0x08, 0x08, 0x0F, 0x07}, // '5'
|
// {0x7C, 0x7C, 0x44, 0x44, 0x44, 0xC4, 0x84, /*0x00,*/ 0x04, 0x0C, 0x08, 0x08, 0x08, 0x0F, 0x07}, // '5'
|
||||||
{0xF0, 0xF8, 0x4C, 0x44, 0x44, 0xC4, 0x80, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // '6'
|
// {0xF0, 0xF8, 0x4C, 0x44, 0x44, 0xC4, 0x80, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // '6'
|
||||||
{0x04, 0x04, 0x04, 0x84, 0xE4, 0x7C, 0x1C, /*0x00,*/ 0x00, 0x00, 0x0E, 0x0F, 0x01, 0x00, 0x00}, // '7'
|
// {0x04, 0x04, 0x04, 0x84, 0xE4, 0x7C, 0x1C, /*0x00,*/ 0x00, 0x00, 0x0E, 0x0F, 0x01, 0x00, 0x00}, // '7'
|
||||||
{0xB8, 0xFC, 0x44, 0x44, 0x44, 0xFC, 0xB8, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // '8'
|
// {0xB8, 0xFC, 0x44, 0x44, 0x44, 0xFC, 0xB8, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // '8'
|
||||||
{0x78, 0xFC, 0x84, 0x84, 0x84, 0xFC, 0xF8, /*0x00,*/ 0x00, 0x08, 0x08, 0x08, 0x0C, 0x07, 0x03}, // '9'
|
// {0x78, 0xFC, 0x84, 0x84, 0x84, 0xFC, 0xF8, /*0x00,*/ 0x00, 0x08, 0x08, 0x08, 0x0C, 0x07, 0x03}, // '9'
|
||||||
{0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00}, // ':'
|
// {0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00}, // ':'
|
||||||
{0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x08, 0x0E, 0x06, 0x00, 0x00}, // ';'
|
// {0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x08, 0x0E, 0x06, 0x00, 0x00}, // ';'
|
||||||
{0x00, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x08, /*0x00,*/ 0x00, 0x00, 0x01, 0x03, 0x06, 0x0C, 0x08}, // '<'
|
// {0x00, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x08, /*0x00,*/ 0x00, 0x00, 0x01, 0x03, 0x06, 0x0C, 0x08}, // '<'
|
||||||
{0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /*0x00,*/ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}, // '='
|
// {0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /*0x00,*/ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}, // '='
|
||||||
{0x00, 0x08, 0x18, 0x30, 0x60, 0xC0, 0x80, /*0x00,*/ 0x00, 0x08, 0x0C, 0x06, 0x03, 0x01, 0x00}, // '>'
|
// {0x00, 0x08, 0x18, 0x30, 0x60, 0xC0, 0x80, /*0x00,*/ 0x00, 0x08, 0x0C, 0x06, 0x03, 0x01, 0x00}, // '>'
|
||||||
{0x38, 0x3C, 0x04, 0x84, 0xC4, 0x7C, 0x38, /*0x00,*/ 0x00, 0x00, 0x00, 0x0D, 0x0D, 0x00, 0x00}, // '?'
|
// {0x38, 0x3C, 0x04, 0x84, 0xC4, 0x7C, 0x38, /*0x00,*/ 0x00, 0x00, 0x00, 0x0D, 0x0D, 0x00, 0x00}, // '?'
|
||||||
{0xF0, 0xF8, 0x08, 0xC8, 0xC8, 0xF8, 0xF0, /*0x00,*/ 0x07, 0x0F, 0x08, 0x0B, 0x0B, 0x0B, 0x01}, // '@'
|
// {0xF0, 0xF8, 0x08, 0xC8, 0xC8, 0xF8, 0xF0, /*0x00,*/ 0x07, 0x0F, 0x08, 0x0B, 0x0B, 0x0B, 0x01}, // '@'
|
||||||
{0xF8, 0xFC, 0x84, 0x84, 0x84, 0xFC, 0xF8, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F}, // 'A'
|
// {0xF8, 0xFC, 0x84, 0x84, 0x84, 0xFC, 0xF8, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F}, // 'A'
|
||||||
{0xFC, 0xFC, 0x44, 0x44, 0x44, 0xFC, 0xB8, /*0x00,*/ 0x0F, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'B'
|
// {0xFC, 0xFC, 0x44, 0x44, 0x44, 0xFC, 0xB8, /*0x00,*/ 0x0F, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'B'
|
||||||
{0xF8, 0xFC, 0x04, 0x04, 0x04, 0x1C, 0x18, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0E, 0x06}, // 'C'
|
// {0xF8, 0xFC, 0x04, 0x04, 0x04, 0x1C, 0x18, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0E, 0x06}, // 'C'
|
||||||
{0xFC, 0xFC, 0x04, 0x04, 0x0C, 0xF8, 0xF0, /*0x00,*/ 0x0F, 0x0F, 0x08, 0x08, 0x0C, 0x07, 0x03}, // 'D'
|
// {0xFC, 0xFC, 0x04, 0x04, 0x0C, 0xF8, 0xF0, /*0x00,*/ 0x0F, 0x0F, 0x08, 0x08, 0x0C, 0x07, 0x03}, // 'D'
|
||||||
{0xFC, 0xFC, 0x44, 0x44, 0x44, 0x04, 0x04, /*0x00,*/ 0x0F, 0x0F, 0x08, 0x08, 0x08, 0x08, 0x08}, // 'E'
|
// {0xFC, 0xFC, 0x44, 0x44, 0x44, 0x04, 0x04, /*0x00,*/ 0x0F, 0x0F, 0x08, 0x08, 0x08, 0x08, 0x08}, // 'E'
|
||||||
{0xFC, 0xFC, 0x44, 0x44, 0x44, 0x04, 0x04, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00}, // 'F'
|
// {0xFC, 0xFC, 0x44, 0x44, 0x44, 0x04, 0x04, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00}, // 'F'
|
||||||
{0xF8, 0xFC, 0x04, 0x84, 0x84, 0x9C, 0x98, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'G'
|
// {0xF8, 0xFC, 0x04, 0x84, 0x84, 0x9C, 0x98, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'G'
|
||||||
{0xFC, 0xFC, 0x40, 0x40, 0x40, 0xFC, 0xFC, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F}, // 'H'
|
// {0xFC, 0xFC, 0x40, 0x40, 0x40, 0xFC, 0xFC, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F}, // 'H'
|
||||||
{0x00, 0x00, 0x04, 0xFC, 0xFC, 0x04, 0x00, /*0x00,*/ 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00}, // 'I'
|
// {0x00, 0x00, 0x04, 0xFC, 0xFC, 0x04, 0x00, /*0x00,*/ 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00}, // 'I'
|
||||||
{0x00, 0x00, 0x00, 0x04, 0xFC, 0xFC, 0x04, /*0x00,*/ 0x06, 0x0E, 0x08, 0x08, 0x0F, 0x07, 0x00}, // 'J'
|
// {0x00, 0x00, 0x00, 0x04, 0xFC, 0xFC, 0x04, /*0x00,*/ 0x06, 0x0E, 0x08, 0x08, 0x0F, 0x07, 0x00}, // 'J'
|
||||||
{0xFC, 0xFC, 0xE0, 0x30, 0x18, 0x0C, 0x04, /*0x00,*/ 0x0F, 0x0F, 0x01, 0x03, 0x06, 0x0C, 0x08}, // 'K'
|
// {0xFC, 0xFC, 0xE0, 0x30, 0x18, 0x0C, 0x04, /*0x00,*/ 0x0F, 0x0F, 0x01, 0x03, 0x06, 0x0C, 0x08}, // 'K'
|
||||||
{0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x0F, 0x0F, 0x08, 0x08, 0x08, 0x08, 0x08}, // 'L'
|
// {0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x0F, 0x0F, 0x08, 0x08, 0x08, 0x08, 0x08}, // 'L'
|
||||||
{0xFC, 0xFC, 0x18, 0x70, 0x18, 0xFC, 0xFC, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F}, // 'M'
|
// {0xFC, 0xFC, 0x18, 0x70, 0x18, 0xFC, 0xFC, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F}, // 'M'
|
||||||
{0xFC, 0xFC, 0x60, 0xC0, 0x80, 0xFC, 0xFC, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x01, 0x0F, 0x0F}, // 'N'
|
// {0xFC, 0xFC, 0x60, 0xC0, 0x80, 0xFC, 0xFC, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x01, 0x0F, 0x0F}, // 'N'
|
||||||
{0xF8, 0xFC, 0x04, 0x04, 0x04, 0xFC, 0xF8, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'O'
|
// {0xF8, 0xFC, 0x04, 0x04, 0x04, 0xFC, 0xF8, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'O'
|
||||||
{0xFC, 0xFC, 0x84, 0x84, 0x84, 0xFC, 0x78, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00}, // 'P'
|
// {0xFC, 0xFC, 0x84, 0x84, 0x84, 0xFC, 0x78, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00}, // 'P'
|
||||||
{0xF8, 0xFC, 0x04, 0x04, 0x04, 0xFC, 0xF8, /*0x00,*/ 0x07, 0x0F, 0x08, 0x0C, 0x0C, 0x1F, 0x17}, // 'Q'
|
// {0xF8, 0xFC, 0x04, 0x04, 0x04, 0xFC, 0xF8, /*0x00,*/ 0x07, 0x0F, 0x08, 0x0C, 0x0C, 0x1F, 0x17}, // 'Q'
|
||||||
{0xFC, 0xFC, 0x84, 0x84, 0x84, 0xFC, 0x78, /*0x00,*/ 0x0F, 0x0F, 0x01, 0x03, 0x06, 0x0C, 0x08}, // 'R'
|
// {0xFC, 0xFC, 0x84, 0x84, 0x84, 0xFC, 0x78, /*0x00,*/ 0x0F, 0x0F, 0x01, 0x03, 0x06, 0x0C, 0x08}, // 'R'
|
||||||
{0x38, 0x7C, 0x44, 0x44, 0x44, 0xCC, 0x88, /*0x00,*/ 0x06, 0x0E, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'S'
|
// {0x38, 0x7C, 0x44, 0x44, 0x44, 0xCC, 0x88, /*0x00,*/ 0x06, 0x0E, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'S'
|
||||||
{0x00, 0x04, 0x04, 0xFC, 0xFC, 0x04, 0x04, /*0x00,*/ 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00}, // 'T'
|
// {0x00, 0x04, 0x04, 0xFC, 0xFC, 0x04, 0x04, /*0x00,*/ 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00}, // 'T'
|
||||||
{0xFC, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0xFC, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'U'
|
// {0xFC, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0xFC, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'U'
|
||||||
{0x7C, 0xFC, 0x80, 0x00, 0x80, 0xFC, 0x7C, /*0x00,*/ 0x00, 0x03, 0x0F, 0x0C, 0x0F, 0x03, 0x00}, // 'V'
|
// {0x7C, 0xFC, 0x80, 0x00, 0x80, 0xFC, 0x7C, /*0x00,*/ 0x00, 0x03, 0x0F, 0x0C, 0x0F, 0x03, 0x00}, // 'V'
|
||||||
{0xFC, 0xFC, 0x00, 0x80, 0x00, 0xFC, 0xFC, /*0x00,*/ 0x0F, 0x0F, 0x06, 0x03, 0x06, 0x0F, 0x0F}, // 'W'
|
// {0xFC, 0xFC, 0x00, 0x80, 0x00, 0xFC, 0xFC, /*0x00,*/ 0x0F, 0x0F, 0x06, 0x03, 0x06, 0x0F, 0x0F}, // 'W'
|
||||||
{0x0C, 0x3C, 0xF0, 0xC0, 0xF0, 0x3C, 0x0C, /*0x00,*/ 0x0C, 0x0F, 0x03, 0x00, 0x03, 0x0F, 0x0C}, // 'X'
|
// {0x0C, 0x3C, 0xF0, 0xC0, 0xF0, 0x3C, 0x0C, /*0x00,*/ 0x0C, 0x0F, 0x03, 0x00, 0x03, 0x0F, 0x0C}, // 'X'
|
||||||
{0x00, 0x3C, 0x7C, 0xC0, 0xC0, 0x7C, 0x3C, /*0x00,*/ 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00}, // 'Y'
|
// {0x00, 0x3C, 0x7C, 0xC0, 0xC0, 0x7C, 0x3C, /*0x00,*/ 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00}, // 'Y'
|
||||||
{0x04, 0x04, 0x84, 0xC4, 0x64, 0x3C, 0x1C, /*0x00,*/ 0x0E, 0x0F, 0x09, 0x08, 0x08, 0x08, 0x08}, // 'Z'
|
// {0x04, 0x04, 0x84, 0xC4, 0x64, 0x3C, 0x1C, /*0x00,*/ 0x0E, 0x0F, 0x09, 0x08, 0x08, 0x08, 0x08}, // 'Z'
|
||||||
{0x00, 0x00, 0xFC, 0xFC, 0x04, 0x04, 0x00, /*0x00,*/ 0x00, 0x00, 0x0F, 0x0F, 0x08, 0x08, 0x00}, // '['
|
// {0x00, 0x00, 0xFC, 0xFC, 0x04, 0x04, 0x00, /*0x00,*/ 0x00, 0x00, 0x0F, 0x0F, 0x08, 0x08, 0x00}, // '['
|
||||||
{0x38, 0x70, 0xE0, 0xC0, 0x80, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0E}, // '"\'
|
// {0x38, 0x70, 0xE0, 0xC0, 0x80, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0E}, // '"\'
|
||||||
{0x00, 0x00, 0x04, 0x04, 0xFC, 0xFC, 0x00, /*0x00,*/ 0x00, 0x00, 0x08, 0x08, 0x0F, 0x0F, 0x00}, // ']'
|
// {0x00, 0x00, 0x04, 0x04, 0xFC, 0xFC, 0x00, /*0x00,*/ 0x00, 0x00, 0x08, 0x08, 0x0F, 0x0F, 0x00}, // ']'
|
||||||
{0x08, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x08, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '^'
|
// {0x08, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x08, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '^'
|
||||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}, // '_'
|
// {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}, // '_'
|
||||||
{0x00, 0x00, 0x03, 0x07, 0x04, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '`'
|
// {0x00, 0x00, 0x03, 0x07, 0x04, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '`'
|
||||||
{0x00, 0xA0, 0xA0, 0xA0, 0xA0, 0xE0, 0xC0, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x0F}, // 'a'
|
// {0x00, 0xA0, 0xA0, 0xA0, 0xA0, 0xE0, 0xC0, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x0F}, // 'a'
|
||||||
{0xFC, 0xFC, 0x20, 0x20, 0x20, 0xE0, 0xC0, /*0x00,*/ 0x0F, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'b'
|
// {0xFC, 0xFC, 0x20, 0x20, 0x20, 0xE0, 0xC0, /*0x00,*/ 0x0F, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'b'
|
||||||
{0xC0, 0xE0, 0x20, 0x20, 0x20, 0x60, 0x40, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0C, 0x04}, // 'c'
|
// {0xC0, 0xE0, 0x20, 0x20, 0x20, 0x60, 0x40, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0C, 0x04}, // 'c'
|
||||||
{0xC0, 0xE0, 0x20, 0x20, 0x20, 0xFC, 0xFC, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x0F}, // 'd'
|
// {0xC0, 0xE0, 0x20, 0x20, 0x20, 0xFC, 0xFC, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x0F}, // 'd'
|
||||||
{0xC0, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0xC0, /*0x00,*/ 0x07, 0x0F, 0x09, 0x09, 0x09, 0x09, 0x01}, // 'e'
|
// {0xC0, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0xC0, /*0x00,*/ 0x07, 0x0F, 0x09, 0x09, 0x09, 0x09, 0x01}, // 'e'
|
||||||
{0x20, 0x20, 0xF8, 0xFC, 0x24, 0x24, 0x04, /*0x00,*/ 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00}, // 'f'
|
// {0x20, 0x20, 0xF8, 0xFC, 0x24, 0x24, 0x04, /*0x00,*/ 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00}, // 'f'
|
||||||
{0xC0, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0xE0, /*0x00,*/ 0x07, 0x4F, 0x48, 0x48, 0x48, 0x7F, 0x3F}, // 'g'
|
// {0xC0, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0xE0, /*0x00,*/ 0x07, 0x4F, 0x48, 0x48, 0x48, 0x7F, 0x3F}, // 'g'
|
||||||
{0xFC, 0xFC, 0x20, 0x20, 0x20, 0xE0, 0xC0, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F}, // 'h'
|
// {0xFC, 0xFC, 0x20, 0x20, 0x20, 0xE0, 0xC0, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F}, // 'h'
|
||||||
{0x00, 0x00, 0x20, 0xEC, 0xEC, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00}, // 'i'
|
// {0x00, 0x00, 0x20, 0xEC, 0xEC, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00}, // 'i'
|
||||||
{0x00, 0x00, 0x00, 0x00, 0x20, 0xEC, 0xEC, /*0x00,*/ 0x00, 0x30, 0x70, 0x40, 0x40, 0x7F, 0x3F}, // 'j'
|
// {0x00, 0x00, 0x00, 0x00, 0x20, 0xEC, 0xEC, /*0x00,*/ 0x00, 0x30, 0x70, 0x40, 0x40, 0x7F, 0x3F}, // 'j'
|
||||||
{0xFC, 0xFC, 0x00, 0x80, 0xC0, 0x60, 0x20, /*0x00,*/ 0x0F, 0x0F, 0x01, 0x03, 0x06, 0x0C, 0x08}, // 'k'
|
// {0xFC, 0xFC, 0x00, 0x80, 0xC0, 0x60, 0x20, /*0x00,*/ 0x0F, 0x0F, 0x01, 0x03, 0x06, 0x0C, 0x08}, // 'k'
|
||||||
{0x00, 0x00, 0x04, 0xFC, 0xFC, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00}, // 'l'
|
// {0x00, 0x00, 0x04, 0xFC, 0xFC, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00}, // 'l'
|
||||||
{0xE0, 0xE0, 0x20, 0xE0, 0x20, 0xE0, 0xC0, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x0F}, // 'm'
|
// {0xE0, 0xE0, 0x20, 0xE0, 0x20, 0xE0, 0xC0, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x0F}, // 'm'
|
||||||
{0xE0, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0xC0, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F}, // 'n'
|
// {0xE0, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0xC0, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F}, // 'n'
|
||||||
{0xC0, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0xC0, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'o'
|
// {0xC0, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0xC0, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'o'
|
||||||
{0xE0, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0xC0, /*0x00,*/ 0x7F, 0x7F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'p'
|
// {0xE0, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0xC0, /*0x00,*/ 0x7F, 0x7F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // 'p'
|
||||||
{0xC0, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0xE0, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x7F, 0x7F}, // 'q'
|
// {0xC0, 0xE0, 0x20, 0x20, 0x20, 0xE0, 0xE0, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x7F, 0x7F}, // 'q'
|
||||||
{0xE0, 0xE0, 0x60, 0x20, 0x20, 0x20, 0x20, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00}, // 'r'
|
// {0xE0, 0xE0, 0x60, 0x20, 0x20, 0x20, 0x20, /*0x00,*/ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00}, // 'r'
|
||||||
{0xC0, 0xE0, 0x20, 0x20, 0x20, 0x20, 0x20, /*0x00,*/ 0x08, 0x09, 0x09, 0x09, 0x09, 0x0F, 0x06}, // 's'
|
// {0xC0, 0xE0, 0x20, 0x20, 0x20, 0x20, 0x20, /*0x00,*/ 0x08, 0x09, 0x09, 0x09, 0x09, 0x0F, 0x06}, // 's'
|
||||||
{0x20, 0x20, 0xFC, 0xFC, 0x20, 0x20, 0x00, /*0x00,*/ 0x00, 0x00, 0x07, 0x0F, 0x08, 0x08, 0x08}, // 't'
|
// {0x20, 0x20, 0xFC, 0xFC, 0x20, 0x20, 0x00, /*0x00,*/ 0x00, 0x00, 0x07, 0x0F, 0x08, 0x08, 0x08}, // 't'
|
||||||
{0xE0, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0xE0, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x0F}, // 'u'
|
// {0xE0, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0xE0, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x0F}, // 'u'
|
||||||
{0xE0, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0xE0, /*0x00,*/ 0x00, 0x03, 0x0F, 0x0C, 0x0F, 0x03, 0x00}, // 'v'
|
// {0xE0, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0xE0, /*0x00,*/ 0x00, 0x03, 0x0F, 0x0C, 0x0F, 0x03, 0x00}, // 'v'
|
||||||
{0xE0, 0xE0, 0x00, 0x80, 0x00, 0xE0, 0xE0, /*0x00,*/ 0x07, 0x0F, 0x08, 0x0F, 0x08, 0x0F, 0x07}, // 'w'
|
// {0xE0, 0xE0, 0x00, 0x80, 0x00, 0xE0, 0xE0, /*0x00,*/ 0x07, 0x0F, 0x08, 0x0F, 0x08, 0x0F, 0x07}, // 'w'
|
||||||
{0x60, 0xE0, 0x80, 0x00, 0x80, 0xE0, 0x60, /*0x00,*/ 0x0C, 0x0E, 0x03, 0x01, 0x03, 0x0E, 0x0C}, // 'x'
|
// {0x60, 0xE0, 0x80, 0x00, 0x80, 0xE0, 0x60, /*0x00,*/ 0x0C, 0x0E, 0x03, 0x01, 0x03, 0x0E, 0x0C}, // 'x'
|
||||||
{0xE0, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0xE0, /*0x00,*/ 0x07, 0x4F, 0x48, 0x48, 0x48, 0x7F, 0x3F}, // 'y'
|
// {0xE0, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0xE0, /*0x00,*/ 0x07, 0x4F, 0x48, 0x48, 0x48, 0x7F, 0x3F}, // 'y'
|
||||||
{0x20, 0x20, 0x20, 0xA0, 0xE0, 0x60, 0x20, /*0x00,*/ 0x0C, 0x0E, 0x0B, 0x09, 0x08, 0x08, 0x08}, // 'z'
|
// {0x20, 0x20, 0x20, 0xA0, 0xE0, 0x60, 0x20, /*0x00,*/ 0x0C, 0x0E, 0x0B, 0x09, 0x08, 0x08, 0x08}, // 'z'
|
||||||
{0x00, 0x00, 0x40, 0xF8, 0xBC, 0x04, 0x04, /*0x00,*/ 0x00, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x08}, // '{'
|
// {0x00, 0x00, 0x40, 0xF8, 0xBC, 0x04, 0x04, /*0x00,*/ 0x00, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x08}, // '{'
|
||||||
{0x00, 0x00, 0x00, 0xBC, 0xBC, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00}, // '|'
|
// {0x00, 0x00, 0x00, 0xBC, 0xBC, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00}, // '|'
|
||||||
{0x00, 0x04, 0x04, 0xBC, 0xF8, 0x40, 0x00, /*0x00,*/ 0x00, 0x08, 0x08, 0x0F, 0x07, 0x00, 0x00}, // '}'
|
// {0x00, 0x04, 0x04, 0xBC, 0xF8, 0x40, 0x00, /*0x00,*/ 0x00, 0x08, 0x08, 0x0F, 0x07, 0x00, 0x00}, // '}'
|
||||||
{0x08, 0x0C, 0x04, 0x0C, 0x08, 0x0C, 0x04, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // '->'
|
// {0x08, 0x0C, 0x04, 0x0C, 0x08, 0x0C, 0x04, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // '->'
|
||||||
#endif
|
//#endif
|
||||||
};
|
//};
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
// original font
|
// original font
|
||||||
@@ -252,20 +252,20 @@ const uint8_t gFontBig[95 - 1][16 - 2] =
|
|||||||
#else
|
#else
|
||||||
// Terminus font
|
// Terminus font
|
||||||
|
|
||||||
const uint8_t gFontBigDigits[11][26 - 6] =
|
// const uint8_t gFontBigDigits[11][26 - 6] =
|
||||||
{
|
// {
|
||||||
{/*0x00, 0x00,*/ 0xFC, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x06, 0xFE, 0xFE, 0xFC, /*0x00,*/ /*0x00, 0x00,*/ 0x3F, 0x7F, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x7F, 0x7F, 0x3F, /*0x00*/},
|
// {/*0x00, 0x00,*/ 0xFC, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x06, 0xFE, 0xFE, 0xFC, /*0x00,*/ /*0x00, 0x00,*/ 0x3F, 0x7F, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x7F, 0x7F, 0x3F, /*0x00*/},
|
||||||
{/*0x00, 0x00,*/ 0x00, 0x00, 0x18, 0x1C, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, /*0x00,*/ /*0x00, 0x00,*/ 0x00, 0x00, 0x60, 0x60, 0x7F, 0x7F, 0x7F, 0x60, 0x60, 0x00, /*0x00*/},
|
// {/*0x00, 0x00,*/ 0x00, 0x00, 0x18, 0x1C, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, /*0x00,*/ /*0x00, 0x00,*/ 0x00, 0x00, 0x60, 0x60, 0x7F, 0x7F, 0x7F, 0x60, 0x60, 0x00, /*0x00*/},
|
||||||
{/*0x00, 0x00,*/ 0x1C, 0x1E, 0x1E, 0x06, 0x06, 0x06, 0x86, 0xFE, 0xFE, 0x7C, /*0x00,*/ /*0x00, 0x00,*/ 0x60, 0x70, 0x78, 0x7C, 0x6E, 0x67, 0x63, 0x61, 0x60, 0x60, /*0x00*/},
|
// {/*0x00, 0x00,*/ 0x1C, 0x1E, 0x1E, 0x06, 0x06, 0x06, 0x86, 0xFE, 0xFE, 0x7C, /*0x00,*/ /*0x00, 0x00,*/ 0x60, 0x70, 0x78, 0x7C, 0x6E, 0x67, 0x63, 0x61, 0x60, 0x60, /*0x00*/},
|
||||||
{/*0x00, 0x00,*/ 0x0C, 0x0E, 0x0E, 0x86, 0x86, 0x86, 0x86, 0xFE, 0xFE, 0x7C, /*0x00,*/ /*0x00, 0x00,*/ 0x30, 0x70, 0x70, 0x61, 0x61, 0x61, 0x61, 0x7F, 0x7F, 0x3E, /*0x00*/},
|
// {/*0x00, 0x00,*/ 0x0C, 0x0E, 0x0E, 0x86, 0x86, 0x86, 0x86, 0xFE, 0xFE, 0x7C, /*0x00,*/ /*0x00, 0x00,*/ 0x30, 0x70, 0x70, 0x61, 0x61, 0x61, 0x61, 0x7F, 0x7F, 0x3E, /*0x00*/},
|
||||||
{/*0x00, 0x00,*/ 0x80, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0xFE, 0xFE, 0xFE, /*0x00,*/ /*0x00, 0x00,*/ 0x0F, 0x0F, 0x0F, 0x0C, 0x0C, 0x0C, 0x0C, 0x7F, 0x7F, 0x7F, /*0x00*/},
|
// {/*0x00, 0x00,*/ 0x80, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0xFE, 0xFE, 0xFE, /*0x00,*/ /*0x00, 0x00,*/ 0x0F, 0x0F, 0x0F, 0x0C, 0x0C, 0x0C, 0x0C, 0x7F, 0x7F, 0x7F, /*0x00*/},
|
||||||
{/*0x00, 0x00,*/ 0xFE, 0xFE, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x86, /*0x00,*/ /*0x00, 0x00,*/ 0x30, 0x70, 0x70, 0x60, 0x60, 0x60, 0x60, 0x7F, 0x7F, 0x3F, /*0x00*/},
|
// {/*0x00, 0x00,*/ 0xFE, 0xFE, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x86, /*0x00,*/ /*0x00, 0x00,*/ 0x30, 0x70, 0x70, 0x60, 0x60, 0x60, 0x60, 0x7F, 0x7F, 0x3F, /*0x00*/},
|
||||||
{/*0x00, 0x00,*/ 0xF8, 0xFC, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x80, /*0x00,*/ /*0x00, 0x00,*/ 0x3F, 0x7F, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x7F, 0x7F, 0x3F, /*0x00*/},
|
// {/*0x00, 0x00,*/ 0xF8, 0xFC, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x80, /*0x00,*/ /*0x00, 0x00,*/ 0x3F, 0x7F, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x7F, 0x7F, 0x3F, /*0x00*/},
|
||||||
{/*0x00, 0x00,*/ 0x0E, 0x0E, 0x0E, 0x06, 0x06, 0x86, 0xE6, 0xFE, 0x7E, 0x1E, /*0x00,*/ /*0x00, 0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7F, 0x7F, 0x03, 0x00, 0x00, /*0x00*/},
|
// {/*0x00, 0x00,*/ 0x0E, 0x0E, 0x0E, 0x06, 0x06, 0x86, 0xE6, 0xFE, 0x7E, 0x1E, /*0x00,*/ /*0x00, 0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7F, 0x7F, 0x03, 0x00, 0x00, /*0x00*/},
|
||||||
{/*0x00, 0x00,*/ 0x7C, 0xFE, 0xFE, 0x86, 0x86, 0x86, 0x86, 0xFE, 0xFE, 0x7C, /*0x00,*/ /*0x00, 0x00,*/ 0x3F, 0x7F, 0x7F, 0x61, 0x61, 0x61, 0x61, 0x7F, 0x7F, 0x3F, /*0x00*/},
|
// {/*0x00, 0x00,*/ 0x7C, 0xFE, 0xFE, 0x86, 0x86, 0x86, 0x86, 0xFE, 0xFE, 0x7C, /*0x00,*/ /*0x00, 0x00,*/ 0x3F, 0x7F, 0x7F, 0x61, 0x61, 0x61, 0x61, 0x7F, 0x7F, 0x3F, /*0x00*/},
|
||||||
{/*0x00, 0x00,*/ 0xFC, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x06, 0xFE, 0xFE, 0xFC, /*0x00,*/ /*0x00, 0x00,*/ 0x01, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x7F, 0x3F, 0x1F, /*0x00*/},
|
// {/*0x00, 0x00,*/ 0xFC, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x06, 0xFE, 0xFE, 0xFC, /*0x00,*/ /*0x00, 0x00,*/ 0x01, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x7F, 0x3F, 0x1F, /*0x00*/},
|
||||||
{/*0x00, 0x00,*/ 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, /*0x00,*/ /*0x00, 0x00,*/ 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, /*0x00*/}
|
// {/*0x00, 0x00,*/ 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, /*0x00,*/ /*0x00, 0x00,*/ 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, /*0x00*/}
|
||||||
};
|
// };
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
const uint8_t gFontSmallDigits[11][7] =
|
const uint8_t gFontSmallDigits[11][7] =
|
||||||
|
|||||||
+35
-35
@@ -183,7 +183,7 @@ int32_t TX_freq_check(const uint32_t Frequency)
|
|||||||
#ifndef ENABLE_FEAT_F4HWN
|
#ifndef ENABLE_FEAT_F4HWN
|
||||||
if (gSetting_350TX && gSetting_350EN)
|
if (gSetting_350TX && gSetting_350EN)
|
||||||
#else
|
#else
|
||||||
if (gSetting_350EN)
|
if (gSetting_350EN)
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
if (Frequency >= frequencyBandTable[BAND6_400MHz].lower && Frequency < frequencyBandTable[BAND6_400MHz].upper)
|
if (Frequency >= frequencyBandTable[BAND6_400MHz].lower && Frequency < frequencyBandTable[BAND6_400MHz].upper)
|
||||||
@@ -195,40 +195,40 @@ int32_t TX_freq_check(const uint32_t Frequency)
|
|||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F_LOCK_FCC:
|
// case F_LOCK_FCC:
|
||||||
if (Frequency >= 14400000 && Frequency < 14800000)
|
// if (Frequency >= 14400000 && Frequency < 14800000)
|
||||||
return 0;
|
// return 0;
|
||||||
if (Frequency >= 42000000 && Frequency < 45000000)
|
// if (Frequency >= 42000000 && Frequency < 45000000)
|
||||||
return 0;
|
// return 0;
|
||||||
break;
|
// break;
|
||||||
|
//
|
||||||
case F_LOCK_CE:
|
// case F_LOCK_CE:
|
||||||
if (Frequency >= 14400000 && Frequency < 14600000)
|
// if (Frequency >= 14400000 && Frequency < 14600000)
|
||||||
return 0;
|
// return 0;
|
||||||
if (Frequency >= 43000000 && Frequency < 44000000)
|
// if (Frequency >= 43000000 && Frequency < 44000000)
|
||||||
return 0;
|
// return 0;
|
||||||
break;
|
// break;
|
||||||
|
//
|
||||||
case F_LOCK_GB:
|
// case F_LOCK_GB:
|
||||||
if (Frequency >= 14400000 && Frequency < 14800000)
|
// if (Frequency >= 14400000 && Frequency < 14800000)
|
||||||
return 0;
|
// return 0;
|
||||||
if (Frequency >= 43000000 && Frequency < 44000000)
|
// if (Frequency >= 43000000 && Frequency < 44000000)
|
||||||
return 0;
|
// return 0;
|
||||||
break;
|
// break;
|
||||||
|
//
|
||||||
case F_LOCK_430:
|
// case F_LOCK_430:
|
||||||
if (Frequency >= frequencyBandTable[BAND3_137MHz].lower && Frequency < 17400000)
|
// if (Frequency >= frequencyBandTable[BAND3_137MHz].lower && Frequency < 17400000)
|
||||||
return 0;
|
// return 0;
|
||||||
if (Frequency >= 40000000 && Frequency < 43000000)
|
// if (Frequency >= 40000000 && Frequency < 43000000)
|
||||||
return 0;
|
// return 0;
|
||||||
break;
|
// break;
|
||||||
|
//
|
||||||
case F_LOCK_438:
|
// case F_LOCK_438:
|
||||||
if (Frequency >= frequencyBandTable[BAND3_137MHz].lower && Frequency < 17400000)
|
// if (Frequency >= frequencyBandTable[BAND3_137MHz].lower && Frequency < 17400000)
|
||||||
return 0;
|
// return 0;
|
||||||
if (Frequency >= 40000000 && Frequency < 43800000)
|
// if (Frequency >= 40000000 && Frequency < 43800000)
|
||||||
return 0;
|
// return 0;
|
||||||
break;
|
// break;
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN_PMR
|
#ifdef ENABLE_FEAT_F4HWN_PMR
|
||||||
case F_LOCK_PMR:
|
case F_LOCK_PMR:
|
||||||
|
|||||||
+53
-51
@@ -17,16 +17,24 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "app/dtmf.h"
|
#include "app/dtmf.h"
|
||||||
|
|
||||||
#if defined(ENABLE_FMRADIO)
|
#if defined(ENABLE_FMRADIO)
|
||||||
#include "app/fm.h"
|
|
||||||
|
#include "app/fm.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
#include "bsp/dp32g030/gpio.h"
|
#include "bsp/dp32g030/gpio.h"
|
||||||
#include "dcs.h"
|
#include "dcs.h"
|
||||||
#include "driver/backlight.h"
|
#include "driver/backlight.h"
|
||||||
|
|
||||||
#if defined(ENABLE_FMRADIO)
|
#if defined(ENABLE_FMRADIO)
|
||||||
#include "driver/bk1080.h"
|
|
||||||
|
#include "driver/bk1080.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "driver/bk4819.h"
|
#include "driver/bk4819.h"
|
||||||
#include "driver/gpio.h"
|
#include "driver/gpio.h"
|
||||||
#include "driver/system.h"
|
#include "driver/system.h"
|
||||||
@@ -39,36 +47,36 @@
|
|||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "ui/status.h"
|
#include "ui/status.h"
|
||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
|
#include "app/app.h"
|
||||||
|
|
||||||
|
|
||||||
FUNCTION_Type_t gCurrentFunction;
|
FUNCTION_Type_t gCurrentFunction;
|
||||||
|
|
||||||
bool FUNCTION_IsRx()
|
bool FUNCTION_IsRx() {
|
||||||
{
|
|
||||||
return gCurrentFunction == FUNCTION_MONITOR ||
|
return gCurrentFunction == FUNCTION_MONITOR ||
|
||||||
gCurrentFunction == FUNCTION_INCOMING ||
|
gCurrentFunction == FUNCTION_INCOMING ||
|
||||||
gCurrentFunction == FUNCTION_RECEIVE;
|
gCurrentFunction == FUNCTION_RECEIVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FUNCTION_Init(void)
|
void FUNCTION_Init(void) {
|
||||||
{
|
|
||||||
g_CxCSS_TAIL_Found = false;
|
g_CxCSS_TAIL_Found = false;
|
||||||
g_CDCSS_Lost = false;
|
g_CDCSS_Lost = false;
|
||||||
g_CTCSS_Lost = false;
|
g_CTCSS_Lost = false;
|
||||||
|
|
||||||
g_SquelchLost = false;
|
g_SquelchLost = false;
|
||||||
|
|
||||||
gFlagTailNoteEliminationComplete = false;
|
gFlagTailNoteEliminationComplete = false;
|
||||||
gTailNoteEliminationCountdown_10ms = 0;
|
gTailNoteEliminationCountdown_10ms = 0;
|
||||||
gFoundCTCSS = false;
|
gFoundCTCSS = false;
|
||||||
gFoundCDCSS = false;
|
gFoundCDCSS = false;
|
||||||
gFoundCTCSSCountdown_10ms = 0;
|
gFoundCTCSSCountdown_10ms = 0;
|
||||||
gFoundCDCSSCountdown_10ms = 0;
|
gFoundCDCSSCountdown_10ms = 0;
|
||||||
gEndOfRxDetectedMaybe = false;
|
gEndOfRxDetectedMaybe = false;
|
||||||
|
|
||||||
gCurrentCodeType = (gRxVfo->Modulation != MODULATION_FM) ? CODE_TYPE_OFF : gRxVfo->pRX->CodeType;
|
gCurrentCodeType = (gRxVfo->Modulation != MODULATION_FM) ? CODE_TYPE_OFF : gRxVfo->pRX->CodeType;
|
||||||
|
|
||||||
#ifdef ENABLE_VOX
|
#ifdef ENABLE_VOX
|
||||||
g_VOX_Lost = false;
|
g_VOX_Lost = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
@@ -86,8 +94,7 @@ void FUNCTION_Init(void)
|
|||||||
gUpdateStatus = true;
|
gUpdateStatus = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FUNCTION_Foreground(const FUNCTION_Type_t PreviousFunction)
|
void FUNCTION_Foreground(const FUNCTION_Type_t PreviousFunction) {
|
||||||
{
|
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
if (gDTMF_ReplyState != DTMF_REPLY_NONE)
|
if (gDTMF_ReplyState != DTMF_REPLY_NONE)
|
||||||
RADIO_PrepareCssTX();
|
RADIO_PrepareCssTX();
|
||||||
@@ -109,8 +116,7 @@ void FUNCTION_Foreground(const FUNCTION_Type_t PreviousFunction)
|
|||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
if (gDTMF_CallState == DTMF_CALL_STATE_CALL_OUT ||
|
if (gDTMF_CallState == DTMF_CALL_STATE_CALL_OUT ||
|
||||||
gDTMF_CallState == DTMF_CALL_STATE_RECEIVED ||
|
gDTMF_CallState == DTMF_CALL_STATE_RECEIVED ||
|
||||||
gDTMF_CallState == DTMF_CALL_STATE_RECEIVED_STAY)
|
gDTMF_CallState == DTMF_CALL_STATE_RECEIVED_STAY) {
|
||||||
{
|
|
||||||
gDTMF_auto_reset_time_500ms = gEeprom.DTMF_auto_reset_time * 2;
|
gDTMF_auto_reset_time_500ms = gEeprom.DTMF_auto_reset_time * 2;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -118,18 +124,15 @@ void FUNCTION_Foreground(const FUNCTION_Type_t PreviousFunction)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FUNCTION_PowerSave() {
|
void FUNCTION_PowerSave() {
|
||||||
#ifdef ENABLE_FEAT_F4HWN_SLEEP
|
#ifdef ENABLE_FEAT_F4HWN_SLEEP
|
||||||
if(gWakeUp)
|
if (gWakeUp) {
|
||||||
{
|
gPowerSave_10ms = gEeprom.BATTERY_SAVE * 200; // deep sleep now indexed on BatSav
|
||||||
gPowerSave_10ms = gEeprom.BATTERY_SAVE * 200; // deep sleep now indexed on BatSav
|
} else {
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gPowerSave_10ms = gEeprom.BATTERY_SAVE * 10;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
gPowerSave_10ms = gEeprom.BATTERY_SAVE * 10;
|
gPowerSave_10ms = gEeprom.BATTERY_SAVE * 10;
|
||||||
#endif
|
}
|
||||||
|
#else
|
||||||
|
gPowerSave_10ms = gEeprom.BATTERY_SAVE * 10;
|
||||||
|
#endif
|
||||||
gPowerSaveCountdownExpired = false;
|
gPowerSaveCountdownExpired = false;
|
||||||
|
|
||||||
gRxIdleMode = true;
|
gRxIdleMode = true;
|
||||||
@@ -147,9 +150,11 @@ void FUNCTION_PowerSave() {
|
|||||||
GUI_SelectNextDisplay(DISPLAY_MAIN);
|
GUI_SelectNextDisplay(DISPLAY_MAIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FUNCTION_Transmit()
|
void FUNCTION_Transmit() {
|
||||||
{
|
|
||||||
// if DTMF is enabled when TX'ing, it changes the TX audio filtering !! .. 1of11
|
// if DTMF is enabled when TX'ing, it changes the TX audio filtering !! .. 1of11
|
||||||
|
|
||||||
|
MSG_EnableRX(false);
|
||||||
|
|
||||||
BK4819_DisableDTMF();
|
BK4819_DisableDTMF();
|
||||||
|
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
@@ -167,8 +172,7 @@ void FUNCTION_Transmit()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_ALARM
|
#ifdef ENABLE_ALARM
|
||||||
if (gAlarmState == ALARM_STATE_SITE_ALARM)
|
if (gAlarmState == ALARM_STATE_SITE_ALARM) {
|
||||||
{
|
|
||||||
GUI_DisplayScreen();
|
GUI_DisplayScreen();
|
||||||
|
|
||||||
AUDIO_AudioPathOff();
|
AUDIO_AudioPathOff();
|
||||||
@@ -205,35 +209,35 @@ void FUNCTION_Transmit()
|
|||||||
|
|
||||||
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
||||||
if (gAlarmState != ALARM_STATE_OFF) {
|
if (gAlarmState != ALARM_STATE_OFF) {
|
||||||
#ifdef ENABLE_TX1750
|
#ifdef ENABLE_TX1750
|
||||||
if (gAlarmState == ALARM_STATE_TX1750)
|
if (gAlarmState == ALARM_STATE_TX1750) {
|
||||||
BK4819_TransmitTone(true, 1750);
|
BK4819_TransmitTone(false, 1750);
|
||||||
#endif
|
gAlarmState = ALARM_STATE_OFF;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_ALARM
|
#ifdef ENABLE_ALARM
|
||||||
if (gAlarmState == ALARM_STATE_TXALARM)
|
if (gAlarmState == ALARM_STATE_TXALARM)
|
||||||
BK4819_TransmitTone(true, 500);
|
BK4819_TransmitTone(true, 500);
|
||||||
|
|
||||||
gAlarmToneCounter = 0;
|
gAlarmToneCounter = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SYSTEM_DelayMs(2);
|
SYSTEM_DelayMs(2);
|
||||||
AUDIO_AudioPathOn();
|
AUDIO_AudioPathOn();
|
||||||
gEnableSpeaker = true;
|
gEnableSpeaker = true;
|
||||||
|
BK4819_ExitTxMute();
|
||||||
|
|
||||||
gVfoConfigureMode = VFO_CONFIGURE;
|
gVfoConfigureMode = VFO_CONFIGURE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
|
||||||
BK4819_DisableScramble();
|
if (gCurrentVfo->SCRAMBLING_TYPE > 0)
|
||||||
#else
|
|
||||||
if (gCurrentVfo->SCRAMBLING_TYPE > 0 && gSetting_ScrambleEnable)
|
|
||||||
BK4819_EnableScramble(gCurrentVfo->SCRAMBLING_TYPE - 1);
|
BK4819_EnableScramble(gCurrentVfo->SCRAMBLING_TYPE - 1);
|
||||||
else
|
else
|
||||||
BK4819_DisableScramble();
|
BK4819_DisableScramble();
|
||||||
#endif
|
|
||||||
|
|
||||||
if (gSetting_backlight_on_tx_rx & BACKLIGHT_ON_TR_TX) {
|
if (gSetting_backlight_on_tx_rx & BACKLIGHT_ON_TR_TX) {
|
||||||
BACKLIGHT_TurnOn();
|
BACKLIGHT_TurnOn();
|
||||||
@@ -241,9 +245,7 @@ void FUNCTION_Transmit()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FUNCTION_Select(FUNCTION_Type_t Function) {
|
||||||
void FUNCTION_Select(FUNCTION_Type_t Function)
|
|
||||||
{
|
|
||||||
const FUNCTION_Type_t PreviousFunction = gCurrentFunction;
|
const FUNCTION_Type_t PreviousFunction = gCurrentFunction;
|
||||||
const bool bWasPowerSave = PreviousFunction == FUNCTION_POWER_SAVE;
|
const bool bWasPowerSave = PreviousFunction == FUNCTION_POWER_SAVE;
|
||||||
|
|
||||||
@@ -298,10 +300,10 @@ void FUNCTION_Select(FUNCTION_Type_t Function)
|
|||||||
}
|
}
|
||||||
|
|
||||||
gBatterySaveCountdown_10ms = battery_save_count_10ms;
|
gBatterySaveCountdown_10ms = battery_save_count_10ms;
|
||||||
gSchedulePowerSave = false;
|
gSchedulePowerSave = false;
|
||||||
|
|
||||||
#if defined(ENABLE_FMRADIO)
|
#if defined(ENABLE_FMRADIO)
|
||||||
if(Function != FUNCTION_INCOMING)
|
if (Function != FUNCTION_INCOMING)
|
||||||
gFM_RestoreCountdown_10ms = 0;
|
gFM_RestoreCountdown_10ms = 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-4
@@ -14,13 +14,13 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef FUNCTIONS_H
|
#ifndef FUNCTIONS_H
|
||||||
#define FUNCTIONS_H
|
#define FUNCTIONS_H
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
enum FUNCTION_Type_t
|
enum FUNCTION_Type_t {
|
||||||
{
|
|
||||||
FUNCTION_FOREGROUND = 0, // ???
|
FUNCTION_FOREGROUND = 0, // ???
|
||||||
FUNCTION_TRANSMIT, // transmitting
|
FUNCTION_TRANSMIT, // transmitting
|
||||||
FUNCTION_MONITOR, // receiving with squelch forced open
|
FUNCTION_MONITOR, // receiving with squelch forced open
|
||||||
@@ -32,11 +32,12 @@ enum FUNCTION_Type_t
|
|||||||
};
|
};
|
||||||
|
|
||||||
typedef enum FUNCTION_Type_t FUNCTION_Type_t;
|
typedef enum FUNCTION_Type_t FUNCTION_Type_t;
|
||||||
|
extern FUNCTION_Type_t gCurrentFunction;
|
||||||
extern FUNCTION_Type_t gCurrentFunction;
|
|
||||||
|
|
||||||
void FUNCTION_Init(void);
|
void FUNCTION_Init(void);
|
||||||
|
|
||||||
void FUNCTION_Select(FUNCTION_Type_t Function);
|
void FUNCTION_Select(FUNCTION_Type_t Function);
|
||||||
|
|
||||||
bool FUNCTION_IsRx();
|
bool FUNCTION_IsRx();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -137,10 +137,6 @@ void BATTERY_GetReadings(const bool bDisplayBatteryLevel)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ((gScreenToDisplay == DISPLAY_MENU) && UI_MENU_GetCurrentMenuId() == MENU_VOL)
|
|
||||||
gUpdateDisplay = true;
|
|
||||||
|
|
||||||
if (gBatteryCurrent < 501)
|
if (gBatteryCurrent < 501)
|
||||||
{
|
{
|
||||||
if (gChargingWithTypeC)
|
if (gChargingWithTypeC)
|
||||||
|
|||||||
+5
-2
@@ -74,6 +74,9 @@ void BOOT_ProcessMode(BOOT_Mode_t Mode)
|
|||||||
{
|
{
|
||||||
if (Mode == BOOT_MODE_F_LOCK)
|
if (Mode == BOOT_MODE_F_LOCK)
|
||||||
{
|
{
|
||||||
|
#ifdef ENABLE_FEAT_F4HWN_RESUME_STATE
|
||||||
|
gEeprom.CURRENT_STATE = 0; // Don't resume is active...
|
||||||
|
#endif
|
||||||
GUI_SelectNextDisplay(DISPLAY_MENU);
|
GUI_SelectNextDisplay(DISPLAY_MENU);
|
||||||
}
|
}
|
||||||
#ifdef ENABLE_AIRCOPY
|
#ifdef ENABLE_AIRCOPY
|
||||||
@@ -111,8 +114,8 @@ void BOOT_ProcessMode(BOOT_Mode_t Mode)
|
|||||||
gEeprom.BACKLIGHT_TIME = 61;
|
gEeprom.BACKLIGHT_TIME = 61;
|
||||||
gEeprom.KEY_LOCK = 0;
|
gEeprom.KEY_LOCK = 0;
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN_RESUME_STATE
|
||||||
gEeprom.CURRENT_STATE = 0; // Don't scan if scan resume is active...
|
gEeprom.CURRENT_STATE = 0; // Don't resume is active...
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GUI_SelectNextDisplay(DISPLAY_AIRCOPY);
|
GUI_SelectNextDisplay(DISPLAY_AIRCOPY);
|
||||||
|
|||||||
@@ -19,7 +19,9 @@
|
|||||||
#include <stdio.h> // NULL
|
#include <stdio.h> // NULL
|
||||||
|
|
||||||
#ifdef ENABLE_AM_FIX
|
#ifdef ENABLE_AM_FIX
|
||||||
#include "am_fix.h"
|
|
||||||
|
#include "am_fix.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
@@ -30,14 +32,20 @@
|
|||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
#ifdef ENABLE_FMRADIO
|
#ifdef ENABLE_FMRADIO
|
||||||
#include "app/action.h"
|
|
||||||
#include "ui/ui.h"
|
#include "app/action.h"
|
||||||
#endif
|
#include "ui/ui.h"
|
||||||
#ifdef ENABLE_SPECTRUM
|
|
||||||
#include "app/spectrum.h"
|
#endif
|
||||||
#endif
|
#ifdef ENABLE_SPECTRUM
|
||||||
#include "app/chFrScanner.h"
|
|
||||||
|
#include "app/spectrum.h"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "app/chFrScanner.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "app/app.h"
|
#include "app/app.h"
|
||||||
@@ -51,8 +59,11 @@
|
|||||||
#include "driver/system.h"
|
#include "driver/system.h"
|
||||||
#include "driver/systick.h"
|
#include "driver/systick.h"
|
||||||
#include "driver/eeprom.h"
|
#include "driver/eeprom.h"
|
||||||
|
|
||||||
#ifdef ENABLE_UART
|
#ifdef ENABLE_UART
|
||||||
#include "driver/uart.h"
|
|
||||||
|
#include "driver/uart.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "helper/battery.h"
|
#include "helper/battery.h"
|
||||||
@@ -61,28 +72,27 @@
|
|||||||
#include "ui/lock.h"
|
#include "ui/lock.h"
|
||||||
#include "ui/welcome.h"
|
#include "ui/welcome.h"
|
||||||
#include "ui/menu.h"
|
#include "ui/menu.h"
|
||||||
void _putchar(__attribute__((unused)) char c)
|
|
||||||
{
|
void _putchar(__attribute__((unused)) char c) {
|
||||||
|
|
||||||
#ifdef ENABLE_UART
|
#ifdef ENABLE_UART
|
||||||
UART_Send((uint8_t *)&c, 1);
|
UART_Send((uint8_t *) &c, 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Main(void)
|
void Main(void) {
|
||||||
{
|
|
||||||
// Enable clock gating of blocks we need
|
// Enable clock gating of blocks we need
|
||||||
SYSCON_DEV_CLK_GATE = 0
|
SYSCON_DEV_CLK_GATE = 0
|
||||||
| SYSCON_DEV_CLK_GATE_GPIOA_BITS_ENABLE
|
| SYSCON_DEV_CLK_GATE_GPIOA_BITS_ENABLE
|
||||||
| SYSCON_DEV_CLK_GATE_GPIOB_BITS_ENABLE
|
| SYSCON_DEV_CLK_GATE_GPIOB_BITS_ENABLE
|
||||||
| SYSCON_DEV_CLK_GATE_GPIOC_BITS_ENABLE
|
| SYSCON_DEV_CLK_GATE_GPIOC_BITS_ENABLE
|
||||||
| SYSCON_DEV_CLK_GATE_UART1_BITS_ENABLE
|
| SYSCON_DEV_CLK_GATE_UART1_BITS_ENABLE
|
||||||
| SYSCON_DEV_CLK_GATE_SPI0_BITS_ENABLE
|
| SYSCON_DEV_CLK_GATE_SPI0_BITS_ENABLE
|
||||||
| SYSCON_DEV_CLK_GATE_SARADC_BITS_ENABLE
|
| SYSCON_DEV_CLK_GATE_SARADC_BITS_ENABLE
|
||||||
| SYSCON_DEV_CLK_GATE_CRC_BITS_ENABLE
|
| SYSCON_DEV_CLK_GATE_CRC_BITS_ENABLE
|
||||||
| SYSCON_DEV_CLK_GATE_AES_BITS_ENABLE
|
| SYSCON_DEV_CLK_GATE_AES_BITS_ENABLE
|
||||||
| SYSCON_DEV_CLK_GATE_PWM_PLUS0_BITS_ENABLE;
|
| SYSCON_DEV_CLK_GATE_PWM_PLUS0_BITS_ENABLE;
|
||||||
|
|
||||||
|
|
||||||
SYSTICK_Init();
|
SYSTICK_Init();
|
||||||
@@ -106,10 +116,10 @@ void Main(void)
|
|||||||
|
|
||||||
SETTINGS_InitEEPROM();
|
SETTINGS_InitEEPROM();
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
gDW = gEeprom.DUAL_WATCH;
|
gDW = gEeprom.DUAL_WATCH;
|
||||||
gCB = gEeprom.CROSS_BAND_RX_TX;
|
gCB = gEeprom.CROSS_BAND_RX_TX;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SETTINGS_WriteBuildOptions();
|
SETTINGS_WriteBuildOptions();
|
||||||
SETTINGS_LoadCalibration();
|
SETTINGS_LoadCalibration();
|
||||||
@@ -130,7 +140,7 @@ void Main(void)
|
|||||||
AM_fix_init();
|
AM_fix_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
BOOT_Mode_t BootMode = BOOT_GetMode();
|
BOOT_Mode_t BootMode = BOOT_GetMode();
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
||||||
if (BootMode == BOOT_MODE_RESCUE_OPS)
|
if (BootMode == BOOT_MODE_RESCUE_OPS)
|
||||||
@@ -157,33 +167,32 @@ void Main(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (BootMode == BOOT_MODE_F_LOCK)
|
if (BootMode == BOOT_MODE_F_LOCK) {
|
||||||
{
|
|
||||||
|
|
||||||
gF_LOCK = true; // flag to say include the hidden menu items
|
gF_LOCK = true; // flag to say include the hidden menu items
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
gEeprom.KEY_LOCK = 0;
|
gEeprom.KEY_LOCK = 0;
|
||||||
SETTINGS_SaveSettings();
|
SETTINGS_SaveSettings();
|
||||||
#ifndef ENABLE_VOX
|
#ifndef ENABLE_VOX
|
||||||
gMenuCursor = 67; // move to hidden section, fix me if change... !!! Remove VOX and Mic Bar
|
gMenuCursor = 67; // move to hidden section, fix me if change... !!! Remove VOX and Mic Bar
|
||||||
#else
|
#else
|
||||||
gMenuCursor = 68; // move to hidden section, fix me if change... !!!
|
gMenuCursor = 68; // move to hidden section, fix me if change... !!!
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_NOAA
|
#ifdef ENABLE_NOAA
|
||||||
gMenuCursor += 1; // move to hidden section, fix me if change... !!!
|
gMenuCursor += 1; // move to hidden section, fix me if change... !!!
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
||||||
gMenuCursor += 1; // move to hidden section, fix me if change... !!!
|
gMenuCursor += 1; // move to hidden section, fix me if change... !!!
|
||||||
#endif
|
#endif
|
||||||
gSubMenuSelection = gSetting_F_LOCK;
|
gSubMenuSelection = gSetting_F_LOCK;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// count the number of menu items
|
// count the number of menu items
|
||||||
gMenuListCount = 0;
|
gMenuListCount = 0;
|
||||||
while (MenuList[gMenuListCount].name[0] != '\0') {
|
while (MenuList[gMenuListCount].name[0] != '\0') {
|
||||||
if(!gF_LOCK && MenuList[gMenuListCount].menu_id == FIRST_HIDDEN_MENU_ITEM)
|
if (!gF_LOCK && MenuList[gMenuListCount].menu_id == FIRST_HIDDEN_MENU_ITEM)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
gMenuListCount++;
|
gMenuListCount++;
|
||||||
@@ -191,15 +200,13 @@ void Main(void)
|
|||||||
|
|
||||||
// wait for user to release all butts before moving on
|
// wait for user to release all butts before moving on
|
||||||
if (!GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) ||
|
if (!GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) ||
|
||||||
KEYBOARD_Poll() != KEY_INVALID ||
|
KEYBOARD_Poll() != KEY_INVALID ||
|
||||||
BootMode != BOOT_MODE_NORMAL)
|
BootMode != BOOT_MODE_NORMAL) { // keys are pressed
|
||||||
{ // keys are pressed
|
|
||||||
UI_DisplayReleaseKeys();
|
UI_DisplayReleaseKeys();
|
||||||
BACKLIGHT_TurnOn();
|
BACKLIGHT_TurnOn();
|
||||||
|
|
||||||
// 500ms
|
// 500ms
|
||||||
for (int i = 0; i < 50;)
|
for (int i = 0; i < 50;) {
|
||||||
{
|
|
||||||
i = (GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) && KEYBOARD_Poll() == KEY_INVALID) ? i + 1 : 0;
|
i = (GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) && KEYBOARD_Poll() == KEY_INVALID) ? i + 1 : 0;
|
||||||
SYSTEM_DelayMs(10);
|
SYSTEM_DelayMs(10);
|
||||||
}
|
}
|
||||||
@@ -208,8 +215,7 @@ void Main(void)
|
|||||||
gDebounceCounter = 0;
|
gDebounceCounter = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gChargingWithTypeC && gBatteryDisplayLevel == 0)
|
if (!gChargingWithTypeC && gBatteryDisplayLevel == 0) {
|
||||||
{
|
|
||||||
FUNCTION_Select(FUNCTION_POWER_SAVE);
|
FUNCTION_Select(FUNCTION_POWER_SAVE);
|
||||||
|
|
||||||
if (gEeprom.BACKLIGHT_TIME < 61) // backlight is not set to be always on
|
if (gEeprom.BACKLIGHT_TIME < 61) // backlight is not set to be always on
|
||||||
@@ -218,29 +224,11 @@ void Main(void)
|
|||||||
BACKLIGHT_TurnOn(); // turn the backlight ON
|
BACKLIGHT_TurnOn(); // turn the backlight ON
|
||||||
|
|
||||||
gReducedService = true;
|
gReducedService = true;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
UI_DisplayWelcome();
|
UI_DisplayWelcome();
|
||||||
|
|
||||||
BACKLIGHT_TurnOn();
|
BACKLIGHT_TurnOn();
|
||||||
|
RADIO_SetupRegisters(true);
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
|
||||||
if (gEeprom.POWER_ON_DISPLAY_MODE != POWER_ON_DISPLAY_MODE_NONE && gEeprom.POWER_ON_DISPLAY_MODE != POWER_ON_DISPLAY_MODE_SOUND)
|
|
||||||
#else
|
|
||||||
if (gEeprom.POWER_ON_DISPLAY_MODE != POWER_ON_DISPLAY_MODE_NONE)
|
|
||||||
#endif
|
|
||||||
{ // 2.55 second boot-up screen
|
|
||||||
while (boot_counter_10ms > 0)
|
|
||||||
{
|
|
||||||
if (KEYBOARD_Poll() != KEY_INVALID)
|
|
||||||
{ // halt boot beeps
|
|
||||||
boot_counter_10ms = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RADIO_SetupRegisters(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef ENABLE_PWRON_PASSWORD
|
#ifdef ENABLE_PWRON_PASSWORD
|
||||||
if (gEeprom.POWER_ON_PASSWORD < 1000000)
|
if (gEeprom.POWER_ON_PASSWORD < 1000000)
|
||||||
@@ -335,36 +323,35 @@ void Main(void)
|
|||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESUME_STATE
|
#ifdef ENABLE_FEAT_F4HWN_RESUME_STATE
|
||||||
if (gEeprom.CURRENT_STATE == 2 || gEeprom.CURRENT_STATE == 5) {
|
if (gEeprom.CURRENT_STATE == 2 || gEeprom.CURRENT_STATE == 5) {
|
||||||
gScanRangeStart = gScanRangeStart ? 0 : gTxVfo->pRX->Frequency;
|
gScanRangeStart = gScanRangeStart ? 0 : gTxVfo->pRX->Frequency;
|
||||||
gScanRangeStop = gEeprom.VfoInfo[!gEeprom.TX_VFO].freq_config_RX.Frequency;
|
gScanRangeStop = gEeprom.VfoInfo[!gEeprom.TX_VFO].freq_config_RX.Frequency;
|
||||||
if (gScanRangeStart > gScanRangeStop) {
|
if (gScanRangeStart > gScanRangeStop) {
|
||||||
SWAP(gScanRangeStart, gScanRangeStop);
|
SWAP(gScanRangeStart, gScanRangeStop);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (gEeprom.CURRENT_STATE == 1) {
|
if (gEeprom.CURRENT_STATE == 1) {
|
||||||
gEeprom.SCAN_LIST_DEFAULT = gEeprom.CURRENT_LIST;
|
gEeprom.SCAN_LIST_DEFAULT = gEeprom.CURRENT_LIST;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gEeprom.CURRENT_STATE == 1 || gEeprom.CURRENT_STATE == 2) {
|
||||||
|
CHFRSCANNER_Start(true, SCAN_FWD);
|
||||||
|
}
|
||||||
|
#ifdef ENABLE_FMRADIO
|
||||||
|
else if (gEeprom.CURRENT_STATE == 3) {
|
||||||
|
ACTION_FM();
|
||||||
|
GUI_SelectNextDisplay(gRequestDisplayScreen);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef ENABLE_SPECTRUM
|
||||||
|
else if (gEeprom.CURRENT_STATE == 4 || gEeprom.CURRENT_STATE == 5) {
|
||||||
|
APP_RunSpectrum();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
if (gEeprom.CURRENT_STATE == 1 || gEeprom.CURRENT_STATE == 2) {
|
|
||||||
CHFRSCANNER_Start(true, SCAN_FWD);
|
|
||||||
}
|
|
||||||
#ifdef ENABLE_FMRADIO
|
|
||||||
else if (gEeprom.CURRENT_STATE == 3) {
|
|
||||||
ACTION_FM();
|
|
||||||
GUI_SelectNextDisplay(gRequestDisplayScreen);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef ENABLE_SPECTRUM
|
|
||||||
else if (gEeprom.CURRENT_STATE == 4 || gEeprom.CURRENT_STATE == 5) {
|
|
||||||
APP_RunSpectrum();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
// Pas besoin de `default`, aucun effet si l'état n'est pas traité.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
APP_Update();
|
APP_Update();
|
||||||
|
|
||||||
|
|||||||
@@ -91,16 +91,11 @@ const uint8_t gMicGain_dB2[5] = {3, 8, 16, 24, 31};
|
|||||||
#ifndef ENABLE_FEAT_F4HWN
|
#ifndef ENABLE_FEAT_F4HWN
|
||||||
bool gSetting_350TX;
|
bool gSetting_350TX;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
|
||||||
bool gSetting_KILLED;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ENABLE_FEAT_F4HWN
|
#ifndef ENABLE_FEAT_F4HWN
|
||||||
bool gSetting_200TX;
|
bool gSetting_200TX;
|
||||||
bool gSetting_500TX;
|
bool gSetting_500TX;
|
||||||
#endif
|
#endif
|
||||||
bool gSetting_350EN;
|
bool gSetting_350EN = true;
|
||||||
uint8_t gSetting_F_LOCK;
|
uint8_t gSetting_F_LOCK;
|
||||||
bool gSetting_ScrambleEnable;
|
bool gSetting_ScrambleEnable;
|
||||||
|
|
||||||
|
|||||||
@@ -143,11 +143,6 @@ extern const uint8_t gMicGain_dB2[5];
|
|||||||
#ifndef ENABLE_FEAT_F4HWN
|
#ifndef ENABLE_FEAT_F4HWN
|
||||||
extern bool gSetting_350TX;
|
extern bool gSetting_350TX;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
|
||||||
extern bool gSetting_KILLED;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ENABLE_FEAT_F4HWN
|
#ifndef ENABLE_FEAT_F4HWN
|
||||||
extern bool gSetting_200TX;
|
extern bool gSetting_200TX;
|
||||||
extern bool gSetting_500TX;
|
extern bool gSetting_500TX;
|
||||||
|
|||||||
@@ -272,13 +272,10 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure
|
|||||||
pVfo->StepFrequency = gStepFrequencyTable[tmp];
|
pVfo->StepFrequency = gStepFrequencyTable[tmp];
|
||||||
|
|
||||||
tmp = data[7];
|
tmp = data[7];
|
||||||
#ifndef ENABLE_FEAT_F4HWN
|
|
||||||
if (tmp > (ARRAY_SIZE(gSubMenu_SCRAMBLER) - 1))
|
if (tmp > (ARRAY_SIZE(gSubMenu_SCRAMBLER) - 1))
|
||||||
tmp = 0;
|
tmp = 0;
|
||||||
pVfo->SCRAMBLING_TYPE = tmp;
|
pVfo->SCRAMBLING_TYPE = tmp;
|
||||||
#else
|
//pVfo->SCRAMBLING_TYPE = 0;
|
||||||
pVfo->SCRAMBLING_TYPE = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pVfo->freq_config_RX.CodeType = (data[2] >> 0) & 0x0F;
|
pVfo->freq_config_RX.CodeType = (data[2] >> 0) & 0x0F;
|
||||||
pVfo->freq_config_TX.CodeType = (data[2] >> 4) & 0x0F;
|
pVfo->freq_config_TX.CodeType = (data[2] >> 4) & 0x0F;
|
||||||
@@ -817,14 +814,10 @@ void RADIO_SetupRegisters(bool switchToForeground)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef ENABLE_FEAT_F4HWN
|
if (gRxVfo->SCRAMBLING_TYPE > 0)
|
||||||
if (gRxVfo->SCRAMBLING_TYPE > 0 && gSetting_ScrambleEnable)
|
|
||||||
BK4819_EnableScramble(gRxVfo->SCRAMBLING_TYPE - 1);
|
BK4819_EnableScramble(gRxVfo->SCRAMBLING_TYPE - 1);
|
||||||
else
|
else
|
||||||
BK4819_DisableScramble();
|
BK4819_DisableScramble();
|
||||||
#else
|
|
||||||
BK4819_DisableScramble();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef ENABLE_NOAA
|
#ifdef ENABLE_NOAA
|
||||||
|
|||||||
+391
-417
File diff suppressed because it is too large
Load Diff
+134
-100
@@ -23,8 +23,20 @@
|
|||||||
#include "frequencies.h"
|
#include "frequencies.h"
|
||||||
#include <helper/battery.h>
|
#include <helper/battery.h>
|
||||||
#include "radio.h"
|
#include "radio.h"
|
||||||
|
#include "functions.h"
|
||||||
|
#include "app/fskmodem.h"
|
||||||
#include <driver/backlight.h>
|
#include <driver/backlight.h>
|
||||||
|
|
||||||
|
// Modem Modulation
|
||||||
|
typedef enum ModemModulation {
|
||||||
|
MOD_FSK_450, // for bad conditions
|
||||||
|
MOD_FSK_700, // for medium conditions
|
||||||
|
MOD_AFSK_1200, // for good conditions
|
||||||
|
MOD_AFSK_2400,
|
||||||
|
MOD_FSK_1200_2400,
|
||||||
|
MOD_NOAA_SAME
|
||||||
|
} ModemModulation;
|
||||||
|
|
||||||
enum POWER_OnDisplayMode_t {
|
enum POWER_OnDisplayMode_t {
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
POWER_ON_DISPLAY_MODE_ALL,
|
POWER_ON_DISPLAY_MODE_ALL,
|
||||||
@@ -40,14 +52,14 @@ typedef enum POWER_OnDisplayMode_t POWER_OnDisplayMode_t;
|
|||||||
|
|
||||||
enum TxLockModes_t {
|
enum TxLockModes_t {
|
||||||
F_LOCK_DEF, //all default frequencies + configurable
|
F_LOCK_DEF, //all default frequencies + configurable
|
||||||
F_LOCK_FCC,
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN_CA
|
#ifdef ENABLE_FEAT_F4HWN_CA
|
||||||
|
F_LOCK_FCC,
|
||||||
F_LOCK_CA,
|
F_LOCK_CA,
|
||||||
#endif
|
|
||||||
F_LOCK_CE,
|
F_LOCK_CE,
|
||||||
F_LOCK_GB,
|
F_LOCK_GB,
|
||||||
F_LOCK_430,
|
F_LOCK_430,
|
||||||
F_LOCK_438,
|
F_LOCK_438,
|
||||||
|
#endif
|
||||||
#ifdef ENABLE_FEAT_F4HWN_PMR
|
#ifdef ENABLE_FEAT_F4HWN_PMR
|
||||||
F_LOCK_PMR,
|
F_LOCK_PMR,
|
||||||
#endif
|
#endif
|
||||||
@@ -118,10 +130,10 @@ enum ACTION_OPT_t {
|
|||||||
ACTION_OPT_WN,
|
ACTION_OPT_WN,
|
||||||
ACTION_OPT_BACKLIGHT,
|
ACTION_OPT_BACKLIGHT,
|
||||||
ACTION_OPT_MUTE,
|
ACTION_OPT_MUTE,
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
||||||
ACTION_OPT_POWER_HIGH,
|
ACTION_OPT_POWER_HIGH,
|
||||||
ACTION_OPT_REMOVE_OFFSET,
|
ACTION_OPT_REMOVE_OFFSET,
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_REGA
|
#ifdef ENABLE_REGA
|
||||||
ACTION_OPT_REGA_ALARM,
|
ACTION_OPT_REGA_ALARM,
|
||||||
@@ -131,13 +143,13 @@ enum ACTION_OPT_t {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#ifdef ENABLE_VOICE
|
#ifdef ENABLE_VOICE
|
||||||
enum VOICE_Prompt_t
|
enum VOICE_Prompt_t
|
||||||
{
|
{
|
||||||
VOICE_PROMPT_OFF = 0,
|
VOICE_PROMPT_OFF = 0,
|
||||||
VOICE_PROMPT_CHINESE,
|
VOICE_PROMPT_CHINESE,
|
||||||
VOICE_PROMPT_ENGLISH
|
VOICE_PROMPT_ENGLISH
|
||||||
};
|
};
|
||||||
typedef enum VOICE_Prompt_t VOICE_Prompt_t;
|
typedef enum VOICE_Prompt_t VOICE_Prompt_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum ALARM_Mode_t {
|
enum ALARM_Mode_t {
|
||||||
@@ -162,23 +174,23 @@ enum CHANNEL_DisplayMode_t {
|
|||||||
typedef enum CHANNEL_DisplayMode_t CHANNEL_DisplayMode_t;
|
typedef enum CHANNEL_DisplayMode_t CHANNEL_DisplayMode_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t ScreenChannel[2]; // current channels set in the radio (memory or frequency channels)
|
uint8_t ScreenChannel[2]; // current channels set in the radio (memory or frequency channels)
|
||||||
uint8_t FreqChannel[2]; // last frequency channels used
|
uint8_t FreqChannel[2]; // last frequency channels used
|
||||||
uint8_t MrChannel[2]; // last memory channels used
|
uint8_t MrChannel[2]; // last memory channels used
|
||||||
#ifdef ENABLE_NOAA
|
#ifdef ENABLE_NOAA
|
||||||
uint8_t NoaaChannel[2];
|
uint8_t NoaaChannel[2];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// The actual VFO index (0-upper/1-lower) that is now used for RX,
|
// The actual VFO index (0-upper/1-lower) that is now used for RX,
|
||||||
// It is being alternated by dual watch, and flipped by crossband
|
// It is being alternated by dual watch, and flipped by crossband
|
||||||
uint8_t RX_VFO;
|
uint8_t RX_VFO;
|
||||||
|
|
||||||
// The main VFO index (0-upper/1-lower) selected by the user
|
// The main VFO index (0-upper/1-lower) selected by the user
|
||||||
//
|
//
|
||||||
uint8_t TX_VFO;
|
uint8_t TX_VFO;
|
||||||
|
|
||||||
uint8_t field7_0xa;
|
uint8_t field7_0xa;
|
||||||
uint8_t field8_0xb;
|
uint8_t field8_0xb;
|
||||||
|
|
||||||
#ifdef ENABLE_FMRADIO
|
#ifdef ENABLE_FMRADIO
|
||||||
uint16_t FM_SelectedFrequency;
|
uint16_t FM_SelectedFrequency;
|
||||||
@@ -189,145 +201,167 @@ typedef struct {
|
|||||||
//uint8_t FM_Space : 2;
|
//uint8_t FM_Space : 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint8_t SQUELCH_LEVEL;
|
uint8_t SQUELCH_LEVEL;
|
||||||
uint8_t TX_TIMEOUT_TIMER;
|
uint8_t TX_TIMEOUT_TIMER;
|
||||||
bool KEY_LOCK;
|
bool KEY_LOCK;
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
bool KEY_LOCK_PTT;
|
bool KEY_LOCK_PTT;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
||||||
bool MENU_LOCK;
|
bool MENU_LOCK;
|
||||||
uint8_t SET_KEY;
|
uint8_t SET_KEY;
|
||||||
#endif
|
#endif
|
||||||
bool VOX_SWITCH;
|
bool VOX_SWITCH;
|
||||||
uint8_t VOX_LEVEL;
|
uint8_t VOX_LEVEL;
|
||||||
#ifdef ENABLE_VOICE
|
#ifdef ENABLE_VOICE
|
||||||
VOICE_Prompt_t VOICE_PROMPT;
|
VOICE_Prompt_t VOICE_PROMPT;
|
||||||
#endif
|
#endif
|
||||||
bool BEEP_CONTROL;
|
bool BEEP_CONTROL;
|
||||||
uint8_t CHANNEL_DISPLAY_MODE;
|
uint8_t CHANNEL_DISPLAY_MODE;
|
||||||
bool TAIL_TONE_ELIMINATION;
|
bool TAIL_TONE_ELIMINATION;
|
||||||
bool VFO_OPEN;
|
bool VFO_OPEN;
|
||||||
uint8_t DUAL_WATCH;
|
uint8_t DUAL_WATCH;
|
||||||
uint8_t CROSS_BAND_RX_TX;
|
uint8_t CROSS_BAND_RX_TX;
|
||||||
uint8_t BATTERY_SAVE;
|
uint8_t BATTERY_SAVE;
|
||||||
uint8_t BACKLIGHT_TIME;
|
uint8_t BACKLIGHT_TIME;
|
||||||
uint8_t SCAN_RESUME_MODE;
|
uint8_t SCAN_RESUME_MODE;
|
||||||
uint8_t SCAN_LIST_DEFAULT;
|
uint8_t SCAN_LIST_DEFAULT;
|
||||||
bool SCAN_LIST_ENABLED[3];
|
bool SCAN_LIST_ENABLED[3];
|
||||||
uint8_t SCANLIST_PRIORITY_CH1[3];
|
uint8_t SCANLIST_PRIORITY_CH1[3];
|
||||||
uint8_t SCANLIST_PRIORITY_CH2[3];
|
uint8_t SCANLIST_PRIORITY_CH2[3];
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESUME_STATE
|
#ifdef ENABLE_FEAT_F4HWN_RESUME_STATE
|
||||||
uint8_t CURRENT_STATE;
|
uint8_t CURRENT_STATE;
|
||||||
uint8_t CURRENT_LIST;
|
uint8_t CURRENT_LIST;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint8_t field29_0x26;
|
uint8_t field29_0x26;
|
||||||
uint8_t field30_0x27;
|
uint8_t field30_0x27;
|
||||||
|
|
||||||
uint8_t field37_0x32;
|
|
||||||
uint8_t field38_0x33;
|
|
||||||
|
|
||||||
uint8_t AUTO_KEYPAD_LOCK;
|
uint8_t field37_0x32;
|
||||||
|
uint8_t field38_0x33;
|
||||||
|
|
||||||
|
uint8_t AUTO_KEYPAD_LOCK;
|
||||||
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
#if defined(ENABLE_ALARM) || defined(ENABLE_TX1750)
|
||||||
ALARM_Mode_t ALARM_MODE;
|
ALARM_Mode_t ALARM_MODE;
|
||||||
#endif
|
#endif
|
||||||
POWER_OnDisplayMode_t POWER_ON_DISPLAY_MODE;
|
POWER_OnDisplayMode_t POWER_ON_DISPLAY_MODE;
|
||||||
ROGER_Mode_t ROGER;
|
ROGER_Mode_t ROGER;
|
||||||
uint8_t REPEATER_TAIL_TONE_ELIMINATION;
|
uint8_t REPEATER_TAIL_TONE_ELIMINATION;
|
||||||
uint8_t KEY_1_SHORT_PRESS_ACTION;
|
uint8_t KEY_1_SHORT_PRESS_ACTION;
|
||||||
uint8_t KEY_1_LONG_PRESS_ACTION;
|
uint8_t KEY_1_LONG_PRESS_ACTION;
|
||||||
uint8_t KEY_2_SHORT_PRESS_ACTION;
|
uint8_t KEY_2_SHORT_PRESS_ACTION;
|
||||||
uint8_t KEY_2_LONG_PRESS_ACTION;
|
uint8_t KEY_2_LONG_PRESS_ACTION;
|
||||||
uint8_t MIC_SENSITIVITY;
|
uint8_t MIC_SENSITIVITY;
|
||||||
uint8_t MIC_SENSITIVITY_TUNING;
|
uint8_t MIC_SENSITIVITY_TUNING;
|
||||||
uint8_t CHAN_1_CALL;
|
uint8_t CHAN_1_CALL;
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
char ANI_DTMF_ID[8];
|
char ANI_DTMF_ID[8];
|
||||||
char KILL_CODE[8];
|
char KILL_CODE[8];
|
||||||
char REVIVE_CODE[8];
|
char REVIVE_CODE[8];
|
||||||
#endif
|
#endif
|
||||||
char DTMF_UP_CODE[16];
|
char DTMF_UP_CODE[16];
|
||||||
|
|
||||||
uint8_t field57_0x6c;
|
uint8_t field57_0x6c;
|
||||||
uint8_t field58_0x6d;
|
uint8_t field58_0x6d;
|
||||||
|
|
||||||
char DTMF_DOWN_CODE[16];
|
char DTMF_DOWN_CODE[16];
|
||||||
|
|
||||||
uint8_t field60_0x7e;
|
uint8_t field60_0x7e;
|
||||||
uint8_t field61_0x7f;
|
uint8_t field61_0x7f;
|
||||||
|
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
char DTMF_SEPARATE_CODE;
|
char DTMF_SEPARATE_CODE;
|
||||||
char DTMF_GROUP_CALL_CODE;
|
char DTMF_GROUP_CALL_CODE;
|
||||||
uint8_t DTMF_DECODE_RESPONSE;
|
uint8_t DTMF_DECODE_RESPONSE;
|
||||||
uint8_t DTMF_auto_reset_time;
|
uint8_t DTMF_auto_reset_time;
|
||||||
#endif
|
#endif
|
||||||
uint16_t DTMF_PRELOAD_TIME;
|
uint16_t DTMF_PRELOAD_TIME;
|
||||||
uint16_t DTMF_FIRST_CODE_PERSIST_TIME;
|
uint16_t DTMF_FIRST_CODE_PERSIST_TIME;
|
||||||
uint16_t DTMF_HASH_CODE_PERSIST_TIME;
|
uint16_t DTMF_HASH_CODE_PERSIST_TIME;
|
||||||
uint16_t DTMF_CODE_PERSIST_TIME;
|
uint16_t DTMF_CODE_PERSIST_TIME;
|
||||||
uint16_t DTMF_CODE_INTERVAL_TIME;
|
uint16_t DTMF_CODE_INTERVAL_TIME;
|
||||||
bool DTMF_SIDE_TONE;
|
bool DTMF_SIDE_TONE;
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
bool PERMIT_REMOTE_KILL;
|
bool PERMIT_REMOTE_KILL;
|
||||||
#endif
|
#endif
|
||||||
int16_t BK4819_XTAL_FREQ_LOW;
|
int16_t BK4819_XTAL_FREQ_LOW;
|
||||||
#ifdef ENABLE_NOAA
|
#ifdef ENABLE_NOAA
|
||||||
bool NOAA_AUTO_SCAN;
|
bool NOAA_AUTO_SCAN;
|
||||||
#endif
|
#endif
|
||||||
uint8_t VOLUME_GAIN;
|
uint8_t VOLUME_GAIN;
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
uint8_t VOLUME_GAIN_BACKUP;
|
uint8_t VOLUME_GAIN_BACKUP;
|
||||||
#endif
|
#endif
|
||||||
uint8_t DAC_GAIN;
|
uint8_t DAC_GAIN;
|
||||||
|
|
||||||
VFO_Info_t VfoInfo[2];
|
VFO_Info_t VfoInfo[2];
|
||||||
uint32_t POWER_ON_PASSWORD;
|
uint32_t POWER_ON_PASSWORD;
|
||||||
uint16_t VOX1_THRESHOLD;
|
uint16_t VOX1_THRESHOLD;
|
||||||
uint16_t VOX0_THRESHOLD;
|
uint16_t VOX0_THRESHOLD;
|
||||||
|
|
||||||
uint8_t field77_0x95;
|
uint8_t field77_0x95;
|
||||||
uint8_t field78_0x96;
|
uint8_t field78_0x96;
|
||||||
uint8_t field79_0x97;
|
uint8_t field79_0x97;
|
||||||
|
|
||||||
uint8_t KEY_M_LONG_PRESS_ACTION;
|
uint8_t KEY_M_LONG_PRESS_ACTION;
|
||||||
uint8_t BACKLIGHT_MIN;
|
uint8_t BACKLIGHT_MIN;
|
||||||
#ifdef ENABLE_BLMIN_TMP_OFF
|
#ifdef ENABLE_BLMIN_TMP_OFF
|
||||||
BLMIN_STAT_t BACKLIGHT_MIN_STAT;
|
BLMIN_STAT_t BACKLIGHT_MIN_STAT;
|
||||||
#endif
|
#endif
|
||||||
uint8_t BACKLIGHT_MAX;
|
uint8_t BACKLIGHT_MAX;
|
||||||
BATTERY_Type_t BATTERY_TYPE;
|
BATTERY_Type_t BATTERY_TYPE;
|
||||||
#ifdef ENABLE_RSSI_BAR
|
#ifdef ENABLE_RSSI_BAR
|
||||||
uint8_t S0_LEVEL;
|
uint8_t S0_LEVEL;
|
||||||
uint8_t S9_LEVEL;
|
uint8_t S9_LEVEL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
ModemModulation FSKMode;
|
||||||
|
uint32_t FSKSRCAddress;
|
||||||
} EEPROM_Config_t;
|
} EEPROM_Config_t;
|
||||||
|
|
||||||
extern EEPROM_Config_t gEeprom;
|
extern EEPROM_Config_t gEeprom;
|
||||||
|
|
||||||
void SETTINGS_InitEEPROM(void);
|
void SETTINGS_InitEEPROM(void);
|
||||||
void SETTINGS_LoadCalibration(void);
|
|
||||||
|
void SETTINGS_LoadCalibration(void);
|
||||||
|
|
||||||
uint32_t SETTINGS_FetchChannelFrequency(const int channel);
|
uint32_t SETTINGS_FetchChannelFrequency(const int channel);
|
||||||
void SETTINGS_FetchChannelName(char *s, const int channel);
|
|
||||||
void SETTINGS_FactoryReset(bool bIsAll);
|
void SETTINGS_FetchChannelName(char *s, const int channel);
|
||||||
|
|
||||||
|
void SETTINGS_FactoryReset(bool bIsAll);
|
||||||
|
|
||||||
#ifdef ENABLE_FMRADIO
|
#ifdef ENABLE_FMRADIO
|
||||||
void SETTINGS_SaveFM(void);
|
void SETTINGS_SaveFM(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void SETTINGS_SaveVfoIndices(void);
|
void SETTINGS_SaveVfoIndices(void);
|
||||||
|
|
||||||
void SETTINGS_SaveSettings(void);
|
void SETTINGS_SaveSettings(void);
|
||||||
void SETTINGS_SaveChannelName(uint8_t channel, const char * name);
|
|
||||||
|
void SETTINGS_SaveChannelName(uint8_t channel, const char *name);
|
||||||
|
|
||||||
void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO, uint8_t Mode);
|
void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO, uint8_t Mode);
|
||||||
void SETTINGS_SaveBatteryCalibration(const uint16_t * batteryCalibration);
|
|
||||||
|
void SETTINGS_SaveBatteryCalibration(const uint16_t *batteryCalibration);
|
||||||
|
|
||||||
void SETTINGS_UpdateChannel(uint8_t channel, const VFO_Info_t *pVFO, bool keep, bool check, bool save);
|
void SETTINGS_UpdateChannel(uint8_t channel, const VFO_Info_t *pVFO, bool keep, bool check, bool save);
|
||||||
|
|
||||||
void SETTINGS_WriteBuildOptions(void);
|
void SETTINGS_WriteBuildOptions(void);
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESUME_STATE
|
#ifdef ENABLE_FEAT_F4HWN_RESUME_STATE
|
||||||
void SETTINGS_WriteCurrentState(void);
|
|
||||||
|
void SETTINGS_WriteCurrentState(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_FEAT_F4HWN_VOL
|
#ifdef ENABLE_FEAT_F4HWN_VOL
|
||||||
void SETTINGS_WriteCurrentVol(void);
|
|
||||||
|
void SETTINGS_WriteCurrentVol(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
void SETTINGS_ResetTxLock(void);
|
|
||||||
|
void SETTINGS_ResetTxLock(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+4
-2
@@ -61,11 +61,13 @@ void UI_DisplayAircopy(void)
|
|||||||
UI_PrintStringSmallNormal(String + 7, 97, 0, 3);
|
UI_PrintStringSmallNormal(String + 7, 97, 0, 3);
|
||||||
String[7] = 0;
|
String[7] = 0;
|
||||||
// show the main large frequency digits
|
// show the main large frequency digits
|
||||||
UI_DisplayFrequency(String, 16, 2, false);
|
//UI_DisplayFrequency(String, 16, 2, false);
|
||||||
|
UI_PrintStringSmallNormal(String, 0, 20, 2);
|
||||||
} else {
|
} else {
|
||||||
const char *ascii = INPUTBOX_GetAscii();
|
const char *ascii = INPUTBOX_GetAscii();
|
||||||
sprintf(String, "%.3s.%.3s", ascii, ascii + 3);
|
sprintf(String, "%.3s.%.3s", ascii, ascii + 3);
|
||||||
UI_DisplayFrequency(String, 16, 2, false);
|
//UI_DisplayFrequency(String, 16, 2, false);
|
||||||
|
UI_PrintStringSmallNormal(String, 0, 20, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(String, 0, sizeof(String));
|
memset(String, 0, sizeof(String));
|
||||||
|
|||||||
+8
-8
@@ -50,7 +50,7 @@ void UI_DisplayFM(void)
|
|||||||
//UI_PrintStringSmallNormal(String, 127 - 4*7, 0, 6);
|
//UI_PrintStringSmallNormal(String, 127 - 4*7, 0, 6);
|
||||||
|
|
||||||
if (gAskToSave) {
|
if (gAskToSave) {
|
||||||
pPrintStr = "SAVE?";
|
pPrintStr = "SAV?";
|
||||||
} else if (gAskToDelete) {
|
} else if (gAskToDelete) {
|
||||||
pPrintStr = "DEL?";
|
pPrintStr = "DEL?";
|
||||||
} else if (gFM_ScanState == FM_SCAN_OFF) {
|
} else if (gFM_ScanState == FM_SCAN_OFF) {
|
||||||
@@ -61,35 +61,35 @@ void UI_DisplayFM(void)
|
|||||||
pPrintStr = "VFO";
|
pPrintStr = "VFO";
|
||||||
for (unsigned int i = 0; i < 20; i++) {
|
for (unsigned int i = 0; i < 20; i++) {
|
||||||
if (gEeprom.FM_FrequencyPlaying == gFM_Channels[i]) {
|
if (gEeprom.FM_FrequencyPlaying == gFM_Channels[i]) {
|
||||||
sprintf(String, "VFO(CH%02u)", i + 1);
|
sprintf(String, "VF(C%02u)", i + 1);
|
||||||
pPrintStr = String;
|
pPrintStr = String;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (gFM_AutoScan) {
|
} else if (gFM_AutoScan) {
|
||||||
sprintf(String, "A-SCAN(%u)", gFM_ChannelPosition + 1);
|
sprintf(String, "A-SCN(%u)", gFM_ChannelPosition + 1);
|
||||||
pPrintStr = String;
|
pPrintStr = String;
|
||||||
} else {
|
} else {
|
||||||
pPrintStr = "M-SCAN";
|
pPrintStr = "M-SCN";
|
||||||
}
|
}
|
||||||
|
|
||||||
UI_PrintString(pPrintStr, 0, 127, 3, 10); // memory, vfo, scan
|
UI_PrintString(pPrintStr, 0, 127, 3, 12); // memory, vfo, scan
|
||||||
|
|
||||||
memset(String, 0, sizeof(String));
|
memset(String, 0, sizeof(String));
|
||||||
if (gAskToSave || (gEeprom.FM_IsMrMode && gInputBoxIndex > 0)) {
|
if (gAskToSave || (gEeprom.FM_IsMrMode && gInputBoxIndex > 0)) {
|
||||||
UI_GenerateChannelString(String, gFM_ChannelPosition);
|
UI_GenerateChannelString(String, gFM_ChannelPosition);
|
||||||
} else if (gAskToDelete) {
|
} else if (gAskToDelete) {
|
||||||
sprintf(String, "CH-%02u", gEeprom.FM_SelectedChannel + 1);
|
sprintf(String, "C-%02u", gEeprom.FM_SelectedChannel + 1);
|
||||||
} else {
|
} else {
|
||||||
if (gInputBoxIndex == 0) {
|
if (gInputBoxIndex == 0) {
|
||||||
sprintf(String, "%3d.%d", gEeprom.FM_FrequencyPlaying / 10, gEeprom.FM_FrequencyPlaying % 10);
|
sprintf(String, " %3d.%d", gEeprom.FM_FrequencyPlaying / 10, gEeprom.FM_FrequencyPlaying % 10);
|
||||||
} else {
|
} else {
|
||||||
const char * ascii = INPUTBOX_GetAscii();
|
const char * ascii = INPUTBOX_GetAscii();
|
||||||
sprintf(String, "%.3s.%.1s",ascii, ascii + 3);
|
sprintf(String, "%.3s.%.1s",ascii, ascii + 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
UI_DisplayFrequency(String, 36, 1, gInputBoxIndex == 0); // frequency
|
UI_PrintString(String, 0, 20, 1, 10); // frequency
|
||||||
ST7565_BlitFullScreen();
|
ST7565_BlitFullScreen();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+175
-166
@@ -24,15 +24,13 @@
|
|||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
|
|
||||||
#ifndef ARRAY_SIZE
|
#ifndef ARRAY_SIZE
|
||||||
#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof((arr)[0]))
|
#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof((arr)[0]))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void UI_GenerateChannelString(char *pString, const uint8_t Channel)
|
void UI_GenerateChannelString(char *pString, const uint8_t Channel) {
|
||||||
{
|
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
if (gInputBoxIndex == 0)
|
if (gInputBoxIndex == 0) {
|
||||||
{
|
|
||||||
sprintf(pString, "CH-%02u", Channel + 1);
|
sprintf(pString, "CH-%02u", Channel + 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -44,8 +42,7 @@ void UI_GenerateChannelString(char *pString, const uint8_t Channel)
|
|||||||
pString[i + 3] = (gInputBox[i] == 10) ? '-' : gInputBox[i] + '0';
|
pString[i + 3] = (gInputBox[i] == 10) ? '-' : gInputBox[i] + '0';
|
||||||
}
|
}
|
||||||
|
|
||||||
void UI_GenerateChannelStringEx(char *pString, const bool bShowPrefix, const uint8_t ChannelNumber)
|
void UI_GenerateChannelStringEx(char *pString, const bool bShowPrefix, const uint8_t ChannelNumber) {
|
||||||
{
|
|
||||||
if (gInputBoxIndex > 0) {
|
if (gInputBoxIndex > 0) {
|
||||||
for (unsigned int i = 0; i < 3; i++) {
|
for (unsigned int i = 0; i < 3; i++) {
|
||||||
pString[i] = (gInputBox[i] == 10) ? '-' : gInputBox[i] + '0';
|
pString[i] = (gInputBox[i] == 10) ? '-' : gInputBox[i] + '0';
|
||||||
@@ -65,41 +62,38 @@ void UI_GenerateChannelStringEx(char *pString, const bool bShowPrefix, const uin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UI_PrintStringBuffer(const char *pString, uint8_t * buffer, uint32_t char_width, const uint8_t *font)
|
void *memcpy_inv(void *dst, const void *src, size_t n) {
|
||||||
{
|
if (!dst || !src) return dst;
|
||||||
|
|
||||||
|
uint8_t *d = (uint8_t *) dst;
|
||||||
|
const uint8_t *s = (const uint8_t *) src;
|
||||||
|
|
||||||
|
while (n--) {
|
||||||
|
*d++ = ~(*s++);
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UI_PrintStringBuffer(const char *pString, uint8_t *buffer, uint32_t char_width, const uint8_t *font, bool inv) {
|
||||||
const size_t Length = strlen(pString);
|
const size_t Length = strlen(pString);
|
||||||
const unsigned int char_spacing = char_width + 1;
|
const unsigned int char_spacing = char_width + 1;
|
||||||
for (size_t i = 0; i < Length; i++) {
|
for (size_t i = 0; i < Length; i++) {
|
||||||
const unsigned int index = pString[i] - ' ' - 1;
|
const unsigned int index = pString[i] - ' ' - 1;
|
||||||
if (pString[i] > ' ' && pString[i] < 127) {
|
if (pString[i] > ' ' && pString[i] < 127) {
|
||||||
const uint32_t offset = i * char_spacing + 1;
|
const uint32_t offset = i * char_spacing + 1;
|
||||||
memcpy(buffer + offset, font + index * char_width, char_width);
|
if (inv) {
|
||||||
|
memcpy_inv(buffer + offset, font + index * char_width, char_width);
|
||||||
|
} else {
|
||||||
|
memcpy(buffer + offset, font + index * char_width, char_width);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UI_PrintString(const char *pString, uint8_t Start, uint8_t End, uint8_t Line, uint8_t Width)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
size_t Length = strlen(pString);
|
|
||||||
|
|
||||||
if (End > Start)
|
void UI_PrintStringSmall(const char *pString, uint8_t Start, uint8_t End, uint8_t Line, uint8_t char_width,
|
||||||
Start += (((End - Start) - (Length * Width)) + 1) / 2;
|
const uint8_t *font, bool inv) {
|
||||||
|
|
||||||
for (i = 0; i < Length; i++)
|
|
||||||
{
|
|
||||||
const unsigned int ofs = (unsigned int)Start + (i * Width);
|
|
||||||
if (pString[i] > ' ' && pString[i] < 127)
|
|
||||||
{
|
|
||||||
const unsigned int index = pString[i] - ' ' - 1;
|
|
||||||
memcpy(gFrameBuffer[Line + 0] + ofs, &gFontBig[index][0], 7);
|
|
||||||
memcpy(gFrameBuffer[Line + 1] + ofs, &gFontBig[index][7], 7);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void UI_PrintStringSmall(const char *pString, uint8_t Start, uint8_t End, uint8_t Line, uint8_t char_width, const uint8_t *font)
|
|
||||||
{
|
|
||||||
const size_t Length = strlen(pString);
|
const size_t Length = strlen(pString);
|
||||||
const unsigned int char_spacing = char_width + 1;
|
const unsigned int char_spacing = char_width + 1;
|
||||||
|
|
||||||
@@ -107,79 +101,99 @@ void UI_PrintStringSmall(const char *pString, uint8_t Start, uint8_t End, uint8_
|
|||||||
Start += (((End - Start) - Length * char_spacing) + 1) / 2;
|
Start += (((End - Start) - Length * char_spacing) + 1) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
UI_PrintStringBuffer(pString, gFrameBuffer[Line] + Start, char_width, font);
|
UI_PrintStringBuffer(pString, gFrameBuffer[Line] + Start, char_width, font, inv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void UI_PrintStringSmallNormal(const char *pString, uint8_t Start, uint8_t End, uint8_t Line)
|
void UI_PrintStringSmallNormal(const char *pString, uint8_t Start, uint8_t End, uint8_t Line) {
|
||||||
{
|
UI_PrintStringSmall(pString, Start, End, Line, ARRAY_SIZE(gFontSmall[0]), (const uint8_t *) gFontSmall, false);
|
||||||
UI_PrintStringSmall(pString, Start, End, Line, ARRAY_SIZE(gFontSmall[0]), (const uint8_t *)gFontSmall);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UI_PrintStringSmallBold(const char *pString, uint8_t Start, uint8_t End, uint8_t Line)
|
void UI_PrintString(const char *pString, uint8_t Start, uint8_t End, uint8_t Line, uint8_t Width) {
|
||||||
{
|
Width = Width;
|
||||||
|
UI_PrintStringSmallNormal(pString, Start, End, Line);
|
||||||
|
// size_t i;
|
||||||
|
// size_t Length = strlen(pString);
|
||||||
|
//
|
||||||
|
// if (End > Start)
|
||||||
|
// Start += (((End - Start) - (Length * Width)) + 1) / 2;
|
||||||
|
//
|
||||||
|
// for (i = 0; i < Length; i++)
|
||||||
|
// {
|
||||||
|
// const unsigned int ofs = (unsigned int)Start + (i * Width);
|
||||||
|
// if (pString[i] > ' ' && pString[i] < 127)
|
||||||
|
// {
|
||||||
|
// const unsigned int index = pString[i] - ' ' - 1;
|
||||||
|
// memcpy(gFrameBuffer[Line + 0] + ofs, &gFontSmall[index + '0'][0], 7);
|
||||||
|
// memcpy(gFrameBuffer[Line + 1] + ofs, &gFontSmall[index + '0'][7], 7);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
void UI_PrintStringSmallBold(const char *pString, uint8_t Start, uint8_t End, uint8_t Line) {
|
||||||
|
//#ifdef ENABLE_SMALL_BOLD
|
||||||
|
// const uint8_t *font = (uint8_t *)gFontSmallBold;
|
||||||
|
// const uint8_t char_width = ARRAY_SIZE(gFontSmallBold[0]);
|
||||||
|
//#else
|
||||||
|
// const uint8_t *font = (uint8_t *) gFontSmall;
|
||||||
|
// const uint8_t char_width = ARRAY_SIZE(gFontSmall[0]);
|
||||||
|
//#endif
|
||||||
|
//
|
||||||
|
// UI_PrintStringSmall(pString, Start, End, Line, char_width, font);
|
||||||
|
UI_PrintStringSmall(pString, Start, End, Line, ARRAY_SIZE(gFontSmall[0]), (const uint8_t *) gFontSmall, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UI_PrintStringSmallBufferNormal(const char *pString, uint8_t *buffer) {
|
||||||
|
UI_PrintStringBuffer(pString, buffer, ARRAY_SIZE(gFontSmall[0]), (uint8_t *) gFontSmall, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UI_PrintStringSmallBufferBold(const char *pString, uint8_t *buffer) {
|
||||||
#ifdef ENABLE_SMALL_BOLD
|
#ifdef ENABLE_SMALL_BOLD
|
||||||
const uint8_t *font = (uint8_t *)gFontSmallBold;
|
const uint8_t *font = (uint8_t *)gFontSmallBold;
|
||||||
const uint8_t char_width = ARRAY_SIZE(gFontSmallBold[0]);
|
const uint8_t char_width = ARRAY_SIZE(gFontSmallBold[0]);
|
||||||
#else
|
#else
|
||||||
const uint8_t *font = (uint8_t *)gFontSmall;
|
const uint8_t *font = (uint8_t *) gFontSmall;
|
||||||
const uint8_t char_width = ARRAY_SIZE(gFontSmall[0]);
|
const uint8_t char_width = ARRAY_SIZE(gFontSmall[0]);
|
||||||
#endif
|
#endif
|
||||||
|
UI_PrintStringBuffer(pString, buffer, char_width, font, false);
|
||||||
UI_PrintStringSmall(pString, Start, End, Line, char_width, font);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UI_PrintStringSmallBufferNormal(const char *pString, uint8_t * buffer)
|
//void UI_DisplayFrequency(const char *string, uint8_t X, uint8_t Y, bool center) {
|
||||||
{
|
// const unsigned int char_width = 13;
|
||||||
UI_PrintStringBuffer(pString, buffer, ARRAY_SIZE(gFontSmall[0]), (uint8_t *)gFontSmall);
|
// uint8_t *pFb0 = gFrameBuffer[Y] + X;
|
||||||
}
|
// uint8_t *pFb1 = pFb0 + 128;
|
||||||
|
// bool bCanDisplay = false;
|
||||||
void UI_PrintStringSmallBufferBold(const char *pString, uint8_t * buffer)
|
//
|
||||||
{
|
// uint8_t len = strlen(string);
|
||||||
#ifdef ENABLE_SMALL_BOLD
|
// for (int i = 0; i < len; i++) {
|
||||||
const uint8_t *font = (uint8_t *)gFontSmallBold;
|
// char c = string[i];
|
||||||
const uint8_t char_width = ARRAY_SIZE(gFontSmallBold[0]);
|
// if (c == '-') c = '9' + 1;
|
||||||
#else
|
// if (bCanDisplay || c != ' ') {
|
||||||
const uint8_t *font = (uint8_t *)gFontSmall;
|
// bCanDisplay = true;
|
||||||
const uint8_t char_width = ARRAY_SIZE(gFontSmall[0]);
|
// if (c >= '0' && c <= '9' + 1) {
|
||||||
#endif
|
// memcpy(pFb0 + 2, gFontSmall[(unsigned char) c], char_width - 3);
|
||||||
UI_PrintStringBuffer(pString, buffer, char_width, font);
|
// memcpy(pFb1 + 2, gFontSmall[(unsigned char) c] + char_width - 3, char_width - 3);
|
||||||
}
|
// } else if (c == '.') {
|
||||||
|
// *pFb1 = 0x60;
|
||||||
void UI_DisplayFrequency(const char *string, uint8_t X, uint8_t Y, bool center)
|
// pFb0++;
|
||||||
{
|
// pFb1++;
|
||||||
const unsigned int char_width = 13;
|
// *pFb1 = 0x60;
|
||||||
uint8_t *pFb0 = gFrameBuffer[Y] + X;
|
// pFb0++;
|
||||||
uint8_t *pFb1 = pFb0 + 128;
|
// pFb1++;
|
||||||
bool bCanDisplay = false;
|
// *pFb1 = 0x60;
|
||||||
|
// pFb0++;
|
||||||
uint8_t len = strlen(string);
|
// pFb1++;
|
||||||
for(int i = 0; i < len; i++) {
|
// continue;
|
||||||
char c = string[i];
|
// }
|
||||||
if(c=='-') c = '9' + 1;
|
//
|
||||||
if (bCanDisplay || c != ' ')
|
// } else if (center) {
|
||||||
{
|
// pFb0 -= 6;
|
||||||
bCanDisplay = true;
|
// pFb1 -= 6;
|
||||||
if(c>='0' && c<='9' + 1) {
|
// }
|
||||||
memcpy(pFb0 + 2, gFontBigDigits[c-'0'], char_width - 3);
|
// pFb0 += char_width;
|
||||||
memcpy(pFb1 + 2, gFontBigDigits[c-'0'] + char_width - 3, char_width - 3);
|
// pFb1 += char_width;
|
||||||
}
|
// }
|
||||||
else if(c=='.') {
|
//}
|
||||||
*pFb1 = 0x60; pFb0++; pFb1++;
|
|
||||||
*pFb1 = 0x60; pFb0++; pFb1++;
|
|
||||||
*pFb1 = 0x60; pFb0++; pFb1++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (center) {
|
|
||||||
pFb0 -= 6;
|
|
||||||
pFb1 -= 6;
|
|
||||||
}
|
|
||||||
pFb0 += char_width;
|
|
||||||
pFb1 += char_width;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
void UI_DisplayFrequency(const char *string, uint8_t X, uint8_t Y, bool center)
|
void UI_DisplayFrequency(const char *string, uint8_t X, uint8_t Y, bool center)
|
||||||
@@ -221,18 +235,16 @@ void UI_DisplayFrequency(const char *string, uint8_t X, uint8_t Y, bool center)
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void UI_DrawPixelBuffer(uint8_t (*buffer)[128], uint8_t x, uint8_t y, bool black)
|
void UI_DrawPixelBuffer(uint8_t (*buffer)[128], uint8_t x, uint8_t y, bool black) {
|
||||||
{
|
|
||||||
const uint8_t pattern = 1 << (y % 8);
|
const uint8_t pattern = 1 << (y % 8);
|
||||||
if(black)
|
if (black)
|
||||||
buffer[y/8][x] |= pattern;
|
buffer[y / 8][x] |= pattern;
|
||||||
else
|
else
|
||||||
buffer[y/8][x] &= ~pattern;
|
buffer[y / 8][x] &= ~pattern;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sort(int16_t *a, int16_t *b)
|
static void sort(int16_t *a, int16_t *b) {
|
||||||
{
|
if (*a > *b) {
|
||||||
if(*a > *b) {
|
|
||||||
int16_t t = *a;
|
int16_t t = *a;
|
||||||
*a = *b;
|
*a = *b;
|
||||||
*b = t;
|
*b = t;
|
||||||
@@ -240,66 +252,13 @@ static void sort(int16_t *a, int16_t *b)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
/*
|
|
||||||
void UI_DrawLineDottedBuffer(uint8_t (*buffer)[128], int16_t x1, int16_t y1, int16_t x2, int16_t y2, bool black)
|
|
||||||
{
|
|
||||||
if(x2==x1) {
|
|
||||||
sort(&y1, &y2);
|
|
||||||
for(int16_t i = y1; i <= y2; i+=2) {
|
|
||||||
UI_DrawPixelBuffer(buffer, x1, i, black);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const int multipl = 1000;
|
|
||||||
int a = (y2-y1)*multipl / (x2-x1);
|
|
||||||
int b = y1 - a * x1 / multipl;
|
|
||||||
|
|
||||||
sort(&x1, &x2);
|
/*
|
||||||
for(int i = x1; i<= x2; i+=2)
|
void UI_DrawLineDottedBuffer(uint8_t (*buffer)[128], int16_t x1, int16_t y1, int16_t x2, int16_t y2, bool black)
|
||||||
{
|
|
||||||
UI_DrawPixelBuffer(buffer, i, i*a/multipl +b, black);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
void PutPixel(uint8_t x, uint8_t y, bool fill) {
|
|
||||||
UI_DrawPixelBuffer(gFrameBuffer, x, y, fill);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PutPixelStatus(uint8_t x, uint8_t y, bool fill) {
|
|
||||||
UI_DrawPixelBuffer(&gStatusLine, x, y, fill);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GUI_DisplaySmallest(const char *pString, uint8_t x, uint8_t y,
|
|
||||||
bool statusbar, bool fill) {
|
|
||||||
uint8_t c;
|
|
||||||
uint8_t pixels;
|
|
||||||
const uint8_t *p = (const uint8_t *)pString;
|
|
||||||
|
|
||||||
while ((c = *p++) && c != '\0') {
|
|
||||||
c -= 0x20;
|
|
||||||
for (int i = 0; i < 3; ++i) {
|
|
||||||
pixels = gFont3x5[c][i];
|
|
||||||
for (int j = 0; j < 6; ++j) {
|
|
||||||
if (pixels & 1) {
|
|
||||||
if (statusbar)
|
|
||||||
PutPixelStatus(x + i, y + j, fill);
|
|
||||||
else
|
|
||||||
PutPixel(x + i, y + j, fill);
|
|
||||||
}
|
|
||||||
pixels >>= 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
x += 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void UI_DrawLineBuffer(uint8_t (*buffer)[128], int16_t x1, int16_t y1, int16_t x2, int16_t y2, bool black)
|
|
||||||
{
|
{
|
||||||
if(x2==x1) {
|
if(x2==x1) {
|
||||||
sort(&y1, &y2);
|
sort(&y1, &y2);
|
||||||
for(int16_t i = y1; i <= y2; i++) {
|
for(int16_t i = y1; i <= y2; i+=2) {
|
||||||
UI_DrawPixelBuffer(buffer, x1, i, black);
|
UI_DrawPixelBuffer(buffer, x1, i, black);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -308,24 +267,75 @@ void UI_DrawLineBuffer(uint8_t (*buffer)[128], int16_t x1, int16_t y1, int16_t x
|
|||||||
int b = y1 - a * x1 / multipl;
|
int b = y1 - a * x1 / multipl;
|
||||||
|
|
||||||
sort(&x1, &x2);
|
sort(&x1, &x2);
|
||||||
for(int i = x1; i<= x2; i++)
|
for(int i = x1; i<= x2; i+=2)
|
||||||
{
|
{
|
||||||
UI_DrawPixelBuffer(buffer, i, i*a/multipl +b, black);
|
UI_DrawPixelBuffer(buffer, i, i*a/multipl +b, black);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
void UI_DrawRectangleBuffer(uint8_t (*buffer)[128], int16_t x1, int16_t y1, int16_t x2, int16_t y2, bool black)
|
void PutPixel(uint8_t x, uint8_t y, bool fill) {
|
||||||
{
|
UI_DrawPixelBuffer(gFrameBuffer, x, y, fill);
|
||||||
UI_DrawLineBuffer(buffer, x1,y1, x1,y2, black);
|
}
|
||||||
UI_DrawLineBuffer(buffer, x1,y1, x2,y1, black);
|
|
||||||
UI_DrawLineBuffer(buffer, x2,y1, x2,y2, black);
|
void PutPixelStatus(uint8_t x, uint8_t y, bool fill) {
|
||||||
UI_DrawLineBuffer(buffer, x1,y2, x2,y2, black);
|
UI_DrawPixelBuffer(&gStatusLine, x, y, fill);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GUI_DisplaySmallest(const char *pString, uint8_t x, uint8_t y,
|
||||||
|
bool statusbar, bool fill) {
|
||||||
|
uint8_t c;
|
||||||
|
uint8_t pixels;
|
||||||
|
const uint8_t *p = (const uint8_t *) pString;
|
||||||
|
|
||||||
|
while ((c = *p++) && c != '\0') {
|
||||||
|
c -= 0x20;
|
||||||
|
for (int i = 0; i < 3; ++i) {
|
||||||
|
pixels = gFont3x5[c][i];
|
||||||
|
for (int j = 0; j < 6; ++j) {
|
||||||
|
if (pixels & 1) {
|
||||||
|
if (statusbar)
|
||||||
|
PutPixelStatus(x + i, y + j, fill);
|
||||||
|
else
|
||||||
|
PutPixel(x + i, y + j, fill);
|
||||||
|
}
|
||||||
|
pixels >>= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x += 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void UI_DrawLineBuffer(uint8_t (*buffer)[128], int16_t x1, int16_t y1, int16_t x2, int16_t y2, bool black) {
|
||||||
|
if (x2 == x1) {
|
||||||
|
sort(&y1, &y2);
|
||||||
|
for (int16_t i = y1; i <= y2; i++) {
|
||||||
|
UI_DrawPixelBuffer(buffer, x1, i, black);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const int multipl = 1000;
|
||||||
|
int a = (y2 - y1) * multipl / (x2 - x1);
|
||||||
|
int b = y1 - a * x1 / multipl;
|
||||||
|
|
||||||
|
sort(&x1, &x2);
|
||||||
|
for (int i = x1; i <= x2; i++) {
|
||||||
|
UI_DrawPixelBuffer(buffer, i, i * a / multipl + b, black);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UI_DrawRectangleBuffer(uint8_t (*buffer)[128], int16_t x1, int16_t y1, int16_t x2, int16_t y2, bool black) {
|
||||||
|
UI_DrawLineBuffer(buffer, x1, y1, x1, y2, black);
|
||||||
|
UI_DrawLineBuffer(buffer, x1, y1, x2, y1, black);
|
||||||
|
UI_DrawLineBuffer(buffer, x2, y1, x2, y2, black);
|
||||||
|
UI_DrawLineBuffer(buffer, x1, y2, x2, y2, black);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void UI_DisplayPopup(const char *string)
|
void UI_DisplayPopup(const char *string) {
|
||||||
{
|
|
||||||
UI_DisplayClear();
|
UI_DisplayClear();
|
||||||
|
|
||||||
// for(uint8_t i = 1; i < 5; i++) {
|
// for(uint8_t i = 1; i < 5; i++) {
|
||||||
@@ -346,7 +356,6 @@ void UI_DisplayPopup(const char *string)
|
|||||||
UI_PrintStringSmallNormal("Press EXIT", 9, 118, 6);
|
UI_PrintStringSmallNormal("Press EXIT", 9, 118, 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UI_DisplayClear()
|
void UI_DisplayClear() {
|
||||||
{
|
|
||||||
memset(gFrameBuffer, 0, sizeof(gFrameBuffer));
|
memset(gFrameBuffer, 0, sizeof(gFrameBuffer));
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -27,7 +27,7 @@ void UI_PrintStringSmallNormal(const char *pString, uint8_t Start, uint8_t End,
|
|||||||
void UI_PrintStringSmallBold(const char *pString, uint8_t Start, uint8_t End, uint8_t Line);
|
void UI_PrintStringSmallBold(const char *pString, uint8_t Start, uint8_t End, uint8_t Line);
|
||||||
void UI_PrintStringSmallBufferNormal(const char *pString, uint8_t *buffer);
|
void UI_PrintStringSmallBufferNormal(const char *pString, uint8_t *buffer);
|
||||||
void UI_PrintStringSmallBufferBold(const char *pString, uint8_t * buffer);
|
void UI_PrintStringSmallBufferBold(const char *pString, uint8_t * buffer);
|
||||||
void UI_DisplayFrequency(const char *string, uint8_t X, uint8_t Y, bool center);
|
//void UI_DisplayFrequency(const char *string, uint8_t X, uint8_t Y, bool center);
|
||||||
|
|
||||||
void UI_DisplayPopup(const char *string);
|
void UI_DisplayPopup(const char *string);
|
||||||
|
|
||||||
|
|||||||
@@ -24,12 +24,11 @@
|
|||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char name[7]; // menu display area only has room for 6 characters
|
const char name[7]; // menu display area only has room for 6 characters
|
||||||
uint8_t menu_id;
|
uint8_t menu_id;
|
||||||
} t_menu_item;
|
} t_menu_item;
|
||||||
|
|
||||||
enum
|
enum {
|
||||||
{
|
|
||||||
MENU_SQL = 0,
|
MENU_SQL = 0,
|
||||||
MENU_STEP,
|
MENU_STEP,
|
||||||
MENU_TXP,
|
MENU_TXP,
|
||||||
@@ -41,12 +40,10 @@ enum
|
|||||||
MENU_OFFSET,
|
MENU_OFFSET,
|
||||||
MENU_TOT,
|
MENU_TOT,
|
||||||
MENU_W_N,
|
MENU_W_N,
|
||||||
#ifndef ENABLE_FEAT_F4HWN
|
|
||||||
MENU_SCR,
|
MENU_SCR,
|
||||||
#endif
|
|
||||||
MENU_BCL,
|
MENU_BCL,
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
MENU_TX_LOCK,
|
MENU_TX_LOCK,
|
||||||
#endif
|
#endif
|
||||||
MENU_MEM_CH,
|
MENU_MEM_CH,
|
||||||
MENU_DEL_CH,
|
MENU_DEL_CH,
|
||||||
@@ -93,23 +90,23 @@ enum
|
|||||||
MENU_D_HOLD,
|
MENU_D_HOLD,
|
||||||
#endif
|
#endif
|
||||||
MENU_D_PRE,
|
MENU_D_PRE,
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
MENU_D_DCD,
|
MENU_D_DCD,
|
||||||
MENU_D_LIST,
|
MENU_D_LIST,
|
||||||
#endif
|
#endif
|
||||||
MENU_D_LIVE_DEC,
|
MENU_D_LIVE_DEC,
|
||||||
MENU_PONMSG,
|
MENU_FSKSRC,
|
||||||
|
MENU_FSKMOD,
|
||||||
MENU_ROGER,
|
MENU_ROGER,
|
||||||
MENU_VOL,
|
|
||||||
MENU_BAT_TXT,
|
MENU_BAT_TXT,
|
||||||
MENU_AM,
|
MENU_AM,
|
||||||
#ifdef ENABLE_AM_FIX
|
#ifdef ENABLE_AM_FIX
|
||||||
MENU_AM_FIX,
|
MENU_AM_FIX,
|
||||||
#endif
|
#endif
|
||||||
#ifndef ENABLE_FEAT_F4HWN
|
#ifndef ENABLE_FEAT_F4HWN
|
||||||
#ifdef ENABLE_NOAA
|
#ifdef ENABLE_NOAA
|
||||||
MENU_NOAA_S,
|
MENU_NOAA_S,
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
MENU_RESET,
|
MENU_RESET,
|
||||||
MENU_F_LOCK,
|
MENU_F_LOCK,
|
||||||
@@ -117,11 +114,9 @@ enum
|
|||||||
MENU_200TX,
|
MENU_200TX,
|
||||||
MENU_350TX,
|
MENU_350TX,
|
||||||
MENU_500TX,
|
MENU_500TX,
|
||||||
#endif
|
|
||||||
MENU_350EN,
|
|
||||||
#ifndef ENABLE_FEAT_F4HWN
|
|
||||||
MENU_SCREN,
|
MENU_SCREN,
|
||||||
#endif
|
#endif
|
||||||
|
MENU_350EN,
|
||||||
#ifdef ENABLE_F_CAL_MENU
|
#ifdef ENABLE_F_CAL_MENU
|
||||||
MENU_F_CALI, // reference xtal calibration
|
MENU_F_CALI, // reference xtal calibration
|
||||||
#endif
|
#endif
|
||||||
@@ -139,18 +134,18 @@ enum
|
|||||||
MENU_SET_MET,
|
MENU_SET_MET,
|
||||||
MENU_SET_GUI,
|
MENU_SET_GUI,
|
||||||
MENU_SET_TMR,
|
MENU_SET_TMR,
|
||||||
#ifdef ENABLE_FEAT_F4HWN_NARROWER
|
#ifdef ENABLE_FEAT_F4HWN_NARROWER
|
||||||
MENU_SET_NFM,
|
MENU_SET_NFM,
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_FEAT_F4HWN_VOL
|
#ifdef ENABLE_FEAT_F4HWN_VOL
|
||||||
MENU_SET_VOL,
|
MENU_SET_VOL,
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
||||||
MENU_SET_KEY,
|
MENU_SET_KEY,
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_NOAA
|
#ifdef ENABLE_NOAA
|
||||||
MENU_NOAA_S,
|
MENU_NOAA_S,
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
MENU_BATCAL, // battery voltage calibration
|
MENU_BATCAL, // battery voltage calibration
|
||||||
MENU_F1SHRT,
|
MENU_F1SHRT,
|
||||||
@@ -164,72 +159,71 @@ enum
|
|||||||
extern const uint8_t FIRST_HIDDEN_MENU_ITEM;
|
extern const uint8_t FIRST_HIDDEN_MENU_ITEM;
|
||||||
extern const t_menu_item MenuList[];
|
extern const t_menu_item MenuList[];
|
||||||
|
|
||||||
extern const char gSubMenu_TXP[8][6];
|
extern const char gSubMenu_TXP[8][6];
|
||||||
extern const char gSubMenu_SFT_D[3][4];
|
extern const char gSubMenu_SFT_D[3][4];
|
||||||
extern const char gSubMenu_W_N[2][7];
|
extern const char gSubMenu_W_N[2][7];
|
||||||
extern const char gSubMenu_OFF_ON[2][4];
|
extern const char gSubMenu_OFF_ON[2][4];
|
||||||
extern const char gSubMenu_NA[4];
|
extern const char gSubMenu_NA[4];
|
||||||
extern const char gSubMenu_TOT[11][7];
|
extern const char gSubMenu_TOT[11][7];
|
||||||
extern const char* const gSubMenu_RXMode[4];
|
extern const char *const gSubMenu_RXMode[4];
|
||||||
|
|
||||||
#ifdef ENABLE_VOICE
|
#ifdef ENABLE_VOICE
|
||||||
extern const char gSubMenu_VOICE[3][4];
|
extern const char gSubMenu_VOICE[3][4];
|
||||||
#endif
|
#endif
|
||||||
extern const char* const gSubMenu_MDF[4];
|
extern const char *const gSubMenu_MDF[4];
|
||||||
#ifdef ENABLE_ALARM
|
#ifdef ENABLE_ALARM
|
||||||
extern const char gSubMenu_AL_MOD[2][5];
|
extern const char gSubMenu_AL_MOD[2][5];
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
extern const char gSubMenu_D_RSP[4][11];
|
extern const char gSubMenu_D_RSP[4][11];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
extern const char gSubMenu_SET_PWR[7][6];
|
extern const char gSubMenu_SET_PWR[7][6];
|
||||||
extern const char gSubMenu_SET_PTT[2][8];
|
extern const char gSubMenu_SET_PTT[2][8];
|
||||||
extern const char gSubMenu_SET_TOT[4][7];
|
extern const char gSubMenu_SET_TOT[4][7];
|
||||||
extern const char gSubMenu_SET_LCK[2][9];
|
extern const char gSubMenu_SET_LCK[2][9];
|
||||||
extern const char gSubMenu_SET_MET[2][8];
|
extern const char gSubMenu_SET_MET[2][8];
|
||||||
#ifdef ENABLE_FEAT_F4HWN_NARROWER
|
#ifdef ENABLE_FEAT_F4HWN_NARROWER
|
||||||
extern const char gSubMenu_SET_NFM[2][9];
|
extern const char gSubMenu_SET_NFM[2][9];
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
||||||
extern const char gSubMenu_SET_KEY[][9];
|
extern const char gSubMenu_SET_KEY[][9];
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern const char* const gSubMenu_PTT_ID[5];
|
extern const char *const gSubMenu_PTT_ID[5];
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
extern const char gSubMenu_FSKMod[6][8];
|
||||||
extern const char gSubMenu_PONMSG[5][8];
|
extern const char gSubMenu_ROGER[3][6];
|
||||||
#else
|
extern const char gSubMenu_RESET[2][4];
|
||||||
extern const char gSubMenu_PONMSG[4][8];
|
extern const char *const gSubMenu_F_LOCK[F_LOCK_LEN];
|
||||||
#endif
|
extern const char gSubMenu_RX_TX[4][6];
|
||||||
extern const char gSubMenu_ROGER[3][6];
|
extern const char gSubMenu_BAT_TXT[3][8];
|
||||||
extern const char gSubMenu_RESET[2][4];
|
extern const char gSubMenu_BATTYP[3][9];
|
||||||
extern const char* const gSubMenu_F_LOCK[F_LOCK_LEN];
|
|
||||||
extern const char gSubMenu_RX_TX[4][6];
|
|
||||||
extern const char gSubMenu_BAT_TXT[3][8];
|
|
||||||
extern const char gSubMenu_BATTYP[3][9];
|
|
||||||
|
|
||||||
#ifndef ENABLE_FEAT_F4HWN
|
extern const char gSubMenu_SCRAMBLER[11][7];
|
||||||
extern const char gSubMenu_SCRAMBLER[11][7];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct {char* name; uint8_t id;} t_sidefunction;
|
typedef struct {
|
||||||
extern const uint8_t gSubMenu_SIDEFUNCTIONS_size;
|
char *name;
|
||||||
|
uint8_t id;
|
||||||
|
} t_sidefunction;
|
||||||
|
extern const uint8_t gSubMenu_SIDEFUNCTIONS_size;
|
||||||
extern const t_sidefunction gSubMenu_SIDEFUNCTIONS[];
|
extern const t_sidefunction gSubMenu_SIDEFUNCTIONS[];
|
||||||
|
|
||||||
extern bool gIsInSubMenu;
|
|
||||||
|
|
||||||
extern uint8_t gMenuCursor;
|
|
||||||
|
|
||||||
extern int32_t gSubMenuSelection;
|
extern bool gIsInSubMenu;
|
||||||
|
|
||||||
extern char edit_original[17];
|
extern uint8_t gMenuCursor;
|
||||||
extern char edit[17];
|
|
||||||
extern int edit_index;
|
extern int32_t gSubMenuSelection;
|
||||||
|
|
||||||
|
extern char edit_original[17];
|
||||||
|
extern char edit[17];
|
||||||
|
extern int edit_index;
|
||||||
|
|
||||||
void UI_DisplayMenu(void);
|
void UI_DisplayMenu(void);
|
||||||
|
|
||||||
int UI_MENU_GetCurrentMenuId();
|
int UI_MENU_GetCurrentMenuId();
|
||||||
|
|
||||||
uint8_t UI_MENU_GetMenuIdx(uint8_t id);
|
uint8_t UI_MENU_GetMenuIdx(uint8_t id);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -84,13 +84,6 @@ void UI_DisplayStatus()
|
|||||||
|
|
||||||
unsigned int x1 = x;
|
unsigned int x1 = x;
|
||||||
|
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
|
||||||
if (gSetting_KILLED) {
|
|
||||||
memset(line + x, 0xFF, 10);
|
|
||||||
x1 = x + 10;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{ // SCAN indicator
|
{ // SCAN indicator
|
||||||
if (gScanStateDir != SCAN_OFF || SCANNER_IsScanning()) {
|
if (gScanStateDir != SCAN_OFF || SCANNER_IsScanning()) {
|
||||||
if (IS_MR_CHANNEL(gNextMrChannel) && !SCANNER_IsScanning()) { // channel mode
|
if (IS_MR_CHANNEL(gNextMrChannel) && !SCANNER_IsScanning()) { // channel mode
|
||||||
|
|||||||
+12
-149
@@ -28,11 +28,10 @@
|
|||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "bitmaps.h"
|
#include "bitmaps.h"
|
||||||
|
|
||||||
void UI_DisplayReleaseKeys(void)
|
void UI_DisplayReleaseKeys(void) {
|
||||||
{
|
memset(gStatusLine, 0, sizeof(gStatusLine));
|
||||||
memset(gStatusLine, 0, sizeof(gStatusLine));
|
|
||||||
#if defined(ENABLE_FEAT_F4HWN_CTR) || defined(ENABLE_FEAT_F4HWN_INV)
|
#if defined(ENABLE_FEAT_F4HWN_CTR) || defined(ENABLE_FEAT_F4HWN_INV)
|
||||||
ST7565_ContrastAndInv();
|
ST7565_ContrastAndInv();
|
||||||
#endif
|
#endif
|
||||||
UI_DisplayClear();
|
UI_DisplayClear();
|
||||||
|
|
||||||
@@ -43,160 +42,24 @@ void UI_DisplayReleaseKeys(void)
|
|||||||
ST7565_BlitFullScreen();
|
ST7565_BlitFullScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UI_DisplayWelcome(void)
|
void UI_DisplayWelcome(void) {
|
||||||
{
|
|
||||||
char WelcomeString0[16];
|
|
||||||
char WelcomeString1[16];
|
|
||||||
char WelcomeString2[16];
|
|
||||||
char WelcomeString3[20];
|
|
||||||
|
|
||||||
memset(gStatusLine, 0, sizeof(gStatusLine));
|
memset(gStatusLine, 0, sizeof(gStatusLine));
|
||||||
|
|
||||||
#if defined(ENABLE_FEAT_F4HWN_CTR) || defined(ENABLE_FEAT_F4HWN_INV)
|
#if defined(ENABLE_FEAT_F4HWN_CTR) || defined(ENABLE_FEAT_F4HWN_INV)
|
||||||
ST7565_ContrastAndInv();
|
ST7565_ContrastAndInv();
|
||||||
#endif
|
#endif
|
||||||
UI_DisplayClear();
|
UI_DisplayClear();
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
|
||||||
ST7565_BlitStatusLine();
|
ST7565_BlitStatusLine();
|
||||||
ST7565_BlitFullScreen();
|
ST7565_BlitFullScreen();
|
||||||
|
|
||||||
if (gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_NONE || gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_SOUND) {
|
|
||||||
ST7565_FillScreen(0x00);
|
|
||||||
#else
|
|
||||||
if (gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_NONE || gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_FULL_SCREEN) {
|
|
||||||
ST7565_FillScreen(0xFF);
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
memset(WelcomeString0, 0, sizeof(WelcomeString0));
|
|
||||||
memset(WelcomeString1, 0, sizeof(WelcomeString1));
|
|
||||||
|
|
||||||
EEPROM_ReadBuffer(0x0EB0, WelcomeString0, 16);
|
|
||||||
EEPROM_ReadBuffer(0x0EC0, WelcomeString1, 16);
|
|
||||||
|
|
||||||
sprintf(WelcomeString2, "%u.%02uV %u%%",
|
UI_DrawLineBuffer(gFrameBuffer, 0, 31, 127, 31, 1); // Be ware, status zone = 8 lines, the rest = 56 ->total 64
|
||||||
gBatteryVoltageAverage / 100,
|
|
||||||
gBatteryVoltageAverage % 100,
|
|
||||||
BATTERY_VoltsToPercent(gBatteryVoltageAverage));
|
|
||||||
|
|
||||||
if (gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_VOLTAGE)
|
for (uint8_t i = 18; i < 110; i++) {
|
||||||
{
|
gFrameBuffer[4][i] ^= 0xFF;
|
||||||
strcpy(WelcomeString0, "VOLTAGE");
|
|
||||||
strcpy(WelcomeString1, WelcomeString2);
|
|
||||||
}
|
|
||||||
else if(gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_ALL)
|
|
||||||
{
|
|
||||||
if(strlen(WelcomeString0) == 0 && strlen(WelcomeString1) == 0)
|
|
||||||
{
|
|
||||||
strcpy(WelcomeString0, "WELCOME");
|
|
||||||
strcpy(WelcomeString1, WelcomeString2);
|
|
||||||
}
|
|
||||||
else if(strlen(WelcomeString0) == 0 || strlen(WelcomeString1) == 0)
|
|
||||||
{
|
|
||||||
if(strlen(WelcomeString0) == 0)
|
|
||||||
{
|
|
||||||
strcpy(WelcomeString0, WelcomeString1);
|
|
||||||
}
|
|
||||||
strcpy(WelcomeString1, WelcomeString2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_MESSAGE)
|
|
||||||
{
|
|
||||||
if(strlen(WelcomeString0) == 0)
|
|
||||||
{
|
|
||||||
strcpy(WelcomeString0, "WELCOME");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(strlen(WelcomeString1) == 0)
|
|
||||||
{
|
|
||||||
strcpy(WelcomeString1, "BIENVENUE");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
UI_PrintString(WelcomeString0, 0, 127, 0, 10);
|
|
||||||
UI_PrintString(WelcomeString1, 0, 127, 2, 10);
|
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
|
||||||
UI_PrintStringSmallNormal(Version, 0, 128, 4);
|
|
||||||
|
|
||||||
UI_DrawLineBuffer(gFrameBuffer, 0, 31, 127, 31, 1); // Be ware, status zone = 8 lines, the rest = 56 ->total 64
|
|
||||||
|
|
||||||
for (uint8_t i = 18; i < 110; i++)
|
|
||||||
{
|
|
||||||
gFrameBuffer[4][i] ^= 0xFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
sprintf(WelcomeString3, "%s Edition", Edition);
|
|
||||||
UI_PrintStringSmallNormal(WelcomeString3, 0, 127, 6);
|
|
||||||
|
|
||||||
/*
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
|
||||||
#if ENABLE_FEAT_F4HWN_RESCUE_OPS > 1
|
|
||||||
UI_PrintStringSmallNormal(Edition, 18, 0, 6);
|
|
||||||
if(gEeprom.MENU_LOCK == true) {
|
|
||||||
memcpy(gFrameBuffer[6] + 103, BITMAP_Ready, sizeof(BITMAP_Ready));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memcpy(gFrameBuffer[6] + 103, BITMAP_NotReady, sizeof(BITMAP_NotReady));
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
UI_PrintStringSmallNormal(Edition, 18, 0, 5);
|
|
||||||
memcpy(gFrameBuffer[5] + 103, BITMAP_Ready, sizeof(BITMAP_Ready));
|
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
|
||||||
UI_PrintStringSmallNormal("RescueOps", 18, 0, 6);
|
|
||||||
if(gEeprom.MENU_LOCK == true) {
|
|
||||||
memcpy(gFrameBuffer[6] + 103, BITMAP_Ready, sizeof(BITMAP_Ready));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memcpy(gFrameBuffer[6] + 103, BITMAP_NotReady, sizeof(BITMAP_NotReady));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
UI_PrintStringSmallNormal(Edition, 18, 0, 6);
|
|
||||||
memcpy(gFrameBuffer[6] + 103, BITMAP_Ready, sizeof(BITMAP_Ready));
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
#ifdef ENABLE_SPECTRUM
|
|
||||||
#ifdef ENABLE_FMRADIO
|
|
||||||
UI_PrintStringSmallNormal(Based, 0, 127, 5);
|
|
||||||
UI_PrintStringSmallNormal(Credits, 0, 127, 6);
|
|
||||||
#else
|
|
||||||
UI_PrintStringSmallNormal("Bandscope ", 0, 127, 5);
|
|
||||||
memcpy(gFrameBuffer[5] + 95, BITMAP_Ready, sizeof(BITMAP_Ready));
|
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
|
||||||
UI_PrintStringSmallNormal("RescueOps ", 0, 127, 6);
|
|
||||||
if(gEeprom.MENU_LOCK == true) {
|
|
||||||
memcpy(gFrameBuffer[6] + 95, BITMAP_Ready, sizeof(BITMAP_Ready));
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
UI_PrintStringSmallNormal("Broadcast ", 0, 127, 6);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN_RESCUE_OPS
|
|
||||||
UI_PrintStringSmallNormal("RescueOps ", 0, 127, 5);
|
|
||||||
if(gEeprom.MENU_LOCK == true) {
|
|
||||||
memcpy(gFrameBuffer[5] + 95, BITMAP_Ready, sizeof(BITMAP_Ready));
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
UI_PrintStringSmallNormal("Bandscope ", 0, 127, 5);
|
|
||||||
#endif
|
|
||||||
UI_PrintStringSmallNormal("Broadcast ", 0, 127, 6);
|
|
||||||
memcpy(gFrameBuffer[6] + 95, BITMAP_Ready, sizeof(BITMAP_Ready));
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
#else
|
|
||||||
UI_PrintStringSmallNormal(Version, 0, 127, 6);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//ST7565_BlitStatusLine(); // blank status line : I think it's useless
|
|
||||||
ST7565_BlitFullScreen();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//ST7565_BlitStatusLine(); // blank status line : I think it's useless
|
||||||
|
ST7565_BlitFullScreen();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
const char Version[] = AUTHOR_STRING_2 " " VERSION_STRING_2;
|
const char Version[] = AUTHOR_STRING_2 " " VERSION_STRING_2;
|
||||||
const char Edition[] = EDITION_STRING;
|
|
||||||
#else
|
#else
|
||||||
const char Version[] = AUTHOR_STRING VER;
|
const char Version[] = AUTHOR_STRING VER;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user