#include #include #include static int32 reader_thread(void *data) { BSerialPort *port = (BSerialPort *)data; char buffer[128]; while (true) { ssize_t read = port->Read(buffer, sizeof(buffer)); if (read <= 0) continue; for (ssize_t i = 0; i < read; i++) { putc(buffer[i], stdout); fflush(stdout); } } return 0; } int main(int argc, char *argv[]) { BSerialPort port; if (argc < 2) { printf("usage: %s \n", argv[0]); int32 portCount = port.CountDevices(); printf("\tports (%ld):\n", portCount); char nameBuffer[B_OS_NAME_LENGTH]; for (int32 i = 0; i < portCount; i++) { if (port.GetDeviceName(i, nameBuffer, sizeof(nameBuffer)) != B_OK) { printf("\t\tfailed to retrieve name %ld\n", i); continue; } printf("\t\t%s\n", nameBuffer); } return 1; } status_t result = port.Open(argv[1]); if (result < B_OK) { printf("failed to open port \"%s\": %s\n", argv[1], strerror(result)); return result; } port.SetDataRate(B_9600_BPS); port.SetDataBits(B_DATA_BITS_8); port.SetStopBits(B_STOP_BITS_1); port.SetParityMode(B_NO_PARITY); port.SetFlowControl(B_NOFLOW_CONTROL); thread_id reader = spawn_thread(reader_thread, "serial reader", B_NORMAL_PRIORITY, &port); if (reader < 0) { printf("failed to spawn reader thread\n"); return reader; } resume_thread(reader); char buffer[128]; while (true) { char *string = fgets(buffer, sizeof(buffer), stdin); if (string == NULL) continue; port.Write(buffer, strlen(string) - 1); } return 0; }