Skip to content

Commit 107f204

Browse files
author
Cam K.
committed
Add balloon info to nodeinfo
1 parent c848842 commit 107f204

File tree

4 files changed

+75
-0
lines changed

4 files changed

+75
-0
lines changed

CMakeLists.txt

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ project(libCATS)
33

44
option(OPT_BUILD_TESTS OFF)
55
option(OPT_BUILD_RADIO_IFACE ON)
6+
option(OPT_BUILD_FELINET ON)
67

78
file(GLOB SOURCES lib/buffer.c
89
lib/error.c
@@ -61,6 +62,10 @@ if(OPT_BUILD_TESTS)
6162
endif()
6263
endif(OPT_BUILD_TESTS)
6364

65+
if(OPT_BUILD_FELINET)
66+
67+
endif(OPT_BUILD_FELINET)
68+
6469
target_link_libraries(CATS labrador_ldpc)
6570
target_include_directories(CATS PUBLIC include ${labrador_ldpc_SOURCE_DIR}/capi/include)
6671
set_property(TARGET CATS PROPERTY C_STANDARD 11)

include/cats/whisker.h

+19
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323
#define CATS_NODEINFO_VOLTAGE 64
2424
#define CATS_NODEINFO_TEMP 128
2525
#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
2631

2732
#define CATS_MAX_WHISKER_LEN 255
2833
#define CATS_MAX_WHISKERS 255
@@ -92,6 +97,15 @@ struct nodeinfo_i32 {
9297
int32_t val;
9398
};
9499

100+
struct nodeinfo_f32 {
101+
bool enabled;
102+
float val;
103+
};
104+
105+
struct nodeinfo_bool {
106+
bool enabled;
107+
};
108+
95109
typedef struct cats_ident_whisker {
96110
uint16_t icon;
97111
uint8_t callsign[252]; // 252 = 255 - icon - ssid
@@ -155,6 +169,11 @@ typedef struct cats_nodeinfo_whisker {
155169
struct nodeinfo_voltage voltage;
156170
struct nodeinfo_i8 temperature;
157171
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;
158177
} cats_nodeinfo_whisker_t;
159178

160179
typedef union cats_whisker_data {

lib/whiskers/nodeinfo.c

+41
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,27 @@ size_t cats_nodeinfo_encode(const cats_whisker_data_t* data, uint8_t* dest)
5757
dest[ptr++] = info->battery_level.val * 2.55;
5858
bitmap |= CATS_NODEINFO_BATTERY;
5959
}
60+
if(info->altitude.enabled) {
61+
memcpy(dest + ptr, &(info->altitude.val), 4); // TODO: Do this another way
62+
ptr += 4;
63+
bitmap |= CATS_NODEINFO_ALTITUDE;
64+
}
65+
if(info->is_balloon.enabled) {
66+
bitmap |= CATS_NODEINFO_IS_BALLOON;
67+
}
68+
if(info->ambient_temp.enabled) {
69+
dest[ptr++] = info->ambient_temp.val;
70+
bitmap |= CATS_NODEINFO_AMBIENT_TEMP;
71+
}
72+
if(info->ambient_humidity.enabled) {
73+
dest[ptr++] = info->ambient_humidity.val * 2.55;
74+
bitmap |= CATS_NODEINFO_AMBIENT_HUMIDITY;
75+
}
76+
if(info->ambient_pressure.enabled) {
77+
dest[ptr++] = info->ambient_pressure.val;
78+
dest[ptr++] = info->ambient_pressure.val >> 8;
79+
bitmap |= CATS_NODEINFO_AMBIENT_PRESSURE;
80+
}
6081

6182
dest[4] = bitmap;
6283
dest[3] = bitmap >> 8;
@@ -110,6 +131,26 @@ void cats_nodeinfo_decode(const uint8_t* data, size_t len, cats_whisker_data_t*
110131
info->battery_level.val = data[ptr++] / 2.55;
111132
info->battery_level.enabled = true;
112133
}
134+
if(CHECK_MASK(bitmap, CATS_NODEINFO_ALTITUDE)) {
135+
memcpy(&(info->altitude.val), data + ptr, 4); // TODO: Do this another way
136+
ptr += 4;
137+
info->altitude.enabled = true;
138+
}
139+
if(CHECK_MASK(bitmap, CATS_NODEINFO_IS_BALLOON)) {
140+
info->is_balloon.enabled = true;
141+
}
142+
if(CHECK_MASK(bitmap, CATS_NODEINFO_AMBIENT_TEMP)) {
143+
info->ambient_temp.val = data[ptr++];
144+
info->ambient_temp.enabled = true;
145+
}
146+
if(CHECK_MASK(bitmap, CATS_NODEINFO_AMBIENT_HUMIDITY)) {
147+
info->ambient_humidity.val = data[ptr++] / 2.55;
148+
info->ambient_humidity.enabled = true;
149+
}
150+
if(CHECK_MASK(bitmap, CATS_NODEINFO_AMBIENT_PRESSURE)) {
151+
info->ambient_pressure.val = (data[ptr + 1] << 8) | data[ptr];
152+
info->ambient_pressure.enabled = true;
153+
}
113154
}
114155

115156
int cats_packet_get_nodeinfo(const cats_packet_t* pkt, cats_nodeinfo_whisker_t** out)

tests/whisker.c

+10
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,11 @@ void test_nodeinfo()
280280
info.tx_power.enabled = true;
281281
info.uptime.enabled = true;
282282
info.voltage.enabled = true;
283+
info.altitude.enabled = true;
284+
info.is_balloon.enabled = true;
285+
info.ambient_humidity.enabled = false;
286+
info.ambient_temp.enabled = false;
287+
info.ambient_pressure.enabled = false;
283288
info.hardware_id.val = 7408;
284289
info.uptime.val = 98;
285290
info.tx_power.val = 30;
@@ -310,6 +315,11 @@ void test_nodeinfo()
310315
assert(info.tx_power.enabled == true);
311316
assert(info.uptime.enabled == true);
312317
assert(info.voltage.enabled == true);
318+
assert(info.altitude.enabled == true);
319+
assert(info.is_balloon.enabled == true);
320+
assert(info.ambient_humidity.enabled == false);
321+
assert(info.ambient_temp.enabled == false);
322+
assert(info.ambient_pressure.enabled == false);
313323
assert(info.hardware_id.val == 7408);
314324
assert(info.tx_power.val == 30);
315325
assert(info.voltage.val = 12.8);

0 commit comments

Comments
 (0)