void ShowBuildInfo() { char buffer[HeaderMsgSize]; GetBuildDate((void*)&buffer,sizeof(buffer)); Serial.print("Date:"); Serial.println((char*)&buffer); Serial.print("Build:"); Serial.println(GetBuildNumber()); Serial.print("Free RAM (B):"); Serial.println( GetFreeRam()); Serial.println(); }
/* IMPORTANT: the build version is created on the compilation machine. It requires that (1) perl is installed and (2) an external file contains the number. That's why if you compile 4D on your computer, you'll probably always get a build version of 0 (if the external file is not found, "00000" is used) */ sLONG VProcess::GetChangeListNumber() const { sLONG changeListNumber = 0; VString s; GetBuildNumber( s); VIndex pos = s.FindUniChar( '.', s.GetLength(), true); if (pos > 0) { s.SubString( pos + 1, s.GetLength() - pos); changeListNumber = s.GetLong(); } return changeListNumber; }
static int LoadCdnBuildFile(TCascStorage * hs, PQUERY_KEY pFileBlob) { LPBYTE pbLineBegin = pFileBlob->pbData; LPBYTE pbVarBegin; LPBYTE pbLineEnd = NULL; while(pbLineBegin != NULL) { // Get the next line if(!GetNextFileLine(pFileBlob, &pbLineBegin, &pbLineEnd)) break; // Game name pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "build-product"); if(pbVarBegin != NULL) { GetGameType(hs, pbVarBegin, pbLineEnd); continue; } // Game build number pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "build-name"); if(pbVarBegin != NULL) { GetBuildNumber(hs, pbVarBegin, pbLineEnd); continue; } // Root pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "root"); if(pbVarBegin != NULL) { LoadSingleBlob(&hs->RootKey, pbVarBegin, pbLineEnd); continue; } // Patch pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "patch"); if(pbVarBegin != NULL) { LoadSingleBlob(&hs->PatchKey, pbVarBegin, pbLineEnd); continue; } // Download pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "download"); if(pbVarBegin != NULL) { LoadSingleBlob(&hs->DownloadKey, pbVarBegin, pbLineEnd); continue; } // Install pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "install"); if(pbVarBegin != NULL) { LoadSingleBlob(&hs->InstallKey, pbVarBegin, pbLineEnd); continue; } // Encoding keys pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "encoding"); if(pbVarBegin != NULL) { hs->pEncodingKeys = LoadMultipleBlobs(pbVarBegin, pbLineEnd, &hs->EncodingKeys); if(hs->pEncodingKeys == NULL || hs->EncodingKeys != 2) return ERROR_BAD_FORMAT; hs->EncodingKey = hs->pEncodingKeys[0]; hs->EncodingEKey = hs->pEncodingKeys[1]; continue; } } // Check the encoding keys if(hs->pEncodingKeys == NULL || hs->EncodingKeys == 0) return ERROR_BAD_FORMAT; return ERROR_SUCCESS; }
static int LoadCdnBuildFile(TCascStorage * hs, void * pvListFile) { const char * szLineBegin; const char * szVarBegin; const char * szLineEnd = NULL; int nError = ERROR_SUCCESS; for(;;) { // Get the next line if(!ListFile_GetNextLine(pvListFile, &szLineBegin, &szLineEnd)) break; // Game name szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "build-product"); if(szVarBegin != NULL) { GetGameType(hs, szVarBegin, szLineEnd); continue; } // Game build number szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "build-name"); if(szVarBegin != NULL) { GetBuildNumber(hs, szVarBegin, szLineEnd); continue; } // Root szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "root"); if(szVarBegin != NULL) { LoadSingleBlob(&hs->RootKey, szVarBegin, szLineEnd); continue; } // Patch szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "patch"); if(szVarBegin != NULL) { LoadSingleBlob(&hs->PatchKey, szVarBegin, szLineEnd); continue; } // Download szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "download"); if(szVarBegin != NULL) { LoadSingleBlob(&hs->DownloadKey, szVarBegin, szLineEnd); continue; } // Install szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "install"); if(szVarBegin != NULL) { LoadSingleBlob(&hs->InstallKey, szVarBegin, szLineEnd); continue; } // Encoding keys szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "encoding"); if(szVarBegin != NULL) { nError = LoadMultipleBlobs(&hs->EncodingKey, szVarBegin, szLineEnd, 2); continue; } } // Check the encoding keys if(hs->EncodingKey.pbData == NULL || hs->EncodingKey.cbData != MD5_HASH_SIZE * 2) return ERROR_BAD_FORMAT; return nError; }
/*! Handle the messages routed to the display queue */ static void DisplayQueueMessageHandler(tMessage *pMsg) { tMessage Msg; switch (pMsg->Type) { case ShowCallMsg: HandleCallNotification(pMsg->Options, pMsg->pBuffer, pMsg->Length); break; case WriteBufferMsg: WriteBufferHandler(pMsg); break; case SetWidgetListMsg: SetWidgetList(pMsg); break; case UpdateDisplayMsg: if ((!(pMsg->Options & MSG_OPT_UPD_INTERNAL) && (pMsg->Options & MODE_MASK) == NOTIF_MODE) && GetProperty(PROP_AUTO_BACKLIGHT)) SendMessage(AutoBacklightMsg, MSG_OPT_NONE); UpdateDisplayHandler(pMsg); break; case DrawMsg: DrawMsgHandler(pMsg); break; case UpdateClockMsg: UpdateClock(); break; case DrawClockWidgetMsg: DrawClockWidget(pMsg->Options); break; case BluetoothStateChangeMsg: BluetoothStateChangeHandler(pMsg); break; case IdleUpdateMsg: IdleUpdateHandler(); break; case ButtonStateMsg: ButtonStateHandler(); break; case StopTimerMsg: StopTimer((eTimerId)pMsg->Options); break; case MonitorBatteryMsg: MonitorBattery(); break; case MusicIconMsg: MusicIcon(pMsg->Options); break; case MusicStateMsg: HandleMusicStateChange(pMsg->Options); break; case ChangeModeMsg: ChangeMode(pMsg->Options); break; case ControlFullScreenMsg: SetProperty(PROP_PHONE_DRAW_TOP, pMsg->Options || *pMsg->pBuffer ? PROP_PHONE_DRAW_TOP : 0); break; case ModifyTimeMsg: ModifyTimeHandler(pMsg); break; case MenuModeMsg: MenuModeHandler(pMsg->Options); break; case MenuButtonMsg: MenuButtonHandler(pMsg->Options); break; case EnableButtonMsg: EnableButtonMsgHandler(pMsg); break; case DevTypeMsg: Msg.Length = 1; Msg.Type = DevTypeRespMsg; Msg.Options = BOARD_TYPE; //default G2 if (CreateMessage(&Msg)) { Msg.pBuffer[0] = BOARD_TYPE; // backward compatible if (GetMsp430HardwareRevision() < 'F') { Msg.Options = DIGITAL_WATCH_TYPE_G1; Msg.pBuffer[0] = DIGITAL_WATCH_TYPE_G1; // backward compatible } Msg.Options |= DEV_TYPE_EN_ACK; // support ACK RouteMsg(&Msg); } PrintF("- DevTypeResp:%u", Msg.Options); // set ACK and HFP/MAP bits // SendMessage(ConnTypeMsg, pMsg->Options); break; case VerInfoMsg: Msg.Length = BUILD_LENGTH + 4 + 3; Msg.Type = VerInfoRespMsg; Msg.Options = MSG_OPT_NONE; if (CreateMessage(&Msg)) { GetBuildNumber(Msg.pBuffer); *(Msg.pBuffer + BUILD_LENGTH) = VERSION[0] - ZERO; *(Msg.pBuffer + BUILD_LENGTH + 1) = VERSION[2] - ZERO; *(Msg.pBuffer + BUILD_LENGTH + 2) = VERSION[4] - ZERO; *(Msg.pBuffer + BUILD_LENGTH + 3) = GetMsp430HardwareRevision(); *(Msg.pBuffer + BUILD_LENGTH + 4) = BootVersion[0] - ZERO; *(Msg.pBuffer + BUILD_LENGTH + 5) = BootVersion[2] - ZERO; *(Msg.pBuffer + BUILD_LENGTH + 6) = BootVersion[4] - ZERO; RouteMsg(&Msg); } PrintE("-Ver(%u):", Msg.Length); PrintQ(Msg.pBuffer, Msg.Length); break; case LogMsg: SendStateLog(); break; case VibrateMsg: SetVibrateModeHandler(pMsg); break; case SetRtcMsg: if (SetRtc((Rtc_t *)pMsg->pBuffer)) UpdateClock(); break; case CountdownMsg: if (pMsg->Options == CDT_ENTER) { PageType = PAGE_TYPE_INFO; CurrentPage[PageType] = CountdownPage; } CountdownHandler(pMsg->Options); break; case ServiceMenuMsg: ServiceMenuHandler(); break; case FieldTestMsg: HandleFieldTestMode(pMsg->Options); break; case DisableButtonMsg: DisableButtonMsgHandler(pMsg); break; case ReadButtonConfigMsg: ReadButtonConfigHandler(pMsg); break; case SetBacklightMsg: SetBacklight(pMsg->Options); // testing // pMsg->Type = AccelMsg; // pMsg->Options = 1; //enable // HandleAccelerometer(pMsg); break; case AutoBacklightMsg: if (LightSenseCycle() < DARK_LEVEL) SetBacklight(LED_ON); break; case BatteryConfigMsg: SetBatteryLevels(pMsg->pBuffer); break; case ReadBatteryVoltageMsg: ReadBatteryVoltageHandler(); break; case ResetMsg: SoftwareReset(RESET_BUTTON_PRESS, pMsg->Options); break; case NvalOperationMsg: NvalOperationHandler(pMsg); break; case SecInvertMsg: HandleSecInvert(pMsg->Options); break; case LoadTemplateMsg: LoadTemplateHandler(pMsg); break; case LinkAlarmMsg: SendMessage(VibrateMsg, VIBRA_PATTERN_LNKALM); break; case ModeTimeoutMsg: ModeTimeoutHandler(); break; case WatchStatusMsg: PageType = PAGE_TYPE_INFO; CurrentPage[PageType] = StatusPage; DrawWatchStatusScreen(TRUE); break; case TermModeMsg: TermModeHandler(); break; case LowBatteryWarningMsg: break; case LowBatteryBtOffMsg: UpdateClock(); break; #if __IAR_SYSTEMS_ICC__ case EraseTemplateMsg: // EraseTemplateHandler(pMsg); break; case WriteToTemplateMsg: // WriteToTemplateHandler(pMsg); break; #endif case AccelMsg: HandleAccelerometer(pMsg); break; case ReadLightSensorMsg: ReadLightSensorHandler(); break; case WatchDrawnScreenTimeout: IdleUpdateHandler(); break; case RateTestMsg: /* don't care what data is */ Msg.Length = 10; Msg.Type = DiagnosticLoopback; Msg.Options = MSG_OPT_NONE; if (CreateMessage(&Msg)) RouteMsg(&Msg); break; default: PrintF("# Disp Msg:x%02X", pMsg->Type); break; } }