/********************************************************************* * @fn SensorTagMov_processCharChangeEvt * * @brief SensorTag Movement event handling * * @param paramID - identifies which characteristic has changed * * @return none */ void SensorTagMov_processCharChangeEvt(uint8_t paramID) { uint16_t newCfg; uint8_t newValue8; switch (paramID) { case SENSOR_CONF: if ((SensorTag_testResult() & SENSOR_MOV_TEST_BM) == 0) { mpuConfig = ST_CFG_ERROR; } if (mpuConfig != ST_CFG_ERROR) { Movement_getParameter(SENSOR_CONF, &newCfg); if ((newCfg & MPU_AX_ALL) == ST_CFG_SENSOR_DISABLE) { // All axes off, turn off device power mpuConfig = newCfg; appStateSet(APP_STATE_OFF); } else { // Some axes on; power up and activate MPU mpuConfig = newCfg; appStateSet(APP_STATE_ACTIVE); if (SensorMpu9250_powerIsOn()) { DELAY_MS(5); mpuConfig = newCfg | (SensorMpu9250_accReadRange() << 8); } } Movement_setParameter(SENSOR_CONF, sizeof(mpuConfig), (uint8_t*)&mpuConfig); } else { // Make sure the previous characteristics value is restored initCharacteristicValue(SENSOR_CONF, mpuConfig, sizeof(mpuConfig)); } // Data initially zero initCharacteristicValue(SENSOR_DATA, 0, SENSOR_DATA_LEN); break; case SENSOR_PERI: Movement_getParameter(SENSOR_PERI, &newValue8); sensorPeriod = newValue8 * SENSOR_PERIOD_RESOLUTION; Util_rescheduleClock(&periodicClock,sensorPeriod); break; default: // Should not get here break; } }
/********************************************************************* * @fn SensorTagBar_processCharChangeEvt * * @brief SensorTag Barometer event handling * */ void SensorTagBar_processCharChangeEvt(uint8_t paramID) { uint8_t newValue; switch (paramID) { case SENSOR_CONF: if ((SensorTag_testResult() & SENSOR_BAR_TEST_BM) == 0) { sensorConfig = ST_CFG_ERROR; } if (sensorConfig != ST_CFG_ERROR) { Barometer_getParameter(SENSOR_CONF, &newValue); if (newValue == ST_CFG_SENSOR_DISABLE) { sensorConfig = ST_CFG_SENSOR_DISABLE; initCharacteristicValue(SENSOR_DATA, 0, SENSOR_DATA_LEN); // Deactivate task Task_setPri(Task_handle(&sensorTask), -1); } else if (newValue == ST_CFG_SENSOR_ENABLE) { sensorConfig = ST_CFG_SENSOR_ENABLE; // Activate task Task_setPri(Task_handle(&sensorTask), SENSOR_TASK_PRIORITY); } } else { // Make sure the previous characteristics value is restored initCharacteristicValue(SENSOR_CONF, sensorConfig, sizeof(uint8_t)); } // Make sure sensor is disabled sensorMs5607Enable(false); break; case SENSOR_PERI: Barometer_getParameter(SENSOR_PERI, &newValue); sensorPeriod = newValue * SENSOR_PERIOD_RESOLUTION; break; default: // Should not get here break; } }
/********************************************************************* * @fn SensorTagIO_reset * * @brief Reset characteristics * * @param none * * @return none */ void SensorTagIO_reset(void) { ioValue = SensorTag_testResult(); Io_setParameter(SENSOR_DATA, 1, &ioValue); ioMode = IO_MODE_LOCAL; Io_setParameter(SENSOR_CONF, 1, &ioMode); // Normal mode; make sure LEDs and buzzer are off PIN_setOutputValue(hGpioPin, IOID_RED_LED, Board_LED_OFF); PIN_setOutputValue(hGpioPin, IOID_GREEN_LED, Board_LED_OFF); PIN_setOutputValue(hGpioPin, IOID_BLUE_LED, Board_LED_OFF); }
/********************************************************************* * @fn SensorTagIO_processCharChangeEvt * * @brief Process a change in the IO characteristics * * @param none * * @return none */ void SensorTagIO_processCharChangeEvt(uint8_t paramID) { if (paramID == SENSOR_CONF) { Io_getParameter(SENSOR_CONF, &ioMode); if (ioMode == IO_MODE_SELFTEST) { ioValue = SensorTag_testResult(); Io_setParameter(SENSOR_DATA, 1, &ioValue); } else { // Mode change: make sure LEDs are off Io_setParameter(SENSOR_DATA, 1, &ioValue); PIN_setOutputValue(hGpioPin, IOID_RED_LED, Board_LED_OFF); PIN_setOutputValue(hGpioPin, IOID_GREEN_LED, Board_LED_OFF); PIN_setOutputValue(hGpioPin, IOID_BLUE_LED, Board_LED_OFF); } } else if (paramID == SENSOR_DATA) { Io_getParameter(SENSOR_DATA, &ioValue); } if (ioMode == IO_MODE_REMOTE) { // Control by remote client: // - possible to operate the LEDs and buzzer // - right key functionality overridden (will not terminate connection) if (!!(ioValue & IO_DATA_LED_R)) { PIN_setOutputValue(hGpioPin, IOID_RED_LED, Board_LED_ON); } else { PIN_setOutputValue(hGpioPin, IOID_RED_LED, Board_LED_OFF); } if (!!(ioValue & IO_DATA_LED_G)) { PIN_setOutputValue(hGpioPin, IOID_GREEN_LED, Board_LED_ON); } else { PIN_setOutputValue(hGpioPin, IOID_GREEN_LED, Board_LED_OFF); } if (!!(ioValue & IO_DATA_LED_B)) { PIN_setOutputValue(hGpioPin, IOID_BLUE_LED, Board_LED_ON); } else { PIN_setOutputValue(hGpioPin, IOID_BLUE_LED, Board_LED_OFF); } if (!!((ioValue & IO_DATA_EXT_FLASH_ERASE))) { SensorTagFactoryReset_extFlashErase(); } } }