#include "bsp_init.h" #include "date.h" #include "main.h" #include "mywin_demo.h" #include "mywin_user_lock.h" #include "nrf.h" #include "rtthread.h" #include "stdlib.h" volatile int32_t ITM_RxBuffer = ITM_RXBUFFER_EMPTY; static void Touch_Task(void *p_arg); // 使用RTThread void my_delay_ms(uint32_t ms) { rt_thread_delay(ms); } int main(void) { RTC_InitStruct rtc_init = {0}; rtc_init.delay_ms = my_delay_ms; RTC_InitNormal(&rtc_init); bsp_init_all(); uint8_t ret = 0; static FATFS SD_FatFs; // 文件系统对象 ret = f_mount(&SD_FatFs, "0:", 1); SysFile_SetFileInit(); void test_init(void); test_init(); ALIGN(RT_ALIGN_SIZE) static rt_uint8_t rt_gui_tack[40 * 1024] = {0}; static struct rt_thread rt_gui_thread = {0}; rt_thread_init(&rt_gui_thread, "gui_task", mywin_demo_test, 0, rt_gui_tack, sizeof(rt_gui_tack), 20, 20); rt_thread_startup(&rt_gui_thread); ALIGN(RT_ALIGN_SIZE) static rt_uint8_t rt_scan_tack[1024] = {0}; static struct rt_thread rt_scan_thread = {0}; rt_thread_init(&rt_scan_thread, "scan_task", Touch_Task, 0, rt_scan_tack, sizeof(rt_scan_tack), 2, 20); rt_thread_startup(&rt_scan_thread); while (1) { LED2_ON; my_delay_ms(500); LED2_OFF; my_delay_ms(500); if (SysFile_CheckAlarm() == 1) { // 发送闹钟时间到的消息 SysFile_StructType alarm; alarm.structType = SYSFILE_TYPE_ALARM; WIN_PlaceExtData(&alarm, sizeof(SysFile_StructType)); } // printf //("memused:%.1f,%.1f,%.1f\r\n",mem_perused()/100.0,exmem_perused()/100.0,ccm_perused()/100.0); } } static void creat_lock(void *ptr) { WIN_WindowStruct *win = WIN_GetCurrentWindow(); LOCK_EnterLock("0:/PIC/3.pic"); } #define SEND_RIGHT 0x80 #define SEND_LEFT 0x40 #define SEND_DOWN 0x20 #define SEND_UP 0x10 #define SEND_START 0x08 #define SEND_SELECT 0x04 #define SEND_B 0x02 #define SEND_A 0x01 // 把手柄键值转化为MYWIN的键值 const int keyTranslatTable[] = { SEND_UP, KEY_VALUE_UP, SEND_DOWN, KEY_VALUE_DOWN, SEND_SELECT, KEY_VALUE_ENTER, SEND_START, KEY_VALUE_HOME, SEND_B, KEY_VALUE_DES, SEND_A, KEY_VALUE_LIGHT, SEND_LEFT, KEY_VALUE_LEFT, SEND_RIGHT, KEY_VALUE_RIGHT, }; int getKeyMyWin(WIN_KeyStruct *k) { uint8_t key = 0; int mywin_key = 0; static int mywin_key_old = 0; key = USART3_GetKey(); for (int i = 0; i < 8; i++) { if (key & keyTranslatTable[i * 2]) mywin_key |= keyTranslatTable[i * 2 + 1]; } if (mywin_key) { k->state = 1; k->key = mywin_key; } else { k->key = mywin_key_old; k->state = 0; } mywin_key_old = mywin_key; return key; } static void Touch_Task(void *p_arg) { (void)p_arg; uint8_t key = 0; uint8_t key_state = 0; WIN_TouchStruct t = {0}; WIN_KeyStruct k = {0}; // 设置锁屏时间为5秒 SysFile_GetSysFile()->screenOffTime = 0; int screen_off_timer = 0; int key_shield_timer = 0; int key_press = 0; while (1) { // 读取按键和触摸屏状态 Touch_Scan(); t.pressNum = Touch_GetState()->flag; if (getKeyMyWin(&k) || t.pressNum) { screen_off_timer = 0; ui_setScreenBackLightPower(1); key_press = 1; } else key_press = 0; if (t.pressNum) { t.x[0] = Touch_GetState()->x[0]; t.y[0] = Touch_GetState()->y[0]; LED1_ON; } else { LED1_OFF; } // 发送按键和触摸消息到GUI if (key_shield_timer == 0) { WIN_StorKeyStruct(&k); WIN_StorTouchStruct(&t); } // 自动熄屏超时 my_delay_ms(20); if (SysFile_GetSysFile()->screenOffTime && (SysFile_GetSysFile()->screenOffTime * 1000 < screen_off_timer)) { ui_setScreenBackLightPower(0); // 通知窗口线程调用函数 // WIN_RunInWindow("home",creat_lock,0); key_shield_timer = 1; } else { // 在过了300ms并且按键和触屏没有按下时取消屏蔽 screen_off_timer += 20; if ((screen_off_timer > 300) && key_press == 0) { key_shield_timer = 0; } } } } /*--C语言库函数--*/ void exit(int err) { while (1) ; } int system(const char *cmd) { return 0; }