278 lines
5.8 KiB
Protocol Buffer
278 lines
5.8 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package whgw_hr;
|
|
|
|
option go_package = "hr_receiver/proto;whgw_hrpb";
|
|
|
|
enum HrConfidence {
|
|
// [0,25)
|
|
ZERO = 0;
|
|
// [25,50)
|
|
LOW = 1;
|
|
// [50,75]
|
|
MEDIUM = 2;
|
|
// (75,100]
|
|
HIGH = 3;
|
|
}
|
|
|
|
enum LoRaBW {
|
|
// nobody is using 7.8 kHz bandwidth
|
|
// so to satisfy protobuf, we use NONE for zero value
|
|
BW_NONE = 0;
|
|
// 10.4 kHz
|
|
BW_10_4 = 0x08;
|
|
// 15.6 kHz
|
|
BW_15_6 = 0x01;
|
|
// 20.8 kHz
|
|
BW_20_8 = 0x09;
|
|
// 31.25 kHz
|
|
BW_31_25 = 0x02;
|
|
// 41.7 kHz
|
|
BW_41_7 = 0x0A;
|
|
// 62.5 kHz
|
|
BW_62_5 = 0x03;
|
|
// 125.0 kHz
|
|
BW_125_0 = 0x04;
|
|
// 250.0 kHz
|
|
BW_250_0 = 0x05;
|
|
// 500.0 kHz
|
|
BW_500_0 = 0x06;
|
|
}
|
|
|
|
message LoRaParameters {
|
|
LoRaBW bw = 1;
|
|
uint32 sf = 2;
|
|
float frequency_mhz = 3;
|
|
}
|
|
|
|
message StatusFlag {
|
|
HrConfidence hr_confidence = 1;
|
|
bool is_active = 2;
|
|
bool is_on_skin = 3;
|
|
uint32 battery = 4;
|
|
}
|
|
|
|
|
|
message HrPacket {
|
|
StatusFlag status = 1;
|
|
uint32 id = 2;
|
|
uint32 packet_num = 3;
|
|
uint32 hr = 4;
|
|
}
|
|
|
|
message StepCountPacket {
|
|
uint32 id = 1;
|
|
uint32 packet_num = 2;
|
|
uint32 step_count = 3;
|
|
}
|
|
|
|
message RawPacketStatus {
|
|
// Estimation of RSSI of the LoRa signal (after despreading) on last packet received.
|
|
// to get the actual RSSI in dBm, divide by 2 and negate
|
|
uint32 signal_rssi_x2_neg = 1;
|
|
// Estimation of RSSI of the LoRa signal (after despreading) on last packet received.
|
|
// to get the actual SNR in dB, divide by 4
|
|
int32 snr_pkt_x4 = 2;
|
|
}
|
|
|
|
message PacketStatus {
|
|
// Estimation of RSSI of the LoRa signal (after despreading) on last packet received.
|
|
float signal_rssi_neg = 1;
|
|
// Estimation of RSSI of the LoRa signal (after despreading) on last packet received.
|
|
float snr_pkt = 2;
|
|
}
|
|
|
|
message HubInfo {
|
|
uint32 bus_id = 1;
|
|
uint32 sub_dev_id = 2;
|
|
/** optional **/
|
|
LoRaParameters radio_parameters = 3;
|
|
}
|
|
|
|
message RadioData {
|
|
HubInfo hub_info = 1;
|
|
RawPacketStatus raw_packet_status = 2;
|
|
bytes data = 3;
|
|
}
|
|
|
|
/**
|
|
|
|
NOTIFY (NTF): MISO, unack
|
|
SIGNAL (SIG): MOSI, unack
|
|
|
|
INDICATE (INF): MISO, needs MOSI CONFIRM
|
|
CONFIRM (CNF): MOSI, confirms MISO INDICATE
|
|
|
|
REQUEST (REQ): MOSI, needs MISO RESPONSE
|
|
RESPONSE (RSP): MISO, responds to MOSI REQUEST
|
|
|
|
note that frame type is only about its direction and acknowledge behavior,
|
|
the actual semantics are dependent on the payload
|
|
|
|
*
|
|
**/
|
|
|
|
enum PacketKind {
|
|
NTF = 0;
|
|
SIG = 1;
|
|
INF = 2;
|
|
CNF = 3;
|
|
REQ = 4;
|
|
RSP = 5;
|
|
}
|
|
|
|
enum NetworkUplinkKind {
|
|
NETWORK_UPLINK_UNKNOWN = 0;
|
|
NETWORK_UPLINK_WIFI = 1;
|
|
NETWORK_UPLINK_CELLULAR = 2;
|
|
}
|
|
|
|
message CellularModemInfo {
|
|
string imei = 1;
|
|
int32 rssi = 2;
|
|
int32 ber = 3;
|
|
}
|
|
|
|
message GatewayInfoExtra {
|
|
uint32 schema_version = 1;
|
|
NetworkUplinkKind active_uplink = 2;
|
|
CellularModemInfo cellular_modem = 3;
|
|
}
|
|
|
|
message GatewayStateReportExtra {
|
|
uint32 schema_version = 1;
|
|
NetworkUplinkKind selected_uplink = 2;
|
|
NetworkUplinkKind active_uplink = 3;
|
|
bool cellular_modem_present = 4;
|
|
}
|
|
|
|
message GatewayStateReport {
|
|
bool network_has_connection = 1;
|
|
bool network_has_ip = 2;
|
|
bool network_has_mqtt_connection = 3;
|
|
bool bluetooth_has_connect = 4;
|
|
uint32 error_code = 5;
|
|
GatewayStateReportExtra extra = 6;
|
|
}
|
|
|
|
/*** Hub (S) to Gateway (M) ***/
|
|
message HubSlaveOutGatewayMasterInMsg {
|
|
oneof choice {
|
|
RadioData ntf_radio_data = 1;
|
|
BatteryInfo ntf_battery_info = 2;
|
|
}
|
|
}
|
|
|
|
/*** Gateway (M) to Hub (S) ***/
|
|
message GatewayMasterOutHubSlaveInMsg {
|
|
oneof choice {
|
|
GatewayStateReport sig_gateway_state_report = 1;
|
|
}
|
|
}
|
|
|
|
|
|
/*** Gateway to MQTT ***/
|
|
message GatewaySlaveOutCloudMasterInMsg {
|
|
oneof choice {
|
|
HrMeasurement ntf_hr_measurement = 1;
|
|
GatewayStatus ntf_gateway_status = 2;
|
|
StepCountMeasurement ntf_step_count_measurement = 3;
|
|
}
|
|
}
|
|
|
|
/** note that the endpoint should be v2 **/
|
|
|
|
message BatteryInfo {
|
|
uint32 voltage_mv = 1;
|
|
uint32 soc_percentage = 2;
|
|
sint32 charging_rate_percentage = 3;
|
|
}
|
|
|
|
message GatewayInfo {
|
|
uint32 region_id = 1;
|
|
bytes gateway_mac = 2;
|
|
GatewayInfoExtra extra = 3;
|
|
}
|
|
|
|
message IPacketStatus {
|
|
oneof choice {
|
|
RawPacketStatus raw = 1;
|
|
PacketStatus parsed = 2;
|
|
}
|
|
}
|
|
|
|
message HrMeasurement {
|
|
HrPacket hr_packet = 1;
|
|
IPacketStatus packet_status = 2;
|
|
GatewayInfo gateway_info = 3;
|
|
HubInfo hub_info = 4;
|
|
}
|
|
|
|
message StepCountMeasurement {
|
|
StepCountPacket step_count_packet = 1;
|
|
IPacketStatus packet_status = 2;
|
|
GatewayInfo gateway_info = 3;
|
|
HubInfo hub_info = 4;
|
|
}
|
|
|
|
message GatewayStatistic {
|
|
// Number of times the gateway has booted in history
|
|
uint32 boot_count = 1;
|
|
// Uptime of the device (in ms)
|
|
uint32 uptime_ms = 2;
|
|
// Duration (in ms) since last packet received
|
|
// would be the duration since boot if no packets received yet
|
|
uint32 duration_ms_since_last_packet = 3;
|
|
// Total number of packets received since boot
|
|
uint32 rx_count = 4;
|
|
// optional, battery info
|
|
BatteryInfo battery_info = 5;
|
|
}
|
|
|
|
message GatewayStatus {
|
|
GatewayInfo info = 1;
|
|
GatewayStatistic stat = 2;
|
|
}
|
|
|
|
message Status {
|
|
int32 code = 1;
|
|
string message = 2;
|
|
}
|
|
|
|
/** Gateway Configuration Messages **/
|
|
/** Master is Gateway; Slave is config client (bluetooth central, phone etc.) **/
|
|
|
|
enum GatewayConfigEntryKind {
|
|
REGION_ID = 0;
|
|
WIFI_SSID = 1;
|
|
WIFI_PASSWORD = 2;
|
|
NETWORK_UPLINK = 3;
|
|
CELLULAR_APN = 4;
|
|
}
|
|
|
|
message GatewayConfigEntry {
|
|
oneof choice {
|
|
uint32 region_id = 1;
|
|
string wifi_ssid = 2;
|
|
string wifi_password = 3;
|
|
NetworkUplinkKind network_uplink = 4;
|
|
string cellular_apn = 5;
|
|
}
|
|
}
|
|
|
|
message GatewayConfigMasterOutSlaveInMsg {
|
|
oneof choice {
|
|
GatewayConfigEntry cnf_get_entry = 1;
|
|
Status cnf_get_failure = 2;
|
|
Status cnf_set_entry = 3;
|
|
}
|
|
}
|
|
|
|
message GatewayConfigMasterInSlaveOutMsg {
|
|
oneof choice {
|
|
GatewayConfigEntryKind inf_get_entry = 1;
|
|
GatewayConfigEntry inf_set_entry = 2;
|
|
}
|
|
}
|
|
|