aboutsummaryrefslogtreecommitdiff
path: root/src/testserial.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/testserial.cc')
-rw-r--r--src/testserial.cc73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/testserial.cc b/src/testserial.cc
new file mode 100644
index 0000000..9a09d02
--- /dev/null
+++ b/src/testserial.cc
@@ -0,0 +1,73 @@
+// SPDX-License-Identifier: BSD-3-Clause
+//
+// This is a test program, used to test libserialport.
+// You don't need it.
+
+#include <libserialport.h>
+#include <cstdio>
+#include <cstdlib>
+#include <hexdump.h>
+#include <iostream>
+#include <unistd.h>
+
+#define BUFSIZE 256
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+
+void die_on_fail(const char* s, int result) {
+ if (result != SP_OK) {
+ fprintf(stderr, "%s failed\n", s);
+ exit(1);
+ }
+}
+
+
+static const unsigned char PI[] = {
+ 0x5e, 0x50, 0x30, 0x30, 0x35, 0x50, 0x49,
+ 0x71, 0x8b, 0x0d
+};
+static const unsigned char GS[] = {
+ 0x5e, 0x50, 0x30, 0x30, 0x35, 0x47, 0x53,
+ 0x58, 0x14, 0x0d
+};
+
+int main(int argc, char** argv) {
+ struct sp_port* port;
+ struct sp_port_config *config;
+ char buf[BUFSIZE] = {0};
+
+ die_on_fail("sp_get_port_by_name", sp_get_port_by_name("/dev/ttyUSB0", &port));
+ die_on_fail("sp_open", sp_open(port, SP_MODE_READ_WRITE));
+
+ printf("configuring...\n");
+
+ die_on_fail("sp_new_config", sp_new_config(&config));
+ die_on_fail("sp_get_config", sp_get_config(port, config));
+
+ die_on_fail("sp_set_config_baudrate", sp_set_config_baudrate(config, 2400));
+ die_on_fail("sp_set_config_stopbits", sp_set_config_stopbits(config, 1));
+ die_on_fail("sp_set_config_bits", sp_set_config_bits(config, 8));
+ die_on_fail("sp_set_config_parity", sp_set_config_parity(config, SP_PARITY_NONE));
+ die_on_fail("sp_set_config_flowcontrol", sp_set_config_flowcontrol(config, SP_FLOWCONTROL_NONE));
+ die_on_fail("sp_set_config", sp_set_config(port, config));
+
+ printf("configured.\n");
+ sp_flush(port, SP_BUF_BOTH);
+
+ printf("writing %lu bytes...\n", ARRAY_SIZE(PI));
+ int written = sp_blocking_write(port, PI, ARRAY_SIZE(PI), 0);
+ printf("%d bytes written\n", written);
+
+ usleep(200000);
+
+ printf("reading...\n");
+ int read = sp_blocking_read_next(port, buf, ARRAY_SIZE(buf), 0);
+ printf("got %d bytes:\n", read);
+ std::cout << hexdump(buf, read) << std::endl;
+
+ printf("cleaning up...\n");
+
+ sp_free_config(config);
+ sp_free_port(port);
+
+ return 0;
+} \ No newline at end of file