22 #include "stm32f7xx_hal.h" 28 #define SCANINTTIME 20 31 static unsigned short key_stat;
33 static const unsigned char key_map[KEYLINEBITS] = {
40 static void MX_GPIO_Init(
void)
42 GPIO_InitTypeDef GPIO_InitStruct;
50 GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_0;
51 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
52 GPIO_InitStruct.Pull = GPIO_PULLUP;
53 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
54 HAL_GPIO_Init(GPIOJ, &GPIO_InitStruct);
57 GPIO_InitStruct.Pin = GPIO_PIN_7;
58 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
59 GPIO_InitStruct.Pull = GPIO_PULLUP;
60 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
61 HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
64 GPIO_InitStruct.Pin = GPIO_PIN_8;
65 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
66 GPIO_InitStruct.Pull = GPIO_PULLUP;
67 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
68 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
71 static void init_gpio(
void)
76 static unsigned short scan_gpio(
void)
84 rt = ~((HAL_GPIO_ReadPin(GPIOJ, GPIO_PIN_3) << 3) |
85 (HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_7) << 2) |
86 (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_8) << 1) |
87 (HAL_GPIO_ReadPin(GPIOJ, GPIO_PIN_0) << 0));
89 DKPRINTF(0x02,
"PORT=%04X\n", (
int)rt);
94 static void scan_key(
void *sp)
105 for(i=0; i<KEYLINEBITS; i++) {
108 if((key_stat & mask) == 0) {
111 event.arg = key_map[i];
112 DKPRINTF(0x01,
"EVT_KEYDOWN(%d)\n",
120 if(key_stat & mask) {
123 event.arg = key_map[i];
124 DKPRINTF(0x01,
"EVT_KEYUP(%d)\n",
140 static void key_timer(
void *sp,
unsigned long long stime)
145 static int gpio_keyboard_register(
struct st_device *dev,
char *param)
156 const struct st_device gpio_keyboard_device = {
158 .explan =
"STM32F7 GPIO Keyboard x4",
159 .register_dev = gpio_keyboard_register,
#define EVT_KEYDOWN
キーを押した
int register_timer_func(timer_func func, unsigned long interval)
周期処理を追加する
void set_event_interrupt(void *sp)
割り込みハンドラからシステムイベント待ちタスクを起床する
void push_event_interrupt(void *sp, struct st_sysevent *event)
割り込みハンドラからシステムイベントを登録する
#define SCANINTTIME
スキャン間隔(20ms)
char name[MAX_DEVNAMELRN]
デバイス名文字列