22 #include "stm32469i_discovery_ts.h" 24 #define LCD_WIDTH GSC_GRAPHICS_DISPLAY_WIDTH 25 #define LCD_HEIGHT GSC_GRAPHICS_DISPLAY_HEIGHT
27 #define MOVEEVENTINTERVAL 20 30 #define MAX_TS_EVENT_QUEUE 4 31 static unsigned char ts_data[MAX_TS_EVENT_QUEUE];
34 static unsigned short levent;
35 static unsigned int ltime;
36 static unsigned short lpos_x;
37 static unsigned short lpos_y;
39 static void inthdr_exti9_5(
unsigned int intnum,
void *sp)
41 DKFPRINTF(0x01,
"INT %d(%d)\n", (
int)intnum, HAL_GPIO_ReadPin(GPIOI, TS_INT_PIN));
43 HAL_NVIC_DisableIRQ((IRQn_Type)(TS_INT_EXTI_IRQn));
44 __HAL_GPIO_EXTI_CLEAR_IT(TS_INT_PIN);
49 #define SIZEOFSTACK (1024*4) 51 static unsigned int stack[SIZEOFSTACK/
sizeof(
unsigned int)];
57 TS_StateTypeDef TS_State;
66 BSP_TS_GetState(&TS_State);
67 DKFPRINTF(0x01,
"[%08ld] D:%d X:%d Y:%d\n", (
int)
get_kernel_time(), TS_State.touchDetected, TS_State.touchX[0], TS_State.touchY[0]);
68 HAL_NVIC_EnableIRQ((IRQn_Type)(TS_INT_EXTI_IRQn));
74 if(TS_State.touchDetected != 0) {
76 ev.pos_x = TS_State.touchX[0];
77 ev.pos_y = TS_State.touchY[0];
87 if(TS_State.touchDetected != 0) {
88 if((lpos_x != TS_State.touchX[0]) ||
89 (lpos_y != TS_State.touchY[0])) {
94 ev.pos_x = TS_State.touchX[0];
95 ev.pos_y = TS_State.touchY[0];
126 static int ts_register(
struct st_device *dev,
char *param)
135 register_interrupt(IRQ2VECT(TS_INT_EXTI_IRQn), inthdr_exti9_5);
138 stack, SIZEOFSTACK, 0);
143 HAL_NVIC_SetPriority(TS_INT_EXTI_IRQn, 0, 0);
150 .explan =
"32F469IDISCOVERY Touch Sensor",
152 .register_dev = ts_register,
#define EVT_TOUCHEND
(画面に)タッチした状態から離した
画像表示デバイスドライバ ioctl 用マクロ定義
#define LCD_HEIGHT
LCD高さドット数
#define DEF_DEV_NAME_TS
標準タッチセンサデバイス名
int task_add(task_func func, char *name, int priority, struct st_tcb *tcb, unsigned int *stack, int stack_size, char *arg)
タスクを追加する
void eventqueue_register_ISR(struct st_event *evtque, const char *name, void *args, unsigned int arg_size, int arg_count)
イベントキューを登録する
void event_wakeup_ISR(void *sp, struct st_event *evtque, void *arg)
イベントキューにイベントを登録し、イベント待ちタスクを起動する
#define LCD_WIDTH
LCD幅ドット数
void push_event_interrupt(void *sp, struct st_sysevent *event)
割り込みハンドラからシステムイベントを登録する
int unlock_device(struct st_device *dev)
デバイスをアンロックする
static int ts_task(char *arg)
#define MOVEEVENTINTERVAL
EVT_TOUCHMOVEの最小送信間隔
#define EVT_TOUCHSTART
(画面に)タッチした
#define EVT_TOUCHMOVE
(画面に)タッチしたまま動かした
unsigned long long get_kernel_time(void)
カーネル時間を取得する
char name[MAX_DEVNAMELRN]
デバイス名文字列
int lock_device(struct st_device *dev, unsigned int timeout)
デバイスをロックする
int event_wait(struct st_event *evtque, void *argp, unsigned int timeout)
タスクをイベント待ち状態にする