================ 代码说明 ================ ------------------------ 概述 ------------------------ sample api是个web api程序,实现六个接口,路径 - /pb/upload 一般数据(大部分手表数据)上传 - /alarm/upload 报警数据上传 - /call_log/upload sos通话记录/普通通话记录上传 - /deviceinfo/upload 硬件信息上传 - /status/notify 设备在线/离线状态变化通知 - /health/sleep 提供计算后的睡眠数据给设备显示 前3个接口一定要实现,后面的接口可选,根据你的需要选择是否实现。 前两个接口是一般二进制数据,其他接口接收到手表上传的是json数据, 但从http协议角度来说,所有接口都是收到表单格式 提交的数据,我们提供的sample api都是按一般二进制格式解析数据。不能忽略content-type的框架,如spring,需要通 过其他方法修改客户端请求的content-type为application/octet-stream。 代码主要包括controller/parser/calculation/protobuf四个部分 - controller http handler, 请求处理 - parser 数据解析 - calculation 数据计算 - protobuf 自动生成的protobuf代码 手表上传/pb/upload和/alarm/upload接口的数据格式:前15个字节是deviceid,之后的数据可能是1或多个数据包, 多个数据包时是一个接一个的排列在一起。每个数据包的格式: 第1-第2字节固定数据0x44 0x54,第3-第4字节是数据包长度, 第5-第6字节是数据包crc校验码,第7-第8字节是协议编码,后面按前面定义的数据包长度的字节是数据内容,格式是protobuf。 parser部分代码就是解析这个数据包。 /call_log/upload,/deviceinfo/upload接口接收到的其实是json,用json相关库即可解析。 calculation部分是展示预处理数据,可以调用计算服务,计算睡眠/心电分析/房颤分析数据。 ------------------------ Java ------------------------ 用的spring boot框架 - controller 包 com.iwown.sample4GApi.controller - DeviceController /pb/upload - AlarmController /alarm/upload - CallLogController /call_log/upload - DeviceInfoController /deviceinfo/upload - DeviceStatusController /status/notify - SleepController /health/sleep - parser 包 com.iwown.sample4GApi.service - HistoryDataParser 0x80协议解析 - OldManDataParser 0x0A协议解析 - NewAlarmDataParser 0x12协议解析 - calculation 包 com.iwown.sample4GApi.calculation - SleepPreprocessor 睡眠数据处理 - EcgPreprocessor 心电数据处理 - RriPreprocessor 房颤数据处理 ------------------------ Golang ------------------------ 用的echo框架 - controller - data_handler.go /pb/upload - alarm_handler.go /alarm/upload - call_log_handler.go /call_log/upload - device_info_handler.go /deviceinfo/upload - device_info_handler.go /status/notify - data_handler.go /health/sleep - parser - history_parser.go 0x80协议解析 - oldman_parser.go 0x0A协议解析 - alarm_parser.go 0x12协议解析 - calculation - sleep_preprocessor.go 睡眠数据处理 - ecg_preprocessor.go 心电数据处理 - af_preprocessor.go 房颤数据处理 ------------------------ Python ------------------------ 用的flask框架 - controller app.py - app.py uploadPBData - app.py uploadAlarmData - app.py uploadCallLog - app.py uploadDeviceInfo - app.py deviceStatusChange - app.py getSleepResult - parser module pbparser - history_parser.py 0x80协议解析 - oldman_parser.py 0x0A协议解析 - alarm_parser.py 0x12协议解析 - calculation module calculation - sleep_preprocessor.py 睡眠数据处理 - ecg_preprocessor.py 心电数据处理 - af_preprocessor.py 房颤数据处理 ------------------------ C# ------------------------ 用的asp.net web core框架 - controller controllers - DataController.cs /pb/upload - AlarmController.cs /alarm/upload - CallLogController.cs /call_log/upload - DeviceInfoController.cs /deviceinfo/upload - DeviceStatusController.cs /status/notify - SleepController.cs /health/sleep - parser parser - HistoryDataParser.cs 0x80协议解析 - OldmanParser.cs 0x0A协议解析 - AlarmParser.cs 0x12协议解析 - calculation calculation - Sleep_Preprocessor.cs 睡眠数据处理 - Ecg_Preprocessor.cs 心电数据处理 - Af_Preprocessor.cs 房颤数据处理 ------------------------ php ------------------------ 用的lumen框架 - controller controller - data_controller.php /pb/upload - alarm_controller.php /alarm/upload - calllog_controller.php /call_log/upload - device_controller.php /deviceinfo/upload - device_controller.php /status/notify - data_controller.php /health/sleep - parser parser - history_parser.php 0x80协议解析 - oldman_parser.php 0x0A协议解析 - alarm_parser.php 0x12协议解析 - calculation calculation - sleep_preprocessor.php 睡眠数据处理 - ecg_preprocessor.php 心电数据处理 - af_preprocessor.php 房颤数据处理 php版本sample api解析protobuf的方式和其他版本不同,我们protobuf用的protobuf2,但因为protoc不支持生成protobuf2定义 proto文件的php代码,所以我们用python代码做protobuf解析,php调用python脚本传递数据,获取结果,python会把解析结果转成 一个json字符串。