/********************************************************************* * @fn sensorTaskFxn * * @brief The task loop of the temperature readout task * * @return none */ static void sensorTaskFxn(UArg a0, UArg a1) { typedef union { struct { uint16_t tempTarget, tempLocal; } v; uint16_t a[2]; } Data_t; // Register task with BLE stack ICall_registerApp(&sensorSelfEntity, &sensorSem); // Initialize the task sensorTaskInit(); // Deactivate task (active only when measurement is enabled) Task_setPri(Task_handle(&sensorTask), -1); // Task loop while (true) { if (sensorConfig == ST_CFG_SENSOR_ENABLE) { Data_t data; // Read data sensorTmp007Enable(true); delay_ms(TEMP_MEAS_DELAY); sensorTmp007Read(&data.v.tempLocal, &data.v.tempTarget); sensorTmp007Enable(false); // Update GATT IRTemp_setParameter( SENSOR_DATA, SENSOR_DATA_LEN, data.a); // Next cycle delay_ms(sensorPeriod - TEMP_MEAS_DELAY); } else { delay_ms(SENSOR_DEFAULT_PERIOD); } } }
/********************************************************************* * @fn SensorTagTmp_processCharChangeEvt * * @brief SensorTag IR temperature event handling * */ void SensorTagTmp_processCharChangeEvt(uint8_t paramID) { uint8_t newValue; switch (paramID) { case SENSOR_CONF: if ((sensorTestResult() & ST_IRTEMP) == 0) { sensorConfig = ST_CFG_ERROR; } if (sensorConfig != ST_CFG_ERROR) { IRTemp_getParameter(SENSOR_CONF, &newValue); if (newValue == ST_CFG_SENSOR_DISABLE) { // Reset characteristics initCharacteristicValue(SENSOR_DATA, 0, SENSOR_DATA_LEN); // Deactivate task Task_setPri(Task_handle(&sensorTask), -1); } else { Task_setPri(Task_handle(&sensorTask), SENSOR_TASK_PRIORITY); } sensorConfig = newValue; } else { // Make sure the previous characteristics value is restored initCharacteristicValue(SENSOR_CONF, sensorConfig, sizeof ( uint8_t )); } // Make sure sensor is disabled sensorTmp007Enable(false); break; case SENSOR_PERI: IRTemp_getParameter(SENSOR_PERI, &newValue); sensorPeriod = newValue * SENSOR_PERIOD_RESOLUTION; break; default: // Should not get here break; } }