Merge pull request #49 from lategoodbye/master
Fix port and baudrate, add some checks
This commit is contained in:
commit
73464cdc59
@ -55,7 +55,8 @@ main(int argc, char **argv)
|
|||||||
mbus_handle *handle = NULL;
|
mbus_handle *handle = NULL;
|
||||||
|
|
||||||
char *device, *addr_str, *xml_result;
|
char *device, *addr_str, *xml_result;
|
||||||
int address, baudrate = 9600;
|
int address;
|
||||||
|
long baudrate = 9600;
|
||||||
|
|
||||||
memset((void *)&reply, 0, sizeof(mbus_frame));
|
memset((void *)&reply, 0, sizeof(mbus_frame));
|
||||||
memset((void *)&reply_data, 0, sizeof(mbus_frame_data));
|
memset((void *)&reply_data, 0, sizeof(mbus_frame_data));
|
||||||
@ -73,13 +74,13 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else if (argc == 5 && strcmp(argv[1], "-b") == 0)
|
else if (argc == 5 && strcmp(argv[1], "-b") == 0)
|
||||||
{
|
{
|
||||||
baudrate = atoi(argv[2]);
|
baudrate = atol(argv[2]);
|
||||||
device = argv[3];
|
device = argv[3];
|
||||||
addr_str = argv[4];
|
addr_str = argv[4];
|
||||||
}
|
}
|
||||||
else if (argc == 6 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0)
|
else if (argc == 6 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0)
|
||||||
{
|
{
|
||||||
baudrate = atoi(argv[3]);
|
baudrate = atol(argv[3]);
|
||||||
device = argv[4];
|
device = argv[4];
|
||||||
addr_str = argv[5];
|
addr_str = argv[5];
|
||||||
debug = 1;
|
debug = 1;
|
||||||
|
@ -26,7 +26,8 @@ main(int argc, char **argv)
|
|||||||
mbus_handle *handle = NULL;
|
mbus_handle *handle = NULL;
|
||||||
|
|
||||||
char *device, *addr_str, *xml_result;
|
char *device, *addr_str, *xml_result;
|
||||||
int address, baudrate = 9600;
|
int address;
|
||||||
|
long baudrate = 9600;
|
||||||
|
|
||||||
memset((void *)&reply, 0, sizeof(mbus_frame));
|
memset((void *)&reply, 0, sizeof(mbus_frame));
|
||||||
memset((void *)&reply_data, 0, sizeof(mbus_frame_data));
|
memset((void *)&reply_data, 0, sizeof(mbus_frame_data));
|
||||||
@ -44,13 +45,13 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else if (argc == 5 && strcmp(argv[1], "-b") == 0)
|
else if (argc == 5 && strcmp(argv[1], "-b") == 0)
|
||||||
{
|
{
|
||||||
baudrate = atoi(argv[2]);
|
baudrate = atol(argv[2]);
|
||||||
device = argv[3];
|
device = argv[3];
|
||||||
addr_str = argv[4];
|
addr_str = argv[4];
|
||||||
}
|
}
|
||||||
else if (argc == 6 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0)
|
else if (argc == 6 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0)
|
||||||
{
|
{
|
||||||
baudrate = atoi(argv[3]);
|
baudrate = atol(argv[3]);
|
||||||
device = argv[4];
|
device = argv[4];
|
||||||
addr_str = argv[5];
|
addr_str = argv[5];
|
||||||
debug = 1;
|
debug = 1;
|
||||||
|
@ -52,7 +52,7 @@ int
|
|||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *device, *addr_mask = NULL;
|
char *device, *addr_mask = NULL;
|
||||||
int baudrate = 9600;
|
long baudrate = 9600;
|
||||||
mbus_handle *handle = NULL;
|
mbus_handle *handle = NULL;
|
||||||
mbus_frame *frame = NULL, reply;
|
mbus_frame *frame = NULL, reply;
|
||||||
|
|
||||||
@ -82,26 +82,26 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else if (argc == 4 && strcmp(argv[1], "-b") == 0)
|
else if (argc == 4 && strcmp(argv[1], "-b") == 0)
|
||||||
{
|
{
|
||||||
baudrate = atoi(argv[2]);
|
baudrate = atol(argv[2]);
|
||||||
device = argv[3];
|
device = argv[3];
|
||||||
addr_mask = strdup("FFFFFFFFFFFFFFFF");
|
addr_mask = strdup("FFFFFFFFFFFFFFFF");
|
||||||
}
|
}
|
||||||
else if (argc == 5 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0)
|
else if (argc == 5 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0)
|
||||||
{
|
{
|
||||||
baudrate = atoi(argv[3]);
|
baudrate = atol(argv[3]);
|
||||||
device = argv[4];
|
device = argv[4];
|
||||||
addr_mask = strdup("FFFFFFFFFFFFFFFF");
|
addr_mask = strdup("FFFFFFFFFFFFFFFF");
|
||||||
debug = 1;
|
debug = 1;
|
||||||
}
|
}
|
||||||
else if (argc == 5 && strcmp(argv[1], "-b") == 0)
|
else if (argc == 5 && strcmp(argv[1], "-b") == 0)
|
||||||
{
|
{
|
||||||
baudrate = atoi(argv[2]);
|
baudrate = atol(argv[2]);
|
||||||
device = argv[3];
|
device = argv[3];
|
||||||
addr_mask = strdup(argv[4]);
|
addr_mask = strdup(argv[4]);
|
||||||
}
|
}
|
||||||
else if (argc == 6 && strcmp(argv[1], "-d") == 0)
|
else if (argc == 6 && strcmp(argv[1], "-d") == 0)
|
||||||
{
|
{
|
||||||
baudrate = atoi(argv[3]);
|
baudrate = atol(argv[3]);
|
||||||
device = argv[4];
|
device = argv[4];
|
||||||
addr_mask = strdup(argv[5]);
|
addr_mask = strdup(argv[5]);
|
||||||
debug = 1;
|
debug = 1;
|
||||||
|
@ -54,7 +54,8 @@ main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
mbus_handle *handle;
|
mbus_handle *handle;
|
||||||
char *device;
|
char *device;
|
||||||
int address, baudrate = 9600, retries = 0;
|
int address, retries = 0;
|
||||||
|
long baudrate = 9600;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (argc == 2)
|
if (argc == 2)
|
||||||
@ -68,7 +69,7 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else if (argc == 4 && strcmp(argv[1], "-b") == 0)
|
else if (argc == 4 && strcmp(argv[1], "-b") == 0)
|
||||||
{
|
{
|
||||||
baudrate = atoi(argv[2]);
|
baudrate = atol(argv[2]);
|
||||||
device = argv[3];
|
device = argv[3];
|
||||||
}
|
}
|
||||||
else if (argc == 4 && strcmp(argv[1], "-r") == 0)
|
else if (argc == 4 && strcmp(argv[1], "-r") == 0)
|
||||||
@ -79,7 +80,7 @@ main(int argc, char **argv)
|
|||||||
else if (argc == 5 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0)
|
else if (argc == 5 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0)
|
||||||
{
|
{
|
||||||
debug = 1;
|
debug = 1;
|
||||||
baudrate = atoi(argv[3]);
|
baudrate = atol(argv[3]);
|
||||||
device = argv[4];
|
device = argv[4];
|
||||||
}
|
}
|
||||||
else if (argc == 5 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-r") == 0)
|
else if (argc == 5 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-r") == 0)
|
||||||
@ -90,14 +91,14 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else if (argc == 6 && strcmp(argv[1], "-b") == 0 && strcmp(argv[3], "-r") == 0)
|
else if (argc == 6 && strcmp(argv[1], "-b") == 0 && strcmp(argv[3], "-r") == 0)
|
||||||
{
|
{
|
||||||
baudrate = atoi(argv[2]);
|
baudrate = atol(argv[2]);
|
||||||
retries = atoi(argv[4]);
|
retries = atoi(argv[4]);
|
||||||
device = argv[5];
|
device = argv[5];
|
||||||
}
|
}
|
||||||
else if (argc == 7 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0 && strcmp(argv[4], "-r") == 0)
|
else if (argc == 7 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0 && strcmp(argv[4], "-r") == 0)
|
||||||
{
|
{
|
||||||
debug = 1;
|
debug = 1;
|
||||||
baudrate = atoi(argv[3]);
|
baudrate = atol(argv[3]);
|
||||||
retries = atoi(argv[5]);
|
retries = atoi(argv[5]);
|
||||||
device = argv[6];
|
device = argv[6];
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,8 @@ main(int argc, char **argv)
|
|||||||
mbus_handle *handle;
|
mbus_handle *handle;
|
||||||
mbus_frame reply;
|
mbus_frame reply;
|
||||||
char *device, *addr = NULL;
|
char *device, *addr = NULL;
|
||||||
int ret, baudrate = 9600;
|
int ret;
|
||||||
|
long baudrate = 9600;
|
||||||
|
|
||||||
if (argc == 3)
|
if (argc == 3)
|
||||||
{
|
{
|
||||||
@ -32,7 +33,7 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else if (argc == 5 && strcmp(argv[1], "-b") == 0)
|
else if (argc == 5 && strcmp(argv[1], "-b") == 0)
|
||||||
{
|
{
|
||||||
baudrate = atoi(argv[2]);
|
baudrate = atol(argv[2]);
|
||||||
device = argv[3];
|
device = argv[3];
|
||||||
addr = strdup(argv[4]);
|
addr = strdup(argv[4]);
|
||||||
}
|
}
|
||||||
|
@ -27,20 +27,20 @@ main(int argc, char **argv)
|
|||||||
mbus_frame reply;
|
mbus_frame reply;
|
||||||
char *device;
|
char *device;
|
||||||
int address, ret;
|
int address, ret;
|
||||||
int source_baudrate = 9600, target_baudrate;
|
long source_baudrate = 9600, target_baudrate;
|
||||||
|
|
||||||
if (argc == 4)
|
if (argc == 4)
|
||||||
{
|
{
|
||||||
device = argv[1];
|
device = argv[1];
|
||||||
address = atoi(argv[2]);
|
address = atoi(argv[2]);
|
||||||
target_baudrate = atoi(argv[3]);
|
target_baudrate = atol(argv[3]);
|
||||||
}
|
}
|
||||||
else if (argc == 6 && strcmp(argv[1], "-b") == 0)
|
else if (argc == 6 && strcmp(argv[1], "-b") == 0)
|
||||||
{
|
{
|
||||||
source_baudrate = atoi(argv[2]);
|
source_baudrate = atol(argv[2]);
|
||||||
device = argv[3];
|
device = argv[3];
|
||||||
address = atoi(argv[4]);
|
address = atoi(argv[4]);
|
||||||
target_baudrate = atoi(argv[5]);
|
target_baudrate = atol(argv[5]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -26,7 +26,8 @@ main(int argc, char **argv)
|
|||||||
mbus_handle *handle = NULL;
|
mbus_handle *handle = NULL;
|
||||||
|
|
||||||
char *host, *addr_str, matching_addr[16], *file = NULL;
|
char *host, *addr_str, matching_addr[16], *file = NULL;
|
||||||
int port, address, result;
|
long port;
|
||||||
|
int address, result;
|
||||||
FILE *fp = NULL;
|
FILE *fp = NULL;
|
||||||
size_t buff_len, len;
|
size_t buff_len, len;
|
||||||
unsigned char raw_buff[4096], buff[4096];
|
unsigned char raw_buff[4096], buff[4096];
|
||||||
@ -37,21 +38,21 @@ main(int argc, char **argv)
|
|||||||
if (argc == 4)
|
if (argc == 4)
|
||||||
{
|
{
|
||||||
host = argv[1];
|
host = argv[1];
|
||||||
port = atoi(argv[2]);
|
port = atol(argv[2]);
|
||||||
addr_str = argv[3];
|
addr_str = argv[3];
|
||||||
debug = 0;
|
debug = 0;
|
||||||
}
|
}
|
||||||
else if (argc == 5 && strcmp(argv[1], "-d") == 0)
|
else if (argc == 5 && strcmp(argv[1], "-d") == 0)
|
||||||
{
|
{
|
||||||
host = argv[2];
|
host = argv[2];
|
||||||
port = atoi(argv[3]);
|
port = atol(argv[3]);
|
||||||
addr_str = argv[4];
|
addr_str = argv[4];
|
||||||
debug = 1;
|
debug = 1;
|
||||||
}
|
}
|
||||||
else if (argc == 5)
|
else if (argc == 5)
|
||||||
{
|
{
|
||||||
host = argv[1];
|
host = argv[1];
|
||||||
port = atoi(argv[2]);
|
port = atol(argv[2]);
|
||||||
addr_str = argv[3];
|
addr_str = argv[3];
|
||||||
file = argv[4];
|
file = argv[4];
|
||||||
debug = 0;
|
debug = 0;
|
||||||
@ -59,7 +60,7 @@ main(int argc, char **argv)
|
|||||||
else if (argc == 6 && strcmp(argv[1], "-d") == 0)
|
else if (argc == 6 && strcmp(argv[1], "-d") == 0)
|
||||||
{
|
{
|
||||||
host = argv[2];
|
host = argv[2];
|
||||||
port = atoi(argv[3]);
|
port = atol(argv[3]);
|
||||||
addr_str = argv[4];
|
addr_str = argv[4];
|
||||||
file = argv[5];
|
file = argv[5];
|
||||||
debug = 1;
|
debug = 1;
|
||||||
@ -72,6 +73,12 @@ main(int argc, char **argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((port < 0) || (port > 0xFFFF))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Invalid port: %ld\n", port);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
mbus_register_send_event(&mbus_dump_send_event);
|
mbus_register_send_event(&mbus_dump_send_event);
|
||||||
|
@ -26,7 +26,8 @@ main(int argc, char **argv)
|
|||||||
mbus_handle *handle = NULL;
|
mbus_handle *handle = NULL;
|
||||||
|
|
||||||
char *host, *addr_str, matching_addr[16], *xml_result;
|
char *host, *addr_str, matching_addr[16], *xml_result;
|
||||||
int port, address;
|
int address;
|
||||||
|
long port;
|
||||||
|
|
||||||
memset((void *)&reply, 0, sizeof(mbus_frame));
|
memset((void *)&reply, 0, sizeof(mbus_frame));
|
||||||
memset((void *)&reply_data, 0, sizeof(mbus_frame_data));
|
memset((void *)&reply_data, 0, sizeof(mbus_frame_data));
|
||||||
@ -34,14 +35,14 @@ main(int argc, char **argv)
|
|||||||
if (argc == 4)
|
if (argc == 4)
|
||||||
{
|
{
|
||||||
host = argv[1];
|
host = argv[1];
|
||||||
port = atoi(argv[2]);
|
port = atol(argv[2]);
|
||||||
addr_str = argv[3];
|
addr_str = argv[3];
|
||||||
debug = 0;
|
debug = 0;
|
||||||
}
|
}
|
||||||
else if (argc == 5 && strcmp(argv[1], "-d") == 0)
|
else if (argc == 5 && strcmp(argv[1], "-d") == 0)
|
||||||
{
|
{
|
||||||
host = argv[2];
|
host = argv[2];
|
||||||
port = atoi(argv[3]);
|
port = atol(argv[3]);
|
||||||
addr_str = argv[4];
|
addr_str = argv[4];
|
||||||
debug = 1;
|
debug = 1;
|
||||||
}
|
}
|
||||||
@ -52,6 +53,12 @@ main(int argc, char **argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((port < 0) || (port > 0xFFFF))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Invalid port: %ld\n", port);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
mbus_register_send_event(&mbus_dump_send_event);
|
mbus_register_send_event(&mbus_dump_send_event);
|
||||||
|
@ -26,7 +26,8 @@ main(int argc, char **argv)
|
|||||||
mbus_handle *handle = NULL;
|
mbus_handle *handle = NULL;
|
||||||
|
|
||||||
char *host, *addr_str, matching_addr[16], *xml_result;
|
char *host, *addr_str, matching_addr[16], *xml_result;
|
||||||
int port, address;
|
int address;
|
||||||
|
long port;
|
||||||
|
|
||||||
memset((void *)&reply, 0, sizeof(mbus_frame));
|
memset((void *)&reply, 0, sizeof(mbus_frame));
|
||||||
memset((void *)&reply_data, 0, sizeof(mbus_frame_data));
|
memset((void *)&reply_data, 0, sizeof(mbus_frame_data));
|
||||||
@ -34,14 +35,14 @@ main(int argc, char **argv)
|
|||||||
if (argc == 4)
|
if (argc == 4)
|
||||||
{
|
{
|
||||||
host = argv[1];
|
host = argv[1];
|
||||||
port = atoi(argv[2]);
|
port = atol(argv[2]);
|
||||||
addr_str = argv[3];
|
addr_str = argv[3];
|
||||||
debug = 0;
|
debug = 0;
|
||||||
}
|
}
|
||||||
else if (argc == 5 && strcmp(argv[1], "-d") == 0)
|
else if (argc == 5 && strcmp(argv[1], "-d") == 0)
|
||||||
{
|
{
|
||||||
host = argv[2];
|
host = argv[2];
|
||||||
port = atoi(argv[3]);
|
port = atol(argv[3]);
|
||||||
addr_str = argv[4];
|
addr_str = argv[4];
|
||||||
debug = 1;
|
debug = 1;
|
||||||
}
|
}
|
||||||
@ -52,6 +53,12 @@ main(int argc, char **argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((port < 0) || (port > 0xFFFF))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Invalid port: %ld\n", port);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
mbus_register_send_event(&mbus_dump_send_event);
|
mbus_register_send_event(&mbus_dump_send_event);
|
||||||
|
@ -22,7 +22,7 @@ int
|
|||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *host, *addr_mask = NULL;
|
char *host, *addr_mask = NULL;
|
||||||
int port;
|
long port;
|
||||||
mbus_handle *handle = NULL;
|
mbus_handle *handle = NULL;
|
||||||
mbus_frame *frame = NULL, reply;
|
mbus_frame *frame = NULL, reply;
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
host = argv[1];
|
host = argv[1];
|
||||||
port = atoi(argv[2]);
|
port = atol(argv[2]);
|
||||||
if (argc == 4)
|
if (argc == 4)
|
||||||
{
|
{
|
||||||
addr_mask = strdup(argv[3]);
|
addr_mask = strdup(argv[3]);
|
||||||
@ -52,6 +52,12 @@ main(int argc, char **argv)
|
|||||||
fprintf(stderr, "Failed to allocate address mask.\n");
|
fprintf(stderr, "Failed to allocate address mask.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((port < 0) || (port > 0xFFFF))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Invalid port: %ld\n", port);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (mbus_is_secondary_address(addr_mask) == 0)
|
if (mbus_is_secondary_address(addr_mask) == 0)
|
||||||
{
|
{
|
||||||
|
@ -54,32 +54,33 @@ main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
mbus_handle *handle;
|
mbus_handle *handle;
|
||||||
char *host;
|
char *host;
|
||||||
int port, address, retries = 0;
|
int address, retries = 0;
|
||||||
|
long port;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (argc == 3)
|
if (argc == 3)
|
||||||
{
|
{
|
||||||
host = argv[1];
|
host = argv[1];
|
||||||
port = atoi(argv[2]);
|
port = atol(argv[2]);
|
||||||
}
|
}
|
||||||
else if (argc == 4 && strcmp(argv[1], "-d") == 0)
|
else if (argc == 4 && strcmp(argv[1], "-d") == 0)
|
||||||
{
|
{
|
||||||
debug = 1;
|
debug = 1;
|
||||||
host = argv[2];
|
host = argv[2];
|
||||||
port = atoi(argv[3]);
|
port = atol(argv[3]);
|
||||||
}
|
}
|
||||||
else if (argc == 5 && strcmp(argv[1], "-r") == 0)
|
else if (argc == 5 && strcmp(argv[1], "-r") == 0)
|
||||||
{
|
{
|
||||||
retries = atoi(argv[2]);
|
retries = atoi(argv[2]);
|
||||||
host = argv[3];
|
host = argv[3];
|
||||||
port = atoi(argv[4]);
|
port = atol(argv[4]);
|
||||||
}
|
}
|
||||||
else if (argc == 6 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-r") == 0)
|
else if (argc == 6 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-r") == 0)
|
||||||
{
|
{
|
||||||
debug = 1;
|
debug = 1;
|
||||||
retries = atoi(argv[3]);
|
retries = atoi(argv[3]);
|
||||||
host = argv[4];
|
host = argv[4];
|
||||||
port = atoi(argv[5]);
|
port = atol(argv[5]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -87,6 +88,12 @@ main(int argc, char **argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((port < 0) || (port > 0xFFFF))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Invalid port: %ld\n", port);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
mbus_register_send_event(&mbus_dump_send_event);
|
mbus_register_send_event(&mbus_dump_send_event);
|
||||||
|
@ -23,7 +23,8 @@ main(int argc, char **argv)
|
|||||||
mbus_handle *handle;
|
mbus_handle *handle;
|
||||||
mbus_frame reply;
|
mbus_frame reply;
|
||||||
char *host, *addr = NULL;
|
char *host, *addr = NULL;
|
||||||
int port, ret;
|
int ret;
|
||||||
|
long port;
|
||||||
|
|
||||||
if (argc != 4)
|
if (argc != 4)
|
||||||
{
|
{
|
||||||
@ -32,7 +33,13 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
host = argv[1];
|
host = argv[1];
|
||||||
port = atoi(argv[2]);
|
port = atol(argv[2]);
|
||||||
|
|
||||||
|
if ((port < 0) || (port > 0xFFFF))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Invalid port: %ld\n", port);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if ((addr = strdup(argv[3])) == NULL)
|
if ((addr = strdup(argv[3])) == NULL)
|
||||||
{
|
{
|
||||||
|
@ -1438,7 +1438,7 @@ mbus_context_serial(const char *device)
|
|||||||
}
|
}
|
||||||
|
|
||||||
mbus_handle *
|
mbus_handle *
|
||||||
mbus_context_tcp(const char *host, int port)
|
mbus_context_tcp(const char *host, uint16_t port)
|
||||||
{
|
{
|
||||||
mbus_handle *handle;
|
mbus_handle *handle;
|
||||||
mbus_tcp_data *tcp_data;
|
mbus_tcp_data *tcp_data;
|
||||||
@ -1655,7 +1655,7 @@ mbus_send_select_frame(mbus_handle * handle, const char *secondary_addr_str)
|
|||||||
// adressed slave(s) switch to the given baudrate
|
// adressed slave(s) switch to the given baudrate
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
int
|
int
|
||||||
mbus_send_switch_baudrate_frame(mbus_handle * handle, int address, int baudrate)
|
mbus_send_switch_baudrate_frame(mbus_handle * handle, int address, long baudrate)
|
||||||
{
|
{
|
||||||
int retval = 0;
|
int retval = 0;
|
||||||
int control_information = 0;
|
int control_information = 0;
|
||||||
|
@ -177,7 +177,7 @@ mbus_handle * mbus_context_serial(const char *device);
|
|||||||
*
|
*
|
||||||
* @return Initialized "unified" handler when successful, NULL otherwise;
|
* @return Initialized "unified" handler when successful, NULL otherwise;
|
||||||
*/
|
*/
|
||||||
mbus_handle * mbus_context_tcp(const char *host, int port);
|
mbus_handle * mbus_context_tcp(const char *host, uint16_t port);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deallocate memory used by M-Bus context.
|
* Deallocate memory used by M-Bus context.
|
||||||
@ -275,7 +275,7 @@ int mbus_send_application_reset_frame(mbus_handle * handle, int address, int sub
|
|||||||
*
|
*
|
||||||
* @return Zero when successful.
|
* @return Zero when successful.
|
||||||
*/
|
*/
|
||||||
int mbus_send_switch_baudrate_frame(mbus_handle * handle, int address, int baudrate);
|
int mbus_send_switch_baudrate_frame(mbus_handle * handle, int address, long baudrate);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends request frame (REQ_UD2) to given slave using "unified" handle
|
* Sends request frame (REQ_UD2) to given slave using "unified" handle
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#define _MBUS_PROTOCOL_H_
|
#define _MBUS_PROTOCOL_H_
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <limits.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -61,7 +62,7 @@ mbus_serial_connect(mbus_handle *handle)
|
|||||||
term->c_cflag |= PARENB;
|
term->c_cflag |= PARENB;
|
||||||
|
|
||||||
// No received data still OK
|
// No received data still OK
|
||||||
term->c_cc[VMIN] = 0;
|
term->c_cc[VMIN] = (cc_t) 0;
|
||||||
|
|
||||||
// Wait at most 0.2 sec.Note that it starts after first received byte!!
|
// Wait at most 0.2 sec.Note that it starts after first received byte!!
|
||||||
// I.e. if CMIN>0 and there are no data we would still wait forever...
|
// I.e. if CMIN>0 and there are no data we would still wait forever...
|
||||||
@ -74,7 +75,7 @@ mbus_serial_connect(mbus_handle *handle)
|
|||||||
// For 2400Bd this means (330 + 11) / 2400 + 0.05 = 188.75 ms (added 11 bit periods to receive first byte).
|
// For 2400Bd this means (330 + 11) / 2400 + 0.05 = 188.75 ms (added 11 bit periods to receive first byte).
|
||||||
// I.e. timeout of 0.2s seems appropriate for 2400Bd.
|
// I.e. timeout of 0.2s seems appropriate for 2400Bd.
|
||||||
|
|
||||||
term->c_cc[VTIME] = 2; // Timeout in 1/10 sec
|
term->c_cc[VTIME] = (cc_t) 2; // Timeout in 1/10 sec
|
||||||
|
|
||||||
cfsetispeed(term, B2400);
|
cfsetispeed(term, B2400);
|
||||||
cfsetospeed(term, B2400);
|
cfsetospeed(term, B2400);
|
||||||
@ -95,7 +96,7 @@ mbus_serial_connect(mbus_handle *handle)
|
|||||||
// Set baud rate for serial connection
|
// Set baud rate for serial connection
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
int
|
int
|
||||||
mbus_serial_set_baudrate(mbus_handle *handle, int baudrate)
|
mbus_serial_set_baudrate(mbus_handle *handle, long baudrate)
|
||||||
{
|
{
|
||||||
speed_t speed;
|
speed_t speed;
|
||||||
mbus_serial_data *serial_data;
|
mbus_serial_data *serial_data;
|
||||||
@ -104,47 +105,50 @@ mbus_serial_set_baudrate(mbus_handle *handle, int baudrate)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
serial_data = (mbus_serial_data *) handle->auxdata;
|
serial_data = (mbus_serial_data *) handle->auxdata;
|
||||||
|
|
||||||
|
if (serial_data == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
switch (baudrate)
|
switch (baudrate)
|
||||||
{
|
{
|
||||||
case 300:
|
case 300:
|
||||||
speed = B300;
|
speed = B300;
|
||||||
serial_data->t.c_cc[VTIME] = 12; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 12; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 600:
|
case 600:
|
||||||
speed = B600;
|
speed = B600;
|
||||||
serial_data->t.c_cc[VTIME] = 6; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 6; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1200:
|
case 1200:
|
||||||
speed = B1200;
|
speed = B1200;
|
||||||
serial_data->t.c_cc[VTIME] = 4; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 4; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2400:
|
case 2400:
|
||||||
speed = B2400;
|
speed = B2400;
|
||||||
serial_data->t.c_cc[VTIME] = 2; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 2; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4800:
|
case 4800:
|
||||||
speed = B4800;
|
speed = B4800;
|
||||||
serial_data->t.c_cc[VTIME] = 2; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 2; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 9600:
|
case 9600:
|
||||||
speed = B9600;
|
speed = B9600;
|
||||||
serial_data->t.c_cc[VTIME] = 1; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 1; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 19200:
|
case 19200:
|
||||||
speed = B19200;
|
speed = B19200;
|
||||||
serial_data->t.c_cc[VTIME] = 1; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 1; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 38400:
|
case 38400:
|
||||||
speed = B38400;
|
speed = B38400;
|
||||||
serial_data->t.c_cc[VTIME] = 1; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 1; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -197,8 +201,15 @@ mbus_serial_data_free(mbus_handle *handle)
|
|||||||
if (handle)
|
if (handle)
|
||||||
{
|
{
|
||||||
serial_data = (mbus_serial_data *) handle->auxdata;
|
serial_data = (mbus_serial_data *) handle->auxdata;
|
||||||
|
|
||||||
|
if (serial_data == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
free(serial_data->device);
|
free(serial_data->device);
|
||||||
free(serial_data);
|
free(serial_data);
|
||||||
|
handle->auxdata = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,6 +226,12 @@ mbus_serial_send_frame(mbus_handle *handle, mbus_frame *frame)
|
|||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure serial connection is open
|
||||||
|
if (isatty(handle->fd) == 0)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if ((len = mbus_frame_pack(frame, buff, sizeof(buff))) == -1)
|
if ((len = mbus_frame_pack(frame, buff, sizeof(buff))) == -1)
|
||||||
{
|
{
|
||||||
@ -262,13 +279,21 @@ int
|
|||||||
mbus_serial_recv_frame(mbus_handle *handle, mbus_frame *frame)
|
mbus_serial_recv_frame(mbus_handle *handle, mbus_frame *frame)
|
||||||
{
|
{
|
||||||
char buff[PACKET_BUFF_SIZE];
|
char buff[PACKET_BUFF_SIZE];
|
||||||
int len, remaining, nread, timeouts;
|
int remaining, timeouts;
|
||||||
|
ssize_t len, nread;
|
||||||
|
|
||||||
if (handle == NULL || frame == NULL)
|
if (handle == NULL || frame == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: Invalid parameter.\n", __PRETTY_FUNCTION__);
|
fprintf(stderr, "%s: Invalid parameter.\n", __PRETTY_FUNCTION__);
|
||||||
return MBUS_RECV_RESULT_ERROR;
|
return MBUS_RECV_RESULT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure serial connection is open
|
||||||
|
if (isatty(handle->fd) == 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: Serial connection is not available.\n", __PRETTY_FUNCTION__);
|
||||||
|
return MBUS_RECV_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
memset((void *)buff, 0, sizeof(buff));
|
memset((void *)buff, 0, sizeof(buff));
|
||||||
|
|
||||||
@ -280,6 +305,12 @@ mbus_serial_recv_frame(mbus_handle *handle, mbus_frame *frame)
|
|||||||
timeouts = 0;
|
timeouts = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
if (len + remaining > PACKET_BUFF_SIZE)
|
||||||
|
{
|
||||||
|
// avoid out of bounds access
|
||||||
|
return MBUS_RECV_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
//printf("%s: Attempt to read %d bytes [len = %d]\n", __PRETTY_FUNCTION__, remaining, len);
|
//printf("%s: Attempt to read %d bytes [len = %d]\n", __PRETTY_FUNCTION__, remaining, len);
|
||||||
|
|
||||||
if ((nread = read(handle->fd, &buff[len], remaining)) == -1)
|
if ((nread = read(handle->fd, &buff[len], remaining)) == -1)
|
||||||
@ -302,6 +333,12 @@ mbus_serial_recv_frame(mbus_handle *handle, mbus_frame *frame)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (len > (SSIZE_MAX-nread))
|
||||||
|
{
|
||||||
|
// avoid overflow
|
||||||
|
return MBUS_RECV_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
len += nread;
|
len += nread;
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ int mbus_serial_connect(mbus_handle *handle);
|
|||||||
int mbus_serial_disconnect(mbus_handle *handle);
|
int mbus_serial_disconnect(mbus_handle *handle);
|
||||||
int mbus_serial_send_frame(mbus_handle *handle, mbus_frame *frame);
|
int mbus_serial_send_frame(mbus_handle *handle, mbus_frame *frame);
|
||||||
int mbus_serial_recv_frame(mbus_handle *handle, mbus_frame *frame);
|
int mbus_serial_recv_frame(mbus_handle *handle, mbus_frame *frame);
|
||||||
int mbus_serial_set_baudrate(mbus_handle *handle, int baudrate);
|
int mbus_serial_set_baudrate(mbus_handle *handle, long baudrate);
|
||||||
void mbus_serial_data_free(mbus_handle *handle);
|
void mbus_serial_data_free(mbus_handle *handle);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <limits.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
@ -38,7 +39,7 @@ mbus_tcp_connect(mbus_handle *handle)
|
|||||||
struct sockaddr_in s;
|
struct sockaddr_in s;
|
||||||
struct timeval time_out;
|
struct timeval time_out;
|
||||||
mbus_tcp_data *tcp_data;
|
mbus_tcp_data *tcp_data;
|
||||||
int port;
|
uint16_t port;
|
||||||
|
|
||||||
if (handle == NULL)
|
if (handle == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
@ -97,8 +98,15 @@ mbus_tcp_data_free(mbus_handle *handle)
|
|||||||
if (handle)
|
if (handle)
|
||||||
{
|
{
|
||||||
tcp_data = (mbus_tcp_data *) handle->auxdata;
|
tcp_data = (mbus_tcp_data *) handle->auxdata;
|
||||||
|
|
||||||
|
if (tcp_data == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
free(tcp_data->host);
|
free(tcp_data->host);
|
||||||
free(tcp_data);
|
free(tcp_data);
|
||||||
|
handle->auxdata = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,6 +134,7 @@ mbus_tcp_send_frame(mbus_handle *handle, mbus_frame *frame)
|
|||||||
{
|
{
|
||||||
unsigned char buff[PACKET_BUFF_SIZE];
|
unsigned char buff[PACKET_BUFF_SIZE];
|
||||||
int len, ret;
|
int len, ret;
|
||||||
|
char error_str[128];
|
||||||
|
|
||||||
if (handle == NULL || frame == NULL)
|
if (handle == NULL || frame == NULL)
|
||||||
{
|
{
|
||||||
@ -134,7 +143,6 @@ mbus_tcp_send_frame(mbus_handle *handle, mbus_frame *frame)
|
|||||||
|
|
||||||
if ((len = mbus_frame_pack(frame, buff, sizeof(buff))) == -1)
|
if ((len = mbus_frame_pack(frame, buff, sizeof(buff))) == -1)
|
||||||
{
|
{
|
||||||
char error_str[128];
|
|
||||||
snprintf(error_str, sizeof(error_str), "%s: mbus_frame_pack failed\n", __PRETTY_FUNCTION__);
|
snprintf(error_str, sizeof(error_str), "%s: mbus_frame_pack failed\n", __PRETTY_FUNCTION__);
|
||||||
mbus_error_str_set(error_str);
|
mbus_error_str_set(error_str);
|
||||||
return -1;
|
return -1;
|
||||||
@ -150,7 +158,6 @@ mbus_tcp_send_frame(mbus_handle *handle, mbus_frame *frame)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char error_str[128];
|
|
||||||
snprintf(error_str, sizeof(error_str), "%s: Failed to write frame to socket (ret = %d)\n", __PRETTY_FUNCTION__, ret);
|
snprintf(error_str, sizeof(error_str), "%s: Failed to write frame to socket (ret = %d)\n", __PRETTY_FUNCTION__, ret);
|
||||||
mbus_error_str_set(error_str);
|
mbus_error_str_set(error_str);
|
||||||
return -1;
|
return -1;
|
||||||
@ -165,7 +172,8 @@ mbus_tcp_send_frame(mbus_handle *handle, mbus_frame *frame)
|
|||||||
int mbus_tcp_recv_frame(mbus_handle *handle, mbus_frame *frame)
|
int mbus_tcp_recv_frame(mbus_handle *handle, mbus_frame *frame)
|
||||||
{
|
{
|
||||||
char buff[PACKET_BUFF_SIZE];
|
char buff[PACKET_BUFF_SIZE];
|
||||||
int len, remaining, nread;
|
int remaining;
|
||||||
|
ssize_t len, nread;
|
||||||
|
|
||||||
if (handle == NULL || frame == NULL) {
|
if (handle == NULL || frame == NULL) {
|
||||||
fprintf(stderr, "%s: Invalid parameter.\n", __PRETTY_FUNCTION__);
|
fprintf(stderr, "%s: Invalid parameter.\n", __PRETTY_FUNCTION__);
|
||||||
@ -182,6 +190,12 @@ int mbus_tcp_recv_frame(mbus_handle *handle, mbus_frame *frame)
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
retry:
|
retry:
|
||||||
|
if (len + remaining > PACKET_BUFF_SIZE)
|
||||||
|
{
|
||||||
|
// avoid out of bounds access
|
||||||
|
return MBUS_RECV_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
nread = read(handle->fd, &buff[len], remaining);
|
nread = read(handle->fd, &buff[len], remaining);
|
||||||
switch (nread) {
|
switch (nread) {
|
||||||
case -1:
|
case -1:
|
||||||
@ -199,6 +213,12 @@ retry:
|
|||||||
mbus_error_str_set("M-Bus tcp transport layer connection closed by remote host.");
|
mbus_error_str_set("M-Bus tcp transport layer connection closed by remote host.");
|
||||||
return MBUS_RECV_RESULT_RESET;
|
return MBUS_RECV_RESULT_RESET;
|
||||||
default:
|
default:
|
||||||
|
if (len > (SSIZE_MAX-nread))
|
||||||
|
{
|
||||||
|
// avoid overflow
|
||||||
|
return MBUS_RECV_RESULT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
len += nread;
|
len += nread;
|
||||||
}
|
}
|
||||||
} while ((remaining = mbus_parse(frame, buff, len)) > 0);
|
} while ((remaining = mbus_parse(frame, buff, len)) > 0);
|
||||||
|
@ -29,7 +29,7 @@ extern "C" {
|
|||||||
typedef struct _mbus_tcp_data
|
typedef struct _mbus_tcp_data
|
||||||
{
|
{
|
||||||
char *host;
|
char *host;
|
||||||
int port;
|
uint16_t port;
|
||||||
} mbus_tcp_data;
|
} mbus_tcp_data;
|
||||||
|
|
||||||
int mbus_tcp_connect(mbus_handle *handle);
|
int mbus_tcp_connect(mbus_handle *handle);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user