void GoToSleep() { gFlags.light_sleep = !( gFlags.has_x32 || dfStatus.lsloff || gFlags.noclock ); ScreenOff(); LEDOff(); gFlags.firing = 0; BatReadTimer = 50; RTCSleep(); DevicesOnOff( 1 ); CLK_SysTickDelay( 250 ); CLK_SysTickDelay( 250 ); CLK_SysTickDelay( 250 ); if ( dfStatus.off || PE0 || KeyPressTime == 1100 ) { SYS_UnlockReg(); WDT_Close(); FlushAndSleep(); PreheatDelay = 0; } WDT_Open( WDT_TIMEOUT_2POW14, WDT_RESET_DELAY_18CLK, TRUE, FALSE ); SYS_LockReg(); gFlags.refresh_battery = 1; DevicesOnOff( 0 ); RTCWakeUp(); InitDisplay(); }
/************************************************* Function: timer_reboot_control Description: 定时重启屏背光控制切换 Input: 1.flag 1: 单片机控制屏背光 0: N32926控制屏背光 Output: 无 Return: 无 Others: 夜间重启时不能亮屏、不能响开机声音 ,以免用户察觉异常。 *************************************************/ void timer_reboot_control(uint8 flag) { dprintf("flag : %d\n", flag); if(flag == TRUE) { storage_set_McuControlLcd(1); } else { storage_set_McuControlLcd(0); ScreenOff(); // 为了保证网络芯片模块重启后正常工作 //sleep(2); } hw_set_lcd_pwm0(flag); }
static inline void OnBTNChange(bool btn_pressed, uint btn) { // Assumes btn 1..4 // De-bouncing bool *state = &btn_state[btn]; uint *tick = &btn_debounce_tick[btn]; bool *debouncing = &btn_debouncing[btn]; if (*debouncing && systick < *tick) { return; // Event occurred within debounce interval } // Change state *state = btn_pressed; *tick = systick + DEBOUNCE_INTERVAL; *debouncing = true; //printf("btn %d : %d\n", btn, btn_pressed); reset_auto_screen_off(); // Event handling if (btn_pressed) { if (!displayOn) { ScreenOn(); } else { switch (btn) { case 1: break; case 2: PrevApp(); break; case 3: NextApp(); break; case 4: ScreenOff(); break; } } AppForegroundEvent(evtBtnPress, btn); } else { AppForegroundEvent(evtBtnRelease, btn); } }
void ProcessCore() { while (1) { ProcessPowerMonitor(); // Reset debouncing when timeout period expires, // to prevent lock-up when a roll-over occurrs. uint i; for (i=1; i<=4; i++) { if (btn_debouncing[i] && systick >= btn_debounce_tick[i]) { btn_debouncing[i] = false; } } // Turn off screen automatically after some amount of time if (auto_screen_off && displayOn && systick > sleep_time) { ScreenOff(); } if (displayOn) Delay(CORE_PROCESS_INTERVAL); else Delay(CORE_STANDBY_INTERVAL); } }
/* Extract a ch completely from the world, and leave his stuff behind */ void extract_char_smarter(struct char_data *ch, int save_room) { struct obj_data *i; struct char_data *k, *next_char; struct descriptor_data *t_desc; int l, was_in, j; extern long mob_count; extern struct char_data *combat_list; void do_save(struct char_data *ch, char *argument, int cmd); void do_return(struct char_data *ch, char *argument, int cmd); void die_follower(struct char_data *ch); if(IS_SET(ch->specials.act, ACT_FIGURINE) && ch->link) extract_obj(ch->link); if(!IS_NPC(ch) && !ch->desc) { for(t_desc = descriptor_list; t_desc; t_desc = t_desc->next) if(t_desc->original==ch) do_return(t_desc->character, "", 0); } if (ch->in_room == NOWHERE) { logE("NOWHERE extracting char. (handler.c, extract_char)"); /* ** problem from linkdeath */ char_to_room(ch, 4); /* 4 == all purpose store */ } if (ch->followers || ch->master) die_follower(ch); if(ch->desc) { /* Forget snooping */ if ((ch->desc->snoop.snooping) && (ch->desc->snoop.snooping->desc)) ch->desc->snoop.snooping->desc->snoop.snoop_by = 0; if (ch->desc->snoop.snoop_by) { send_to_char("Your victim is no longer among us.\n\r", ch->desc->snoop.snoop_by); if (ch->desc->snoop.snoop_by->desc) ch->desc->snoop.snoop_by->desc->snoop.snooping = 0; } ch->desc->snoop.snooping = ch->desc->snoop.snoop_by = 0; } if (ch->carrying) { /* transfer ch's objects to room */ if (!IS_IMMORTAL(ch)) { while(ch->carrying) { i=ch->carrying; obj_from_char(i); obj_to_room(i, ch->in_room); check_falling_obj(i, ch->in_room); } } else { send_to_char("Here, you dropped some stuff, let me help you get rid of that.\n\r",ch); /* equipment too */ for (j=0; j<MAX_WEAR; j++) { if (ch->equipment[j]) obj_to_char(unequip_char(ch, j), ch); } while (ch->carrying) { i = ch->carrying; obj_from_char(i); extract_obj(i); } } } if (ch->specials.fighting) stop_fighting(ch); for (k = combat_list; k ; k = next_char) { next_char = k->next_fighting; if (k->specials.fighting == ch) stop_fighting(k); } if (MOUNTED(ch)) { Dismount(ch, MOUNTED(ch), POSITION_STANDING); } if (RIDDEN(ch)) { Dismount(RIDDEN(ch), ch, POSITION_STANDING); } /* Must remove from room before removing the equipment! */ was_in = ch->in_room; char_from_room(ch); /* clear equipment_list */ for (l = 0; l < MAX_WEAR; l++) if (ch->equipment[l]) obj_to_room(unequip_char(ch,l), was_in); if (IS_NPC(ch)) { for (k=character_list; k; k=k->next) { if (k->specials.hunting) if (k->specials.hunting == ch) { k->specials.hunting = 0; } if (Hates(k, ch)) { RemHated(k, ch); } if (Fears(k, ch)) { RemFeared(k, ch); } if (k->orig == ch) { k->orig = 0; } } } else { for (k=character_list; k; k=k->next) { if (k->specials.hunting) if (k->specials.hunting == ch) { k->specials.hunting = 0; } if (Hates(k, ch)) { ZeroHatred(k, ch); } if (Fears(k, ch)) { ZeroFeared(k, ch); } if (k->orig == ch) { k->orig = 0; } } } /* pull the char from the list */ if (ch == character_list) character_list = ch->next; else { for(k = character_list; (k) && (k->next != ch); k = k->next); if(k) k->next = ch->next; else { logE("Trying to remove ?? from character_list.(handler.c,extract_char)"); exit(0); } } if (ch->specials.gname) free(ch->specials.gname); GET_AC(ch) = 100; if (ch->desc) { if (ch->desc->original) do_return(ch, "", 0); if (!strcmp(GET_NAME(ch), "Odin's heroic minion")) { free(GET_NAME(ch)); GET_NAME(ch) = strdup("111111"); } save_char(ch, save_room); } t_desc = ch->desc; if(ch->term) { ScreenOff(ch); ch->term = 0; } if (IS_NPC(ch)) { if (ch->nr > -1) /* if mobile */ mob_index[ch->nr].number--; FreeHates(ch); FreeFears(ch); mob_count--; free_char(ch); } if (t_desc) { t_desc->connected = CON_SLCT; SEND_TO_Q(MENU, t_desc); } }
/************************************************* Function: SceneRun Description: Input: Output: �� Return: �� Others: *************************************************/ int SceneRun(void) { SDL_Event ev; int delay, frames, lastx, lasty, ret; uint32_t tick, dblclk, lasttick, mouseDownTick, feetdogtick; bool mouseDownDeal = true; bool mouseDownResult = false; Uint32 pre_type = 0; /* Watch keystrokes */ dblclk = frames = lasttick = lastx = lasty = mouseDownTick = feetdogtick = 0; for (;;) { bool result = false; if (CheckQuitValue()) { debug_log(" CheckQuitValue: %d \n", CheckQuitValue()); break; } ProcessCommand(); tick = SDL_GetTicks(); // add by chenbh 2016-10-17 feet dog 2s pertimes if (tick - feetdogtick >= 1500) { feetdogtick = tick; feetdog_task(); } #ifdef FPS_ENABLE frames++; if (tick - lasttick >= 1000) { printf("fps: %d\n", frames); frames = 0; lasttick = tick; } #endif // FPS_ENABLE while (SDL_PollEvent(&ev)) { switch (ev.type) { case SDL_KEYDOWN: { // add by chenbh if (ScreenSaverIsScreenSaving() || SceneGetCleanScreenFlg()) { ScreenSaverRefresh(); g_LcdFuncNoDeal = true; break; } ScreenSaverRefresh(); result = ituSceneUpdate(&theScene, ITU_EVENT_KEYDOWN, ev.key.keysym.sym, 0, 0); printf("ev.key.keysym.sym: %x\n", ev.key.keysym.sym); switch (ev.key.keysym.sym) { case TK_CENTER: { TouchManagerKey(); result = true; } break; case TK_MONITOR: { TouchMonitorKey(); result = true; //ScreenOn(); } break; case TK_LOCK: { #ifdef CFG_SCREENSHOT_ENABLE Screenshot(g_ScreenSurf); #else { Command cmd; memset(&cmd, 0, sizeof(Command)); cmd.id = CMD_KEY_DOWN; sprintf(cmd.strarg1, "%d", (ev.key.keysym.sym - TK_LOCK)); mq_send(g_CommandQueue, (const char*)&cmd, sizeof (Command), 0); result = true; } #endif } break; case TK_TALK: { Command cmd; memset(&cmd, 0, sizeof(Command)); cmd.id = CMD_KEY_DOWN; sprintf(cmd.strarg1, "%d", (ev.key.keysym.sym - TK_LOCK)); mq_send(g_CommandQueue, (const char*)&cmd, sizeof (Command), 0); result = true; } break; default: break; } if (result && !ScreenIsOff()) sys_key_beep(); } break; case SDL_KEYUP: { if (g_LcdFuncNoDeal == false) { result = ituSceneUpdate(&theScene, ITU_EVENT_KEYUP, ev.key.keysym.sym, 0, 0); } g_LcdFuncNoDeal = false; } break; case SDL_MOUSEMOTION: { // add by chenbh if (ScreenSaverIsScreenSaving()) { ScreenSaverRefresh(); } else { ScreenSaverRefresh(); result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEMOVE, ev.button.button, ev.button.x, ev.button.y); } g_LcdFuncNoDeal = false; } break; case SDL_MOUSEBUTTONDOWN: { // add by chenbh if (ScreenSaverIsScreenSaving()) { ScreenSaverRefresh(); g_LcdFuncNoDeal = true; break; } ScreenSaverRefresh(); { mouseDownTick = SDL_GetTicks(); #ifdef DOUBLE_KEY_ENABLE if (mouseDownTick - dblclk <= 200) { result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEDOUBLECLICK, ev.button.button, ev.button.x, ev.button.y); dblclk = 0; } else #endif // DOUBLE_KEY_ENABLE { result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEDOWN, ev.button.button, ev.button.x, ev.button.y); dblclk = mouseDownTick; lastx = ev.button.x; lasty = ev.button.y; if (result && !ScreenIsOff()) sys_key_beep(); } } } break; case SDL_MOUSEBUTTONUP: { if (g_LcdFuncNoDeal == false) { if (SDL_GetTicks() - dblclk <= 200) { int xdiff = abs(ev.button.x - lastx); int ydiff = abs(ev.button.y - lasty); if (xdiff >= GESTURE_THRESHOLD && xdiff > ydiff) { if (ev.button.x > lastx) { printf("mouse: slide to right\n"); result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDERIGHT, 1, ev.button.x, ev.button.y); } else { printf("mouse: slide to left\n"); result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDELEFT, 1, ev.button.x, ev.button.y); } } else if (ydiff >= GESTURE_THRESHOLD) { if (ev.button.y > lasty) { printf("mouse: slide to down\n"); result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDEDOWN, 1, ev.button.x, ev.button.y); } else { printf("mouse: slide to up\n"); result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDEUP, 1, ev.button.x, ev.button.y); } } } result |= ituSceneUpdate(&theScene, ITU_EVENT_MOUSEUP, ev.button.button, ev.button.x, ev.button.y); mouseDownTick = 0; } g_LcdFuncNoDeal = false; } break; case SDL_FINGERMOTION: { // add by chenbh if (ScreenSaverIsScreenSaving()) { ScreenSaverRefresh(); } else { ScreenSaverRefresh(); #ifdef USE_ANDROID_MODE if (mouseDownDeal == false && pre_type == SDL_FINGERDOWN) { printf("ANDROID press: %d %d\n", lastx, lasty); result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEDOWN, 1, lastx, lasty); mouseDownDeal = true; usleep(20*1000); } #endif //printf("touch: move %d, %d\n", ev.tfinger.x, ev.tfinger.y); result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEMOVE, 1, ev.tfinger.x, ev.tfinger.y); } g_LcdFuncNoDeal = false; pre_type = ev.type; } break; case SDL_FINGERDOWN: { // add by chenbh if (ScreenSaverIsScreenSaving()) { ScreenSaverRefresh(); g_LcdFuncNoDeal = true; break; } #ifdef USE_ANDROID_MODE ScreenSaverRefresh(); //printf("touch: down %d, %d\n", ev.tfinger.x, ev.tfinger.y); mouseDownTick = SDL_GetTicks(); dblclk = mouseDownTick; lastx = ev.tfinger.x; lasty = ev.tfinger.y; pre_type = ev.type; mouseDownDeal = false; mouseDownResult = false; SceneSetProgressBarCustomData(); #else ScreenSaverRefresh(); //printf("touch: down %d, %d\n", ev.tfinger.x, ev.tfinger.y); mouseDownTick = SDL_GetTicks(); #ifdef DOUBLE_KEY_ENABLE if (mouseDownTick - dblclk <= 200) { printf("double touch!\n"); result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEDOUBLECLICK, 1, ev.tfinger.x, ev.tfinger.y); dblclk = mouseDownTick = 0; } else #endif // DOUBLE_KEY_ENABLE { result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEDOWN, 1, ev.tfinger.x, ev.tfinger.y); dblclk = mouseDownTick; lastx = ev.tfinger.x; lasty = ev.tfinger.y; if (result && !ScreenIsOff()) sys_key_beep(); } #endif } break; case SDL_FINGERUP: { if (g_LcdFuncNoDeal == false) { //printf("touch: up %d, %d\n", ev.tfinger.x, ev.tfinger.y); if (SDL_GetTicks() - dblclk <= 300) { int xdiff = abs(ev.tfinger.x - lastx); int ydiff = abs(ev.tfinger.y - lasty); if (xdiff >= GESTURE_THRESHOLD && xdiff > ydiff) { if (ev.tfinger.x > lastx) { printf("touch: slide to right %d %d\n", ev.tfinger.x, ev.tfinger.y); result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDERIGHT, 1, ev.tfinger.x, ev.tfinger.y); } else { printf("touch: slide to left %d %d\n", ev.button.x, ev.button.y); result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDELEFT, 1, ev.tfinger.x, ev.tfinger.y); } } else if (ydiff >= GESTURE_THRESHOLD) { if (ev.tfinger.y > lasty) { printf("touch: slide to down %d %d\n", ev.tfinger.x, ev.tfinger.y); result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDEDOWN, 1, ev.tfinger.x, ev.tfinger.y); } else { printf("touch: slide to up %d %d\n", ev.tfinger.x, ev.tfinger.y); result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDEUP, 1, ev.tfinger.x, ev.tfinger.y); } } } #ifdef USE_ANDROID_MODE if (pre_type == SDL_FINGERDOWN) { if (mouseDownDeal == false) { mouseDownResult = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEDOWN, 1, lastx, lasty); result |= mouseDownResult; mouseDownDeal = true; } if (!ScreenIsOff() && mouseDownResult) { //added by WuZ in 2016-10-13 if (!mainLayer) { mainLayer = ituSceneFindWidget(&theScene, "mainLayer"); assert(mainLayer); } if (ituWidgetIsVisible(mainLayer)) { if (!mainSOSOffButton) { mainSOSOffButton = ituSceneFindWidget(&theScene, "mainSOSOffButton"); assert(mainSOSOffButton); } if (((lastx > mainSOSOffButton->bg.icon.widget.rect.x && lastx < (mainSOSOffButton->bg.icon.widget.rect.x + mainSOSOffButton->bg.icon.widget.rect.width)) && (lasty > mainSOSOffButton->bg.icon.widget.rect.y && lasty < (mainSOSOffButton->bg.icon.widget.rect.y + mainSOSOffButton->bg.icon.widget.rect.height)))) { } else { sys_key_beep(); } } else { sys_key_beep(); } } result |= ituSceneUpdate(&theScene, ITU_EVENT_TIMER, 0, 0, 0); if (result) { ituSceneDraw(&theScene, g_ScreenSurf); ituFlip(g_ScreenSurf); } } #endif result |= ituSceneUpdate(&theScene, ITU_EVENT_MOUSEUP, 1, ev.tfinger.x, ev.tfinger.y); mouseDownTick = 0; } g_LcdFuncNoDeal = false; pre_type = ev.type; } break; } } if (SYS_MEDIA_NONE != sys_get_media_state()) ScreenSaverRefresh(); if (!ScreenIsOff()) { #ifdef USE_ANDROID_MODE if (mouseDownTick > 0 && (SDL_GetTicks() - mouseDownTick >= ANDROID_PRESS_DELAY) && pre_type == SDL_FINGERDOWN && mouseDownDeal == false) { //printf("ANDROID press: %d %d\n", lastx, lasty); result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEDOWN, 1, lastx, lasty); mouseDownDeal = true; mouseDownResult = result; } #endif if (mouseDownTick > 0 && (SDL_GetTicks() - mouseDownTick >= MOUSEDOWN_LONGPRESS_DELAY) && pre_type == SDL_FINGERDOWN) { printf("long press: %d %d\n", lastx, lasty); result |= ituSceneUpdate(&theScene, ITU_EVENT_MOUSELONGPRESS, 255, lastx, lasty); mouseDownTick = 0; } result |= ituSceneUpdate(&theScene, ITU_EVENT_TIMER, 0, 0, 0); //printf("aaaaaaaaaaaaaaaaaa %d\n", result); #ifndef _WIN32 if (result) #endif { ituSceneDraw(&theScene, g_ScreenSurf); ituFlip(g_ScreenSurf); } if (SYS_MEDIA_NONE == sys_get_media_state()) { ret = ScreenSaverCheck(); if (ret == -1) { ScreenProtect(); } else if (ret == -2) { ScreenOff(); } } } else { result |= ituSceneUpdate(&theScene, ITU_EVENT_TIMER, 0, 0, 0); //printf("aaaaaaaaaaaaaaaaaa %d\n", result); #ifndef _WIN32 if (result) #endif { ituSceneDraw(&theScene, g_ScreenSurf); ituFlip(g_ScreenSurf); } } // add by chenbh if ((sys_get_media_state() == SYS_MEDIA_INTERCOM) || (sys_get_media_state() == SYS_MEDIA_MONITOR) || (sys_get_media_state() == SYS_MEDIA_LEAVEWORD_PLAY) || ScreenIsOff()) { delay = MS_PER_FRAME_EXT - (SDL_GetTicks() - tick); } else { delay = MS_PER_FRAME - (SDL_GetTicks() - tick); } //printf("scene loop delay=%d\n", delay); if (delay > 0) SDL_Delay(delay); else sched_yield(); } return g_QuitValue; }