mirror of
https://github.com/OneOfEleven/uv-k5-firmware-custom.git
synced 2025-04-28 22:31:25 +03:00
Fixed silly error I made
This commit is contained in:
parent
bd9f337a5b
commit
40d09591b3
2
Makefile
2
Makefile
@ -200,6 +200,8 @@ endif
|
|||||||
|
|
||||||
# May cause unhelpful build failures
|
# May cause unhelpful build failures
|
||||||
#CFLAGS += -Wpadded
|
#CFLAGS += -Wpadded
|
||||||
|
|
||||||
|
# catch any and all warnings
|
||||||
CFLAGS += -Wextra
|
CFLAGS += -Wextra
|
||||||
|
|
||||||
CFLAGS += -DPRINTF_INCLUDE_CONFIG_H
|
CFLAGS += -DPRINTF_INCLUDE_CONFIG_H
|
||||||
|
@ -1376,7 +1376,7 @@ void APP_CheckKeys(void)
|
|||||||
Key == KEY_DOWN ||
|
Key == KEY_DOWN ||
|
||||||
Key == KEY_EXIT ||
|
Key == KEY_EXIT ||
|
||||||
Key == KEY_MENU ||
|
Key == KEY_MENU ||
|
||||||
Key <= KEY_9) // keys 0-9 can be held down to bypass pressing the F-Key
|
(Key >= KEY_0 && Key <= KEY_9)) // keys 0-9 can be held down to bypass pressing the F-Key
|
||||||
{
|
{
|
||||||
gKeyBeingHeld = true;
|
gKeyBeingHeld = true;
|
||||||
APP_ProcessKey(Key, true, true);
|
APP_ProcessKey(Key, true, true);
|
||||||
|
@ -1175,7 +1175,7 @@ static void MENU_Key_0_to_9(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
|||||||
|
|
||||||
if (edit_index < 10)
|
if (edit_index < 10)
|
||||||
{
|
{
|
||||||
if (/* Key >= KEY_0 && */ Key <= KEY_9)
|
if (Key >= KEY_0 && Key <= KEY_9)
|
||||||
{
|
{
|
||||||
edit[edit_index] = '0' + Key - KEY_0;
|
edit[edit_index] = '0' + Key - KEY_0;
|
||||||
|
|
||||||
|
@ -28,70 +28,69 @@ uint16_t gDebounceCounter;
|
|||||||
bool gWasFKeyPressed;
|
bool gWasFKeyPressed;
|
||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
|
|
||||||
// Using a 16 bit pre-calculated shift and invert is cheaper
|
// Using a 16 bit pre-calculated shift and invert is cheaper
|
||||||
// than using 8 bit and doing shift and invert in code.
|
// than using 8 bit and doing shift and invert in code.
|
||||||
uint16_t set_to_zero_mask;
|
uint16_t set_to_zero_mask;
|
||||||
|
|
||||||
//We are very fortunate.
|
// We are very fortunate.
|
||||||
//The key and pin defines fit together in a single u8,
|
// The key and pin defines fit together in a single u8, making this very efficient
|
||||||
//making this very efficient
|
|
||||||
struct {
|
struct {
|
||||||
uint8_t key : 5; //Key 23 is highest
|
uint8_t key : 5; // Key 23 is highest
|
||||||
uint8_t pin : 3; //Pin 6 is highest
|
uint8_t pin : 3; // Pin 6 is highest
|
||||||
} pins[4];
|
} pins[4];
|
||||||
} keyboard[5] = {
|
|
||||||
/* Zero row */
|
} keyboard[] = {
|
||||||
|
|
||||||
|
// Zero row
|
||||||
{
|
{
|
||||||
//Set to zero to handle special case of nothing pulled down.
|
// Set to zero to handle special case of nothing pulled down.
|
||||||
.set_to_zero_mask = 0,
|
.set_to_zero_mask = 0xffff,
|
||||||
.pins = {
|
.pins = {
|
||||||
{ .key = KEY_SIDE1, .pin = GPIOA_PIN_KEYBOARD_0},
|
{ .key = KEY_SIDE1, .pin = GPIOA_PIN_KEYBOARD_0},
|
||||||
{ .key = KEY_SIDE2, .pin = GPIOA_PIN_KEYBOARD_1},
|
{ .key = KEY_SIDE2, .pin = GPIOA_PIN_KEYBOARD_1},
|
||||||
/* Duplicate to fill the array with valid values */
|
|
||||||
{ .key = KEY_SIDE2, .pin = GPIOA_PIN_KEYBOARD_1},
|
// Duplicate to fill the array with valid values
|
||||||
{ .key = KEY_SIDE2, .pin = GPIOA_PIN_KEYBOARD_1},
|
{ .key = KEY_INVALID, .pin = GPIOA_PIN_KEYBOARD_1},
|
||||||
|
{ .key = KEY_INVALID, .pin = GPIOA_PIN_KEYBOARD_1}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/* First row */
|
{ // First row
|
||||||
{
|
.set_to_zero_mask = ~(1u << GPIOA_PIN_KEYBOARD_4) & 0xffff,
|
||||||
.set_to_zero_mask = (uint16_t)(~(1u << GPIOA_PIN_KEYBOARD_4)),
|
|
||||||
.pins = {
|
.pins = {
|
||||||
{ .key = KEY_MENU, .pin = GPIOA_PIN_KEYBOARD_0},
|
{ .key = KEY_MENU, .pin = GPIOA_PIN_KEYBOARD_0},
|
||||||
{ .key = KEY_1, .pin = GPIOA_PIN_KEYBOARD_1},
|
{ .key = KEY_1, .pin = GPIOA_PIN_KEYBOARD_1},
|
||||||
{ .key = KEY_4, .pin = GPIOA_PIN_KEYBOARD_2},
|
{ .key = KEY_4, .pin = GPIOA_PIN_KEYBOARD_2},
|
||||||
{ .key = KEY_7, .pin = GPIOA_PIN_KEYBOARD_3},
|
{ .key = KEY_7, .pin = GPIOA_PIN_KEYBOARD_3}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/* Second row */
|
{ // Second row
|
||||||
{
|
.set_to_zero_mask = ~(1u << GPIOA_PIN_KEYBOARD_5) & 0xffff,
|
||||||
.set_to_zero_mask = (uint16_t)(~(1u << GPIOA_PIN_KEYBOARD_5)),
|
|
||||||
.pins = {
|
.pins = {
|
||||||
{ .key = KEY_UP, .pin = GPIOA_PIN_KEYBOARD_0},
|
{ .key = KEY_UP, .pin = GPIOA_PIN_KEYBOARD_0},
|
||||||
{ .key = KEY_2 , .pin = GPIOA_PIN_KEYBOARD_1},
|
{ .key = KEY_2 , .pin = GPIOA_PIN_KEYBOARD_1},
|
||||||
{ .key = KEY_5 , .pin = GPIOA_PIN_KEYBOARD_2},
|
{ .key = KEY_5 , .pin = GPIOA_PIN_KEYBOARD_2},
|
||||||
{ .key = KEY_8 , .pin = GPIOA_PIN_KEYBOARD_3},
|
{ .key = KEY_8 , .pin = GPIOA_PIN_KEYBOARD_3}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/* Third row */
|
{ // Third row
|
||||||
{
|
.set_to_zero_mask = ~(1u << GPIOA_PIN_KEYBOARD_6) & 0xffff,
|
||||||
.set_to_zero_mask = (uint16_t)(~(1u << GPIOA_PIN_KEYBOARD_6)),
|
|
||||||
.pins = {
|
.pins = {
|
||||||
{ .key = KEY_DOWN, .pin = GPIOA_PIN_KEYBOARD_0},
|
{ .key = KEY_DOWN, .pin = GPIOA_PIN_KEYBOARD_0},
|
||||||
{ .key = KEY_3 , .pin = GPIOA_PIN_KEYBOARD_1},
|
{ .key = KEY_3 , .pin = GPIOA_PIN_KEYBOARD_1},
|
||||||
{ .key = KEY_6 , .pin = GPIOA_PIN_KEYBOARD_2},
|
{ .key = KEY_6 , .pin = GPIOA_PIN_KEYBOARD_2},
|
||||||
{ .key = KEY_9 , .pin = GPIOA_PIN_KEYBOARD_3},
|
{ .key = KEY_9 , .pin = GPIOA_PIN_KEYBOARD_3}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/* Fourth row */
|
{ // Fourth row
|
||||||
{
|
.set_to_zero_mask = ~(1u << GPIOA_PIN_KEYBOARD_7) & 0xffff,
|
||||||
.set_to_zero_mask = (uint16_t)(~(1u << GPIOA_PIN_KEYBOARD_7)),
|
|
||||||
.pins = {
|
.pins = {
|
||||||
{ .key = KEY_EXIT, .pin = GPIOA_PIN_KEYBOARD_0},
|
{ .key = KEY_EXIT, .pin = GPIOA_PIN_KEYBOARD_0},
|
||||||
{ .key = KEY_STAR, .pin = GPIOA_PIN_KEYBOARD_1},
|
{ .key = KEY_STAR, .pin = GPIOA_PIN_KEYBOARD_1},
|
||||||
{ .key = KEY_0 , .pin = GPIOA_PIN_KEYBOARD_2},
|
{ .key = KEY_0 , .pin = GPIOA_PIN_KEYBOARD_2},
|
||||||
{ .key = KEY_F , .pin = GPIOA_PIN_KEYBOARD_3},
|
{ .key = KEY_F , .pin = GPIOA_PIN_KEYBOARD_3}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
KEY_Code_t KEYBOARD_Poll(void)
|
KEY_Code_t KEYBOARD_Poll(void)
|
||||||
@ -101,26 +100,29 @@ KEY_Code_t KEYBOARD_Poll(void)
|
|||||||
// if (!GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT))
|
// if (!GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT))
|
||||||
// return KEY_PTT;
|
// return KEY_PTT;
|
||||||
|
|
||||||
|
|
||||||
// *****************
|
// *****************
|
||||||
|
|
||||||
for (unsigned int j = 0; j < ARRAY_SIZE(keyboard); j++)
|
for (unsigned int j = 0; j < ARRAY_SIZE(keyboard); j++)
|
||||||
{
|
{
|
||||||
//Set all high
|
uint16_t reg;
|
||||||
|
|
||||||
|
// Set all high
|
||||||
GPIOA->DATA |= 1u << GPIOA_PIN_KEYBOARD_4 |
|
GPIOA->DATA |= 1u << GPIOA_PIN_KEYBOARD_4 |
|
||||||
1u << GPIOA_PIN_KEYBOARD_5 |
|
1u << GPIOA_PIN_KEYBOARD_5 |
|
||||||
1u << GPIOA_PIN_KEYBOARD_6 |
|
1u << GPIOA_PIN_KEYBOARD_6 |
|
||||||
1u << GPIOA_PIN_KEYBOARD_7 ;
|
1u << GPIOA_PIN_KEYBOARD_7;
|
||||||
//Clear the pin we are selecting
|
|
||||||
|
// Clear the pin we are selecting
|
||||||
GPIOA->DATA &= keyboard[j].set_to_zero_mask;
|
GPIOA->DATA &= keyboard[j].set_to_zero_mask;
|
||||||
|
|
||||||
//Wait for the pins to stabilize. 1 works for me.
|
// Wait for the pins to stabilize
|
||||||
SYSTICK_DelayUs(2);
|
SYSTICK_DelayUs(1);
|
||||||
|
|
||||||
// Read all 4 GPIO pins at once
|
// Read all 4 GPIO pins at once
|
||||||
uint16_t reg = GPIOA->DATA;
|
reg = GPIOA->DATA;
|
||||||
for (unsigned int i = 0; i < ARRAY_SIZE(keyboard[j].pins); i++)
|
for (unsigned int i = 0; i < ARRAY_SIZE(keyboard[j].pins); i++)
|
||||||
{
|
{
|
||||||
uint16_t mask = 1u << keyboard[j].pins[i].pin;
|
const uint16_t mask = 1u << keyboard[j].pins[i].pin;
|
||||||
if (!(reg & mask))
|
if (!(reg & mask))
|
||||||
{
|
{
|
||||||
Key = keyboard[j].pins[i].key;
|
Key = keyboard[j].pins[i].key;
|
||||||
@ -132,8 +134,8 @@ KEY_Code_t KEYBOARD_Poll(void)
|
|||||||
break;
|
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
|
// This leaves GPIOA_PIN_KEYBOARD_4 and GPIOA_PIN_KEYBOARD_5 high
|
||||||
I2C_Stop();
|
I2C_Stop();
|
||||||
|
|
||||||
// Reset VOICE pins
|
// Reset VOICE pins
|
||||||
|
@ -21,30 +21,28 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
enum KEY_Code_t {
|
typedef enum {
|
||||||
KEY_0 = 0,
|
KEY_INVALID = 0,
|
||||||
KEY_1 = 1,
|
KEY_0,
|
||||||
KEY_2 = 2,
|
KEY_1,
|
||||||
KEY_3 = 3,
|
KEY_2,
|
||||||
KEY_4 = 4,
|
KEY_3,
|
||||||
KEY_5 = 5,
|
KEY_4,
|
||||||
KEY_6 = 6,
|
KEY_5,
|
||||||
KEY_7 = 7,
|
KEY_6,
|
||||||
KEY_8 = 8,
|
KEY_7,
|
||||||
KEY_9 = 9,
|
KEY_8,
|
||||||
KEY_MENU = 10,
|
KEY_9,
|
||||||
KEY_UP = 11,
|
KEY_MENU,
|
||||||
KEY_DOWN = 12,
|
KEY_UP,
|
||||||
KEY_EXIT = 13,
|
KEY_DOWN,
|
||||||
KEY_STAR = 14,
|
KEY_EXIT,
|
||||||
KEY_F = 15,
|
KEY_STAR,
|
||||||
KEY_PTT = 21,
|
KEY_F,
|
||||||
KEY_SIDE2 = 22,
|
KEY_PTT,
|
||||||
KEY_SIDE1 = 23,
|
KEY_SIDE2,
|
||||||
KEY_INVALID = 255
|
KEY_SIDE1
|
||||||
};
|
} KEY_Code_t;
|
||||||
|
|
||||||
typedef enum KEY_Code_t KEY_Code_t;
|
|
||||||
|
|
||||||
extern KEY_Code_t gKeyReading0;
|
extern KEY_Code_t gKeyReading0;
|
||||||
extern KEY_Code_t gKeyReading1;
|
extern KEY_Code_t gKeyReading1;
|
||||||
|
BIN
firmware.bin
BIN
firmware.bin
Binary file not shown.
Binary file not shown.
4
misc.h
4
misc.h
@ -31,7 +31,7 @@
|
|||||||
#define IS_NOAA_CHANNEL(x) ((x) >= NOAA_CHANNEL_FIRST && (x) <= NOAA_CHANNEL_LAST)
|
#define IS_NOAA_CHANNEL(x) ((x) >= NOAA_CHANNEL_FIRST && (x) <= NOAA_CHANNEL_LAST)
|
||||||
#define IS_NOT_NOAA_CHANNEL(x) ((x) >= MR_CHANNEL_FIRST && (x) <= FREQ_CHANNEL_LAST)
|
#define IS_NOT_NOAA_CHANNEL(x) ((x) >= MR_CHANNEL_FIRST && (x) <= FREQ_CHANNEL_LAST)
|
||||||
|
|
||||||
typedef enum {
|
enum {
|
||||||
MR_CHANNEL_FIRST = 0,
|
MR_CHANNEL_FIRST = 0,
|
||||||
MR_CHANNEL_LAST = 199u,
|
MR_CHANNEL_LAST = 199u,
|
||||||
FREQ_CHANNEL_FIRST = 200u,
|
FREQ_CHANNEL_FIRST = 200u,
|
||||||
@ -39,7 +39,7 @@ typedef enum {
|
|||||||
NOAA_CHANNEL_FIRST = 207u,
|
NOAA_CHANNEL_FIRST = 207u,
|
||||||
NOAA_CHANNEL_LAST = 216u,
|
NOAA_CHANNEL_LAST = 216u,
|
||||||
LAST_CHANNEL
|
LAST_CHANNEL
|
||||||
} channel_num_t;
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
FLASHLIGHT_OFF = 0,
|
FLASHLIGHT_OFF = 0,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user