void CreateDisplayTask(void) { xTaskHandle Handle; QueueHandles[DISPLAY_QINDEX] = xQueueCreate(DISPLAY_QUEUE_LENGTH, MESSAGE_SIZE); if (!QueueHandles[DISPLAY_QINDEX]) SoftwareReset(RESET_TASK_FAIL, DISPLAY_QINDEX); // task function, task name, stack len, task params, priority, task handle xTaskCreate(DisplayTask, "DISPLAY", DISPLAY_STACK_SIZE, NULL, DISPLAY_PRIORITY, &Handle); }
void CreateDisplayTask(void) { QueueHandles[DISPLAY_QINDEX] = xQueueCreate(DISPLAY_TASK_QUEUE_LENGTH, MESSAGE_QUEUE_ITEM_SIZE); if (QueueHandles[DISPLAY_QINDEX] == 0) SoftwareReset(); // task function, task name, stack len, task params, priority, task handle xTaskCreate(DisplayTask, "DISPLAY", DISPLAY_TASK_STACK_SIZE, NULL, DISPLAY_TASK_PRIORITY, &DisplayHandle); }
/* choose whether or not to do a master reset (reset non-volatile values) */ static void SoftwareResetHandler(tMessage* pMsg) { if ( pMsg->Options == MASTER_RESET_OPTION ) { WriteMasterResetKey(); } SoftwareReset(); }
static void EnterShippingMode(void) { /* Turn off the watchdog timer */ WDTCTL = WDTPW + WDTHOLD; #ifdef DIGITAL ClearLcd(); #endif ConfigResetPin(RST_PIN_ENABLED); __delay_cycles(100000); __disable_interrupt(); __no_operation(); DisableRtosTick(); /* * the radio draws more current in reset than it does after * the patch is loaded */ DISABLE_DISPLAY_POWER(); DISABLE_LCD_ENABLE(); BATTERY_CHARGE_DISABLE(); LIGHT_SENSOR_SHUTDOWN(); BATTERY_SENSE_DISABLE(); HARDWARE_CFG_SENSE_DISABLE(); APPLE_POWER_DISABLE(); ACCELEROMETER_INT_DISABLE(); DISABLE_BUTTONS(); #ifdef DIGITAL /* SHIPPING */ ENABLE_SHIPPING_WAKEUP(); #endif SELECT_ACLK(SELA__REFOCLK); SELECT_FLLREF(SELREF__REFOCLK); UCSCTL8 &= ~SMCLKREQEN; UCSCTL6 |= SMCLKOFF; /* disable aclk */ P11SEL &= ~BIT0; XT1_Stop(); /* turn off the regulator */ PMMCTL0_H = PMMPW_H; PMMCTL0_L = PMMREGOFF; __low_power_mode_4(); __no_operation(); __no_operation(); /* should not get here without a power event */ SoftwareReset(); }
/* * this writes a signature to the EnterBoot RAM location * and generates a reset. The signature tells the bootloader * to stay in bootload mode to accept bootload messaging. */ void EnterBootloader(void) { PrintString("- Entering Bootloader Mode\r\n"); DrawBootloaderScreen(); __disable_interrupt(); /* disable RAM alternate interrupt vectors */ SYSCTL &= ~SYSRIVECT; SetBootloaderSignature(); SoftwareReset(); }
static void EnterShippingMode(void) { /* Turn off the watchdog timer */ WDTCTL = WDTPW | WDTHOLD; EnableRstPin(); __delay_cycles(100000); __disable_interrupt(); __no_operation(); /* * the radio draws more current in reset than it does after * the patch is loaded */ DISABLE_DISPLAY_POWER(); DISABLE_LCD_ENABLE(); BATTERY_CHARGE_DISABLE(); LIGHT_SENSOR_SHUTDOWN(); BATTERY_SENSE_DISABLE(); HARDWARE_CFG_SENSE_DISABLE(); APPLE_POWER_DISABLE(); ACCELEROMETER_INT_DISABLE(); DISABLE_BUTTONS(); SELECT_ACLK(SELA__REFOCLK); SELECT_FLLREF(SELREF__REFOCLK); UCSCTL8 &= ~SMCLKREQEN; UCSCTL6 |= SMCLKOFF; /* disable aclk */ P11SEL &= ~BIT0; XT1_Stop(); /* turn off the regulator */ unsigned char temp = PMMCTL0_L; PMMCTL0_H = PMMPW_H; PMMCTL0_L = PMMREGOFF | temp; LPM4; __no_operation(); __no_operation(); /* should not get here without a power event */ SoftwareReset(); }
/*! 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; } }
/** SendATACommand specificed in Taskfile @param CardData Pointer to CARD_DATA. @param TaskFile Pointer to TASK_FILE. @param Write TRUE means write, FALSE means read. @param Buffer If NULL, means no data transfer, neither read nor write. @param SectorCount Buffer size in 512 bytes unit. @retval EFI_SUCCESS Success @retval EFI_DEVICE_ERROR Hardware Error @retval EFI_INVALID_PARAMETER Parameter is error @retval EFI_NO_MEDIA No media @retval EFI_MEDIA_CHANGED Media Change @retval EFI_BAD_BUFFER_SIZE Buffer size is bad **/ EFI_STATUS SendATACommand ( IN CARD_DATA *CardData, IN TASK_FILE *TaskFile, IN BOOLEAN Write, IN UINT8 *Buffer, IN UINT16 SectorCount ) { EFI_STATUS Status; EFI_SD_HOST_IO_PROTOCOL *SDHostIo; UINT8 Data; UINT32 TimeOut; SDHostIo = CardData->SDHostIo; // //Write register // Status = ReadWriteMultipleRegister ( CardData, 0, sizeof (TASK_FILE), TRUE, (UINT8*)TaskFile ); if (EFI_ERROR (Status)) { DEBUG((EFI_D_ERROR, "ReadWriteMultipleRegister 0x%x\n", Status)); goto Exit; } TimeOut = 5000; do { gBS->Stall (1 * 1000); Data = 0; Status = FastIO ( CardData, Reg_Command_Status, &Data, FALSE ); if (EFI_ERROR (Status)) { return Status; } if (((Data & BIT7) == 0) && ((Data & BIT6) == BIT6)) { break; } TimeOut --; } while (TimeOut > 0); if (TimeOut == 0) { DEBUG((EFI_D_ERROR, "ReadWriteMultipleRegister FastIO EFI_TIMEOUT 0x%x\n", Data)); Status = EFI_TIMEOUT; goto Exit; } if (Buffer != NULL) { Status = ReadWriteMultipleBlock ( CardData, SectorCount, Write, (UINT8*)Buffer ); if (EFI_ERROR (Status)) { DEBUG((EFI_D_ERROR, "ReadWriteMultipleBlock EFI_TIMEOUT 0x%x\n", Status)); goto Exit; } TimeOut = 5 * 1000; do { gBS->Stall (1 * 1000); Data = 0; Status = FastIO ( CardData, Reg_Command_Status, &Data, FALSE ); if (EFI_ERROR (Status)) { return Status; } if (((Data & BIT7) == 0) && ((Data & BIT3) == 0)) { break; } TimeOut --; } while (TimeOut > 0); if (TimeOut == 0) { DEBUG((EFI_D_ERROR, "ReadWriteMultipleBlock FastIO EFI_TIMEOUT 0x%x\n", Data)); Status = EFI_TIMEOUT; goto Exit; } if (((Data & BIT6) == BIT6) && (Data & BIT0) == 0) { Status = EFI_SUCCESS; } else { Status = EFI_DEVICE_ERROR; } } Exit: if (EFI_ERROR (Status)) { SoftwareReset (CardData); } return Status; }
// perform a specific action based on the i2c address received int Onion::ReceiveEventHandler(uint8_t addr) { int status; int i, red, green, blue; uint8_t data; switch(addr) { case (ARDUINO_DOCK_ADDR_READBACK): // set the last command to: the address contained in the data status == _ReadTwiByte(data); if (status == EXIT_SUCCESS) { addr = data; } break; case (ARDUINO_DOCK_ADDR_RESET): status == _ReadTwiByte(data); if (status == EXIT_SUCCESS && data == ARDUINO_DOCK_CMD_RESET) { SoftwareReset(); } break; case (ARDUINO_DOCK_ADDR_NEOPIXEL_INIT): status |= _ReadTwiByte(data); if (status == EXIT_SUCCESS && data != 0) { // set the selected pin to output pinMode(neopixelPin, OUTPUT); // initialize the neopixel object neopixelStrip = new Adafruit_NeoPixel(neopixelStripLength, neopixelPin, NEO_GRB + NEO_KHZ800); } break; case (ARDUINO_DOCK_ADDR_SET_NEOPIXEL_PIN): status |= _ReadTwiByte(data); if (status == EXIT_SUCCESS) { neopixelPin = data; } break; case (ARDUINO_DOCK_ADDR_SET_NEOPIXEL_STRIP_LENGTH): status |= _ReadTwiByte(data); if (status == EXIT_SUCCESS) { neopixelStripLength = data; } break; case (ARDUINO_DOCK_ADDR_SET_NEOPIXEL_BRIGHTNESS): status |= _ReadTwiByte(data); if (status == EXIT_SUCCESS) { neopixelBrightness = data; // change the brightness if (neopixelStrip != NULL) { neopixelStrip->setBrightness(neopixelBrightness); } } break; case (ARDUINO_DOCK_ADDR_SET_NEOPIXEL_DATA): _neopixelAcceptBuffer(); break; case (ARDUINO_DOCK_ADDR_SET_NEOPIXEL_DATAPOINT): // read pixel index, and colour values status |= _ReadTwiByte(i); status |= _ReadTwiByte(red); status |= _ReadTwiByte(green); status |= _ReadTwiByte(blue); // set the datapoint info if (status == EXIT_SUCCESS && neopixelStrip != NULL) { neopixelStrip->setPixelColor(i, red, green, blue); } lastCmdData = i; break; case (ARDUINO_DOCK_ADDR_SHOW_NEOPIXEL): status |= _ReadTwiByte(data); if (status == EXIT_SUCCESS && data != 0 && neopixelStrip != NULL) { neopixelStrip->show(); } case (ARDUINO_DOCK_ADDR_DELETE_NEOPIXEL): status |= _ReadTwiByte(data); if (status == EXIT_SUCCESS && data != 0 && neopixelStrip != NULL) { delete neopixelStrip; neopixelStrip = NULL; lastCmdData = 0xde; // LAZAR: Note: this never executes for some reason... } else { lastCmdData = 0xaa; } default: break; } // note the last address lastCmdAddr = addr; return status; }
void vApplicationStackOverflowHook(xTaskHandle *pxTask, char *pcTaskName) { /* try to print task name */ PrintF("# Stack overflow:%s",(tString*)pcTaskName); SoftwareReset(); }
void vApplicationStackOverflowHook(xTaskHandle *pxTask, char *TaskName) { /* try to print task name */ PrintF("@ Stack Oflw:%s", TaskName); SoftwareReset(); }
static void ResetHandler(void) { SoftwareReset(RESET_TERM_MODE, 0); }