蓝牙4.0模块连接Sensortag获取传感器数据(二)
时间:10-02
整理:3721RD
点击:
本人使用的蓝牙模块为网蜂的蓝牙4.0模块,不知道能否成功获取数据,在这里希望大家来一起讨论。解决有Sensortag套件没有相应设备支持的尴尬。。。
蓝牙4.0模块连接Sensortag获取传感器数据(二)
所用工程sensortag和SimpleBLECentral(只对SimpleBLECentral工程做修改)
目前进展:蓝牙模块能够连接上sensortag,并且打印设备地址和RSSI。
经过了对蓝牙协议数周的学习,大概了解了不懂协议栈原理:
对sensortag工程就行分析找到事件处理函数SensorTag_ProcessEvent;
以红外温度事件(ST_IRTEMPERATURE_READ_EVT)为例:
- uint16 SensorTag_ProcessEvent( uint8 task_id, uint16 events )
- {
- VOID task_id; // OSAL required parameter that isn't used in this function
- ....
- .... (此处省略)
- ....
- //////////////////////////
- // 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, TEMP_DEFAULT_PERIOD-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,IRTEMPERATURE_DATA,0,IRTEMPERATURE_DATA_LEN);
- VOID resetCharacteristicValue(IRTEMPERATURE_SERV_UUID,IRTEMPERATURE_CONF,ST_CFG_SENSOR_DISABLE,sizeof ( uint8 ));
- }
- return (events ^ ST_IRTEMPERATURE_READ_EVT);
- }
- ....(省略)
看//Turn off Temperatur sensor 下面部分,然后进入到resetCharacteristicValue 函数如下:
- 省略。。
- switch(servUuid)
- {
- case IRTEMPERATURE_SERV_UUID:
- IRTemp_SetParameter( paramID, paramLen, pData);
- break;
- case ACCELEROMETER_SERV_UUID:
- Accel_SetParameter( paramID, paramLen, pData);
- break;
- case MAGNETOMETER_SERV_UUID:
- Magnetometer_SetParameter( paramID, paramLen, pData);
- break;
- 省略。。
在进去可以找到:
- VOID osal_memcpy( irTempData, value, IRTEMPERATURE_DATA_LEN );
- // See if Notification has been enabled
- GATTServApp_ProcessCharCfg( irTempDataConfig, irTempData, FALSE,
- irTempAttrTbl, GATT_NUM_ATTRS( irTempAttrTbl ),
如果没错的话应该是调用GATT层的GATTServApp_ProcessCharCfg函数将红外温度数据( irTempData)发送给主机。。。。
到这为至从机的数据发送功能已经截止,应该到主机接收数据了。。
问题:现在不知道怎么在主机SimpleBLECentral工程中添加哪些代码。没有明确的思路。请教各位给个思路
if (HalIRTempStatus() == TMP006_DATA_READY)//读取传感器状态=数据准备
{
readIrTempData();//读取红外温度数据
osal_start_timerEx( sensorTag_TaskID, ST_IRTEMPERATURE_READ_EVT, sensorTmpPeriod-TEMP_MEAS_DELAY );//sensorTag_TaskID,0x0002读红外温度事件,1000-250 ms
}
else if (HalIRTempStatus() == TMP006_OFF)//IR温度传感器睡眠
{
HalIRTempTurnOn();//IR温度传感器上电
osal_start_timerEx( sensorTag_TaskID, ST_IRTEMPERATURE_READ_EVT, TEMP_MEAS_DELAY );
}
static void readIrTempData( void )
{
uint8 tData[IRTEMPERATURE_DATA_LEN];
if (HalIRTempRead(tData))
{
tData[0]=0x55;tData[1]=0x12;tData[2]=0x34;tData[3]=0xaa;//测试0123
IRTemp_SetParameter( SENSOR_DATA, IRTEMPERATURE_DATA_LEN, tData);
}
}
我想另一边一样,也是中断方式获取事件然后处理
主机这边怎么去接收呢