22 #if defined(GSC_TARGET_SYSTEM_STM32F746GDISCOVERY) 23 #include "stm32746g_discovery_ts.h" 24 #elif defined(GSC_TARGET_SYSTEM_STM32F769IDISCOVERY) 25 #include "stm32f769i_discovery_ts.h" 28 #define LCD_WIDTH GSC_GRAPHICS_DISPLAY_WIDTH 29 #define LCD_HEIGHT GSC_GRAPHICS_DISPLAY_HEIGHT
31 #define MOVEEVENTINTERVAL 20 34 #define MAX_TS_EVENT_QUEUE 4 35 static unsigned char ts_data[MAX_TS_EVENT_QUEUE];
38 static unsigned short levent;
39 static unsigned int ltime;
40 static unsigned short lpos_x;
41 static unsigned short lpos_y;
43 static void inthdr_exti15_10(
unsigned int intnum,
void *sp)
45 DKFPRINTF(0x01,
"INT %d(%d)\n", (
int)intnum, HAL_GPIO_ReadPin(GPIOI, GPIO_PIN_13));
47 HAL_NVIC_DisableIRQ((IRQn_Type)(TS_INT_EXTI_IRQn));
48 __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_13);
53 #define SIZEOFSTACK (1024*4) 55 static unsigned int stack[SIZEOFSTACK/
sizeof(
unsigned int)];
61 TS_StateTypeDef TS_State;
70 BSP_TS_GetState(&TS_State);
71 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]);
72 HAL_NVIC_EnableIRQ((IRQn_Type)(TS_INT_EXTI_IRQn));
78 if(TS_State.touchDetected != 0) {
80 ev.pos_x = TS_State.touchX[0];
81 ev.pos_y = TS_State.touchY[0];
91 if(TS_State.touchDetected != 0) {
92 if((lpos_x != TS_State.touchX[0]) ||
93 (lpos_y != TS_State.touchY[0])) {
98 ev.pos_x = TS_State.touchX[0];
99 ev.pos_y = TS_State.touchY[0];
130 static int ts_register(
struct st_device *dev,
char *param)
139 register_interrupt(IRQ2VECT(EXTI15_10_IRQn), inthdr_exti15_10);
142 stack, SIZEOFSTACK, 0);
147 HAL_NVIC_SetPriority(TS_INT_EXTI_IRQn, 0, 0);
154 .explan =
"STM32F7xxx-Disc Touch Sensor",
156 .register_dev = ts_register,
#define LCD_HEIGHT
LCD高さドット数
#define EVT_TOUCHEND
(画面に)タッチした状態から離した
画像表示デバイスドライバ ioctl 用マクロ定義
#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)
イベントキューにイベントを登録し、イベント待ちタスクを起動する
void push_event_interrupt(void *sp, struct st_sysevent *event)
割り込みハンドラからシステムイベントを登録する
int unlock_device(struct st_device *dev)
デバイスをアンロックする
#define MOVEEVENTINTERVAL
EVT_TOUCHMOVEの最小送信間隔
static int ts_task(char *arg)
#define LCD_WIDTH
LCD幅ドット数
#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)
タスクをイベント待ち状態にする