通讯流程如下图所示:
客户端(设备端)给服务器发送的数据除心电数据、服务器返回给客户端的波形标志是二进制流以外其它都为JSON格式。
服务器发送给客户端的数据可以是字符串JSON格式也可以是二进制数据。
第一步:客户端给服务器发送"请求头"
请求头:REQ_INFO_LENGTH(4Bytes)+Request_Information_JSON_Format
REQ_INFO_LENGTH(4Bytes):JSON信息的字节长度。
Request_Information_JSON_Format:请求头信息体,JSON格式:
{
"flag":"header", //字符串,请求头标志
"res":8/16, //整数,数据位分辨率,8位或16位有符号整数
"spr":250, //整数,采样率samplerate,范围250Hz到2000Hz
"unit":200, //整数,1mV电压的量化数,例如:200表示1mV用200表示
"leads":0, //整数,导联名:0-I,1-II,2-V1,3-V2,4-V4,5-V4,6-V5,7-V5
"spc":60000, //整数,数据采样点数(samplecount),最大与最小采样点数绝
//对计算结果的精确度与复杂度,点数要求请参看服务器网站说明
"rsp":0, //整数,服务器回复信息的形式,0-JSON文本,1-二进制紧凑数据
"code":"xxx", //字符串,服务码,从官网购买服务码
}
服务器收到客户端发来的请求头后会对servicecode验证、对心电格式进行检查
然后发送反馈给客户端
第二步:服务器给客户端发送请求反馈。
服务器给客户端返回的请求反馈有JSON格式和二进制格式,由请求头中的rsp字段决定。
JSON格式:
ACK_INFO_LENGTH(4Bytes)+ACK_Information_JSON_Format
ACK_INFO_LENGTH(4Bytes):JSON信息的字节长度。
ACK_Information_JSON_Format:反馈信息体,JSON格式:
{
"flag":"ack", //字符串,ACK标志
"ver":1, //整数,服务器版本信息,具体请参看服务器网站
"err":0, //整数,0有错,其它表示有错
"reason":[1,2,3,4,5..], //整数数组,失败原因:err=0时没有该字段
//错误代码如下:
// 1:servicecode无效
// 2:余额不足
// 3:数据分辨率不支持
// 4:采样率不支持
// 5:量化单位不支持
// 6:保留
// 7:导联名称不支持
// 8:采样时长不支持
// 9:返回数据格式不支持
}
二进制紧凑格式:
ACK_INFO_LENGTH(4Bytes)+ACK_Information_BIN_Format
ACK_INFO_LENGTH(4Bytes):反馈信息体字节长度(不包括本4字节)。
ACK_Information_BIN_Format:二进制信息体:
ACK_FLAG(1B):0x01 //ACK标志
Ver(1B):0x01 //服务器版本信息,具体请参看服务器网站
Err(1B):0x00 //0有错,其它表示有错
Reason(nB):x0,x1,x2...xn //字节数组,失败原因
客户端收到ACK之后需要判断err,如果err为0客户端就可以发送数据给服务器了,如果err为非零,服务器就会立刻断开TCP连接,reason中表明的失败原因
第三步:客户端给服务器发送二进制心电数据
二进制心电数据流nBytes,数据流字节长度为:res*spc即resolution*samplecount,分辨率*采样率,低字节在前
服务器收到数据之后进行分析,然后发送分析结果给客户端
第四步:服务器给客户端发送分析结果
服务器给客户端返回的数据有JSON格式和二进制格式,由请求头中的rsp字段决定。
JSON格式:
RESULT_INFO_LENGTH(4Bytes)+Result_Information_
ACK_INFO_LENGTH(4Bytes):JSON信息的字节长度。
Result_Information:信息体,JSON格式:
{
"flag":"result", //字符串,RESULT标志
"wave_param":{ //参数的医学意义请参看服务器网站说明
"HBR":75, //整数,心率,每分钟心跳次数
"RRInt":0.9, //小数,单位s
"PD":0.02, //小数,单位s
"P1D":0.02, //小数,单位s
"P2D":0.02, //小数,单位s
"PRInt":0.3, //小数,单位s
"QTcInt":0.5, //小数,单位s
"QRSD":0.2, //小数,单位s
"QD":0.02, //小数,单位s
"RD":0.01, //小数,单位s
"SD":0.02, //小数,单位s
"PA":0.12, //小数,单位mv
"P1A":0.12, //小数,单位mv
"P2A":0.12, //小数,单位mv
"QA":-0.12, //小数,单位mv
"RA":0.12, //小数,单位mv
"SA":-0.12, //小数,单位mv
"STJA":-0.3, //小数,单位mv
"STMA":-0.2, //小数,单位mv
"STEA":-0.1, //小数,单位mv
"TA":0.2 //小数,单位mv
},
"diag":[1,5,34,..], //整数数组,诊断结果代码,代码意义请后面章节
}
二进制紧凑格式:
RESULT_INFO_LENGTH(4Bytes)+Result_Information_Binary_format
RESULT_INFO_LENGTH(4Bytes): 信息体的字节长度
Result_Information_Binary_format: 二进制信息体:
RESULT_FLAG(1B):0x03 //RESULT标志
WAVE_PARAM_COUNT(1B):0x0b //wave_param中参数个数
DIAG_COUNT(1B):0x04 //diag疾病诊断结果代码个数
RSV(1B): //保留字节
//==========wave_param结构体,每个参数4字节:
HBR(4B): //整数,心率,每分钟心跳次数
RRInt(4B): //小数,单位s
PD(4B): //小数,单位s
P1D(4B): //小数,单位s
P2D(4B): //小数,单位s
PRInt(4B): //小数,单位s
QTcInt(4B): //小数,单位s
QRSD(4B): //小数,单位s
QD(4B): //小数,单位s
RD(4B): //小数,单位s
SD(4B): //小数,单位s
PA(4B): //小数,单位mv
P1A(4B): //小数,单位mv
P2A(4B): //小数,单位mv
QA(4B): //小数,单位mv
RA(4B): //小数,单位mv
SA(4B): //小数,单位mv
STJA(4B): //小数,单位mv
STMA(4B): //小数,单位mv
STEA(4B): //小数,单位mv
TA(4B): //小数,单位mv
//===========结束========wave_param结构体
Diag(nB):1,3,4,34,… //字节数组,诊断结果代码数组,每个字节代表一个诊断代码
第五步:两种选择
1. 结束服务,断开连接
2. 客户端请求发送波形标识(signal_flag),C->S;服务器收到此请求后会发送波形标识数组给客户端
发送波形标识(signal_flag)的请求:
REQ_INFO_LENGTH(4Bytes)+Request_Information_JSON_Format
REQ_INFO_LENGTH:JSON信息体字节长度
Request_Information_JSON_Format:请求信息体,JSON格式:
{
"flag":"signal_flag" //字符串,请求头标志
}
第六步: 如果是客户端请求发送波形标识(signal_flag),服务器发送二进制的波形标识数组给客户端,然后断开连接结束服务
SIGNALFLAG_INFO_LENGTH(4Bytes)+SignalFlag_Information_Binary_format
SIGNALFLAG_FLAG(1B):0x05 //signal flag标志
RSV(3B): //保留字节
signal_flag结构体数组:
{Position(4B),Flag(4B)},{Position(4B),Flag(4B)}…
Flag对应的信号标识:
代码 |
标识 |
含义 |
0 |
RFLAG_NORMAL, |
普通信号 |
1 |
RFLAG_Ps, |
P波开始点 |
2 |
RFLAG_P1, |
双波P波时P1波波峰或波谷 |
3 |
RFLAG_P, |
P波主波波峰或波谷 |
4 |
RFLAG_Pv, |
双波P波时P1,P2交界处 |
5 |
RFLAG_P2, |
双波P波时P2波波峰或波谷 |
6 |
RFLAG_Pe, |
P波结束点 |
7 |
RFLAG_Qs, |
Q波起点 |
8 |
RFLAG_Q, |
Q波 |
9 |
RFLAG_Rs, |
R波起始点 |
10 |
RFLAG_R, |
R波 |
11 |
RFLAG_Re, |
R波结束点 |
12 |
RFLAG_FR, |
宽大R波 |
13 |
RFLAG_NR, |
倒置R波 |
14 |
RFLAG_FR_ON_T, |
宽大R波与T波重叠(R on T) |
15 |
RFLAG_NR_ON_T, |
倒置R波与T波重叠(R on T) |
16 |
RFLAG_S, |
S波 |
17 |
RFLAG_Se, |
S波结束点 |
18 |
RFLAG_Ts, |
T波起点 |
19 |
RFLAG_T, |
T波 |
20 |
RFLAG_Te, |
T波结束点 |
21 |
RFLAG_INIT, |
算法初始化阶段 |
22 |
RFLAG_START, |
算法开始阶段 |
23 |
RSV |
保留 |
24 |
RFLAG_NOISE, |
噪声 |
25 |
RFLAG_INTERF, |
干扰 |
26 |
RSV |
保留 |
27 |
RSV |
保留 |
28 |
RSV |
保留 |