/********************************************************************* * @fn resetCharacteristicValues * * @brief Initialize all the characteristic values * * @return none */ static void resetCharacteristicValues( void ) { resetCharacteristicValue( AIN_SERV_UUID, SENSOR_DATA, 0, AIN_DATA_LEN); resetCharacteristicValue( AIN_SERV_UUID, SENSOR_CONF, ST_CFG_SENSOR_DISABLE, sizeof( uint8 )); resetCharacteristicValue( AIN_SERV_UUID, SENSOR_PERI, AIN_DEFAULT_PERIOD / SENSOR_PERIOD_RESOLUTION, sizeof ( uint8 )); resetCharacteristicValue( PIR_SERV_UUID, SENSOR_DATA, 0, PIR_DATA_LEN); }
/********************************************************************* * @fn PIRSensor_ProcessEvent * * @brief Simple BLE Peripheral Application Task event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return events not processed */ uint16 PIRSensor_ProcessEvent( uint8 task_id, uint16 events ) { VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( PIRSensor_TaskID )) != NULL ) { PIRSensor_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & SBP_START_DEVICE_EVT ) { // Start the Device VOID GAPRole_StartDevice( &PIRSensor_PeripheralCBs ); // Start Bond Manager VOID GAPBondMgr_Register( &PIRSensor_BondMgrCBs ); return ( events ^ SBP_START_DEVICE_EVT ); } ////////////////////////// // AIN // ////////////////////////// if ( events & SBP_READ_AIN_EVT ) { if(ainEnabled) { uint16 ainData; ainData = readAdcData(HAL_ADC_CHANNEL_6); Ain_SetParameter(SENSOR_DATA, AIN_DATA_LEN, &ainData); osal_start_timerEx( PIRSensor_TaskID, SBP_READ_AIN_EVT, sensorAinPeriod ); } else { resetCharacteristicValue( AIN_SERV_UUID, SENSOR_DATA, 0, AIN_DATA_LEN); resetCharacteristicValue( AIN_SERV_UUID, SENSOR_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); } return (events ^ SBP_READ_AIN_EVT); } // Discard unknown events return 0; }
/********************************************************************* * @fn SensorTag_ProcessEvent * * @brief Simple BLE Peripheral Application Task event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return events not processed */ uint16 SensorTag_ProcessEvent( uint8 task_id, uint16 events ) { VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( sensorTag_TaskID )) != NULL ) { sensorTag_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } // Handle system reset (long press on side key) if ( events & ST_SYS_RESET_EVT ) { if (sysResetRequest) { HAL_SYSTEM_RESET(); } return ( events ^ ST_SYS_RESET_EVT ); } if ( events & ST_START_DEVICE_EVT ) { // Start the Device VOID GAPRole_StartDevice( &sensorTag_PeripheralCBs ); // Start Bond Manager VOID GAPBondMgr_Register( &sensorTag_BondMgrCBs ); return ( events ^ ST_START_DEVICE_EVT ); } ////////////////////////// // IR TEMPERATURE // ////////////////////////// if ( events & ST_IRTEMPERATURE_READ_EVT ) { if ( irTempEnabled ) { if (HalIRTempStatus() == TMP006_DATA_READY) { readIrTempData(); osal_start_timerEx( sensorTag_TaskID, ST_IRTEMPERATURE_READ_EVT, sensorTmpPeriod-TEMP_MEAS_DELAY ); } else if (HalIRTempStatus() == TMP006_OFF) { HalIRTempTurnOn(); osal_start_timerEx( sensorTag_TaskID, ST_IRTEMPERATURE_READ_EVT, TEMP_MEAS_DELAY ); } } else { //Turn off Temperatur sensor VOID HalIRTempTurnOff(); VOID resetCharacteristicValue(IRTEMPERATURE_SERV_UUID,SENSOR_DATA,0,IRTEMPERATURE_DATA_LEN); VOID resetCharacteristicValue(IRTEMPERATURE_SERV_UUID,SENSOR_CONF,ST_CFG_SENSOR_DISABLE,sizeof ( uint8 )); } return (events ^ ST_IRTEMPERATURE_READ_EVT); } ////////////////////////// // Accelerometer // ////////////////////////// if ( events & ST_ACCELEROMETER_SENSOR_EVT ) { if(accConfig != ST_CFG_SENSOR_DISABLE) { readAccData(); osal_start_timerEx( sensorTag_TaskID, ST_ACCELEROMETER_SENSOR_EVT, sensorAccPeriod ); } else { VOID resetCharacteristicValue( ACCELEROMETER_SERV_UUID, SENSOR_DATA, 0, ACCELEROMETER_DATA_LEN ); VOID resetCharacteristicValue( ACCELEROMETER_SERV_UUID, SENSOR_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); } return (events ^ ST_ACCELEROMETER_SENSOR_EVT); } ////////////////////////// // Humidity // ////////////////////////// if ( events & ST_HUMIDITY_SENSOR_EVT ) { if (humiEnabled) { HalHumiExecMeasurementStep(humiState); if (humiState == 2) { readHumData(); humiState = 0; osal_start_timerEx( sensorTag_TaskID, ST_HUMIDITY_SENSOR_EVT, sensorHumPeriod ); } else { humiState++; osal_start_timerEx( sensorTag_TaskID, ST_HUMIDITY_SENSOR_EVT, HUM_FSM_PERIOD ); } } else { resetCharacteristicValue( HUMIDITY_SERV_UUID, SENSOR_DATA, 0, HUMIDITY_DATA_LEN); resetCharacteristicValue( HUMIDITY_SERV_UUID, SENSOR_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); } return (events ^ ST_HUMIDITY_SENSOR_EVT); } ////////////////////////// // Magnetometer // ////////////////////////// if ( events & ST_MAGNETOMETER_SENSOR_EVT ) { if(magEnabled) { if (HalMagStatus() == MAG3110_DATA_READY) { readMagData(); } else if (HalMagStatus() == MAG3110_OFF) { HalMagTurnOn(); } osal_start_timerEx( sensorTag_TaskID, ST_MAGNETOMETER_SENSOR_EVT, sensorMagPeriod ); } else { HalMagTurnOff(); resetCharacteristicValue( MAGNETOMETER_SERV_UUID, SENSOR_DATA, 0, MAGNETOMETER_DATA_LEN); resetCharacteristicValue( MAGNETOMETER_SERV_UUID, SENSOR_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); } return (events ^ ST_MAGNETOMETER_SENSOR_EVT); } ////////////////////////// // Barometer // ////////////////////////// if ( events & ST_BAROMETER_SENSOR_EVT ) { if (barEnabled) { if (barBusy) { barBusy = FALSE; readBarData(); osal_start_timerEx( sensorTag_TaskID, ST_BAROMETER_SENSOR_EVT, sensorBarPeriod ); } else { barBusy = TRUE; HalBarStartMeasurement(); osal_start_timerEx( sensorTag_TaskID, ST_BAROMETER_SENSOR_EVT, BAR_FSM_PERIOD ); } } else { resetCharacteristicValue( BAROMETER_SERV_UUID, SENSOR_DATA, 0, BAROMETER_DATA_LEN); resetCharacteristicValue( BAROMETER_SERV_UUID, SENSOR_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); resetCharacteristicValue( BAROMETER_SERV_UUID, SENSOR_CALB, 0, BAROMETER_CALI_LEN); } return (events ^ ST_BAROMETER_SENSOR_EVT); } ////////////////////////// // Gyroscope // ////////////////////////// if ( events & ST_GYROSCOPE_SENSOR_EVT ) { uint8 status; status = HalGyroStatus(); if(gyroEnabled) { if (status == HAL_GYRO_STOPPED) { HalGyroSelectAxes(sensorGyroAxes); HalGyroTurnOn(); osal_start_timerEx( sensorTag_TaskID, ST_GYROSCOPE_SENSOR_EVT, GYRO_STARTUP_TIME); } else { if(sensorGyroUpdateAxes) { HalGyroSelectAxes(sensorGyroAxes); sensorGyroUpdateAxes = FALSE; } if (status == HAL_GYRO_DATA_READY) { readGyroData(); osal_start_timerEx( sensorTag_TaskID, ST_GYROSCOPE_SENSOR_EVT, sensorGyrPeriod - GYRO_STARTUP_TIME); } else { // Gyro needs to be activated; HalGyroWakeUp(); osal_start_timerEx( sensorTag_TaskID, ST_GYROSCOPE_SENSOR_EVT, GYRO_STARTUP_TIME); } } } else { HalGyroTurnOff(); resetCharacteristicValue( GYROSCOPE_SERV_UUID, SENSOR_DATA, 0, GYROSCOPE_DATA_LEN); resetCharacteristicValue( GYROSCOPE_SERV_UUID, SENSOR_CONF, ST_CFG_SENSOR_DISABLE, sizeof( uint8 )); } return (events ^ ST_GYROSCOPE_SENSOR_EVT); } #if defined ( PLUS_BROADCASTER ) if ( events & ST_ADV_IN_CONNECTION_EVT ) { uint8 turnOnAdv = TRUE; // Turn on advertising while in a connection GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &turnOnAdv ); return (events ^ ST_ADV_IN_CONNECTION_EVT); } #endif // PLUS_BROADCASTER // Discard unknown events return 0; }
/********************************************************************* * @fn resetCharacteristicValues * * @brief Initialize all the characteristic values * * @return none */ static void resetCharacteristicValues( void ) { resetCharacteristicValue( IRTEMPERATURE_SERV_UUID, SENSOR_DATA, 0, IRTEMPERATURE_DATA_LEN); resetCharacteristicValue( IRTEMPERATURE_SERV_UUID, SENSOR_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); resetCharacteristicValue( IRTEMPERATURE_SERV_UUID, SENSOR_PERI, TEMP_DEFAULT_PERIOD / SENSOR_PERIOD_RESOLUTION, sizeof ( uint8 )); resetCharacteristicValue( ACCELEROMETER_SERV_UUID, SENSOR_DATA, 0, ACCELEROMETER_DATA_LEN ); resetCharacteristicValue( ACCELEROMETER_SERV_UUID, SENSOR_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); resetCharacteristicValue( ACCELEROMETER_SERV_UUID, SENSOR_PERI, ACC_DEFAULT_PERIOD / SENSOR_PERIOD_RESOLUTION, sizeof ( uint8 )); resetCharacteristicValue( HUMIDITY_SERV_UUID, SENSOR_DATA, 0, HUMIDITY_DATA_LEN); resetCharacteristicValue( HUMIDITY_SERV_UUID, SENSOR_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); resetCharacteristicValue( HUMIDITY_SERV_UUID, SENSOR_PERI, HUM_DEFAULT_PERIOD / SENSOR_PERIOD_RESOLUTION, sizeof ( uint8 )); resetCharacteristicValue( MAGNETOMETER_SERV_UUID, SENSOR_DATA, 0, MAGNETOMETER_DATA_LEN); resetCharacteristicValue( MAGNETOMETER_SERV_UUID, SENSOR_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); resetCharacteristicValue( MAGNETOMETER_SERV_UUID, SENSOR_PERI, MAG_DEFAULT_PERIOD / SENSOR_PERIOD_RESOLUTION, sizeof ( uint8 )); resetCharacteristicValue( BAROMETER_SERV_UUID, SENSOR_DATA, 0, BAROMETER_DATA_LEN); resetCharacteristicValue( BAROMETER_SERV_UUID, SENSOR_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); resetCharacteristicValue( BAROMETER_SERV_UUID, SENSOR_PERI, BAR_DEFAULT_PERIOD / SENSOR_PERIOD_RESOLUTION, sizeof ( uint8 )); resetCharacteristicValue( GYROSCOPE_SERV_UUID, SENSOR_DATA, 0, GYROSCOPE_DATA_LEN); resetCharacteristicValue( GYROSCOPE_SERV_UUID, SENSOR_CONF, ST_CFG_SENSOR_DISABLE, sizeof( uint8 )); resetCharacteristicValue( GYROSCOPE_SERV_UUID, SENSOR_PERI, GYRO_DEFAULT_PERIOD / SENSOR_PERIOD_RESOLUTION, sizeof ( uint8 )); }
/********************************************************************* * @fn SensorTag_ProcessEvent * * @brief Simple BLE Peripheral Application Task event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return events not processed */ uint16 SensorTag_ProcessEvent( uint8 task_id, uint16 events ) { VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( sensorTag_TaskID )) != NULL ) { sensorTag_ProcessOSALMsg( (osal_event_hdr_t *)pMsg ); // Release the OSAL message osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } // Handle system reset (long press on side key) if ( events & ST_SYS_RESET_EVT ) { if (sysResetRequest) { HAL_SYSTEM_RESET(); } return ( events ^ ST_SYS_RESET_EVT ); } if ( events & ST_START_DEVICE_EVT ) { // Start the Device GAPRole_StartDevice( &sensorTag_PeripheralCBs ); // Start Bond Manager GAPBondMgr_Register( &sensorTag_BondMgrCBs ); return ( events ^ ST_START_DEVICE_EVT ); } //////////////////////////// //// Accelerometer // //////////////////////////// // if ( events & ST_ACCELEROMETER_SENSOR_EVT ) // { // if(accConfig != ST_CFG_SENSOR_DISABLE) // { // readAccData(); // osal_start_timerEx( sensorTag_TaskID, ST_ACCELEROMETER_SENSOR_EVT, sensorAccPeriod ); // } // else // { // VOID resetCharacteristicValue( ACCELEROMETER_SERV_UUID, ACCELEROMETER_DATA, 0, ACCELEROMETER_DATA_LEN ); // VOID resetCharacteristicValue( ACCELEROMETER_SERV_UUID, ACCELEROMETER_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); // VOID resetCharacteristicValue( ACCELEROMETER_SERV_UUID, ACCELEROMETER_PERI, ACC_DEFAULT_PERIOD/ACCELEROMETER_TIME_UNIT, sizeof ( uint8 )); // } // return (events ^ ST_ACCELEROMETER_SENSOR_EVT); // } ////////////////////////// // Gyroscope // ////////////////////////// if ( events & ST_GYROSCOPE_SENSOR_EVT ) { uint8 status; status = HalGyroStatus(); if(gyroEnabled) { if (status == HAL_GYRO_STOPPED) { HalGyroSelectAxes(sensorGyroAxes); HalGyroTurnOn(); GAPRole_SendUpdateParam( 240, 256,0, 138, GAPROLE_TERMINATE_LINK); //GAPRole_SendUpdateParam( 100, 105,0, 138, GAPROLE_TERMINATE_LINK); osal_start_timerEx( sensorTag_TaskID, ST_GYROSCOPE_SENSOR_EVT, GYRO_STARTUP_TIME); } else { if(sensorGyroUpdateAxes) { HalGyroSelectAxes(sensorGyroAxes); sensorGyroUpdateAxes = FALSE; } if (status == HAL_GYRO_DATA_READY) { readGyroData(); osal_start_timerEx( sensorTag_TaskID, ST_GYROSCOPE_SENSOR_EVT, GYRO_DEFAULT_PERIOD - GYRO_STARTUP_TIME); } else { // Gyro needs to be activated; HalGyroWakeUp(); osal_start_timerEx( sensorTag_TaskID, ST_GYROSCOPE_SENSOR_EVT, GYRO_STARTUP_TIME); } } } else { HalGyroTurnOff(); if ( status == HAL_GYRO_STOPPED) { resetCharacteristicValue( GYROSCOPE_SERV_UUID, GYROSCOPE_DATA, 0, GYROSCOPE_DATA_LEN); resetCharacteristicValue( GYROSCOPE_SERV_UUID, GYROSCOPE_CONF, ST_CFG_SENSOR_DISABLE, sizeof( uint8 )); } else { // Indicate error resetCharacteristicValue( GYROSCOPE_SERV_UUID, GYROSCOPE_DATA, ST_CFG_ERROR, GYROSCOPE_DATA_LEN); resetCharacteristicValue( GYROSCOPE_SERV_UUID, GYROSCOPE_CONF, ST_CFG_ERROR, sizeof( uint8 )); } } return (events ^ ST_GYROSCOPE_SENSOR_EVT); } #if defined ( PLUS_BROADCASTER ) if ( events & ST_ADV_IN_CONNECTION_EVT ) { uint8 turnOnAdv = TRUE; // Turn on advertising while in a connection GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &turnOnAdv ); return (events ^ ST_ADV_IN_CONNECTION_EVT); } #endif // PLUS_BROADCASTER // Discard unknown events return 0; }
/********************************************************************* * @fn resetCharacteristicValues * * @brief Initialize all the characteristic values related to the sensors to zero * * @return none */ static void resetCharacteristicValues( void ) { resetCharacteristicValue( IRTEMPERATURE_SERV_UUID, IRTEMPERATURE_DATA,0,IRTEMPERATURE_DATA_LEN); resetCharacteristicValue( IRTEMPERATURE_SERV_UUID, IRTEMPERATURE_CONF,ST_CFG_SENSOR_DISABLE,sizeof ( uint8 )); resetCharacteristicValue( ACCELEROMETER_SERV_UUID, ACCELEROMETER_DATA, 0, ACCELEROMETER_DATA_LEN ); resetCharacteristicValue( ACCELEROMETER_SERV_UUID, ACCELEROMETER_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); resetCharacteristicValue( ACCELEROMETER_SERV_UUID, ACCELEROMETER_PERI, ACC_DEFAULT_PERIOD/ACCELEROMETER_TIME_UNIT, sizeof ( uint8 )); resetCharacteristicValue( HUMIDITY_SERV_UUID, HUMIDITY_DATA, 0, HUMIDITY_DATA_LEN); resetCharacteristicValue( HUMIDITY_SERV_UUID, HUMIDITY_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); resetCharacteristicValue( MAGNETOMETER_SERV_UUID, MAGNETOMETER_DATA, 0, MAGNETOMETER_DATA_LEN); resetCharacteristicValue( MAGNETOMETER_SERV_UUID, MAGNETOMETER_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); resetCharacteristicValue( MAGNETOMETER_SERV_UUID, MAGNETOMETER_PERI, MAG_DEFAULT_PERIOD/MAGNETOMETER_TIME_UNIT, sizeof ( uint8 )); resetCharacteristicValue( BAROMETER_SERV_UUID, BAROMETER_DATA, 0, BAROMETER_DATA_LEN); resetCharacteristicValue( BAROMETER_SERV_UUID, BAROMETER_CONF, ST_CFG_SENSOR_DISABLE, sizeof ( uint8 )); resetCharacteristicValue( BAROMETER_SERV_UUID, BAROMETER_CALI, 0, BAROMETER_CALI_LEN); resetCharacteristicValue( GYROSCOPE_SERV_UUID, GYROSCOPE_DATA, 0, GYROSCOPE_DATA_LEN); resetCharacteristicValue( GYROSCOPE_SERV_UUID, GYROSCOPE_CONF, ST_CFG_SENSOR_DISABLE, sizeof( uint8 )); }