Ejemplo n.º 1
0
static void Route(tHostMsg* pMsg, eRouteType RouteType)
{
  /* pick which function to use */
  switch (RouteType)
  {
  case NormalWait:
    SendMsgToQ = SendMessageToQueueWait;
    break;
  case FromIsr:
    SendMsgToQ = SendMessageToQueueFromIsr;
    break;
  case Normal:
  default:
    SendMsgToQ = SendMessageToQueue;
    break;
  }

  AllQueuesReadyCheck();
  
  if ( pMsg == 0 )
  {
    PrintString("ERROR: Invalid message passed to Route function\r\n");  
  }
  else if ( AllQueuesReady == 0 )
  {
    PrintString("ERROR: Cannot Route when all queues are not ready\r\n");
    SendMsgToQ(FREE_QINDEX,&pMsg);
  }
  else
  {
    PrintMessageType(pMsg);
  
    switch (pMsg->Type)
    {
    case InvalidMessage:                SendMsgToQ(FREE_QINDEX,&pMsg); break;
    case GetDeviceType:                 SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case GetDeviceTypeResponse:         SendMsgToQ(SPP_TASK_QINDEX,&pMsg); break;
    case GetInfoString:                 SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case GetInfoStringResponse:         SendMsgToQ(SPP_TASK_QINDEX,&pMsg); break;
    case DiagnosticLoopback:            SendMsgToQ(SPP_TASK_QINDEX,&pMsg); break;
    case EnterShippingModeMsg:          SendMsgToQ(SPP_TASK_QINDEX,&pMsg); break;
    case SoftwareResetMsg:              SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case ConnectionTimeoutMsg:          SendMsgToQ(SPP_TASK_QINDEX,&pMsg); break;
    case TurnRadioOnMsg:                SendMsgToQ(SPP_TASK_QINDEX,&pMsg); break;
    case TurnRadioOffMsg:               SendMsgToQ(SPP_TASK_QINDEX,&pMsg); break;
    case SppReserved:                   SendMsgToQ(SPP_TASK_QINDEX,&pMsg); break;
    case PariringControlMsg:            SendMsgToQ(SPP_TASK_QINDEX,&pMsg); break;
    case EnterSniffModeMsg:             SendMsgToQ(SPP_TASK_QINDEX,&pMsg); break;
    case LinkAlarmMsg:                  SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case OledWriteBufferMsg:            SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case OledConfigureModeMsg:          SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case OledChangeModeMsg:             SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case OledWriteScrollBufferMsg:      SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case OledScrollMsg:                 SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case OledShowIdleBufferMsg:         SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case OledCrownMenuMsg:              SendMsgToQ(DISPLAY_QINDEX,&pMsg);    break;
    case OledCrownMenuButtonMsg:        SendMsgToQ(DISPLAY_QINDEX,&pMsg);    break;
    case AdvanceWatchHandsMsg:          SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case SetVibrateMode:                SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case SetRealTimeClock:              SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case GetRealTimeClock:              SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case GetRealTimeClockResponse:      SendMsgToQ(SPP_TASK_QINDEX,&pMsg);   break;
    case StatusChangeEvent:             SendMsgToQ(SPP_TASK_QINDEX,&pMsg);   break;
    case NvalOperationMsg:              SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case NvalOperationResponseMsg:      SendMsgToQ(SPP_TASK_QINDEX,&pMsg);   break;
    case GeneralPurposePhoneMsg:        SendMsgToQ(SPP_TASK_QINDEX,&pMsg);   break;
    case GeneralPurposeWatchMsg:        SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case ButtonEventMsg:                SendMsgToQ(SPP_TASK_QINDEX,&pMsg);   break;
    case WriteBuffer:                   SendMsgToQ(SRAM_QINDEX,&pMsg);       break;
    case ConfigureMode:                 SendMsgToQ(DISPLAY_QINDEX,&pMsg);    break;
    case ConfigureIdleBufferSize:       SendMsgToQ(DISPLAY_QINDEX,&pMsg);    break;
    case UpdateDisplay:                 SendMsgToQ(SRAM_QINDEX,&pMsg); break;
    case LoadTemplate:                  SendMsgToQ(SRAM_QINDEX,&pMsg); break;
    case UpdateMyDisplaySram:           SendMsgToQ(SRAM_QINDEX,&pMsg); break;
    case UpdateMyDisplayLcd:            SendMsgToQ(LCD_TASK_QINDEX,&pMsg);   break;
    case EnableButtonMsg:               SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case DisableButtonMsg:              SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case ReadButtonConfigMsg:           SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case ReadButtonConfigResponse:      SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case BatteryChargeControl:          SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case IdleUpdate:                    SendMsgToQ(DISPLAY_QINDEX,&pMsg);  break;
    case WatchDrawnScreenTimeout:       SendMsgToQ(DISPLAY_QINDEX,&pMsg);  break;
    case WriteLcd:                      SendMsgToQ(LCD_TASK_QINDEX,&pMsg); break;
    case ClearLcd:                      SendMsgToQ(LCD_TASK_QINDEX,&pMsg); break;
    case ClearLcdSpecial:               SendMsgToQ(SRAM_QINDEX,&pMsg);    break;
    case ChangeModeMsg:                 SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case ModeTimeoutMsg:                SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case WatchStatusMsg:                SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case MenuModeMsg:                   SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case BarCode:                       SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case ListPairedDevicesMsg:          SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case ConnectionStateChangeMsg:      SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case ModifyTimeMsg:                 SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case MenuButtonMsg:                 SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case ToggleSecondsMsg:              SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case SplashTimeoutMsg:              SendMsgToQ(DISPLAY_QINDEX,&pMsg); break;
    case LedChange:                     SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case AccelerometerRawData:          SendMsgToQ(SPP_TASK_QINDEX,&pMsg);   break;
    case QueryMemoryMsg:                SendMsgToQ(SPP_TASK_QINDEX,&pMsg);   break;
    case BatteryConfigMsg:              SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case LowBatteryWarningMsgHost:      SendMsgToQ(SPP_TASK_QINDEX,&pMsg);   break;
    case LowBatteryBtOffMsgHost:        SendMsgToQ(SPP_TASK_QINDEX,&pMsg);   break;
    case ReadBatteryVoltageMsg:         SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case ReadBatteryVoltageResponse:    SendMsgToQ(SPP_TASK_QINDEX,&pMsg);   break;
    case ReadLightSensorMsg:            SendMsgToQ(BACKGROUND_QINDEX,&pMsg); break;
    case ReadLightSensorResponse:       SendMsgToQ(SPP_TASK_QINDEX,&pMsg);   break;
    case LowBatteryWarningMsg:          SendMsgToQ(DISPLAY_QINDEX,&pMsg);    break;
    case LowBatteryBtOffMsg:            SendMsgToQ(DISPLAY_QINDEX,&pMsg);    break;
    case ResetSleepCounterMsg:          SendMsgToQ(DISPLAY_QINDEX,&pMsg);    break;
    default:                            SendMsgToQ(FREE_QINDEX,&pMsg);       break;
    }
  }
  
}
void RouteMsg(tMessage* pMsg)
{
#ifdef MESSAGE_QUEUE_DEBUG
  AllQueuesReadyCheck();
  
  if ( pMsg == 0 )
  {
    PrintString("ERROR: Invalid message passed to Route function\r\n");  
  }
  else if ( AllQueuesReady == 0 )
  {
    PrintString("ERROR: Cannot Route when all queues are not ready\r\n");
    SendToFreeQueueContext(pMsg,RouteType);  
  }
  else
#endif
  {
    switch (pMsg->Type)
    {
    case InvalidMessage:                SendMsgToQ(FREE_QINDEX,pMsg);       break;
    case GetDeviceType:                 SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case GetDeviceTypeResponse:         SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case GetInfoString:                 SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case GetInfoStringResponse:         SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case DiagnosticLoopback:            SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case EnterShippingModeMsg:          SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case SoftwareResetMsg:              SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case ConnectionTimeoutMsg:          SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case TurnRadioOnMsg:                SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case TurnRadioOffMsg:               SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case ReadRssiMsg:                   SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case PairingControlMsg:             SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case ReadRssiResponseMsg:           SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case SniffControlMsg:               SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case LinkAlarmMsg:                  SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case OledWriteBufferMsg:            SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case OledConfigureModeMsg:          SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case OledChangeModeMsg:             SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case OledWriteScrollBufferMsg:      SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case OledScrollMsg:                 SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case OledShowIdleBufferMsg:         SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case OledCrownMenuMsg:              SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case OledCrownMenuButtonMsg:        SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case AdvanceWatchHandsMsg:          SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case SetVibrateMode:                SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case ButtonStateMsg:                SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case SetRealTimeClock:              SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case GetRealTimeClock:              SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case GetRealTimeClockResponse:      SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case StatusChangeEvent:             SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case NvalOperationMsg:              SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case NvalOperationResponseMsg:      SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case GeneralPurposePhoneMsg:        SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case GeneralPurposeWatchMsg:        SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case ButtonEventMsg:                SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case WriteBuffer:                   SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case ConfigureDisplay:              SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case ConfigureIdleBufferSize:       SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case UpdateDisplay:                 SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case LoadTemplate:                  SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case EnableButtonMsg:               SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case DisableButtonMsg:              SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case ReadButtonConfigMsg:           SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case ReadButtonConfigResponse:      SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case BatteryChargeControl:          SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case IdleUpdate:                    SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case WatchDrawnScreenTimeout:       SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case SplashTimeoutMsg:              SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case ChangeModeMsg:                 SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case ModeTimeoutMsg:                SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case WatchStatusMsg:                SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case MenuModeMsg:                   SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case BarCode:                       SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case ListPairedDevicesMsg:          SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case ConnectionStateChangeMsg:      SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case ModifyTimeMsg:                 SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case MenuButtonMsg:                 SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case ToggleSecondsMsg:              SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case LedChange:                     SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case AccelerometerHostMsg:          SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case AccelerometerEnableMsg:        SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case AccelerometerDisableMsg:       SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;       
    case AccelerometerSendDataMsg:      SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;        
    case AccelerometerAccessMsg:        SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;        
    case AccelerometerResponseMsg:      SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;        
    case AccelerometerSetupMsg:         SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case QueryMemoryMsg:                SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case RamTestMsg:                    SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case RateTestMsg:                   SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case BatteryConfigMsg:              SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case LowBatteryWarningMsgHost:      SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case LowBatteryBtOffMsgHost:        SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case ReadBatteryVoltageMsg:         SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case ReadBatteryVoltageResponse:    SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case ReadLightSensorMsg:            SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case ReadLightSensorResponse:       SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case LowBatteryWarningMsg:          SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case LowBatteryBtOffMsg:            SendMsgToQ(DISPLAY_QINDEX,pMsg);    break;
    case AdvertisingDataMsg:            SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case CallbackTimeoutMsg:            SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case SetCallbackTimerMsg:           SendMsgToQ(BACKGROUND_QINDEX,pMsg); break;
    case RadioPowerControlMsg:          SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    case UpdateConnParameterMsg:        SendMsgToQ(SPP_TASK_QINDEX,pMsg);   break;
    default:                            SendMsgToQ(FREE_QINDEX,pMsg);       break;
    }
  }
}