/*! Handle the messages routed to the background task */ static void BackgroundMessageHandler(tHostMsg* pMsg) { tHostMsg* pOutgoingMsg; eMessageType Type = (eMessageType)pMsg->Type; switch(Type) { case GetDeviceType: BPL_AllocMessageBuffer(&pOutgoingMsg); pOutgoingMsg->pPayload[0] = 2; /* DIGITAL_BOARD_TYPE */ UTL_BuildHstMsg(pOutgoingMsg, GetDeviceTypeResponse, NO_MSG_OPTIONS, pOutgoingMsg->pPayload, sizeof(unsigned char)); RouteMsg(&pOutgoingMsg); break; case SetVibrateMode: SetVibrateModeHandler(pMsg); break; case SetRealTimeClock: halRtcSet((tRtcHostMsgPayload*)pMsg->pPayload); BPL_AllocMessageBuffer(&pOutgoingMsg); pOutgoingMsg->Type = IdleUpdate; pOutgoingMsg->Options = NO_MSG_OPTIONS; RouteMsg(&pOutgoingMsg); break; default: PrintStringAndHex("<<Unhandled Message>> in Background Task: Type 0x", Type); break; } }
static void PrintMessageType(tHostMsg* pMsg) { unsigned char MessageType = pMsg->Type; if ( MessageType == LastMessageType ) { PrintString("*"); AddNewline = 1; return; } else { if ( AddNewline ) { PrintString("\r\n"); } AddNewline = 0; } LastMessageType = MessageType; /* else * * this does not follow 80 character width rule because it is easier to * maintain this way */ switch (MessageType) { case InvalidMessage: PrintStringAndHex("InvalidMessage 0x",MessageType); break; case GetDeviceType: PrintStringAndHex("GetDeviceType 0x",MessageType); break; case GetDeviceTypeResponse: PrintStringAndHex("GetDeviceTypeResponse 0x",MessageType); break; case GetInfoString: PrintStringAndHex("GetInfoString 0x",MessageType); break; case GetInfoStringResponse: PrintStringAndHex("GetInfoStringResponse 0x",MessageType); break; case DiagnosticLoopback: PrintStringAndHex("DiagnosticLoopback 0x",MessageType); break; case EnterShippingModeMsg: PrintStringAndHex("EnterShippingModeMsg 0x",MessageType); break; case SoftwareResetMsg: PrintStringAndHex("SoftwareResetMsg 0x",MessageType); break; case ConnectionTimeoutMsg: PrintStringAndHex("ConnectionTimeoutMsg 0x",MessageType); break; case TurnRadioOnMsg: PrintStringAndHex("TurnRadioOnMsg 0x",MessageType); break; case TurnRadioOffMsg: PrintStringAndHex("TurnRadioOffMsg 0x",MessageType); break; case SppReserved: PrintStringAndHex("SppReserved 0x",MessageType); break; case PariringControlMsg: PrintStringAndHex("PariringControlMsg 0x",MessageType); break; case EnterSniffModeMsg: PrintStringAndHex("EnterSniffModeMsg 0x",MessageType); break; case LinkAlarmMsg: PrintStringAndHex("LinkAlarmMsg 0x",MessageType); break; case OledWriteBufferMsg: PrintStringAndHex("OledWriteBufferMsg 0x",MessageType); break; case OledConfigureModeMsg: PrintStringAndHex("OledConfigureModeMsg 0x",MessageType); break; case OledChangeModeMsg: PrintStringAndHex("OledChangeModeMsg 0x",MessageType); break; case OledWriteScrollBufferMsg: PrintStringAndHex("OledWriteScrollBufferMsg 0x",MessageType); break; case OledScrollMsg: PrintStringAndHex("OledScrollMsg 0x",MessageType); break; case OledShowIdleBufferMsg: PrintStringAndHex("OledShowIdleBufferMsg 0x",MessageType); break; case OledCrownMenuMsg: PrintStringAndHex("OledCrownMenuMsg 0x",MessageType); break; case OledCrownMenuButtonMsg: PrintStringAndHex("OledCrownMenuButtonMsg 0x",MessageType); break; case AdvanceWatchHandsMsg: PrintStringAndHex("AdvanceWatchHandsMsg 0x",MessageType); break; case SetVibrateMode: PrintStringAndHex("SetVibrateMode 0x",MessageType); break; case SetRealTimeClock: PrintStringAndHex("SetRealTimeClock 0x",MessageType); break; case GetRealTimeClock: PrintStringAndHex("GetRealTimeClock 0x",MessageType); break; case GetRealTimeClockResponse: PrintStringAndHex("GetRealTimeClockResponse 0x",MessageType);break; case StatusChangeEvent: PrintStringAndHex("StatusChangeEvent 0x",MessageType); break; case NvalOperationMsg: PrintStringAndHex("NvalOperationMsg 0x",MessageType); break; case NvalOperationResponseMsg: PrintStringAndHex("NvalOperationResponseMsg 0x",MessageType); break; case GeneralPurposePhoneMsg: PrintStringAndHex("GeneralPurposePhoneMsg 0x",MessageType); break; case GeneralPurposeWatchMsg: PrintStringAndHex("GeneralPurposeWatchMsg 0x",MessageType); break; case ButtonEventMsg: PrintStringAndHex("ButtonEventMsg 0x",MessageType); break; case WriteBuffer: PrintStringAndHex("WriteBuffer 0x",MessageType); break; case ConfigureMode: PrintStringAndHex("ConfigureMode 0x",MessageType); break; case ConfigureIdleBufferSize: PrintStringAndHex("ConfigureIdleBufferSize 0x",MessageType);break; case UpdateDisplay: PrintStringAndHex("UpdateDisplay 0x",MessageType); break; case LoadTemplate: PrintStringAndHex("LoadTemplate 0x",MessageType); break; case UpdateMyDisplaySram: PrintStringAndHex("UpdateMyDisplaySram 0x",MessageType); break; case UpdateMyDisplayLcd: PrintStringAndHex("UpdateMyDisplayLcd 0x",MessageType); break; case EnableButtonMsg: PrintStringAndHex("EnableButtonMsg 0x",MessageType); break; case DisableButtonMsg: PrintStringAndHex("DisableButtonMsg 0x",MessageType); break; case ReadButtonConfigMsg: PrintStringAndHex("ReadButtonConfigMsg 0x",MessageType); break; case ReadButtonConfigResponse: PrintStringAndHex("ReadButtonConfigResponse 0x",MessageType);break; case BatteryChargeControl: PrintStringAndHex("BatteryChargeControl 0x",MessageType); break; case IdleUpdate: PrintStringAndHex("IdleUpdate 0x",MessageType); break; case WatchDrawnScreenTimeout: PrintStringAndHex("WatchDrawnScreenTimeout 0x",MessageType);break; case WriteLcd: PrintStringAndHex("WriteLcd 0x",MessageType); break; case ClearLcd: PrintStringAndHex("ClearLcd 0x",MessageType); break; case ClearLcdSpecial: PrintStringAndHex("ClearLcdSpecial 0x",MessageType); break; case ChangeModeMsg: PrintStringAndHex("ChangeModeMsg 0x",MessageType); break; case ModeTimeoutMsg: PrintStringAndHex("ModeTimeoutMsg 0x",MessageType); break; case WatchStatusMsg: PrintStringAndHex("WatchStatusMsg 0x",MessageType); break; case MenuModeMsg: PrintStringAndHex("MenuModeMsg 0x",MessageType); break; case BarCode: PrintStringAndHex("BarCode 0x",MessageType); break; case ListPairedDevicesMsg: PrintStringAndHex("ListPairedDevicesMsg 0x",MessageType); break; case ConnectionStateChangeMsg: PrintStringAndHex("ConnectionStateChangeMsg 0x",MessageType); break; case ModifyTimeMsg: PrintStringAndHex("ModifyTimeMsg 0x",MessageType); break; case MenuButtonMsg: PrintStringAndHex("MenuButtonMsg 0x",MessageType); break; case ToggleSecondsMsg: PrintStringAndHex("ToggleSecondsMsg 0x",MessageType); break; case SplashTimeoutMsg: PrintStringAndHex("SplashTimeoutMsg 0x",MessageType); break; case LedChange: PrintStringAndHex("LedChange 0x",MessageType); break; case AccelerometerRawData: PrintStringAndHex("AccelerometerRawData 0x",MessageType); break; case QueryMemoryMsg: PrintStringAndHex("QueryMemoryMsg 0x",MessageType); break; case BatteryConfigMsg: PrintStringAndHex("BatteryConfigMsg 0x",MessageType); break; case LowBatteryWarningMsgHost: PrintStringAndHex("LowBatteryWarningMsgHost 0x",MessageType); break; case LowBatteryBtOffMsgHost: PrintStringAndHex("LowBatteryBtOffMsgHost 0x",MessageType); break; case ReadBatteryVoltageMsg: PrintStringAndHex("ReadBatteryVoltageMsg 0x",MessageType); break; case ReadBatteryVoltageResponse: PrintStringAndHex("ReadBatteryVoltageResponse 0x",MessageType); break; case ReadLightSensorMsg: PrintStringAndHex("ReadLightSensorMsg 0x",MessageType); break; case ReadLightSensorResponse: PrintStringAndHex("ReadLightSensorResponse 0x",MessageType); break; case LowBatteryWarningMsg: PrintStringAndHex("LowBatteryWarningMsg 0x",MessageType); break; case LowBatteryBtOffMsg: PrintStringAndHex("LowBatteryBtOffMsg 0x",MessageType); break; case ResetSleepCounterMsg: PrintStringAndHex("ResetSleepCounterMsg 0x",MessageType); break; default: PrintStringAndHex("Unknown Message Type 0x",MessageType); break; } }
/*! Handle the messages routed to the background task */ static void BackgroundMessageHandler(tMessage* pMsg) { tMessage OutgoingMsg; switch(pMsg->Type) { case SetCallbackTimerMsg: SetCallbackTimerHandler(pMsg); break; case GetDeviceType: SetupMessageAndAllocateBuffer(&OutgoingMsg, GetDeviceTypeResponse, NO_MSG_OPTIONS); OutgoingMsg.pBuffer[0] = BOARD_TYPE; OutgoingMsg.Length = 1; RouteMsg(&OutgoingMsg); break; case AdvanceWatchHandsMsg: AdvanceWatchHandsHandler(pMsg); break; case SetVibrateMode: SetVibrateModeHandler(pMsg); break; case SetRealTimeClock: halRtcSet((tRtcHostMsgPayload*)pMsg->pBuffer); #ifdef DIGITAL SetupMessage(&OutgoingMsg,IdleUpdate,NO_MSG_OPTIONS); RouteMsg(&OutgoingMsg); #endif break; case GetRealTimeClock: SetupMessageAndAllocateBuffer(&OutgoingMsg, GetRealTimeClockResponse, NO_MSG_OPTIONS); halRtcGet((tRtcHostMsgPayload*)OutgoingMsg.pBuffer); OutgoingMsg.Length = sizeof(tRtcHostMsgPayload); RouteMsg(&OutgoingMsg); break; case EnableButtonMsg: EnableButtonMsgHandler(pMsg); break; case DisableButtonMsg: DisableButtonMsgHandler(pMsg); break; case ReadButtonConfigMsg: ReadButtonConfigHandler(pMsg); break; case BatteryChargeControl: #ifdef DIGITAL /* update the screen if there has been a change in charging status */ if ( BatteryChargingControl() ) { SetupMessage(&OutgoingMsg, IdleUpdate, NO_MSG_OPTIONS); RouteMsg(&OutgoingMsg); } #endif BatterySenseCycle(); LowBatteryMonitor(); #ifdef TASK_DEBUG UTL_FreeRtosTaskStackCheck(); #endif #if 0 LightSenseCycle(); #endif break; case LedChange: LedChangeHandler(pMsg); break; case BatteryConfigMsg: SetBatteryLevels(pMsg->pBuffer); break; case ReadBatteryVoltageMsg: ReadBatteryVoltageHandler(); break; case ReadLightSensorMsg: ReadLightSensorHandler(); break; case SoftwareResetMsg: SoftwareResetHandler(pMsg); break; case NvalOperationMsg: NvalOperationHandler(pMsg); break; case GeneralPurposeWatchMsg: /* insert handler here */ break; case ButtonStateMsg: ButtonStateHandler(); break; /* * Accelerometer Messages */ case AccelerometerEnableMsg: AccelerometerEnable(); break; case AccelerometerDisableMsg: AccelerometerDisable(); break; case AccelerometerSendDataMsg: AccelerometerSendDataHandler(); break; case AccelerometerAccessMsg: AccelerometerAccessHandler(pMsg); break; case AccelerometerSetupMsg: AccelerometerSetupHandler(pMsg); break; /* * */ case RateTestMsg: SetupMessageAndAllocateBuffer(&OutgoingMsg,DiagnosticLoopback,NO_MSG_OPTIONS); /* don't care what data is */ OutgoingMsg.Length = 10; RouteMsg(&OutgoingMsg); break; /* * */ default: PrintStringAndHex("<<Unhandled Message>> in Background Task: Type 0x", pMsg->Type); break; } }