mirror of
https://github.com/clockworkpi/PicoCalc.git
synced 2025-12-12 10:18:54 +01:00
151 lines
3.6 KiB
C
151 lines
3.6 KiB
C
/**
|
|
* PicoCalc SD Firmware Loader
|
|
*
|
|
* Author: Hsuan Han Lai
|
|
* Email: hsuan.han.lai@gmail.com
|
|
* Website: https://hsuanhanlai.com
|
|
* Year: 2025
|
|
*
|
|
* key_event.c
|
|
*
|
|
* Wrapper for post processing dispatch keyboard events
|
|
*
|
|
*/
|
|
|
|
#include "i2ckbd.h"
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <pico/stdio.h>
|
|
#include "key_event.h"
|
|
#include "debug.h"
|
|
|
|
void keypad_init(void)
|
|
{
|
|
init_i2c_kbd();
|
|
}
|
|
|
|
int keypad_get_key(void)
|
|
{
|
|
int r = read_i2c_kbd();
|
|
if (r < 0) {
|
|
return 0;
|
|
}
|
|
|
|
|
|
int act_key = 0;
|
|
|
|
/* Translate the keys to LVGL control characters according to your key definitions */
|
|
switch (r) {
|
|
case 0xb5: // Arrow Up
|
|
act_key = KEY_ARROW_UP;
|
|
break;
|
|
case 0xb6: // Arrow Down
|
|
act_key = KEY_ARROW_DOWN;
|
|
break;
|
|
case 0xb4: // Arrow Left
|
|
act_key = KEY_ARROW_LEFT;
|
|
break;
|
|
case 0xb7: // Arrow Right
|
|
act_key = KEY_ARROW_RIGHT;
|
|
break;
|
|
case 0x0A: // Enter
|
|
act_key = KEY_ENTER;
|
|
break;
|
|
|
|
// Special Keys
|
|
case 0x81: case 0x82: case 0x83: case 0x84: case 0x85:
|
|
case 0x86: case 0x87: case 0x88: case 0x89: case 0x90: // F1-F10 Keys
|
|
DEBUG_PRINT("Warn: F-key unmapped\n");
|
|
act_key = 0;
|
|
break;
|
|
|
|
case 0xB1: // ESC
|
|
act_key = 0;
|
|
break;
|
|
case 0x09: // TAB
|
|
act_key = 0;
|
|
break;
|
|
case 0xC1: // Caps Lock
|
|
act_key = 0;
|
|
break;
|
|
case 0xD4: // DEL
|
|
act_key = 0;
|
|
break;
|
|
case 0x08: // Backspace
|
|
act_key = KEY_BACKSPACE;
|
|
break;
|
|
|
|
case 0xD0: // brk
|
|
act_key = 0;
|
|
break;
|
|
case 0xD2: // Home
|
|
act_key = 0;
|
|
break;
|
|
case 0xD5: // End
|
|
act_key = 0;
|
|
break;
|
|
|
|
case 0x60: case 0x2F: case 0x5C: case 0x2D: case 0x3D:
|
|
case 0x5B: case 0x5D: // `/\-=[] Keys
|
|
act_key = r;
|
|
break;
|
|
|
|
case 0x7E: act_key = '~'; break;
|
|
case 0x3F: act_key = '?'; break;
|
|
case 0x7C: act_key = '|'; break;
|
|
case 0x5F: act_key = '_'; break;
|
|
case 0x2B: act_key = '+'; break;
|
|
case 0x7B: act_key = '{'; break;
|
|
case 0x7D: act_key = '}'; break;
|
|
|
|
case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
|
|
case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: // 0-9 Keys
|
|
act_key = r;
|
|
break;
|
|
|
|
case 0x21: case 0x40: case 0x23: case 0x24: case 0x25:
|
|
case 0x5E: case 0x26: case 0x2A: case 0x28: case 0x29: // !@#$%^&*() Keys
|
|
act_key = r;
|
|
break;
|
|
|
|
case 0xD1: // Insert
|
|
DEBUG_PRINT("Warn: Insert unmapped\n");
|
|
act_key = 0;
|
|
break;
|
|
|
|
case 0x3C: act_key = '<'; break;
|
|
case 0x3E: act_key = '>'; break;
|
|
|
|
case 0x3B: case 0x27: case 0x3A: case 0x22: // ;:'"" Keys
|
|
act_key = r;
|
|
break;
|
|
case 0xA5: // CTL
|
|
DEBUG_PRINT("Warn: CTL unmapped\n");
|
|
act_key = 0;
|
|
break;
|
|
case 0x20: // SPACE
|
|
act_key = r;
|
|
break;
|
|
case 0xA1: // ALT
|
|
DEBUG_PRINT("Warn: ALT unmapped\n");
|
|
act_key = 0;
|
|
break;
|
|
case 0xA2: case 0xA3: // RIGHT/LEFT SHIFT
|
|
break;
|
|
|
|
default:
|
|
act_key = r;
|
|
break;
|
|
|
|
}
|
|
return act_key;
|
|
}
|
|
|
|
int keypad_get_battery() {
|
|
int bat_pcnt = read_battery();
|
|
bat_pcnt = bat_pcnt >> 8;
|
|
//int bat_charging = bitRead(bat_pcnt, 7);
|
|
bitClear(bat_pcnt, 7);
|
|
return bat_pcnt;
|
|
|
|
} |