76 lines
No EOL
2.4 KiB
C++
76 lines
No EOL
2.4 KiB
C++
#pragma once
|
|
#include "KeyPressAbstract.hpp"
|
|
#include "omoteconfig.h"
|
|
#include <Keypad.h> // modified for inverted logic
|
|
#include <map>
|
|
|
|
class Keys : public KeyPressAbstract {
|
|
public:
|
|
Keys();
|
|
void HandleKeyPresses() override;
|
|
void QueueKeyEvent(KeyEvent aJustOccuredKeyEvent) override;
|
|
|
|
protected:
|
|
void GrabKeys();
|
|
|
|
private:
|
|
static void KeyGrabberTask(void *aSelf);
|
|
static void KeyProccessor(void *aSelf);
|
|
|
|
QueueHandle_t mKeyPressQueueHandle;
|
|
TaskHandle_t mKeyGrabbingTask;
|
|
TaskHandle_t mKeyHandlingTask;
|
|
|
|
// Keypad declarations
|
|
static const byte ROWS = 5; // four rows
|
|
static const byte COLS = 5; // four columns
|
|
// define the symbols on the buttons of the keypads
|
|
char hexaKeys[ROWS][COLS] = {
|
|
{'s', '^', '-', 'm', 'r'}, // source, channel+, Volume-, mute, record
|
|
{'i', 'R', '+', 'k', 'd'}, // info, right, Volume+, OK, down
|
|
{'4', 'v', '1', '3', '2'}, // blue, channel-, red, yellow, green
|
|
{'>', 'o', 'b', 'u', 'L'}, // forward, off, back, up, left
|
|
{'?', 'p', 'c', '<', '='} // ?, play, config, rewind, stop
|
|
};
|
|
// TODO what is '?' lol
|
|
|
|
// TODO Should be able to optomize this out by reordering Ids at some point
|
|
// or even using interrupts to trigger key press queueing
|
|
static inline const std::map<char, KeyId> charKeyToKeyIds{
|
|
{'o', KeyId::Power},
|
|
// Top 4 Buttons left to right
|
|
{'=', KeyId::Stop},
|
|
{'<', KeyId::Rewind},
|
|
{'p', KeyId::Play},
|
|
{'>', KeyId::FastForward},
|
|
// Buttons around D Pad
|
|
{'c', KeyId::Menu},
|
|
{'i', KeyId::Info},
|
|
{'b', KeyId::Back},
|
|
{'s', KeyId::Source},
|
|
// D Pad
|
|
{'u', KeyId::Up},
|
|
{'d', KeyId::Down},
|
|
{'L', KeyId::Left},
|
|
{'R', KeyId::Right},
|
|
{'k', KeyId::Center},
|
|
// Volume Channel and 2 between
|
|
{'+', KeyId::VolUp},
|
|
{'-', KeyId::VolDown},
|
|
{'m', KeyId::Mute},
|
|
{'r', KeyId::Record},
|
|
{'^', KeyId::ChannelUp},
|
|
{'v', KeyId::ChannelDown},
|
|
// Bottom 4 buttons left to right
|
|
{'1', KeyId::Aux1},
|
|
{'2', KeyId::Aux2},
|
|
{'3', KeyId::Aux3},
|
|
{'4', KeyId::Aux4}};
|
|
|
|
byte rowPins[ROWS] = {SW_A, SW_B, SW_C, SW_D,
|
|
SW_E}; // connect to the row pinouts of the keypad
|
|
byte colPins[COLS] = {SW_1, SW_2, SW_3, SW_4,
|
|
SW_5}; // connect to the column pinouts of the keypad
|
|
Keypad customKeypad =
|
|
Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
|
|
}; |