/main/keyboard.h
#pragma once

#include "freertos/FreeRTOS.h"

#define DEBOUNCE_TIMEOUT 100 / portTICK_PERIOD_MS

/* Key map
   A key's keycode is row * 3 + col

	col1           col2        col3
	----           ----        ----
row1 |	KEY_4          KEY_BAND    KEY_5 
row2 |	KEY_1          KEY_3       KEY_2 
row3 |	KEY_ON         KEY_SNOOZE  KEY_OFF 
row4 |	KEY_TUNE_PLUS  KEY_ENTER   KEY_TUNE_MINUS 
*/

typedef enum {
	KEY_4          = 0,
	KEY_BAND       = 1,
	KEY_5          = 2,
	KEY_1          = 3,
	KEY_3          = 4,
	KEY_2          = 5,
	KEY_ON         = 6,
	KEY_SNOOZE     = 7,
	KEY_OFF        = 8,
	KEY_TUNE_PLUS  = 9,
	KEY_ENTER      = 10,
	KEY_TUNE_MINUS = 11,
	KEY_COUNT      = 12,
} keycode_t;

typedef enum {
	KEY_NO_EVENT   = 0,
	KEY_PRESSED    = 1,
	KEY_RELEASED   = 2,
} key_event_type_t;

typedef uint32_t key_state_t;

typedef struct {
	keycode_t code;
	key_event_type_t type;
} key_event_t;

/* Key map addr is row * 3 + col */

int key_init();
key_event_t key_get_event(const TickType_t ticksToWait);
keycode_t key_get_pressed();
void key_test();