diff --git a/include/d0.h b/include/d0.h index 039737f..4b32fd8 100644 --- a/include/d0.h +++ b/include/d0.h @@ -51,6 +51,13 @@ int meter_open_d0(struct meter *mtr); int meter_close_d0(struct meter *mtr); size_t meter_read_d0(struct meter *mtr, struct reading *rds, size_t n); -int meter_d0_parse_line(struct reading *rd, char *line, size_t n); +/** + * Open socket + * + * @param node the hostname or ASCII encoded IP address + * @param the ASCII encoded portnum or service as in /etc/services + * @return file descriptor, <0 on error + */ +int meter_d0_open_socket(const char *node, const char *service); #endif /* _D0_H_ */ diff --git a/src/d0.c b/src/d0.c index 1f4ee8a..f378bfe 100644 --- a/src/d0.c +++ b/src/d0.c @@ -60,12 +60,32 @@ int meter_init_d0(meter_t *mtr, list_t options) { handle->host = NULL; } else { - print(log_error, "Missing host and port", mtr); + print(log_error, "Missing device or host", mtr); return ERR; } /* baudrate */ + int baudrate; switch (options_lookup_int(options, "baudrate", &handle->baudrate)) { + case SUCCESS: + /* find constant for termios structure */ + switch (baudrate) { + case 1200: handle->baudrate = B1200; break; + case 1800: handle->baudrate = B1800; break; + case 2400: handle->baudrate = B2400; break; + case 4800: handle->baudrate = B4800; break; + case 9600: handle->baudrate = B9600; break; + case 19200: handle->baudrate = B19200; break; + case 38400: handle->baudrate = B38400; break; + case 57600: handle->baudrate = B57600; break; + case 115200: handle->baudrate = B115200; break; + case 230400: handle->baudrate = B230400; break; + default: + print(log_error, "Invalid baudrate: %i", mtr, baudrate); + return ERR; + } + break; + case ERR_NOT_FOUND: /* using default value if not specified */ handle->baudrate = 9600; break; diff --git a/src/sml.c b/src/sml.c index f62e5de..74e2d6f 100644 --- a/src/sml.c +++ b/src/sml.c @@ -66,7 +66,7 @@ int meter_init_sml(meter_t *mtr, list_t options) { handle->host = NULL; } else { - print(log_error, "Missing host and port", mtr); + print(log_error, "Missing device or host", mtr); return ERR; }