//////////////////////////////////////////////////////////////////////////// ///@copyright Copyright (c) 2018, 传控科技 All rights reserved. ///------------------------------------------------------------------------- /// @file bsp_drv.c /// @brief bsp @ driver config ///------------------------------------------------------------------------- /// @version 1.0 /// @author CC /// @date 20180331 /// @note cc_AS_stc02 ////////////////////////////////////////////////////////////////////////////// #include "../app/task_game.h" #include "../bsp/bsp_oid.h" #include "../app/app_config.h" #include "../bsp/bsp_config.h" #include "../msp/uart0.h" #include "../msp/uart3.h" #include "../bsp/bsp_WT2605B.h" // 系统不识别的码:无效码 0x3FFF,0x0000 // 支持码:本游戏支持的 // 正确码和错误码:单个游戏内的 // 游戏标识码 // 游戏内容码 S_TASK_GAME _s_task_game; #define GAME_OID_ZBT 0x3133 #define GAME_OID_SHERT 0x3142 #define GAME_OID_ZMG 0x3152 #define EEROR_OID 0x3FFF //无效码 #define GAME_MAX_SECONDS 600 void L3_task_game_init(void) { U8 i = 0; U8 j = 0; L1_task_init(&_s_task_game.task); L3_task_s_go(_s_task_game,D_task_init); _s_task_game.read_oid = 0; _s_task_game.error_oid = EEROR_OID; _s_task_game.game_maxseconds = GAME_MAX_SECONDS; for (i = 0; i < game_num_max; i++) { _s_task_game.game_info[i].game_oid = 0; for (j = 0; j < game_supported_oid_max; j++) { _s_task_game.game_info[i].game_supported_oid[j].oid = 0; _s_task_game.game_info[i].game_supported_oid[j].yes_or_no = 1; _s_task_game.game_info[i].game_supported_oid[j].point_audio = NULL; _s_task_game.game_info[i].game_supported_oid[j].handled = 0; } } _s_task_game.game_info[0].game_oid = GAME_OID_ZBT; _s_task_game.game_info[0].game_audio = &audio_game_different; _s_task_game.game_info[0].game_supported_oid[0].oid = 0x3135; _s_task_game.game_info[0].game_supported_oid[1].oid = 0x3136; _s_task_game.game_info[0].game_supported_oid[2].oid = 0x3137; _s_task_game.game_info[0].game_supported_oid[3].oid = 0x3138; _s_task_game.game_info[0].game_supported_oid[4].oid = 0x3178; _s_task_game.game_info[0].game_supported_oid[4].yes_or_no = 0; _s_task_game.game_info[0].game_order = 0; _s_task_game.game_info[0].game_order_index = 0; _s_task_game.game_info[0].game_timeout_seconds = 600; _s_task_game.game_info[0].game_score = 0; _s_task_game.game_info[1].game_oid = GAME_OID_SHERT; _s_task_game.game_info[1].game_audio = &audio_game_shulte; _s_task_game.game_info[1].game_supported_oid[0].oid = 0x3144; _s_task_game.game_info[1].game_supported_oid[1].oid = 0x3145; _s_task_game.game_info[1].game_supported_oid[2].oid = 0x3146; _s_task_game.game_info[1].game_supported_oid[3].oid = 0x3147; _s_task_game.game_info[1].game_supported_oid[4].oid = 0x3148; _s_task_game.game_info[1].game_supported_oid[5].oid = 0x3149; _s_task_game.game_info[1].game_supported_oid[6].oid = 0x314A; _s_task_game.game_info[1].game_supported_oid[7].oid = 0x314C; _s_task_game.game_info[1].game_supported_oid[8].oid = 0x314D; _s_task_game.game_info[1].game_supported_oid[9].oid = 0x314E; _s_task_game.game_info[1].game_supported_oid[10].oid = 0x3159; _s_task_game.game_info[1].game_supported_oid[11].oid = 0x315A; _s_task_game.game_info[1].game_supported_oid[12].oid = 0x315B; _s_task_game.game_info[1].game_supported_oid[13].oid = 0x315C; _s_task_game.game_info[1].game_supported_oid[14].oid = 0x315D; _s_task_game.game_info[1].game_supported_oid[15].oid = 0x315E; _s_task_game.game_info[1].game_supported_oid[16].oid = 0x3167; _s_task_game.game_info[1].game_supported_oid[17].oid = 0x3168; _s_task_game.game_info[1].game_supported_oid[18].oid = 0x3169; _s_task_game.game_info[1].game_supported_oid[19].oid = 0x316A; _s_task_game.game_info[1].game_supported_oid[20].oid = 0x316B; _s_task_game.game_info[1].game_supported_oid[21].oid = 0x316C; _s_task_game.game_info[1].game_supported_oid[22].oid = 0x3175; _s_task_game.game_info[1].game_supported_oid[23].oid = 0x3176; _s_task_game.game_info[1].game_supported_oid[24].oid = 0x3177; _s_task_game.game_info[1].game_supported_oid[25].oid = 0x3179; _s_task_game.game_info[1].game_supported_oid[25].yes_or_no = 0; _s_task_game.game_info[1].game_order = 1; _s_task_game.game_info[1].game_order_index = 0; _s_task_game.game_info[1].game_timeout_seconds = 600; _s_task_game.game_info[1].game_score = 0; _s_task_game.game_info[2].game_oid = GAME_OID_ZMG; _s_task_game.game_info[2].game_audio = &audio_game_maze; _s_task_game.game_info[2].game_supported_oid[0].oid = 0x4E85; _s_task_game.game_info[2].game_supported_oid[1].oid = 0x4E86; _s_task_game.game_info[2].game_supported_oid[2].oid = 0x4E88; _s_task_game.game_info[2].game_supported_oid[3].oid = 0x4E89; _s_task_game.game_info[2].game_supported_oid[4].oid = 0x4E9A; _s_task_game.game_info[2].game_supported_oid[5].oid = 0x317A; _s_task_game.game_info[2].game_supported_oid[5].yes_or_no = 0; _s_task_game.game_info[2].game_order = 1; _s_task_game.game_info[2].game_order_index = 0; _s_task_game.game_info[2].game_timeout_seconds = 600; _s_task_game.game_info[2].game_score = 0; _s_task_game.game_info_index = -1; _s_task_game.game_point_index = -1; _s_task_game.start_seconds = 0; _s_task_game.eeror_times = 0; } #define D_task_READ_OID 0x50 #define D_task_GAME_SWITCH 0x51 #define D_task_GAME_PLAY 0x52 #define D_task_GAME_COMPLETED 0x53 void L3_task_game_handler(S_TASK_GAME *s) { TTSS_Task_init() L2_task_go(D_task_READ_OID); TTSS_Task_step(D_task_READ_OID) L1_Oid_readoid(); if (ts_oid.ok == 1) { ts_oid.ok = 0; s->read_oid = ts_oid.rec.d16[3]; if (s->read_oid != EEROR_OID && s->read_oid != 0x0000) { L2_task_go_Tdelay(D_task_GAME_SWITCH,D_Tdelay_100ms); } } TTSS_Task_step(D_task_GAME_SWITCH) U8 i = 0; U8 j = 0; for (i = 0; i < game_num_max; i++) { //目前仅支持3个游戏,其余游戏均初始化为0 if (s->game_info[i].game_oid == 0) { break; } if (s->game_info[i].game_oid == s->read_oid) { s->game_info_index = i; s->eeror_times = 0; s->start_seconds = s_nos_tick.t_1s; for (j = 0; j < game_supported_oid_max; j++) { s->game_info[s->game_info_index].game_supported_oid[j].handled = 0; } L2_WT2605B_Broadcast(s->game_info[i].game_audio); L2_task_go_Tdelay(D_task_READ_OID,D_Tdelay_100ms); return; } } if (s->game_info_index == -1) { L2_task_go_Tdelay(D_task_READ_OID,D_Tdelay_100ms); } else { L2_task_go_Tdelay(D_task_GAME_PLAY,D_Tdelay_100ms); } TTSS_Task_step(D_task_GAME_PLAY) U8 i = 0,j = 0; for (i = 0; i < game_supported_oid_max; i++) { POINT_INFO* p = &_s_task_game.game_info[_s_task_game.game_info_index].game_supported_oid[i]; if (p->oid == 0) { break; } if (s->read_oid == p->oid) { //错误码 if (p->yes_or_no == 0) { s->eeror_times++; L0_uart0_sendstr("eeror_times = "); L0_uart0_uchex(s->eeror_times); if (p->point_audio == NULL) { L2_WT2605B_Broadcast(&audio_game_error); } else { L2_WT2605B_Broadcast(p->point_audio); } } //正确码 else { //未处理 if (p->handled == 0) { p->handled = 1; s->game_point_index = i; //正确提示声音放在判断是否完成中 L2_task_go_Tdelay(D_task_GAME_COMPLETED,D_Tdelay_100ms); return; } } L2_task_go_Tdelay(D_task_READ_OID,D_Tdelay_100ms); return; } } L0_uart0_sendstr("It's not supported oid, please try again."); L2_task_go_Tdelay(D_task_READ_OID,D_Tdelay_100ms); TTSS_Task_step(D_task_GAME_COMPLETED) U8 completed = 1; //假设已完成 U8 i = 0; for (i = 0; i < game_supported_oid_max; i++) { POINT_INFO* p = &_s_task_game.game_info[_s_task_game.game_info_index].game_supported_oid[i]; if (p->oid != 0 && p->yes_or_no == 1 && p->handled == 0) { completed = 0; break; } } if (completed == 1) { // 游戏结束,没有要进行的游戏 s->game_info_index = -1; L0_uart0_sendstr("It's completed."); // 游戏完成 L2_WT2605B_Broadcast(&audio_game_complete); } else { if (s->game_info[s->game_info_index].game_supported_oid[s->game_point_index].point_audio == NULL) { L2_WT2605B_Broadcast(&audio_game_correct); } else { L2_WT2605B_Broadcast(s->game_info[s->game_info_index].game_supported_oid[s->game_point_index].point_audio); } } L2_task_go_Tdelay(D_task_READ_OID,D_Tdelay_2s); TTSS_Task_end(); } #if 0 //NFC协议:60 20 00 07 10 02 04 00 99 83 33 4E 36 //起始帧:60 //设备ID:20 //数据长度:00 07 //命令:10 //数据:02 04 00 99 83 33 4E //校验:36 从起始帧到数据字段 [60 20 00 07 10 02 04 00 99 83 33 4E] 的所有字节的依次异或值 void parse_nfc_pkg() { TPC_NFC *p = (TPC_NFC *) ts_uart[uNum3].r.buf; p->ocr = p->buf[p->num[0] << 8 | p->num[1]]; if(p->head == 0x60 && 1 /*count_ocr() */) { U16 num = (U16)p->num[0] << 8 | p->num[1]; //只读取0x10的协议 if(p->cmd == 0x10 && num == 0x07){ //1.判定NFC卡号是否符合规则 //2.保存NFC卡号到寄存器 R.nfc.nfc_no[0] = p->buf[num-2]; R.nfc.nfc_no[1] = p->buf[num-1]; //3.设定授权标志 R.auth_flag |= 0x01; //4.打印日志 print_nfc_pkg(p); } } } void print_nfc_pkg(TPC_NFC *p) { L0_uart0_sendstr("\r\n--------- Recv NFC --------\r\n"); L0_uart0_sendstr("id : "); L0_uart0_uchex(p->slaveId); L0_uart0_0d0a(); L0_uart0_sendstr("num: "); L0_uart0_uchex(p->num[0]); L0_uart0_uchex(p->num[1]); L0_uart0_0d0a(); L0_uart0_sendstr("cmd: "); L0_uart0_uchex(p->cmd); L0_uart0_0d0a(); L0_uart0_sendstr("no : "); L0_uart0_sendArrayHex(p->buf, (U16)p->num[0] << 8 | p->num[1]); L0_uart0_0d0a(); L0_uart0_sendstr("ocr: "); L0_uart0_uchex(p->buf[(U16)p->num[0] << 8 | p->num[1]]); L0_uart0_0d0a(); } #endif