感知医疗2——帧结构说明
0赞在目前版本的医疗项目中,初步定义了以下几种帧:
- 网关发送频点设置帧给SINK(串口方式)
- SINK广播频点设置帧(无线方式)
- CM回复ACK给SINK(关于频点设置的回复—无线方式)
- CM上报数据给SINK(无线方式)
- SINK回复CM数据帧(无线方式)
- SINK上报数据给网关(串口方式)
首先来定义两种串口帧:
串口帧格式如下所示:
0x55+0xaa+length+sink_id+frame_type +content
其中0x55和0xaa为串口帧起始位,如果在后面的内容里出现0x55或者0xaa,不必理会,通过length来确定帧是否结束,另外,在串口发送中加了简单的CRC校验,在本版本里认为串口通信可信,不需回复ACK。串口帧类型定义为0x8x,即(0x80—0x87)
串口频点设置帧(网关发送给SINK):
|
0x55 |
0xaa |
length |
sink_id |
frame_type |
fre_num |
其中,length长度为3(不包括length本身),frame_type为0x80,fre_num为频点设置,由网关界面输入。
SINK上报数据给网关
|
0x55 |
0xaa |
length |
sink_id |
cm_id |
frame_type |
data |
crc |
其中,frame_type为0x81;
sink_id 为01,为基站ID;
length 从 sink_id到data末尾;
crc计算从Length到data末尾,对之前数据取异或;
data 对应监护仪上传数据格式中的03—13;
cm_id范围从0—7,一共8个;
无线帧有四种,其中包括两种ACK帧,先声明几个宏定义:
typedef struct _PHY_HEAD_ (CC1100固定,不可更改)
{
INT8U length;
INT8U dest;
INT8U src;
}PHY_HEAD;
typedef struct _MAC_HEAD_
{
PHY_HEAD phy_head;
INT8U seq;
INT8U frame_type;
}MAC_HEAD;
SINK广播频点设置帧:
|
length |
dest |
src |
seq |
frame_type |
fre_num |
其中前五个为MAC帧头(下同),dest为0xff(广播),src为SINK的ID,frame_type为0x00(SINK无线发送帧类型为:0x00—0x07),fre_num为频点设置号。
CM回复频点设置帧:
|
length |
dest |
src |
seq |
frame_type |
其中dest为SINK的ID,src为CM的ID,frame_type为0xA0(CM无线发送帧类型为:0xA0—0xA7
CM上报数据帧:
|
length |
dest |
src |
seq |
frame_type |
data |
其中dest为SINK的ID,src为CM的ID,frame_type为0xA1
SINK回复数据帧:
|
length |
dest |
src |
seq |
frame_type |
cm_seq |
其中dest为CM的ID,src为SINK的ID,frame_typ为0x01,cm_seq为接收到的数据帧的seq。
enum _FRAME_TYPE_
{
FRAME_SINK_To_GATEWAY,
FRAME_GATEWAY_To_SINK,
FRAME_COMMAND,
};
#endif
监护仪上传数据格式
03 心律 80 0x50 次/分
04 脉搏 65 0x41 次/分
05 收缩压差 40 0x28 mmHg 实际压力:收缩压=40+80=120
06 舒张压 80 0x50 mmHg
07 平均压 92 0x5c mmHg
08 血氧 98 0x62 %
09 体温 37.6 0xb0 ℃ 实际显示:(200+数据)/10
10 呼吸 16 0x10 次/分
11 ST段数据 -0.1 0xf6 mV 显示范围:CEH~32H -0.50~0.50
12 早搏 2 0x02 次/分
