代码说明

概述

sample api是个web api程序,实现四个接口,路径

  • /pb/upload 一般数据(大部分手表数据)上传

  • /alarm/upload 报警数据上传

  • /call_log/upload sos通话记录/普通通话记录上传

  • /deviceinfo/upload 硬件信息上传

后两个接口接收到手表上传的是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

  • 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

  • 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

    • DeviceController uploadPBData

    • AlarmController uploadAlarmData

    • CallLogController uploadCallLog

    • DeviceInfoController uploadDeviceInfo

  • 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

  • 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

  • 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字符串。