//------------------------------------------------------------------------------ // Async Upload DB0 (using callback as completion trigger) //------------------------------------------------------------------------------ void AsCBUploadDB0() { int Size = sizeof(Buffer); // Size is IN/OUT par // In input it tells the client the size available // In output it tells us how many bytes were uploaded. int res; JobDone=false; res=Cli_AsUpload(Client, Block_SDB, 0, &Buffer, &Size); if (res==0) { while (!JobDone) { SysSleep(100); } res=JobResult; } if (Check(res,"Async (callback) Block Upload (SDB 0)")) { printf("Dump (%d bytes) :\n",Size); hexdump(&Buffer,Size); } }
//--------------------------------------------------------------------------- void TCustomMsgServer::TerminateAll() { int c; longword Elapsed; bool Timeout; if (ClientsCount > 0) { for (c = 0; c < MaxWorkers; c++) { if (Workers[c] != 0) PMsgWorkerThread(Workers[c])->Terminate(); } // Wait for closing Elapsed = SysGetTick(); Timeout = false; while (!Timeout && (ClientsCount > 0)) { Timeout = DeltaTime(Elapsed) > WkTimeout; if (!Timeout) SysSleep(100); }; if (ClientsCount > 0) KillAll(); // one o more threads are hanged ClientsCount = 0; } }
int MainIdleProc(void) { // should not let POS go into sleep mode when running simulator int iRet; if (POWER_BATTERY == OsCheckPowerSupply()) { if (glSysParam.stEdcInfo.ucIdleShutdown) { PowerOff(); } else { // Modified by Kim_LinHB 2014-7-8 Gui_ClearScr(); Gui_ShowMsgBox(_T("POWER SAVING"), gl_stTitleAttr, NULL, _T("PRESS ANY KEY\nTO RECOVER"), gl_stCenterAttr, GUI_BUTTON_NONE, 0, NULL); do { iRet = SysSleep("00"); } while((iRet==-3) && (kbhit()!=0)); // 很奇怪的现象:除非在上次SysSleep返回之后调用DelayMs(3000),否则即使间隔1分钟,调用SysSleep仍会直接返回-3。 // 因此我在这里加了判断,如果返回-3而且没有按键则继续重复SysSleep // 在外部已经保证了进入MainIdleProc的间隔>=1分钟 // it needs to delay 3 seconds after return from SysSleep, otherwise SysSleep will return -3 even the period of calling SysSleep is over 1 min, // so here is a special processing, if return -3 from SysSleep and no key was pressed then continue calling SysSleep. DelayMs(100); kbflush(); Gui_ClearScr(); // Added by Kim_LinHB 2014-08-13 v1.01.0003 } return 0; } return -1; }
// Shutdown or reboot the PC bool wxShutdown(wxShutdownFlags wFlags) { switch (wFlags) { case wxSHUTDOWN_POWEROFF: // TODO: turn off lamps #ifdef __WXPALMOS6__ //extern void SysReset (void); //extern UInt32 SysTaskID (void); #define SysReset() #define SysTaskID() (0) SysSleep (); #else //SysSleep (false, false);// undocument API SysDoze (true); #endif break; case wxSHUTDOWN_REBOOT: SysReset (); break; } return false; }
//------------------------------------------------------------------------------ // Async Upload DB0 (using polling as completion trigger) //------------------------------------------------------------------------------ void AsPOUploadDB0() { int Size = sizeof(Buffer); // Size is IN/OUT par // In input it tells the client the size available // In output it tells us how many bytes were uploaded. int res; JobDone=false; res=Cli_AsUpload(Client, Block_SDB, 0, &Buffer, &Size); if (res==0) { while (Cli_CheckAsCompletion(Client,&res)!=JobComplete) { SysSleep(100); }; } if (Check(res,"Async (polling) Block Upload (SDB 0)")) { printf("Dump (%d bytes) :\n",Size); hexdump(&Buffer,Size); } }
int main( void ) { SysInit(); EeepromInit(); TimerInit(); ComInit(); Ds1302Init(); HtlcdInit(); BottonInit(); LedInit(); MenuInit(); INTEN while(1) { u8 botton_bit = 0; if(TimerGetSec() > 20) { TimerSetSec(0); SysSleep(); } if(TimerGetTimeFlag() > 0x01) { TimerSetTimeFlag(0); MenuRefreshTime(); } MenuFlickerServerTime(); botton_bit = BottonRead(); if(botton_bit > 0x01) { TimerSetSec(0); SysOpen(); } switch(botton_bit) { case 0x01: MenuSetFeatures(7); break;//后减档 case 0x02: MenuSetFeatures(5); break;//后加档 case 0x03: MenuSetFeatures(4); break;//前换挡 case 0x11: MenuSetFeatures(1); break;//区域3 case 0x12: MenuSetFeatures(6);//1 break;//区域2 case 0x13: MenuSetFeatures(8); break;//区域1 case 0x14: MenuSetFeatures(2); break;//区域1 case 0x15: MenuSetFeatures(3); break;//放开信号 } if(ComGetFlag() == 0x80) { ComClearFlag(); LedSet(0); switch(ComGetData(0)) { case front: switch(ComGetData(1)) { case dce_gear: MenuSetStalls(front,ComGetData(2)+1); MenuSetBattery(ComGetData(3)); break; } break; case behind: switch(ComGetData(1)) { case dce_gear: MenuSetStalls(behind,ComGetData(2)); MenuSetBattery(ComGetData(3)); break; } break; case dce_powe: MenuSetBattery(ComGetData(1)); break; } } } }