/********************************************************************* * @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 PMLDotTmp_processCharChangeEvt * * @brief PMLDot IR temperature event handling * */ void PMLDotTmp_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; } }
/* * ======== Task_startup ======== */ Void Task_startup() { Queue_Handle maxQ; Task_Object *prevTask; Task_Struct dummyTask; Int i; Hwi_disable(); /* re-enabled in Task_enter of first task */ /* Use dummyTask as initial task to swap from */ prevTask = Task_handle(&dummyTask); /* stall until a task is ready */ while (Task_module->curSet == 0) { Task_allBlockedFunc(); } /* Determine current max ready Task priority */ maxQ = (Queue_Handle)((UInt8 *)(Task_module->readyQ) + (UInt)(Intrinsics_maxbit(Task_module->curSet)*(2*sizeof(Ptr)))); Task_module->curQ = maxQ; Task_module->curTask = Queue_head(maxQ); /* we've done the scheduler's work */ Task_module->workFlag = 0; /* Signal that we are entering task thread mode */ BIOS_setThreadType(BIOS_ThreadType_Task); /* should be safe to enable intrs here */ Hwi_enable(); #ifndef ti_sysbios_knl_Task_DISABLE_ALL_HOOKS /* Run switch hooks for first real Task */ for (i = 0; i < Task_hooks.length; i++) { if (Task_hooks.elem[i].switchFxn != NULL) { Task_hooks.elem[i].switchFxn(NULL, Task_module->curTask); } } #endif Log_write4(Task_LM_switch, (UArg)0, (UArg)0, (UArg)Task_module->curTask, (UArg)Task_module->curTask->fxn); /* must leave this function with ints disabled */ Hwi_disable(); /* inform dispatcher that we're running on task stack */ Hwi_switchFromBootStack(); /* start first task by way of enter() */ Task_SupportProxy_swap((Ptr)&prevTask->context, (Ptr)&Task_module->curTask->context); }
/********************************************************************* * @fn sensorTaskFxn * * @brief The task loop of the humidity readout task * * @return none */ static void sensorTaskFxn(UArg a0, UArg a1) { // Register task with BLE stack ICall_registerApp(&sensorSelfEntity, &sensorSem); // Deactivate task (active only when measurement is enabled) Task_setPri(Task_handle(&sensorTask), -1); // Task loop while (true) { if (sensorConfig == ST_CFG_SENSOR_ENABLE) { uint8_t data[MS5607_DATA_SIZE]; sensorMs5607Read(data); // int32_t temp; // uint32_t press; // bool success; // // // Readout // SensorBmp280_enable(true); // DELAY_MS(SENSOR_FSM_PERIOD); // success = SensorBmp280_read(data); // SensorBmp280_enable(false); // // // Processing // if (success) // { // SensorBmp280_convert(data,&temp,&press); // // data[2] = (temp >> 16) & 0xFF; // data[1] = (temp >> 8) & 0xFF; // data[0] = temp & 0xFF; // // data[5] = (press >> 16) & 0xFF; // data[4] = (press >> 8) & 0xFF; // data[3] = press & 0xFF; // } // Send data Barometer_setParameter(SENSOR_DATA, SENSOR_DATA_LEN, data); DELAY_MS(sensorPeriod - SENSOR_FSM_PERIOD); } else { DELAY_MS(SENSOR_DEFAULT_PERIOD); } } }
/********************************************************************* * @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 sensorTaskFxn * * @brief The task loop of the humidity readout task * * @param a0 - not used * * @param a1 - not used * * @return none */ static void sensorTaskFxn(UArg a0, UArg a1) { typedef union { struct { uint16_t rawTemp, rawHum; } v; uint8_t a[SENSOR_DATA_LEN]; } Data_t; // Register task with BLE stack ICall_registerApp(&sensorSelfEntity, &sensorSem); // 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; // 1. Start temperature measurement SensorHdc1080_start(); DELAY_MS(HUM_DELAY_PERIOD); // 2. Read data SensorHdc1080_read(&data.v.rawTemp, &data.v.rawHum); // 3. Send data Humidity_setParameter(SENSOR_DATA, SENSOR_DATA_LEN, data.a); // 4. Wait until next cycle DELAY_MS(sensorPeriod - HUM_DELAY_PERIOD); } else { DELAY_MS(SENSOR_DEFAULT_PERIOD); } } }
/********************************************************************* * @fn sensorTaskFxn * * @brief The task loop of the humidity readout task * * @return none */ static void sensorTaskFxn(UArg a0, UArg a1) { typedef union { struct { uint16_t rawTemp, rawHum; } v; uint8_t a[2]; } Data_t; // 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; // 1. Start temperature measurement sensorHdc1000Start(); delay_ms(HUM_DELAY_PERIOD); // 2. Read data sensorHdc1000Read(&data.v.rawTemp, &data.v.rawHum); // 3. Send data Humidity_setParameter( SENSOR_DATA, SENSOR_DATA_LEN, data.a); // 4. Wait until next cycle delay_ms(sensorPeriod - HUM_DELAY_PERIOD); } else { delay_ms(SENSOR_DEFAULT_PERIOD); } } }