169 lines
4.0 KiB
C
169 lines
4.0 KiB
C
#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; }
|