Files
hr_data_analyzer/proto/v3/hr_packet_v3.proto
T
2026-07-08 15:31:58 +08:00

194 lines
3.6 KiB
Protocol Buffer

syntax = "proto3";
package whgw.gateway.v3;
option go_package = "hr_receiver/proto/v3;whgwv3pb";
enum HrConfidence {
ZERO = 0;
LOW = 1;
MEDIUM = 2;
HIGH = 3;
}
enum LoRaBW {
BW_NONE = 0;
BW_10_4 = 0x08;
BW_15_6 = 0x01;
BW_20_8 = 0x09;
BW_31_25 = 0x02;
BW_41_7 = 0x0A;
BW_62_5 = 0x03;
BW_125_0 = 0x04;
BW_250_0 = 0x05;
BW_500_0 = 0x06;
}
enum NetworkUplinkKind {
NETWORK_UPLINK_UNKNOWN = 0;
NETWORK_UPLINK_WIFI = 1;
NETWORK_UPLINK_CELLULAR = 2;
}
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 WearableStatusFlag {
HrConfidence hr_confidence = 1;
bool is_active = 2;
bool is_on_skin = 3;
uint32 battery = 4;
}
message LoRaParameters {
LoRaBW bw = 1;
uint32 sf = 2;
float frequency_mhz = 3;
}
message GfskParameters {
uint32 bitrate_bps = 1;
float frequency_mhz = 2;
uint32 frequency_deviation_hz = 3;
uint32 rx_bandwidth_hz = 4;
uint32 payload_length = 5;
}
message RadioParameters {
oneof kind {
LoRaParameters lora = 1;
GfskParameters gfsk = 2;
}
}
message LoRaPacketStatus {
uint32 signal_rssi_x2_neg = 1;
int32 snr_pkt_x4 = 2;
}
message FskPacketStatus {
uint32 rssi_sync_x2_neg = 1;
uint32 rssi_avg_x2_neg = 2;
}
message PacketStatus {
oneof kind {
LoRaPacketStatus lora = 1;
FskPacketStatus fsk = 2;
}
}
message HubInfo {
uint32 bus_id = 1;
uint32 sub_dev_id = 2;
RadioParameters radio_parameters = 3;
}
message RadioData {
HubInfo hub_info = 1;
PacketStatus packet_status = 2;
bytes data = 3;
RadioRxTiming rx_timing = 4;
}
message RadioRxTiming {
uint64 rx_done_hub_uptime_us = 1;
uint32 irq_to_forward_us = 2;
}
message BatteryInfo {
uint32 voltage_mv = 1;
uint32 soc_percentage = 2;
sint32 charging_rate_percentage = 3;
}
message CellularModemInfo {
string imei = 1;
int32 csq_rssi = 2;
int32 csq_ber = 3;
}
message GatewayInfo {
uint32 region_id = 1;
bytes gateway_mac = 2;
NetworkUplinkKind active_uplink = 3;
CellularModemInfo cellular_modem = 4;
uint32 ipv4_addr = 5;
}
message HrMeasurement {
HrPacket hr_packet = 1;
PacketStatus packet_status = 2;
GatewayInfo gateway_info = 3;
HubInfo hub_info = 4;
}
message StepCountMeasurement {
StepCountPacket step_count_packet = 1;
PacketStatus packet_status = 2;
GatewayInfo gateway_info = 3;
HubInfo hub_info = 4;
}
message GatewayStatistic {
uint32 boot_count = 1;
uint32 uptime_ms = 2;
uint32 duration_ms_since_last_packet = 3;
uint32 rx_count = 4;
BatteryInfo battery_info = 5;
}
message GatewayStatus {
GatewayInfo info = 1;
GatewayStatistic stat = 2;
}
message WearableHealthTelemetryBatch {
GatewayInfo gateway_info = 1;
uint32 report_seq = 2;
uint32 frame_id = 3;
uint64 frame_unix_time_us = 4;
uint32 radio_sub_dev_id = 5;
uint32 rf_frequency_hz = 6;
uint32 sample_encoding = 7;
uint32 sample_count = 8;
bytes samples = 9;
}
message RadioRxFrame {
RadioData radio_data = 1;
uint32 gateway_uptime_ms = 2;
uint32 rx_seq = 3;
}
message RadioNodeResponseTelemetry {
RadioRxFrame frame = 1;
}
message GatewayTelemetryMsg {
oneof choice {
HrMeasurement ntf_hr_measurement = 1;
GatewayStatus ntf_gateway_status = 2;
StepCountMeasurement ntf_step_count_measurement = 3;
RadioRxFrame ntf_radio_unrecognized_frame = 4;
RadioNodeResponseTelemetry ntf_radio_node_general_rsp = 7;
}
}