Skip to content

Commit

Permalink
Fic typing in keys bug
Browse files Browse the repository at this point in the history
  • Loading branch information
OneOfEleven committed Oct 5, 2023
1 parent 40d0959 commit 5c346c8
Show file tree
Hide file tree
Showing 10 changed files with 54 additions and 37 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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)\"
Expand Down
26 changes: 15 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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) ..

```
Expand Down Expand Up @@ -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

Expand Down
19 changes: 13 additions & 6 deletions app/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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)

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand All @@ -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)
Expand Down
6 changes: 3 additions & 3 deletions driver/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

18 changes: 9 additions & 9 deletions driver/keyboard.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand All @@ -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},
Expand Down Expand Up @@ -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;
Expand All @@ -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;
}
13 changes: 9 additions & 4 deletions driver/st7565.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -135,6 +136,7 @@ void ST7565_FillScreen(uint8_t Value)
}
SPI_WaitForUndocumentedTxFifoStatusBit();
}

SPI_ToggleMasterMode(&SPI0->CR, true);
}

Expand All @@ -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
Expand All @@ -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);
Expand All @@ -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);
Expand Down
Binary file modified firmware.bin
Binary file not shown.
Binary file modified firmware.packed.bin
Binary file not shown.
5 changes: 3 additions & 2 deletions ui/inputbox.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,20 @@

#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;

if (gInputBoxIndex == 0)
memset(gInputBox, 10, sizeof(gInputBox));

gInputBox[gInputBoxIndex++] = Digit;
gInputBox[gInputBoxIndex++] = Digit - KEY_0;
}

2 changes: 1 addition & 1 deletion ui/inputbox.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
extern char gInputBox[8];
extern uint8_t gInputBoxIndex;

void INPUTBOX_Append(char Digit);
void INPUTBOX_Append(const char Digit);

#endif

0 comments on commit 5c346c8

Please sign in to comment.