feat: add serial port listing and CLI flags

Implement cel_serial_list_ports/cel_serial_free_ports with
platform backends: Windows reads HKLM\HARDWARE\DEVICEMAP\
SERIALCOMM (fast, single registry read), POSIX scans /dev for
ttyUSB*/ttyACM*.

telemetry tool gains --list, --port, and --baudrate flags;
baud rate was previously hardcoded to 400000. Rename the
tool_telemetry CMake target to telemetry.

Fix test_free_ports_zero_count, which passed a stack array to
cel_serial_free_ports (which calls free() on it), corrupting
the heap.
This commit is contained in:
2026-06-14 20:13:57 +02:00
parent cd7d411332
commit a0868cd3b7
9 changed files with 195 additions and 27 deletions
+35
View File
@@ -1,3 +1,5 @@
#include <stdlib.h>
#include "unity.h"
#include "celrs/serial.h"
#include "Mocklog_write.h"
@@ -58,6 +60,34 @@ void test_flush_null(void) {
cel_serial_flush(NULL); /* should not crash */
}
void test_list_ports_null_out(void) {
TEST_ASSERT_EQUAL_INT(-1, cel_serial_list_ports(NULL, 16));
}
void test_list_ports_runs_without_crash(void) {
char** ports = NULL;
int count = cel_serial_list_ports(&ports, 16);
/* count >= 0 is valid (may be 0 if no ports available) */
TEST_ASSERT_GREATER_OR_EQUAL_INT(0, count);
cel_serial_free_ports(ports, count);
}
void test_list_ports_zero_max_uses_default(void) {
char** ports = NULL;
int count = cel_serial_list_ports(&ports, 0);
TEST_ASSERT_GREATER_OR_EQUAL_INT(0, count);
cel_serial_free_ports(ports, count);
}
void test_free_ports_null(void) {
cel_serial_free_ports(NULL, 0); /* should not crash */
}
void test_free_ports_zero_count(void) {
char** empty = (char**)calloc(1, sizeof(char*));
cel_serial_free_ports(empty, 0); /* should not crash */
}
int main(void) {
UNITY_BEGIN();
RUN_TEST(test_open_valid_path);
@@ -68,5 +98,10 @@ int main(void) {
RUN_TEST(test_write_returns_zero_stub);
RUN_TEST(test_flush_no_crash);
RUN_TEST(test_flush_null);
RUN_TEST(test_list_ports_null_out);
RUN_TEST(test_list_ports_runs_without_crash);
RUN_TEST(test_list_ports_zero_max_uses_default);
RUN_TEST(test_free_ports_null);
RUN_TEST(test_free_ports_zero_count);
return UNITY_END();
}