void MysensorTag_updateAdvertisingData(void) { uint16_t RawTemperature, RawHumidity; bStatus_t st1,st2,st3, st4; uint8_t period, config, HumiditySensorON=1; uint8_t HumRawData[4]; // humidity sensor raw data float temperature,humidity; // temperature and humidity measurements in Celcius and % // set parameter st1 = Humidity_setParameter(SENSOR_CONF,1,&HumiditySensorON); // turn on //SensorTagHum_processCharChangeEvt(SENSOR_CONF); // enable humidity sensing // SensorTag_enqueueMsg(ST_CHAR_CHANGE_EVT, SERVICE_ID_HUM, SENOSR_CONF); // get parameter st2 = Humidity_getParameter(SENSOR_PERI, &period); st3 = Humidity_getParameter(SENSOR_CONF, &config); st4 = Humidity_getParameter(SENSOR_DATA, &HumRawData); // raw temperature and humidity RawTemperature = HumRawData[0] | (HumRawData[1]<<8); RawHumidity = HumRawData[2] | (HumRawData[3]<<8); sensorHdc1000Convert(RawTemperature, RawHumidity,&temperature, &humidity); // update advertisement data advertData[KEY_STATE_OFFSET+1] = (uint8_t)temperature; advertData[KEY_STATE_OFFSET+2] = (uint8_t)humidity; GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof(advertData), advertData); }
/********************************************************************* * @fn initCharacteristicValue * * @brief Initialize a characteristic value * * @param paramID - parameter ID of the value is to be cleared * * @param value - value to initialize with * * @param paramLen - length of the parameter * * @return none */ static void initCharacteristicValue(uint8_t paramID, uint8_t value, uint8_t paramLen) { uint8_t data[SENSOR_DATA_LEN]; memset(data,value,paramLen); Humidity_setParameter(paramID, paramLen, data); }
/********************************************************************* * @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); } } }