mirror of
https://github.com/egzumer/uv-k5-firmware-custom
synced 2024-11-21 17:19:57 +00:00
Fic typing in keys bug
This commit is contained in:
parent
40d09591b3
commit
5c346c8466
2
Makefile
2
Makefile
@ -202,7 +202,7 @@ endif
|
||||
#CFLAGS += -Wpadded
|
||||
|
||||
# catch any and all warnings
|
||||
CFLAGS += -Wextra
|
||||
#CFLAGS += -Wextra
|
||||
|
||||
CFLAGS += -DPRINTF_INCLUDE_CONFIG_H
|
||||
CFLAGS += -DGIT_HASH=\"$(GIT_HASH)\"
|
||||
|
26
README.md
26
README.md
@ -9,20 +9,24 @@ Anyway, have fun.
|
||||
|
||||
# Radio performance
|
||||
|
||||
Please note that the Quansheng uv-k radios are not professional quality transceivers, their
|
||||
performance is strictly limited, somewhat below that of a decent transceiver. The RX front
|
||||
end has no track-tuned band pass filtering at all, and so are wide band/wide open to any
|
||||
and all signals over a wide frequency range.
|
||||
Using the radio in high intensity RF environments will nearly always destroy your reception,
|
||||
the receiver simply doesn't have a great dynamic range, which means distorted AM audio with
|
||||
strong received signals, there is nothing more anyone can do in firmware/software to stop that
|
||||
happening once the RX gain adjustment I do (AM fix) reaches the hardwares limit.
|
||||
Please note that the Quansheng UV-Kx radios are not professional quality transceivers, their
|
||||
performance is strictly limited. The RX front end has no track-tuned band pass filtering
|
||||
at all, and so are wide band/wide open to any and all signals over a large frequency range.
|
||||
|
||||
Saying that, they are nice toys for the price, fun to play with.
|
||||
Using the radio in high intensity RF environments will most likely make reception anything but
|
||||
easy (AM mode will suffer far more than FM ever will), the receiver simply doesn't have a
|
||||
great dynamic range, which results in distorted AM audio with stronger RX'ed signals.
|
||||
There is nothing more anyone can do in firmware/software to improve that, once the RX gain
|
||||
adjustment I do (AM fix) reaches the hardwares limit, your AM RX audio will be all but
|
||||
non-existant (just like Quansheng's firmware).
|
||||
On the other hand, FM RX audio will/should be fine.
|
||||
|
||||
But, they are nice toys for the price, fun to play with.
|
||||
|
||||
# User customization
|
||||
|
||||
You can customize the firmware by enabling/disabling various compile options.
|
||||
You can customize the firmware by enabling/disabling various compile options, this allows
|
||||
us to remove certain firmware features in order to make room in the flash for others.
|
||||
You'll find the options at the top of "Makefile" ('0' = disable, '1' = enable) ..
|
||||
|
||||
```
|
||||
@ -68,7 +72,7 @@ ENABLE_COPY_CHAN_TO_VFO := 1 copy current channel into the other VFO
|
||||
* or
|
||||
* Long-press '5' .. Toggle selected channel scanlist setting .. if NOAA is disabled in Makefile
|
||||
*
|
||||
* Long-press '*' .. Start scanning, then toggles scanlist scan 1, 2 or ALL channel scanning
|
||||
* Long-press '*' .. Start scanning, then toggles the scanning between scanlists 1, 2 or ALL channels
|
||||
|
||||
# Some changes made from the Quansheng firmware
|
||||
|
||||
|
19
app/main.c
19
app/main.c
@ -68,8 +68,15 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep)
|
||||
uint8_t Vfo = gEeprom.TX_VFO;
|
||||
|
||||
if (gScreenToDisplay == DISPLAY_MENU)
|
||||
{
|
||||
// if (beep)
|
||||
gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL;
|
||||
return;
|
||||
}
|
||||
|
||||
// if (beep)
|
||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
||||
|
||||
switch (Key)
|
||||
{
|
||||
case KEY_0:
|
||||
@ -530,6 +537,10 @@ static void MAIN_Key_EXIT(bool bKeyPressed, bool bKeyHeld)
|
||||
|
||||
static void MAIN_Key_MENU(const bool bKeyPressed, const bool bKeyHeld)
|
||||
{
|
||||
if (bKeyPressed && !bKeyHeld)
|
||||
// menu key pressed
|
||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
||||
|
||||
if (bKeyHeld)
|
||||
{ // menu key held down (long press)
|
||||
|
||||
@ -603,14 +614,10 @@ static void MAIN_Key_MENU(const bool bKeyPressed, const bool bKeyHeld)
|
||||
const bool bFlag = (gInputBoxIndex == 0);
|
||||
gInputBoxIndex = 0;
|
||||
|
||||
gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL;
|
||||
|
||||
if (bFlag)
|
||||
{
|
||||
gFlagRefreshSetting = true;
|
||||
|
||||
gRequestDisplayScreen = DISPLAY_MENU;
|
||||
|
||||
#ifdef ENABLE_VOICE
|
||||
gAnotherVoiceID = VOICE_ID_MENU;
|
||||
#endif
|
||||
@ -808,7 +815,7 @@ void MAIN_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
||||
{
|
||||
if (!bKeyHeld)
|
||||
{
|
||||
const char Character = DTMF_GetCharacter(Key);
|
||||
const char Character = DTMF_GetCharacter(Key - KEY_0);
|
||||
if (Character != 0xFF)
|
||||
{ // add key to DTMF string
|
||||
DTMF_Append(Character);
|
||||
@ -827,7 +834,7 @@ void MAIN_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
||||
// TODO: ???
|
||||
if (Key > KEY_PTT)
|
||||
{
|
||||
Key = KEY_SIDE2;
|
||||
Key = KEY_SIDE2; // what's this doing ???
|
||||
}
|
||||
|
||||
switch (Key)
|
||||
|
@ -58,10 +58,10 @@ enum GPIOC_PINS {
|
||||
GPIOC_PIN_PTT = 5
|
||||
};
|
||||
|
||||
void GPIO_ClearBit(volatile uint32_t *pReg, uint8_t Bit);
|
||||
void GPIO_ClearBit(volatile uint32_t *pReg, uint8_t Bit);
|
||||
uint8_t GPIO_CheckBit(volatile uint32_t *pReg, uint8_t Bit);
|
||||
void GPIO_FlipBit(volatile uint32_t *pReg, uint8_t Bit);
|
||||
void GPIO_SetBit(volatile uint32_t *pReg, uint8_t Bit);
|
||||
void GPIO_FlipBit( volatile uint32_t *pReg, uint8_t Bit);
|
||||
void GPIO_SetBit( volatile uint32_t *pReg, uint8_t Bit);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -22,10 +22,10 @@
|
||||
#include "driver/i2c.h"
|
||||
#include "misc.h"
|
||||
|
||||
KEY_Code_t gKeyReading0 = KEY_INVALID;
|
||||
KEY_Code_t gKeyReading1 = KEY_INVALID;
|
||||
uint16_t gDebounceCounter;
|
||||
bool gWasFKeyPressed;
|
||||
KEY_Code_t gKeyReading0 = KEY_INVALID;
|
||||
KEY_Code_t gKeyReading1 = KEY_INVALID;
|
||||
uint16_t gDebounceCounter = 0;
|
||||
bool gWasFKeyPressed = false;
|
||||
|
||||
static const struct {
|
||||
|
||||
@ -42,9 +42,8 @@ static const struct {
|
||||
|
||||
} keyboard[] = {
|
||||
|
||||
// Zero row
|
||||
{
|
||||
// Set to zero to handle special case of nothing pulled down.
|
||||
{ // Zero row
|
||||
// Set to zero to handle special case of nothing pulled down
|
||||
.set_to_zero_mask = 0xffff,
|
||||
.pins = {
|
||||
{ .key = KEY_SIDE1, .pin = GPIOA_PIN_KEYBOARD_0},
|
||||
@ -120,6 +119,7 @@ KEY_Code_t KEYBOARD_Poll(void)
|
||||
|
||||
// Read all 4 GPIO pins at once
|
||||
reg = GPIOA->DATA;
|
||||
|
||||
for (unsigned int i = 0; i < ARRAY_SIZE(keyboard[j].pins); i++)
|
||||
{
|
||||
const uint16_t mask = 1u << keyboard[j].pins[i].pin;
|
||||
@ -134,13 +134,13 @@ KEY_Code_t KEYBOARD_Poll(void)
|
||||
break;
|
||||
}
|
||||
|
||||
// Create I2C stop condition. Since we might have toggled I2C pins.
|
||||
// Create I2C stop condition since we might have toggled I2C pins
|
||||
// This leaves GPIOA_PIN_KEYBOARD_4 and GPIOA_PIN_KEYBOARD_5 high
|
||||
I2C_Stop();
|
||||
|
||||
// Reset VOICE pins
|
||||
GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_KEYBOARD_6);
|
||||
GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_KEYBOARD_7);
|
||||
GPIO_SetBit( &GPIOA->DATA, GPIOA_PIN_KEYBOARD_7);
|
||||
|
||||
return Key;
|
||||
}
|
||||
|
@ -123,6 +123,7 @@ void ST7565_FillScreen(uint8_t Value)
|
||||
ST7565_Init(false);
|
||||
|
||||
SPI_ToggleMasterMode(&SPI0->CR, false);
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
unsigned int j;
|
||||
@ -135,6 +136,7 @@ void ST7565_FillScreen(uint8_t Value)
|
||||
}
|
||||
SPI_WaitForUndocumentedTxFifoStatusBit();
|
||||
}
|
||||
|
||||
SPI_ToggleMasterMode(&SPI0->CR, true);
|
||||
}
|
||||
|
||||
@ -152,6 +154,8 @@ void ST7565_Init(const bool full)
|
||||
|
||||
SYSTEM_DelayMs(120);
|
||||
}
|
||||
else
|
||||
SPI_ToggleMasterMode(&SPI0->CR, false);
|
||||
|
||||
ST7565_WriteByte(0xA2); // bias 9
|
||||
ST7565_WriteByte(0xC0); // com normal
|
||||
@ -164,9 +168,10 @@ void ST7565_Init(const bool full)
|
||||
ST7565_WriteByte(0x24); //
|
||||
ST7565_WriteByte(0x81); // volume first ?
|
||||
|
||||
ST7565_WriteByte(0x1f); // contrast ?
|
||||
|
||||
if (full)
|
||||
{
|
||||
ST7565_WriteByte(0x1f); // contrast ?
|
||||
ST7565_WriteByte(0x2B); // power control ?
|
||||
|
||||
SYSTEM_DelayMs(1);
|
||||
@ -181,11 +186,11 @@ void ST7565_Init(const bool full)
|
||||
ST7565_WriteByte(0x2F); //
|
||||
|
||||
SYSTEM_DelayMs(40);
|
||||
|
||||
ST7565_WriteByte(0x40); // start line ?
|
||||
ST7565_WriteByte(0xAF); // display on ?
|
||||
}
|
||||
|
||||
ST7565_WriteByte(0x40); // start line ?
|
||||
ST7565_WriteByte(0xAF); // display on ?
|
||||
|
||||
SPI_WaitForUndocumentedTxFifoStatusBit();
|
||||
|
||||
SPI_ToggleMasterMode(&SPI0->CR, true);
|
||||
|
BIN
firmware.bin
BIN
firmware.bin
Binary file not shown.
Binary file not shown.
@ -16,12 +16,13 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "driver/keyboard.h"
|
||||
#include "ui/inputbox.h"
|
||||
|
||||
char gInputBox[8];
|
||||
uint8_t gInputBoxIndex;
|
||||
|
||||
void INPUTBOX_Append(char Digit)
|
||||
void INPUTBOX_Append(const char Digit)
|
||||
{
|
||||
if (gInputBoxIndex >= sizeof(gInputBox))
|
||||
return;
|
||||
@ -29,6 +30,6 @@ void INPUTBOX_Append(char Digit)
|
||||
if (gInputBoxIndex == 0)
|
||||
memset(gInputBox, 10, sizeof(gInputBox));
|
||||
|
||||
gInputBox[gInputBoxIndex++] = Digit;
|
||||
gInputBox[gInputBoxIndex++] = Digit - KEY_0;
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
extern char gInputBox[8];
|
||||
extern uint8_t gInputBoxIndex;
|
||||
|
||||
void INPUTBOX_Append(char Digit);
|
||||
void INPUTBOX_Append(const char Digit);
|
||||
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user