libCATS
Loading...
Searching...
No Matches
whisker.h
Go to the documentation of this file.
1
6#ifndef CATS_WHISKER_H
7#define CATS_WHISKER_H
8
9#include <stdint.h>
10#include <stddef.h>
11#include <stdbool.h>
12
13#define CATS_ROUTE_PAST 0xFF
14#define CATS_ROUTE_FUTURE 0xFD
15#define CATS_ROUTE_INET 0xFE
16
17#define CATS_NODEINFO_HARDWARE_ID 1
18#define CATS_NODEINFO_SOFTWARE_ID 2
19#define CATS_NODEINFO_UPTIME 4
20#define CATS_NODEINFO_ANTENNA_HEIGHT 8
21#define CATS_NODEINFO_ANTENNA_GAIN 16
22#define CATS_NODEINFO_TX_POWER 32
23#define CATS_NODEINFO_VOLTAGE 64
24#define CATS_NODEINFO_TEMP 128
25#define CATS_NODEINFO_BATTERY 256
26#define CATS_NODEINFO_ALTITUDE 512
27#define CATS_NODEINFO_IS_BALLOON 1024
28#define CATS_NODEINFO_AMBIENT_TEMP 2048
29#define CATS_NODEINFO_AMBIENT_HUMIDITY 4096
30#define CATS_NODEINFO_AMBIENT_PRESSURE 8192
31
32#define CATS_MAX_WHISKER_LEN 255
33#define CATS_MAX_WHISKERS 255
34
35typedef enum cats_whisker_type {
36 WHISKER_TYPE_IDENTIFICATION,
37 WHISKER_TYPE_TIMESTAMP,
38 WHISKER_TYPE_GPS,
39 WHISKER_TYPE_COMMENT,
40 WHISKER_TYPE_ROUTE,
41 WHISKER_TYPE_DESTINATION,
42 WHISKER_TYPE_ARBITRARY,
43 WHISKER_TYPE_SIMPLEX,
44 WHISKER_TYPE_REPEATER,
45 WHISKER_TYPE_NODEINFO
46} cats_whisker_type_t;
47#define CATS_NUM_WHISKER_TYPES 10
48
49typedef enum cats_modulation {
50 MOD_UNK,
51 MOD_CATS,
52 MOD_FM,
53 MOD_AM,
54 MOD_USB,
55 MOD_LSB,
56 MOD_CW,
57 MOD_FREEDV,
58 MOD_M17,
59 MOD_DSTAR,
60 MOD_DMR,
61 MOD_FUSION,
62 MOD_P25
63} cats_modulation_t;
64
66 bool enabled;
67 float val;
68};
69
71 bool enabled;
72 uint8_t val;
73};
74
76 bool enabled;
77 int8_t val;
78};
79
81 bool enabled;
82 uint16_t val;
83};
84
86 bool enabled;
87 int16_t val;
88};
89
91 bool enabled;
92 uint32_t val;
93};
94
96 bool enabled;
97 int32_t val;
98};
99
101 bool enabled;
102 float val;
103};
104
106 bool enabled;
107};
108
109typedef struct cats_ident_whisker {
110 uint16_t icon;
111 uint8_t callsign[252]; // 252 = 255 - icon - ssid
112 uint8_t ssid;
114
115typedef struct cats_gps_whisker {
116 double latitude;
117 double longitude;
118 float altitude;
119 uint8_t max_error;
120 uint8_t heading;
121 float speed;
123
124typedef struct cats_route_hop {
125 uint8_t hop_type;
126 uint8_t ssid;
127 float rssi;
128 uint8_t callsign[16];
129 struct cats_route_hop* next;
131
132typedef struct cats_route_whisker {
133 uint8_t max_digipeats;
134 cats_route_hop_t hops;
135 uint8_t num_hops;
136 uint8_t len;
138
140 uint8_t ack;
141 uint8_t callsign[253];
142 uint8_t ssid;
144
145typedef struct cats_simplex_whisker {
146 uint32_t frequency;
147 uint8_t modulation;
148 uint8_t power;
150
151typedef struct cats_repeater_whisker {
152 uint32_t uplink;
153 uint32_t downlink;
154 uint8_t modulation;
155 uint32_t tone;
156 uint8_t power;
157 double latitude;
158 double longitude;
159 uint8_t name[238];
161
162typedef struct cats_nodeinfo_whisker {
163 struct nodeinfo_u16 hardware_id;
164 struct nodeinfo_u8 software_id;
165 struct nodeinfo_u32 uptime;
166 struct nodeinfo_u8 ant_height;
167 struct nodeinfo_u8 ant_gain;
168 struct nodeinfo_u8 tx_power;
169 struct nodeinfo_voltage voltage;
170 struct nodeinfo_i8 temperature;
171 struct nodeinfo_u8 battery_level;
172 struct nodeinfo_f32 altitude;
173 struct nodeinfo_bool is_balloon;
174 struct nodeinfo_i8 ambient_temp;
175 struct nodeinfo_u8 ambient_humidity;
176 struct nodeinfo_u16 ambient_pressure;
178
179typedef union cats_whisker_data {
180 cats_ident_whisker_t identification;
183 cats_destination_whisker_t destination;
186 cats_nodeinfo_whisker_t node_info;
187 uint8_t raw[255];
189
190typedef struct cats_whisker {
191 uint8_t type;
192 uint8_t len;
194 struct cats_whisker* next;
196
204size_t cats_whisker_encode(const cats_whisker_t* whisker, uint8_t* out);
205
213int cats_whisker_decode(const uint8_t* data, cats_whisker_t* out);
214
221int cats_whisker_base_len(const cats_whisker_type_t type);
222
229
238cats_route_hop_t* cats_route_add_future_hop(cats_route_whisker_t* route, const char* callsign, uint8_t ssid);
239
249cats_route_hop_t* cats_route_add_past_hop(cats_route_whisker_t* route, const char* callsign, uint8_t ssid, float rssi);
250
258
266
273cats_route_whisker_t cats_route_new(uint8_t max_digipeats);
274
275#endif // CATS_WHISKER_H
Definition whisker.h:139
Definition whisker.h:115
Definition whisker.h:109
Definition whisker.h:162
Definition whisker.h:151
Definition whisker.h:124
Definition whisker.h:132
Definition whisker.h:145
Definition whisker.h:190
Definition whisker.h:105
Definition whisker.h:100
Definition whisker.h:85
Definition whisker.h:95
Definition whisker.h:75
Definition whisker.h:80
Definition whisker.h:90
Definition whisker.h:70
Definition whisker.h:65
Definition whisker.h:179
cats_route_whisker_t cats_route_new(uint8_t max_digipeats)
Create a new route whisker.
Definition route.c:161
cats_route_hop_t * cats_route_add_future_hop(cats_route_whisker_t *route, const char *callsign, uint8_t ssid)
Add a future hop to a route whisker.
Definition route.c:135
cats_whisker_t * cats_whisker_new()
Create a new whisker.
Definition whisker.c:115
cats_route_hop_t * cats_route_add_past_hop(cats_route_whisker_t *route, const char *callsign, uint8_t ssid, float rssi)
Add a past hop to a route whisker.
Definition route.c:140
int cats_whisker_decode(const uint8_t *data, cats_whisker_t *out)
Decode a whisker from a byte array.
Definition whisker.c:92
cats_route_hop_t * cats_route_add_inet_hop(cats_route_whisker_t *route)
Add an internet hop to a route whisker.
Definition route.c:145
void cats_route_destroy(cats_route_whisker_t *route)
Destroy a route whisker.
Definition route.c:150
int cats_whisker_base_len(const cats_whisker_type_t type)
Get the length of a whisker base type.
Definition whisker.c:130
size_t cats_whisker_encode(const cats_whisker_t *whisker, uint8_t *out)
Encode a whisker into a byte array.
Definition whisker.c:71