summaryrefslogtreecommitdiffstats
path: root/app/keypad.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/keypad.c')
-rw-r--r--app/keypad.c155
1 files changed, 0 insertions, 155 deletions
diff --git a/app/keypad.c b/app/keypad.c
deleted file mode 100644
index d4a82db..0000000
--- a/app/keypad.c
+++ /dev/null
@@ -1,155 +0,0 @@
-#include "project.h"
-
-#define GPIO_CLOCK GPIOA
-#define GPIO_DATA GPIOB
-#define CLOCK GPIO5
-#define DATA GPIO11
-
-#define KEYPAD_DELAY do { delay_us(1); } while (0)
-
-
-#define SCAN_INTERVAL 73
-#define DEBOUNCE_INTERVAL 1
-#define DEBOUNCE_COUNT 3
-
-static uint32_t next_scan;
-
-
-uint16_t
-keypad_raw_read (void)
-{
- uint16_t ret = 0;
- uint16_t c;
-
-/*Reset the state machine in the keypad */
-
- gpio_set (GPIO_DATA, DATA);
- KEYPAD_DELAY;
- gpio_clear (GPIO_DATA, DATA);
- KEYPAD_DELAY;
- gpio_set (GPIO_DATA, DATA);
- KEYPAD_DELAY;
-
- gpio_clear (GPIO_CLOCK, CLOCK);
- KEYPAD_DELAY;
-
- for (c = 0x8000; c; c >>= 1)
- {
- gpio_set (GPIO_CLOCK, CLOCK);
- KEYPAD_DELAY;
- if (!(gpio_get (GPIO_DATA, DATA) & DATA))
- ret |= c;
- gpio_clear (GPIO_CLOCK, CLOCK);
- KEYPAD_DELAY;
- }
-
- gpio_set (GPIO_CLOCK, CLOCK);
-
- return ret;
-}
-
-uint16_t
-keypad_read (void)
-{
- int c;
- const uint8_t lut[] = "cdef89ab45670123";
- uint8_t ret = 0;
-
-
-
-/*Reset the state machine in the keypad */
-
- gpio_set (GPIO_DATA, DATA);
- KEYPAD_DELAY;
- gpio_clear (GPIO_DATA, DATA);
- KEYPAD_DELAY;
- gpio_set (GPIO_DATA, DATA);
- KEYPAD_DELAY;
-
- gpio_clear (GPIO_CLOCK, CLOCK);
- KEYPAD_DELAY;
-
- for (c = 0; c < 16; ++c)
- {
- gpio_set (GPIO_CLOCK, CLOCK);
- KEYPAD_DELAY;
- if (!(gpio_get (GPIO_DATA, DATA) & DATA))
- ret = lut[c];
- gpio_clear (GPIO_CLOCK, CLOCK);
- KEYPAD_DELAY;
- }
-
- gpio_set (GPIO_CLOCK, CLOCK);
-
- return ret;
-}
-
-
-static void
-keypad_scan (void)
-{
- static uint8_t last_v;
- static uint8_t key_down;
- static int same;
- uint8_t v;
-
- v = keypad_read ();
-
- next_scan = DEBOUNCE_INTERVAL;
-
- if (v!=last_v) {
- last_v=v;
- same=0;
- return;
- } else {
- if (same<DEBOUNCE_COUNT) {
- same++;
- return;
- }
- }
-
- if (!v && !key_down) {
- next_scan = SCAN_INTERVAL;
- return;
- }
-
- if (key_down==v) {
- return;
- } else if (key_down!=v) {
- if (key_down)
- key_event (key_down, 0);
- key_down=v;
- if (key_down)
- key_event (key_down, 1);
- }
-}
-
-
-
-
-void
-keypad_tick (void)
-{
-
- if (!next_scan)
- keypad_scan ();
- else
- next_scan--;
-
-}
-
-
-
-
-void
-keypad_init (void)
-{
-
- gpio_set_mode (GPIO_CLOCK, GPIO_MODE_OUTPUT_50_MHZ,
- GPIO_CNF_OUTPUT_OPENDRAIN, CLOCK);
- gpio_set_mode (GPIO_DATA, GPIO_MODE_OUTPUT_50_MHZ,
- GPIO_CNF_OUTPUT_OPENDRAIN, DATA);
-
-
-
-}