Merge pull request #59 from lategoodbye/master

Remove trailing whitespace
This commit is contained in:
Robert 2013-10-02 06:58:45 -07:00
commit 3e24215e51
25 changed files with 1168 additions and 1168 deletions

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson, Raditex AB // Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -22,14 +22,14 @@ static int debug = 0;
// //
static int static int
init_slaves(mbus_handle *handle) init_slaves(mbus_handle *handle)
{ {
if (debug) if (debug)
printf("%s: debug: sending init frame #1\n", __PRETTY_FUNCTION__); printf("%s: debug: sending init frame #1\n", __PRETTY_FUNCTION__);
if (mbus_send_ping_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 1) == -1) if (mbus_send_ping_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 1) == -1)
{ {
return 0; return 0;
} }
// //
// resend SND_NKE, maybe the first get lost // resend SND_NKE, maybe the first get lost
@ -37,7 +37,7 @@ init_slaves(mbus_handle *handle)
if (debug) if (debug)
printf("%s: debug: sending init frame #2\n", __PRETTY_FUNCTION__); printf("%s: debug: sending init frame #2\n", __PRETTY_FUNCTION__);
if (mbus_send_ping_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 1) == -1) if (mbus_send_ping_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 1) == -1)
{ {
return 0; return 0;
@ -77,21 +77,21 @@ main(int argc, char **argv)
int c; int c;
for (c=1; c<argc-2; c++) for (c=1; c<argc-2; c++)
{ {
if (strcmp(argv[c], "-d") == 0) if (strcmp(argv[c], "-d") == 0)
{ {
debug = 1; debug = 1;
} }
else if (strcmp(argv[c], "-b") == 0) else if (strcmp(argv[c], "-b") == 0)
{ {
c++; c++;
baudrate = atol(argv[c]); baudrate = atol(argv[c]);
} }
else if (strcmp(argv[c], "-f") == 0) else if (strcmp(argv[c], "-f") == 0)
{ {
c++; c++;
maxframes = atoi(argv[c]); maxframes = atoi(argv[c]);
} }
else else
{ {
parse_abort(argv); parse_abort(argv);
} }
@ -100,16 +100,16 @@ main(int argc, char **argv)
{ {
parse_abort(argv); parse_abort(argv);
} }
device = argv[c]; device = argv[c];
addr_str = argv[c+1]; addr_str = argv[c+1];
if (debug) if (debug)
{ {
mbus_register_send_event(&mbus_dump_send_event); mbus_register_send_event(&mbus_dump_send_event);
mbus_register_recv_event(&mbus_dump_recv_event); mbus_register_recv_event(&mbus_dump_recv_event);
} }
if ((handle = mbus_context_serial(device)) == NULL) if ((handle = mbus_context_serial(device)) == NULL)
{ {
fprintf(stderr, "Could not initialize M-Bus context: %s\n", mbus_error_str()); fprintf(stderr, "Could not initialize M-Bus context: %s\n", mbus_error_str());
@ -130,7 +130,7 @@ main(int argc, char **argv)
mbus_context_free(handle); mbus_context_free(handle);
return 1; return 1;
} }
if (init_slaves(handle) == 0) if (init_slaves(handle) == 0)
{ {
mbus_disconnect(handle); mbus_disconnect(handle);
@ -165,19 +165,19 @@ main(int argc, char **argv)
fprintf(stderr, "%s: Error: Failed to select secondary address [%s].\n", __PRETTY_FUNCTION__, addr_str); fprintf(stderr, "%s: Error: Failed to select secondary address [%s].\n", __PRETTY_FUNCTION__, addr_str);
mbus_disconnect(handle); mbus_disconnect(handle);
mbus_context_free(handle); mbus_context_free(handle);
return 1; return 1;
} }
// else MBUS_PROBE_SINGLE // else MBUS_PROBE_SINGLE
address = MBUS_ADDRESS_NETWORK_LAYER; address = MBUS_ADDRESS_NETWORK_LAYER;
} }
else else
{ {
// primary addressing // primary addressing
address = atoi(addr_str); address = atoi(addr_str);
} }
// instead of the send and recv, use this sendrecv function that // instead of the send and recv, use this sendrecv function that
// takes care of the possibility of multi-telegram replies (limit = 16 frames) // takes care of the possibility of multi-telegram replies (limit = 16 frames)
if (mbus_sendrecv_request(handle, address, &reply, maxframes) != 0) if (mbus_sendrecv_request(handle, address, &reply, maxframes) != 0)
{ {
@ -207,14 +207,14 @@ main(int argc, char **argv)
mbus_frame_free(reply.next); mbus_frame_free(reply.next);
return 1; return 1;
} }
printf("%s", xml_result); printf("%s", xml_result);
free(xml_result); free(xml_result);
mbus_disconnect(handle); mbus_disconnect(handle);
mbus_context_free(handle); mbus_context_free(handle);
mbus_frame_free(reply.next); mbus_frame_free(reply.next);
return 0; return 0;
} }

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson, Raditex AB // Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -28,48 +28,48 @@ main(int argc, char **argv)
char *device, *addr_str, *xml_result; char *device, *addr_str, *xml_result;
int address; int address;
long baudrate = 9600; 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));
if (argc == 3) if (argc == 3)
{ {
device = argv[1]; device = argv[1];
addr_str = argv[2]; addr_str = argv[2];
} }
else if (argc == 4 && strcmp(argv[1], "-d") == 0) else if (argc == 4 && strcmp(argv[1], "-d") == 0)
{ {
device = argv[2]; device = argv[2];
addr_str = argv[3]; addr_str = argv[3];
debug = 1; debug = 1;
} }
else if (argc == 5 && strcmp(argv[1], "-b") == 0) else if (argc == 5 && strcmp(argv[1], "-b") == 0)
{ {
baudrate = atol(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 = atol(argv[3]); baudrate = atol(argv[3]);
device = argv[4]; device = argv[4];
addr_str = argv[5]; addr_str = argv[5];
debug = 1; debug = 1;
} }
else else
{ {
fprintf(stderr, "usage: %s [-d] [-b BAUDRATE] device mbus-address\n", argv[0]); fprintf(stderr, "usage: %s [-d] [-b BAUDRATE] device mbus-address\n", argv[0]);
fprintf(stderr, " optional flag -d for debug printout\n"); fprintf(stderr, " optional flag -d for debug printout\n");
fprintf(stderr, " optional flag -b for selecting baudrate\n"); fprintf(stderr, " optional flag -b for selecting baudrate\n");
return 0; return 0;
} }
if (debug) if (debug)
{ {
mbus_register_send_event(&mbus_dump_send_event); mbus_register_send_event(&mbus_dump_send_event);
mbus_register_recv_event(&mbus_dump_recv_event); mbus_register_recv_event(&mbus_dump_recv_event);
} }
if ((handle = mbus_context_serial(device)) == NULL) if ((handle = mbus_context_serial(device)) == NULL)
{ {
fprintf(stderr, "Could not initialize M-Bus context: %s\n", mbus_error_str()); fprintf(stderr, "Could not initialize M-Bus context: %s\n", mbus_error_str());
@ -110,7 +110,7 @@ main(int argc, char **argv)
else if (ret == MBUS_PROBE_ERROR) else if (ret == MBUS_PROBE_ERROR)
{ {
fprintf(stderr, "%s: Error: Failed to select secondary address [%s].\n", __PRETTY_FUNCTION__, addr_str); fprintf(stderr, "%s: Error: Failed to select secondary address [%s].\n", __PRETTY_FUNCTION__, addr_str);
return 1; return 1;
} }
// else MBUS_PROBE_SINGLE // else MBUS_PROBE_SINGLE
@ -119,7 +119,7 @@ main(int argc, char **argv)
fprintf(stderr, "Failed to send M-Bus request frame.\n"); fprintf(stderr, "Failed to send M-Bus request frame.\n");
return 1; return 1;
} }
} }
else else
{ {
// primary addressing // primary addressing
@ -130,13 +130,13 @@ main(int argc, char **argv)
fprintf(stderr, "Failed to send M-Bus request frame.\n"); fprintf(stderr, "Failed to send M-Bus request frame.\n");
return 1; return 1;
} }
} }
if (mbus_recv_frame(handle, &reply) != MBUS_RECV_RESULT_OK) if (mbus_recv_frame(handle, &reply) != MBUS_RECV_RESULT_OK)
{ {
fprintf(stderr, "Failed to receive M-Bus response frame.\n"); fprintf(stderr, "Failed to receive M-Bus response frame.\n");
return 1; return 1;
} }
// //
// parse data and print in XML format // parse data and print in XML format
@ -151,13 +151,13 @@ main(int argc, char **argv)
fprintf(stderr, "M-bus data parse error: %s\n", mbus_error_str()); fprintf(stderr, "M-bus data parse error: %s\n", mbus_error_str());
return 1; return 1;
} }
if ((xml_result = mbus_frame_data_xml(&reply_data)) == NULL) if ((xml_result = mbus_frame_data_xml(&reply_data)) == NULL)
{ {
fprintf(stderr, "Failed to generate XML representation of MBUS frame: %s\n", mbus_error_str()); fprintf(stderr, "Failed to generate XML representation of MBUS frame: %s\n", mbus_error_str());
return 1; return 1;
} }
printf("%s", xml_result); printf("%s", xml_result);
free(xml_result); free(xml_result);

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson, Raditex AB // Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -20,10 +20,10 @@ static int debug = 0;
// //
int int
init_slaves(mbus_handle *handle) init_slaves(mbus_handle *handle)
{ {
if (debug) if (debug)
printf("%s: debug: sending init frame #1\n", __PRETTY_FUNCTION__); printf("%s: debug: sending init frame #1\n", __PRETTY_FUNCTION__);
if (mbus_send_ping_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 1) == -1) if (mbus_send_ping_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 1) == -1)
{ {
return 0; return 0;
@ -35,7 +35,7 @@ init_slaves(mbus_handle *handle)
if (debug) if (debug)
printf("%s: debug: sending init frame #2\n", __PRETTY_FUNCTION__); printf("%s: debug: sending init frame #2\n", __PRETTY_FUNCTION__);
if (mbus_send_ping_frame(handle, MBUS_ADDRESS_BROADCAST_NOREPLY, 1) == -1) if (mbus_send_ping_frame(handle, MBUS_ADDRESS_BROADCAST_NOREPLY, 1) == -1)
{ {
return 0; return 0;
@ -55,58 +55,58 @@ main(int argc, char **argv)
long baudrate = 9600; long baudrate = 9600;
mbus_handle *handle = NULL; mbus_handle *handle = NULL;
mbus_frame *frame = NULL, reply; mbus_frame *frame = NULL, reply;
memset((void *)&reply, 0, sizeof(mbus_frame)); memset((void *)&reply, 0, sizeof(mbus_frame));
if (argc == 2) if (argc == 2)
{ {
device = argv[1]; device = argv[1];
addr_mask = strdup("FFFFFFFFFFFFFFFF"); addr_mask = strdup("FFFFFFFFFFFFFFFF");
} }
else if (argc == 3 && strcmp(argv[1], "-d") == 0) else if (argc == 3 && strcmp(argv[1], "-d") == 0)
{ {
device = argv[2]; device = argv[2];
addr_mask = strdup("FFFFFFFFFFFFFFFF"); addr_mask = strdup("FFFFFFFFFFFFFFFF");
debug = 1; debug = 1;
} }
else if (argc == 3) else if (argc == 3)
{ {
device = argv[1]; device = argv[1];
addr_mask = strdup(argv[2]); addr_mask = strdup(argv[2]);
} }
else if (argc == 4 && strcmp(argv[1], "-d") == 0) else if (argc == 4 && strcmp(argv[1], "-d") == 0)
{ {
device = argv[2]; device = argv[2];
addr_mask = strdup(argv[3]); addr_mask = strdup(argv[3]);
debug = 1; debug = 1;
} }
else if (argc == 4 && strcmp(argv[1], "-b") == 0) else if (argc == 4 && strcmp(argv[1], "-b") == 0)
{ {
baudrate = atol(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 = atol(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 = atol(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 = atol(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;
} }
else else
{ {
fprintf(stderr, "usage: %s [-d] [-b BAUDRATE] device [address-mask]\n", argv[0]); fprintf(stderr, "usage: %s [-d] [-b BAUDRATE] device [address-mask]\n", argv[0]);
fprintf(stderr, "\toptional flag -d for debug printout\n"); fprintf(stderr, "\toptional flag -d for debug printout\n");
@ -115,19 +115,19 @@ main(int argc, char **argv)
fprintf(stderr, "\t'FFFFFFFFFFFFFFFF' where F is a wildcard character\n"); fprintf(stderr, "\t'FFFFFFFFFFFFFFFF' where F is a wildcard character\n");
return 0; return 0;
} }
if (debug) if (debug)
{ {
mbus_register_send_event(&mbus_dump_send_event); mbus_register_send_event(&mbus_dump_send_event);
mbus_register_recv_event(&mbus_dump_recv_event); mbus_register_recv_event(&mbus_dump_recv_event);
} }
if (addr_mask == NULL) if (addr_mask == NULL)
{ {
fprintf(stderr, "Failed to allocate address mask.\n"); fprintf(stderr, "Failed to allocate address mask.\n");
return 1; return 1;
} }
if (mbus_is_secondary_address(addr_mask) == 0) if (mbus_is_secondary_address(addr_mask) == 0)
{ {
fprintf(stderr, "Misformatted secondary address mask. Must be 16 character HEX number.\n"); fprintf(stderr, "Misformatted secondary address mask. Must be 16 character HEX number.\n");

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson, Raditex AB // Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -18,7 +18,7 @@ static int debug = 0;
int ping_address(mbus_handle *handle, mbus_frame *reply, int address) int ping_address(mbus_handle *handle, mbus_frame *reply, int address)
{ {
int i, ret = MBUS_RECV_RESULT_ERROR; int i, ret = MBUS_RECV_RESULT_ERROR;
memset((void *)reply, 0, sizeof(mbus_frame)); memset((void *)reply, 0, sizeof(mbus_frame));
for (i = 0; i <= handle->max_retry; i++) for (i = 0; i <= handle->max_retry; i++)
@ -28,21 +28,21 @@ int ping_address(mbus_handle *handle, mbus_frame *reply, int address)
printf("%d ", address); printf("%d ", address);
fflush(stdout); fflush(stdout);
} }
if (mbus_send_ping_frame(handle, address, 0) == -1) if (mbus_send_ping_frame(handle, address, 0) == -1)
{ {
fprintf(stderr,"Scan failed. Could not send ping frame: %s\n", mbus_error_str()); fprintf(stderr,"Scan failed. Could not send ping frame: %s\n", mbus_error_str());
return MBUS_RECV_RESULT_ERROR; return MBUS_RECV_RESULT_ERROR;
} }
ret = mbus_recv_frame(handle, reply); ret = mbus_recv_frame(handle, reply);
if (ret != MBUS_RECV_RESULT_TIMEOUT) if (ret != MBUS_RECV_RESULT_TIMEOUT)
{ {
return ret; return ret;
} }
} }
return ret; return ret;
} }
@ -69,35 +69,35 @@ main(int argc, char **argv)
} }
else if (argc == 4 && strcmp(argv[1], "-b") == 0) else if (argc == 4 && strcmp(argv[1], "-b") == 0)
{ {
baudrate = atol(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)
{ {
retries = atoi(argv[2]); retries = atoi(argv[2]);
device = argv[3]; device = argv[3];
} }
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 = atol(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)
{ {
debug = 1; debug = 1;
retries = atoi(argv[3]); retries = atoi(argv[3]);
device = argv[4]; device = argv[4];
} }
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 = atol(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 = atol(argv[3]); baudrate = atol(argv[3]);
retries = atoi(argv[5]); retries = atoi(argv[5]);
device = argv[6]; device = argv[6];
@ -107,13 +107,13 @@ main(int argc, char **argv)
fprintf(stderr,"usage: %s [-d] [-b BAUDRATE] [-r RETRIES] device\n", argv[0]); fprintf(stderr,"usage: %s [-d] [-b BAUDRATE] [-r RETRIES] device\n", argv[0]);
return 0; return 0;
} }
if (debug) if (debug)
{ {
mbus_register_send_event(&mbus_dump_send_event); mbus_register_send_event(&mbus_dump_send_event);
mbus_register_recv_event(&mbus_dump_recv_event); mbus_register_recv_event(&mbus_dump_recv_event);
} }
if ((handle = mbus_context_serial(device)) == NULL) if ((handle = mbus_context_serial(device)) == NULL)
{ {
fprintf(stderr,"Scan failed: Could not initialize M-Bus context: %s\n", mbus_error_str()); fprintf(stderr,"Scan failed: Could not initialize M-Bus context: %s\n", mbus_error_str());
@ -125,7 +125,7 @@ main(int argc, char **argv)
fprintf(stderr,"Scan failed: Could not setup connection to M-bus gateway: %s\n", mbus_error_str()); fprintf(stderr,"Scan failed: Could not setup connection to M-bus gateway: %s\n", mbus_error_str());
return 1; return 1;
} }
if (mbus_context_set_option(handle, MBUS_OPTION_MAX_RETRY, retries) == -1) if (mbus_context_set_option(handle, MBUS_OPTION_MAX_RETRY, retries) == -1)
{ {
fprintf(stderr,"Failed to set retry count\n"); fprintf(stderr,"Failed to set retry count\n");
@ -146,19 +146,19 @@ main(int argc, char **argv)
mbus_frame reply; mbus_frame reply;
ret = ping_address(handle, &reply, address); ret = ping_address(handle, &reply, address);
if (ret == MBUS_RECV_RESULT_TIMEOUT) if (ret == MBUS_RECV_RESULT_TIMEOUT)
{ {
continue; continue;
} }
if (ret == MBUS_RECV_RESULT_INVALID) if (ret == MBUS_RECV_RESULT_INVALID)
{ {
/* check for more data (collision) */ /* check for more data (collision) */
mbus_purge_frames(handle); mbus_purge_frames(handle);
printf("Collision at address %d\n", address); printf("Collision at address %d\n", address);
continue; continue;
} }
if (mbus_frame_type(&reply) == MBUS_FRAME_TYPE_ACK) if (mbus_frame_type(&reply) == MBUS_FRAME_TYPE_ACK)
{ {

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson, Raditex AB // Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -28,13 +28,13 @@ main(int argc, char **argv)
if (argc == 3) if (argc == 3)
{ {
device = argv[1]; device = argv[1];
addr = strdup(argv[2]); addr = strdup(argv[2]);
} }
else if (argc == 5 && strcmp(argv[1], "-b") == 0) else if (argc == 5 && strcmp(argv[1], "-b") == 0)
{ {
baudrate = atol(argv[2]); baudrate = atol(argv[2]);
device = argv[3]; device = argv[3];
addr = strdup(argv[4]); addr = strdup(argv[4]);
} }
else else
@ -43,13 +43,13 @@ main(int argc, char **argv)
fprintf(stderr, " optional flag -b for selecting baudrate\n"); fprintf(stderr, " optional flag -b for selecting baudrate\n");
return 0; return 0;
} }
if (addr == NULL) if (addr == NULL)
{ {
fprintf(stderr, "Failed to allocate address.\n"); fprintf(stderr, "Failed to allocate address.\n");
return 1; return 1;
} }
if (mbus_is_secondary_address(addr) == 0) if (mbus_is_secondary_address(addr) == 0)
{ {
fprintf(stderr,"Misformatted secondary address. Must be 16 character HEX number.\n"); fprintf(stderr,"Misformatted secondary address. Must be 16 character HEX number.\n");
@ -77,7 +77,7 @@ main(int argc, char **argv)
if (mbus_send_select_frame(handle, addr) == -1) if (mbus_send_select_frame(handle, addr) == -1)
{ {
fprintf(stderr,"Failed to send selection frame: %s\n", mbus_error_str()); fprintf(stderr,"Failed to send selection frame: %s\n", mbus_error_str());
return 1; return 1;
} }
ret = mbus_recv_frame(handle, &reply); ret = mbus_recv_frame(handle, &reply);
@ -86,7 +86,7 @@ main(int argc, char **argv)
{ {
fprintf(stderr,"No reply from device with secondary address %s: %s\n", argv[2], mbus_error_str()); fprintf(stderr,"No reply from device with secondary address %s: %s\n", argv[2], mbus_error_str());
return 1; return 1;
} }
if (ret == MBUS_RECV_RESULT_INVALID) if (ret == MBUS_RECV_RESULT_INVALID)
{ {
@ -119,7 +119,7 @@ main(int argc, char **argv)
fprintf(stderr,"Unknown reply:\n"); fprintf(stderr,"Unknown reply:\n");
mbus_frame_print(&reply); mbus_frame_print(&reply);
} }
free(addr); free(addr);
mbus_disconnect(handle); mbus_disconnect(handle);
mbus_context_free(handle); mbus_context_free(handle);

View File

@ -2,7 +2,7 @@
// Copyright (C) 2010-2012, Robert Johansson and contributors, Raditex AB // Copyright (C) 2010-2012, Robert Johansson and contributors, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -59,7 +59,7 @@ main(int argc, char **argv)
fprintf(stderr,"Failed to setup connection to M-bus gateway\n"); fprintf(stderr,"Failed to setup connection to M-bus gateway\n");
return 1; return 1;
} }
if (mbus_serial_set_baudrate(handle, source_baudrate) == -1) if (mbus_serial_set_baudrate(handle, source_baudrate) == -1)
{ {
fprintf(stderr,"Failed to set baud rate.\n"); fprintf(stderr,"Failed to set baud rate.\n");
@ -69,11 +69,11 @@ main(int argc, char **argv)
if (mbus_send_switch_baudrate_frame(handle, address, target_baudrate) == -1) if (mbus_send_switch_baudrate_frame(handle, address, target_baudrate) == -1)
{ {
fprintf(stderr,"Failed to send switch baudrate frame: %s\n", mbus_error_str()); fprintf(stderr,"Failed to send switch baudrate frame: %s\n", mbus_error_str());
return 1; return 1;
} }
ret = mbus_recv_frame(handle, &reply); ret = mbus_recv_frame(handle, &reply);
if (ret == MBUS_RECV_RESULT_TIMEOUT) if (ret == MBUS_RECV_RESULT_TIMEOUT)
{ {
fprintf(stderr,"No reply from device\n"); fprintf(stderr,"No reply from device\n");
@ -88,7 +88,7 @@ main(int argc, char **argv)
{ {
printf("Switched baud rate of device to %lu\n", target_baudrate); printf("Switched baud rate of device to %lu\n", target_baudrate);
} }
mbus_disconnect(handle); mbus_disconnect(handle);
mbus_context_free(handle); mbus_context_free(handle);
return 0; return 0;

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson, Raditex AB // Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -27,24 +27,24 @@ main(int argc, char **argv)
int ret; int ret;
long port; long port;
int address, subcode = -1; int address, subcode = -1;
if (argc == 4) if (argc == 4)
{ {
host = argv[1]; host = argv[1];
port = atol(argv[2]); port = atol(argv[2]);
addr = argv[3]; addr = argv[3];
} }
else if (argc == 5 && strcmp(argv[1], "-d") == 0) else if (argc == 5 && strcmp(argv[1], "-d") == 0)
{ {
debug = 1; debug = 1;
host = argv[2]; host = argv[2];
port = atol(argv[3]); port = atol(argv[3]);
addr = argv[4]; addr = argv[4];
} }
else if (argc == 5) else if (argc == 5)
{ {
host = argv[1]; host = argv[1];
port = atol(argv[2]); port = atol(argv[2]);
addr = argv[3]; addr = argv[3];
subcode = atoi(argv[4]); subcode = atoi(argv[4]);
} }
@ -52,7 +52,7 @@ main(int argc, char **argv)
{ {
debug = 1; debug = 1;
host = argv[2]; host = argv[2];
port = atol(argv[3]); port = atol(argv[3]);
addr = argv[4]; addr = argv[4];
subcode = atoi(argv[5]); subcode = atoi(argv[5]);
} }
@ -61,13 +61,13 @@ main(int argc, char **argv)
fprintf(stderr, "usage: %s [-d] host port mbus-address [subcode]\n", argv[0]); fprintf(stderr, "usage: %s [-d] host port mbus-address [subcode]\n", argv[0]);
return 0; return 0;
} }
if ((port < 0) || (port > 0xFFFF)) if ((port < 0) || (port > 0xFFFF))
{ {
fprintf(stderr, "Invalid port: %ld\n", port); fprintf(stderr, "Invalid port: %ld\n", port);
return 1; return 1;
} }
if (debug) if (debug)
{ {
mbus_register_send_event(&mbus_dump_send_event); mbus_register_send_event(&mbus_dump_send_event);
@ -86,7 +86,7 @@ main(int argc, char **argv)
mbus_context_free(handle); mbus_context_free(handle);
return 1; return 1;
} }
if (mbus_is_secondary_address(addr)) if (mbus_is_secondary_address(addr))
{ {
// secondary addressing // secondary addressing
@ -114,17 +114,17 @@ main(int argc, char **argv)
fprintf(stderr, "Failed to select secondary address [%s].\n", addr); fprintf(stderr, "Failed to select secondary address [%s].\n", addr);
mbus_disconnect(handle); mbus_disconnect(handle);
mbus_context_free(handle); mbus_context_free(handle);
return 1; return 1;
} }
// else MBUS_PROBE_SINGLE // else MBUS_PROBE_SINGLE
address = MBUS_ADDRESS_NETWORK_LAYER; address = MBUS_ADDRESS_NETWORK_LAYER;
} }
else else
{ {
// primary addressing // primary addressing
address = atoi(addr); address = atoi(addr);
} }
if (mbus_send_application_reset_frame(handle, address, subcode) == -1) if (mbus_send_application_reset_frame(handle, address, subcode) == -1)
@ -132,11 +132,11 @@ main(int argc, char **argv)
fprintf(stderr,"Failed to send reset frame: %s\n", mbus_error_str()); fprintf(stderr,"Failed to send reset frame: %s\n", mbus_error_str());
mbus_disconnect(handle); mbus_disconnect(handle);
mbus_context_free(handle); mbus_context_free(handle);
return 1; return 1;
} }
ret = mbus_recv_frame(handle, &reply); ret = mbus_recv_frame(handle, &reply);
if (ret == MBUS_RECV_RESULT_TIMEOUT) if (ret == MBUS_RECV_RESULT_TIMEOUT)
{ {
fprintf(stderr,"No reply from device\n"); fprintf(stderr,"No reply from device\n");
@ -160,7 +160,7 @@ main(int argc, char **argv)
printf("Successful reset device\n"); printf("Successful reset device\n");
} }
} }
mbus_disconnect(handle); mbus_disconnect(handle);
mbus_context_free(handle); mbus_context_free(handle);
return 0; return 0;

View File

@ -2,7 +2,7 @@
// Copyright (C) 2012, Robert Johansson, Raditex AB // Copyright (C) 2012, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -31,35 +31,35 @@ main(int argc, char **argv)
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];
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));
if (argc == 4) if (argc == 4)
{ {
host = argv[1]; host = argv[1];
port = atol(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 = atol(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 = atol(argv[2]); port = atol(argv[2]);
addr_str = argv[3]; addr_str = argv[3];
file = argv[4]; file = argv[4];
debug = 0; debug = 0;
} }
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 = atol(argv[3]); port = atol(argv[3]);
addr_str = argv[4]; addr_str = argv[4];
file = argv[5]; file = argv[5];
@ -72,19 +72,19 @@ main(int argc, char **argv)
fprintf(stderr, " optional argument file for file. if omitted read from stdin\n"); fprintf(stderr, " optional argument file for file. if omitted read from stdin\n");
return 0; return 0;
} }
if ((port < 0) || (port > 0xFFFF)) if ((port < 0) || (port > 0xFFFF))
{ {
fprintf(stderr, "Invalid port: %ld\n", port); fprintf(stderr, "Invalid port: %ld\n", port);
return 1; return 1;
} }
if (debug) if (debug)
{ {
mbus_register_send_event(&mbus_dump_send_event); mbus_register_send_event(&mbus_dump_send_event);
mbus_register_recv_event(&mbus_dump_recv_event); mbus_register_recv_event(&mbus_dump_recv_event);
} }
if ((handle = mbus_context_tcp(host, port)) == NULL) if ((handle = mbus_context_tcp(host, port)) == NULL)
{ {
fprintf(stderr, "Could not initialize M-Bus context: %s\n", mbus_error_str()); fprintf(stderr, "Could not initialize M-Bus context: %s\n", mbus_error_str());
@ -117,16 +117,16 @@ main(int argc, char **argv)
else if (ret == MBUS_PROBE_ERROR) else if (ret == MBUS_PROBE_ERROR)
{ {
fprintf(stderr, "%s: Error: Failed to select secondary address [%s].\n", __PRETTY_FUNCTION__, addr_str); fprintf(stderr, "%s: Error: Failed to select secondary address [%s].\n", __PRETTY_FUNCTION__, addr_str);
return 1; return 1;
} }
address = MBUS_ADDRESS_NETWORK_LAYER; address = MBUS_ADDRESS_NETWORK_LAYER;
} }
else else
{ {
// primary addressing // primary addressing
address = atoi(addr_str); address = atoi(addr_str);
} }
// //
// read hex data from file or stdin // read hex data from file or stdin
// //
@ -150,14 +150,14 @@ main(int argc, char **argv)
{ {
fclose(fp); fclose(fp);
} }
buff_len = mbus_hex2bin(buff,sizeof(buff),raw_buff,sizeof(raw_buff)); buff_len = mbus_hex2bin(buff,sizeof(buff),raw_buff,sizeof(raw_buff));
// //
// attempt to parse the input data // attempt to parse the input data
// //
result = mbus_parse(&request, buff, buff_len); result = mbus_parse(&request, buff, buff_len);
if (result < 0) if (result < 0)
{ {
fprintf(stderr, "mbus_parse: %s\n", mbus_error_str()); fprintf(stderr, "mbus_parse: %s\n", mbus_error_str());
@ -167,8 +167,8 @@ main(int argc, char **argv)
{ {
fprintf(stderr, "mbus_parse: need %d more bytes\n", result); fprintf(stderr, "mbus_parse: need %d more bytes\n", result);
return 1; return 1;
} }
// //
// send the request // send the request
// //
@ -176,8 +176,8 @@ main(int argc, char **argv)
{ {
fprintf(stderr, "Failed to send mbus frame: %s\n", mbus_error_str()); fprintf(stderr, "Failed to send mbus frame: %s\n", mbus_error_str());
return 1; return 1;
} }
// //
// this should be option: // this should be option:
// //

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson, Raditex AB // Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -22,14 +22,14 @@ static int debug = 0;
// //
static int static int
init_slaves(mbus_handle *handle) init_slaves(mbus_handle *handle)
{ {
if (debug) if (debug)
printf("%s: debug: sending init frame #1\n", __PRETTY_FUNCTION__); printf("%s: debug: sending init frame #1\n", __PRETTY_FUNCTION__);
if (mbus_send_ping_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 1) == -1) if (mbus_send_ping_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 1) == -1)
{ {
return 0; return 0;
} }
// //
// resend SND_NKE, maybe the first get lost // resend SND_NKE, maybe the first get lost
@ -37,7 +37,7 @@ init_slaves(mbus_handle *handle)
if (debug) if (debug)
printf("%s: debug: sending init frame #2\n", __PRETTY_FUNCTION__); printf("%s: debug: sending init frame #2\n", __PRETTY_FUNCTION__);
if (mbus_send_ping_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 1) == -1) if (mbus_send_ping_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 1) == -1)
{ {
return 0; return 0;
@ -74,10 +74,10 @@ main(int argc, char **argv)
int c = 0; int c = 0;
memset((void *)&reply, 0, sizeof(mbus_frame)); memset((void *)&reply, 0, sizeof(mbus_frame));
for (c=1; c<argc-3; c++) for (c=1; c<argc-3; c++)
{ {
if (strcmp(argv[c], "-d") == 0) if (strcmp(argv[c], "-d") == 0)
{ {
debug = 1; debug = 1;
} }
@ -85,8 +85,8 @@ main(int argc, char **argv)
{ {
c++; c++;
maxframes = atoi(argv[c]); maxframes = atoi(argv[c]);
} }
else else
{ {
parse_abort(argv); parse_abort(argv);
} }
@ -95,22 +95,22 @@ main(int argc, char **argv)
{ {
parse_abort(argv); parse_abort(argv);
} }
host = argv[c]; host = argv[c];
port = atol(argv[c+1]); port = atol(argv[c+1]);
addr_str = argv[c+2]; addr_str = argv[c+2];
if ((port < 0) || (port > 0xFFFF)) if ((port < 0) || (port > 0xFFFF))
{ {
fprintf(stderr, "Invalid port: %ld\n", port); fprintf(stderr, "Invalid port: %ld\n", port);
return 1; return 1;
} }
if (debug) if (debug)
{ {
mbus_register_send_event(&mbus_dump_send_event); mbus_register_send_event(&mbus_dump_send_event);
mbus_register_recv_event(&mbus_dump_recv_event); mbus_register_recv_event(&mbus_dump_recv_event);
} }
if ((handle = mbus_context_tcp(host, port)) == NULL) if ((handle = mbus_context_tcp(host, port)) == NULL)
{ {
fprintf(stderr, "Could not initialize M-Bus context: %s\n", mbus_error_str()); fprintf(stderr, "Could not initialize M-Bus context: %s\n", mbus_error_str());
@ -123,7 +123,7 @@ main(int argc, char **argv)
mbus_context_free(handle); mbus_context_free(handle);
return 1; return 1;
} }
if (init_slaves(handle) == 0) if (init_slaves(handle) == 0)
{ {
mbus_disconnect(handle); mbus_disconnect(handle);
@ -158,19 +158,19 @@ main(int argc, char **argv)
fprintf(stderr, "%s: Error: Failed to select secondary address [%s].\n", __PRETTY_FUNCTION__, addr_str); fprintf(stderr, "%s: Error: Failed to select secondary address [%s].\n", __PRETTY_FUNCTION__, addr_str);
mbus_disconnect(handle); mbus_disconnect(handle);
mbus_context_free(handle); mbus_context_free(handle);
return 1; return 1;
} }
// else MBUS_PROBE_SINGLE // else MBUS_PROBE_SINGLE
address = MBUS_ADDRESS_NETWORK_LAYER; address = MBUS_ADDRESS_NETWORK_LAYER;
} }
else else
{ {
// primary addressing // primary addressing
address = atoi(addr_str); address = atoi(addr_str);
} }
// instead of the send and recv, use this sendrecv function that // instead of the send and recv, use this sendrecv function that
// takes care of the possibility of multi-telegram replies (limit = 16 frames) // takes care of the possibility of multi-telegram replies (limit = 16 frames)
if (mbus_sendrecv_request(handle, address, &reply, maxframes) != 0) if (mbus_sendrecv_request(handle, address, &reply, maxframes) != 0)
{ {
@ -200,14 +200,14 @@ main(int argc, char **argv)
mbus_frame_free(reply.next); mbus_frame_free(reply.next);
return 1; return 1;
} }
printf("%s", xml_result); printf("%s", xml_result);
free(xml_result); free(xml_result);
mbus_disconnect(handle); mbus_disconnect(handle);
mbus_context_free(handle); mbus_context_free(handle);
mbus_frame_free(reply.next); mbus_frame_free(reply.next);
return 0; return 0;
} }

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson, Raditex AB // Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -28,20 +28,20 @@ main(int argc, char **argv)
char *host, *addr_str, matching_addr[16], *xml_result; char *host, *addr_str, matching_addr[16], *xml_result;
int address; int address;
long port; 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));
if (argc == 4) if (argc == 4)
{ {
host = argv[1]; host = argv[1];
port = atol(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 = atol(argv[3]); port = atol(argv[3]);
addr_str = argv[4]; addr_str = argv[4];
debug = 1; debug = 1;
@ -52,19 +52,19 @@ main(int argc, char **argv)
fprintf(stderr, " optional flag -d for debug printout\n"); fprintf(stderr, " optional flag -d for debug printout\n");
return 0; return 0;
} }
if ((port < 0) || (port > 0xFFFF)) if ((port < 0) || (port > 0xFFFF))
{ {
fprintf(stderr, "Invalid port: %ld\n", port); fprintf(stderr, "Invalid port: %ld\n", port);
return 1; return 1;
} }
if (debug) if (debug)
{ {
mbus_register_send_event(&mbus_dump_send_event); mbus_register_send_event(&mbus_dump_send_event);
mbus_register_recv_event(&mbus_dump_recv_event); mbus_register_recv_event(&mbus_dump_recv_event);
} }
if ((handle = mbus_context_tcp(host, port)) == NULL) if ((handle = mbus_context_tcp(host, port)) == NULL)
{ {
fprintf(stderr, "Could not initialize M-Bus context: %s\n", mbus_error_str()); fprintf(stderr, "Could not initialize M-Bus context: %s\n", mbus_error_str());
@ -98,7 +98,7 @@ main(int argc, char **argv)
else if (ret == MBUS_PROBE_ERROR) else if (ret == MBUS_PROBE_ERROR)
{ {
fprintf(stderr, "%s: Error: Failed to select secondary address [%s].\n", __PRETTY_FUNCTION__, addr_str); fprintf(stderr, "%s: Error: Failed to select secondary address [%s].\n", __PRETTY_FUNCTION__, addr_str);
return 1; return 1;
} }
// else MBUS_PROBE_SINGLE // else MBUS_PROBE_SINGLE
@ -107,7 +107,7 @@ main(int argc, char **argv)
fprintf(stderr, "Failed to send M-Bus request frame.\n"); fprintf(stderr, "Failed to send M-Bus request frame.\n");
return 1; return 1;
} }
} }
else else
{ {
// primary addressing // primary addressing
@ -118,7 +118,7 @@ main(int argc, char **argv)
fprintf(stderr, "Failed to send M-Bus request frame.\n"); fprintf(stderr, "Failed to send M-Bus request frame.\n");
return 1; return 1;
} }
} }
if (mbus_recv_frame(handle, &reply) != MBUS_RECV_RESULT_OK) if (mbus_recv_frame(handle, &reply) != MBUS_RECV_RESULT_OK)
{ {
@ -139,13 +139,13 @@ main(int argc, char **argv)
fprintf(stderr, "M-bus data parse error: %s\n", mbus_error_str()); fprintf(stderr, "M-bus data parse error: %s\n", mbus_error_str());
return 1; return 1;
} }
if ((xml_result = mbus_frame_data_xml(&reply_data)) == NULL) if ((xml_result = mbus_frame_data_xml(&reply_data)) == NULL)
{ {
fprintf(stderr, "Failed to generate XML representation of MBUS frame: %s\n", mbus_error_str()); fprintf(stderr, "Failed to generate XML representation of MBUS frame: %s\n", mbus_error_str());
return 1; return 1;
} }
printf("%s", xml_result); printf("%s", xml_result);
free(xml_result); free(xml_result);

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson, Raditex AB // Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -25,7 +25,7 @@ main(int argc, char **argv)
long port; long port;
mbus_handle *handle = NULL; mbus_handle *handle = NULL;
mbus_frame *frame = NULL, reply; mbus_frame *frame = NULL, reply;
memset((void *)&reply, 0, sizeof(mbus_frame)); memset((void *)&reply, 0, sizeof(mbus_frame));
if (argc != 4 && argc != 3) if (argc != 4 && argc != 3)
@ -35,8 +35,8 @@ main(int argc, char **argv)
fprintf(stderr, "\t'FFFFFFFFFFFFFFFF' where F is a wildcard character\n"); fprintf(stderr, "\t'FFFFFFFFFFFFFFFF' where F is a wildcard character\n");
return 0; return 0;
} }
host = argv[1]; host = argv[1];
port = atol(argv[2]); port = atol(argv[2]);
if (argc == 4) if (argc == 4)
{ {
@ -46,13 +46,13 @@ main(int argc, char **argv)
{ {
addr_mask = strdup("FFFFFFFFFFFFFFFF"); addr_mask = strdup("FFFFFFFFFFFFFFFF");
} }
if (addr_mask == NULL) if (addr_mask == NULL)
{ {
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)) if ((port < 0) || (port > 0xFFFF))
{ {
fprintf(stderr, "Invalid port: %ld\n", port); fprintf(stderr, "Invalid port: %ld\n", port);
@ -82,7 +82,7 @@ main(int argc, char **argv)
// //
if (debug) if (debug)
printf("%s: debug: sending init frame #1\n", __PRETTY_FUNCTION__); printf("%s: debug: sending init frame #1\n", __PRETTY_FUNCTION__);
if (mbus_send_ping_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 1) == -1) if (mbus_send_ping_frame(handle, MBUS_ADDRESS_NETWORK_LAYER, 1) == -1)
{ {
free(addr_mask); free(addr_mask);
@ -94,7 +94,7 @@ main(int argc, char **argv)
// //
if (debug) if (debug)
printf("%s: debug: sending init frame #2\n", __PRETTY_FUNCTION__); printf("%s: debug: sending init frame #2\n", __PRETTY_FUNCTION__);
if (mbus_send_ping_frame(handle, MBUS_ADDRESS_BROADCAST_NOREPLY, 1) == -1) if (mbus_send_ping_frame(handle, MBUS_ADDRESS_BROADCAST_NOREPLY, 1) == -1)
{ {
free(addr_mask); free(addr_mask);

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson, Raditex AB // Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -18,7 +18,7 @@ static int debug = 0;
int ping_address(mbus_handle *handle, mbus_frame *reply, int address) int ping_address(mbus_handle *handle, mbus_frame *reply, int address)
{ {
int i, ret = MBUS_RECV_RESULT_ERROR; int i, ret = MBUS_RECV_RESULT_ERROR;
memset((void *)reply, 0, sizeof(mbus_frame)); memset((void *)reply, 0, sizeof(mbus_frame));
for (i = 0; i <= handle->max_retry; i++) for (i = 0; i <= handle->max_retry; i++)
@ -28,21 +28,21 @@ int ping_address(mbus_handle *handle, mbus_frame *reply, int address)
printf("%d ", address); printf("%d ", address);
fflush(stdout); fflush(stdout);
} }
if (mbus_send_ping_frame(handle, address, 0) == -1) if (mbus_send_ping_frame(handle, address, 0) == -1)
{ {
fprintf(stderr,"Scan failed. Could not send ping frame: %s\n", mbus_error_str()); fprintf(stderr,"Scan failed. Could not send ping frame: %s\n", mbus_error_str());
return MBUS_RECV_RESULT_ERROR; return MBUS_RECV_RESULT_ERROR;
} }
ret = mbus_recv_frame(handle, reply); ret = mbus_recv_frame(handle, reply);
if (ret != MBUS_RECV_RESULT_TIMEOUT) if (ret != MBUS_RECV_RESULT_TIMEOUT)
{ {
return ret; return ret;
} }
} }
return ret; return ret;
} }
@ -60,26 +60,26 @@ main(int argc, char **argv)
if (argc == 3) if (argc == 3)
{ {
host = argv[1]; host = argv[1];
port = atol(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 = atol(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 = atol(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 = atol(argv[5]); port = atol(argv[5]);
} }
else else
@ -87,19 +87,19 @@ main(int argc, char **argv)
fprintf(stderr,"usage: %s [-d] [-r RETRIES] host port\n", argv[0]); fprintf(stderr,"usage: %s [-d] [-r RETRIES] host port\n", argv[0]);
return 0; return 0;
} }
if ((port < 0) || (port > 0xFFFF)) if ((port < 0) || (port > 0xFFFF))
{ {
fprintf(stderr, "Invalid port: %ld\n", port); fprintf(stderr, "Invalid port: %ld\n", port);
return 1; return 1;
} }
if (debug) if (debug)
{ {
mbus_register_send_event(&mbus_dump_send_event); mbus_register_send_event(&mbus_dump_send_event);
mbus_register_recv_event(&mbus_dump_recv_event); mbus_register_recv_event(&mbus_dump_recv_event);
} }
if ((handle = mbus_context_tcp(host, port)) == NULL) if ((handle = mbus_context_tcp(host, port)) == NULL)
{ {
fprintf(stderr,"Scan failed: Could not initialize M-Bus context: %s\n", mbus_error_str()); fprintf(stderr,"Scan failed: Could not initialize M-Bus context: %s\n", mbus_error_str());
@ -111,7 +111,7 @@ main(int argc, char **argv)
fprintf(stderr,"Scan failed: Could not setup connection to M-bus gateway: %s\n", mbus_error_str()); fprintf(stderr,"Scan failed: Could not setup connection to M-bus gateway: %s\n", mbus_error_str());
return 1; return 1;
} }
if (mbus_context_set_option(handle, MBUS_OPTION_MAX_RETRY, retries) == -1) if (mbus_context_set_option(handle, MBUS_OPTION_MAX_RETRY, retries) == -1)
{ {
fprintf(stderr,"Failed to set retry count\n"); fprintf(stderr,"Failed to set retry count\n");
@ -126,19 +126,19 @@ main(int argc, char **argv)
mbus_frame reply; mbus_frame reply;
ret = ping_address(handle, &reply, address); ret = ping_address(handle, &reply, address);
if (ret == MBUS_RECV_RESULT_TIMEOUT) if (ret == MBUS_RECV_RESULT_TIMEOUT)
{ {
continue; continue;
} }
if (ret == MBUS_RECV_RESULT_INVALID) if (ret == MBUS_RECV_RESULT_INVALID)
{ {
/* check for more data (collision) */ /* check for more data (collision) */
mbus_purge_frames(handle); mbus_purge_frames(handle);
printf("Collision at address %d\n", address); printf("Collision at address %d\n", address);
continue; continue;
} }
if (mbus_frame_type(&reply) == MBUS_FRAME_TYPE_ACK) if (mbus_frame_type(&reply) == MBUS_FRAME_TYPE_ACK)
{ {

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson, Raditex AB // Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -31,16 +31,16 @@ main(int argc, char **argv)
fprintf(stderr,"usage: %s host port secondary-mbus-address\n", argv[0]); fprintf(stderr,"usage: %s host port secondary-mbus-address\n", argv[0]);
return 0; return 0;
} }
host = argv[1]; host = argv[1];
port = atol(argv[2]); port = atol(argv[2]);
if ((port < 0) || (port > 0xFFFF)) if ((port < 0) || (port > 0xFFFF))
{ {
fprintf(stderr, "Invalid port: %ld\n", port); fprintf(stderr, "Invalid port: %ld\n", port);
return 1; return 1;
} }
if ((addr = strdup(argv[3])) == NULL) if ((addr = strdup(argv[3])) == NULL)
{ {
fprintf(stderr, "Failed to allocate address.\n"); fprintf(stderr, "Failed to allocate address.\n");
@ -68,7 +68,7 @@ main(int argc, char **argv)
if (mbus_send_select_frame(handle, addr) == -1) if (mbus_send_select_frame(handle, addr) == -1)
{ {
fprintf(stderr,"Failed to send selection frame: %s\n", mbus_error_str()); fprintf(stderr,"Failed to send selection frame: %s\n", mbus_error_str());
return 1; return 1;
} }
ret = mbus_recv_frame(handle, &reply); ret = mbus_recv_frame(handle, &reply);
@ -77,7 +77,7 @@ main(int argc, char **argv)
{ {
fprintf(stderr,"No reply from device with secondary address %s: %s\n", argv[3], mbus_error_str()); fprintf(stderr,"No reply from device with secondary address %s: %s\n", argv[3], mbus_error_str());
return 1; return 1;
} }
if (ret == MBUS_RECV_RESULT_INVALID) if (ret == MBUS_RECV_RESULT_INVALID)
{ {
@ -110,7 +110,7 @@ main(int argc, char **argv)
fprintf(stderr,"Unknown reply:\n"); fprintf(stderr,"Unknown reply:\n");
mbus_frame_print(&reply); mbus_frame_print(&reply);
} }
free(addr); free(addr);
mbus_disconnect(handle); mbus_disconnect(handle);
mbus_context_free(handle); mbus_context_free(handle);

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson and contributors, Raditex AB // Copyright (C) 2011, Robert Johansson and contributors, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -13,9 +13,9 @@
/** /**
* @file mbus-protocol-aux.h * @file mbus-protocol-aux.h
* *
* @brief Auxiliary functions to the Freescada libmbus library * @brief Auxiliary functions to the Freescada libmbus library
* *
* The idea is to simplify the basic task of querying MBus slaves and * The idea is to simplify the basic task of querying MBus slaves and
* the data processing. * the data processing.
* Typical use might be (in oversimplified "pseudocode"): * Typical use might be (in oversimplified "pseudocode"):
@ -160,26 +160,26 @@ extern void (*_mbus_found_event)(mbus_handle * handle, mbus_frame *frame);
void mbus_register_scan_progress(void (*event)(mbus_handle * handle, const char *mask)); void mbus_register_scan_progress(void (*event)(mbus_handle * handle, const char *mask));
void mbus_register_found_event(void (*event)(mbus_handle * handle, mbus_frame *frame)); void mbus_register_found_event(void (*event)(mbus_handle * handle, mbus_frame *frame));
/** /**
* Allocate and initialize M-Bus serial context. * Allocate and initialize M-Bus serial context.
* *
* @param device Serial device (like /dev/ttyUSB0 or /dev/ttyS0) * @param device Serial device (like /dev/ttyUSB0 or /dev/ttyS0)
* *
* @return Initialized "unified" handler when successful, NULL otherwise; * @return Initialized "unified" handler when successful, NULL otherwise;
*/ */
mbus_handle * mbus_context_serial(const char *device); mbus_handle * mbus_context_serial(const char *device);
/** /**
* Allocate and initialize M-Bus TCP context. * Allocate and initialize M-Bus TCP context.
* *
* @param host Gateway host * @param host Gateway host
* @param port Gateway port * @param port Gateway port
* *
* @return Initialized "unified" handler when successful, NULL otherwise; * @return Initialized "unified" handler when successful, NULL otherwise;
*/ */
mbus_handle * mbus_context_tcp(const char *host, uint16_t 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.
* *
* @param handle Initialized handle * @param handle Initialized handle
@ -198,9 +198,9 @@ int mbus_connect(mbus_handle * handle);
/** /**
* Disconnects the "unified" handle. * Disconnects the "unified" handle.
* *
* @param handle Initialized handle * @param handle Initialized handle
* *
* @return Zero when successful. * @return Zero when successful.
*/ */
int mbus_disconnect(mbus_handle * handle); int mbus_disconnect(mbus_handle * handle);
@ -216,17 +216,17 @@ int mbus_disconnect(mbus_handle * handle);
*/ */
int mbus_context_set_option(mbus_handle * handle, mbus_context_option option, long value); int mbus_context_set_option(mbus_handle * handle, mbus_context_option option, long value);
/** /**
* Receives a frame using "unified" handle * Receives a frame using "unified" handle
* *
* @param handle Initialized handle * @param handle Initialized handle
* @param frame Received frame * @param frame Received frame
* *
* @return Zero when successful. * @return Zero when successful.
*/ */
int mbus_recv_frame(mbus_handle * handle, mbus_frame *frame); int mbus_recv_frame(mbus_handle * handle, mbus_frame *frame);
/** /**
* Used for handling collisions. Blocks as long as receiving frames or corrupted data. * Used for handling collisions. Blocks as long as receiving frames or corrupted data.
* *
* @param handle Initialized handle * @param handle Initialized handle
@ -237,232 +237,232 @@ int mbus_purge_frames(mbus_handle * handle);
/** /**
* Sends frame using "unified" handle * Sends frame using "unified" handle
* *
* @param handle Initialized handle * @param handle Initialized handle
* @param frame Frame to send * @param frame Frame to send
* *
* @return Zero when successful. * @return Zero when successful.
*/ */
int mbus_send_frame(mbus_handle * handle, mbus_frame *frame); int mbus_send_frame(mbus_handle * handle, mbus_frame *frame);
/** /**
* Sends secondary address selection frame using "unified" handle * Sends secondary address selection frame using "unified" handle
* *
* @param handle Initialized handle * @param handle Initialized handle
* @param secondary_addr_str Secondary address * @param secondary_addr_str Secondary address
* *
* @return Zero when successful. * @return Zero when successful.
*/ */
int mbus_send_select_frame(mbus_handle * handle, const char *secondary_addr_str); int mbus_send_select_frame(mbus_handle * handle, const char *secondary_addr_str);
/** /**
* Sends application reset to given slave using "unified" handle * Sends application reset to given slave using "unified" handle
* *
* @param handle Initialized handle * @param handle Initialized handle
* @param address Address (0-255) * @param address Address (0-255)
* @param subcode Subcode (0-255) or no subcode (-1) * @param subcode Subcode (0-255) or no subcode (-1)
* *
* @return Zero when successful. * @return Zero when successful.
*/ */
int mbus_send_application_reset_frame(mbus_handle * handle, int address, int subcode); int mbus_send_application_reset_frame(mbus_handle * handle, int address, int subcode);
/** /**
* Sends switch baudrate frame using "unified" handle * Sends switch baudrate frame using "unified" handle
* *
* @param handle Initialized handle * @param handle Initialized handle
* @param address Address (0-255) * @param address Address (0-255)
* @param baudrate Baudrate (300,600,1200,2400,4800,9600,19200,38400) * @param baudrate Baudrate (300,600,1200,2400,4800,9600,19200,38400)
* *
* @return Zero when successful. * @return Zero when successful.
*/ */
int mbus_send_switch_baudrate_frame(mbus_handle * handle, int address, long 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
* *
* @param handle Initialized handle * @param handle Initialized handle
* @param address Address (0-255) * @param address Address (0-255)
* *
* @return Zero when successful. * @return Zero when successful.
*/ */
int mbus_send_request_frame(mbus_handle * handle, int address); int mbus_send_request_frame(mbus_handle * handle, int address);
/** /**
* Sends a request and read replies until no more records available * Sends a request and read replies until no more records available
* or limit is reached. * or limit is reached.
* *
* @param handle Initialized handle * @param handle Initialized handle
* @param address Address (0-255) * @param address Address (0-255)
* @param reply pointer to an mbus frame for the reply * @param reply pointer to an mbus frame for the reply
* @param max_frames limit of frames to readout (0 = no limit) * @param max_frames limit of frames to readout (0 = no limit)
* *
* @return Zero when successful. * @return Zero when successful.
*/ */
int mbus_sendrecv_request(mbus_handle *handle, int address, mbus_frame *reply, int max_frames); int mbus_sendrecv_request(mbus_handle *handle, int address, mbus_frame *reply, int max_frames);
/** /**
* Sends ping frame to given slave using "unified" handle * Sends ping frame to given slave using "unified" handle
* *
* @param handle Initialized handle * @param handle Initialized handle
* @param address Address (0-255) * @param address Address (0-255)
* @param purge_response Response flag (=0 don't receive response, >0 purge response) * @param purge_response Response flag (=0 don't receive response, >0 purge response)
* *
* @return Zero when successful. * @return Zero when successful.
*/ */
int mbus_send_ping_frame(mbus_handle *handle, int address, char purge_response); int mbus_send_ping_frame(mbus_handle *handle, int address, char purge_response);
/** /**
* Select slave by secondary address using "unified" handle * Select slave by secondary address using "unified" handle
* *
* @param handle Initialized handle * @param handle Initialized handle
* @param mask Address/mask to select * @param mask Address/mask to select
* *
* @return See MBUS_PROBE_* constants * @return See MBUS_PROBE_* constants
*/ */
int mbus_select_secondary_address(mbus_handle * handle, const char *mask); int mbus_select_secondary_address(mbus_handle * handle, const char *mask);
/** /**
* Probe/address slave by secondary address using "unified" handle * Probe/address slave by secondary address using "unified" handle
* *
* @param handle Initialized handle * @param handle Initialized handle
* @param mask Address/mask to probe * @param mask Address/mask to probe
* @param matching_addr Matched address (the buffer has tobe at least 16 bytes) * @param matching_addr Matched address (the buffer has tobe at least 16 bytes)
* *
* @return See MBUS_PROBE_* constants * @return See MBUS_PROBE_* constants
*/ */
int mbus_probe_secondary_address(mbus_handle * handle, const char *mask, char *matching_addr); int mbus_probe_secondary_address(mbus_handle * handle, const char *mask, char *matching_addr);
/** /**
* Read data from given slave using "unified" handle and address types * Read data from given slave using "unified" handle and address types
* *
* @param handle Initialized handle * @param handle Initialized handle
* @param address Address of the slave * @param address Address of the slave
* @param reply Reply from the slave * @param reply Reply from the slave
* *
* @return Zero when successful. * @return Zero when successful.
*/ */
int mbus_read_slave(mbus_handle *handle, mbus_address *address, mbus_frame *reply); int mbus_read_slave(mbus_handle *handle, mbus_address *address, mbus_frame *reply);
/** /**
* Allocate new data record. Use #mbus_record_free when finished. * Allocate new data record. Use #mbus_record_free when finished.
* *
* @return pointer to the new record, NULL when failed * @return pointer to the new record, NULL when failed
*/ */
mbus_record * mbus_record_new(); mbus_record * mbus_record_new();
/** /**
* Destructor for mbus_record * Destructor for mbus_record
* *
* @param rec record to be freed * @param rec record to be freed
*/ */
void mbus_record_free(mbus_record *rec); void mbus_record_free(mbus_record *rec);
/** /**
* Create/parse single counter from the fixed data structure * Create/parse single counter from the fixed data structure
* *
* @param statusByte status byte * @param statusByte status byte
* @param medium_unit_byte medium/unit byte * @param medium_unit_byte medium/unit byte
* @param data pointer to the data counter (4 bytes) * @param data pointer to the data counter (4 bytes)
* *
* @return Newly allocated record if succesful, NULL otherwise. Later on need to use #mbus_record_free * @return Newly allocated record if succesful, NULL otherwise. Later on need to use #mbus_record_free
*/ */
mbus_record *mbus_parse_fixed_record(char statusByte, char medium_unit_byte, unsigned char *data); mbus_record *mbus_parse_fixed_record(char statusByte, char medium_unit_byte, unsigned char *data);
/** /**
* Create/parse single counter from the variable data structure record * Create/parse single counter from the variable data structure record
* *
* @param record record data to be parsed * @param record record data to be parsed
* *
* @return Newly allocated record if succesful, NULL otherwise. Later on need to use #mbus_record_free * @return Newly allocated record if succesful, NULL otherwise. Later on need to use #mbus_record_free
*/ */
mbus_record * mbus_parse_variable_record(mbus_data_record *record); mbus_record * mbus_parse_variable_record(mbus_data_record *record);
/** /**
* Get normalized counter value for a fixed counter * Get normalized counter value for a fixed counter
* *
* Get "normalized" value and unit of the counter * Get "normalized" value and unit of the counter
* *
* @param medium_unit_byte medium/unit byte of the fixed counter * @param medium_unit_byte medium/unit byte of the fixed counter
* @param medium_value raw counter value * @param medium_value raw counter value
* @param unit_out units of the counter - use free when done * @param unit_out units of the counter - use free when done
* @param value_out resulting counter value * @param value_out resulting counter value
* @param quantity_out parsed quantity, when done use "free" * @param quantity_out parsed quantity, when done use "free"
* *
* @return zero when OK * @return zero when OK
*/ */
int mbus_data_fixed_normalize(int medium_unit_byte, long medium_value, char **unit_out, double *value_out, char **quantity_out); int mbus_data_fixed_normalize(int medium_unit_byte, long medium_value, char **unit_out, double *value_out, char **quantity_out);
/** /**
* Decode value of a variable data structure * Decode value of a variable data structure
* *
* @param record record to be decoded * @param record record to be decoded
* @param value_out_real numerical counter value output (when numerical) * @param value_out_real numerical counter value output (when numerical)
* @param value_out_str string counter value output (when string, NULL otherwise), when finished use "free *value_out_str" * @param value_out_str string counter value output (when string, NULL otherwise), when finished use "free *value_out_str"
* @param value_out_str_size string counter value size * @param value_out_str_size string counter value size
* *
* @return zero when OK * @return zero when OK
*/ */
int mbus_data_variable_value_decode(mbus_record *record, double *value_out_real, char **value_out_str, int *value_out_str_size); int mbus_data_variable_value_decode(mbus_record *record, double *value_out_real, char **value_out_str, int *value_out_str_size);
/** /**
* Decode units and normalize value using VIF/VIFE (used internally by mbus_vib_unit_normalize) * Decode units and normalize value using VIF/VIFE (used internally by mbus_vib_unit_normalize)
* *
* @param vif VIF (including standard extensions) * @param vif VIF (including standard extensions)
* @param value already parsed "raw" numerical value * @param value already parsed "raw" numerical value
* @param unit_out parsed unit, when done use "free" * @param unit_out parsed unit, when done use "free"
* @param value_out normalized value * @param value_out normalized value
* @param quantity_out parsed quantity, when done use "free" * @param quantity_out parsed quantity, when done use "free"
* *
* @return zero when OK * @return zero when OK
*/ */
int mbus_vif_unit_normalize(int vif, double value, char **unit_out, double *value_out, char **quantity_out); int mbus_vif_unit_normalize(int vif, double value, char **unit_out, double *value_out, char **quantity_out);
/** /**
* Decode units and normalize value from VIB * Decode units and normalize value from VIB
* *
* @param vib mbus value information block of the variable record * @param vib mbus value information block of the variable record
* @param value already parsed "raw" numerical value * @param value already parsed "raw" numerical value
* @param unit_out parsed unit, when done use "free" * @param unit_out parsed unit, when done use "free"
* @param value_out normalized value * @param value_out normalized value
* @param quantity_out parsed quantity, when done use "free" * @param quantity_out parsed quantity, when done use "free"
* *
* @return zero when OK * @return zero when OK
*/ */
int mbus_vib_unit_normalize(mbus_value_information_block *vib, double value, char **unit_out, double *value_out, char ** quantity_out); int mbus_vib_unit_normalize(mbus_value_information_block *vib, double value, char **unit_out, double *value_out, char ** quantity_out);
/** /**
* Generate XML for normalized variable-length data * Generate XML for normalized variable-length data
* *
* @param data variable-length data * @param data variable-length data
* *
* @return string with XML * @return string with XML
*/ */
char * mbus_data_variable_xml_normalized(mbus_data_variable *data); char * mbus_data_variable_xml_normalized(mbus_data_variable *data);
/** /**
* Return a string containing an XML representation of the normalized M-BUS frame data. * Return a string containing an XML representation of the normalized M-BUS frame data.
* *
* @param data M-Bus frame data * @param data M-Bus frame data
* *
* @return string with XML * @return string with XML
*/ */
char * mbus_frame_data_xml_normalized(mbus_frame_data *data); char * mbus_frame_data_xml_normalized(mbus_frame_data *data);
/** /**
* Iterate over secondary addresses, send a probe package to all addresses matching * Iterate over secondary addresses, send a probe package to all addresses matching
* the given addresses mask. * the given addresses mask.
* *
* @param handle Initialized handle * @param handle Initialized handle
* @param pos current address * @param pos current address
* @param addr_mask address mask to * @param addr_mask address mask to
* *
* @return zero when OK * @return zero when OK
*/ */
int mbus_scan_2nd_address_range(mbus_handle * handle, int pos, char *addr_mask); int mbus_scan_2nd_address_range(mbus_handle * handle, int pos, char *addr_mask);

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
// Copyright (C) 2010-2011, Robert Johansson, Raditex AB // Copyright (C) 2010-2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -10,7 +10,7 @@
/** /**
* @file mbus-protocol.h * @file mbus-protocol.h
* *
* @brief Functions and data structures for M-Bus protocol parsing. * @brief Functions and data structures for M-Bus protocol parsing.
* *
*/ */
@ -82,13 +82,13 @@ typedef struct _mbus_frame {
// variable data field // variable data field
unsigned char checksum; unsigned char checksum;
unsigned char stop; unsigned char stop;
unsigned char data[252]; unsigned char data[252];
size_t data_size; size_t data_size;
int type; int type;
time_t timestamp; time_t timestamp;
//mbus_frame_data frame_data; //mbus_frame_data frame_data;
void *next; // pointer to next mbus_frame for multi-telegram replies void *next; // pointer to next mbus_frame for multi-telegram replies
@ -99,7 +99,7 @@ typedef struct _mbus_slave_data {
int state_fcb; int state_fcb;
int state_acd; int state_acd;
} mbus_slave_data; } mbus_slave_data;
#define NITEMS(x) (sizeof(x)/sizeof(x[0])) #define NITEMS(x) (sizeof(x)/sizeof(x[0]))
@ -134,7 +134,7 @@ typedef struct _mbus_slave_data {
typedef struct _mbus_data_information_block { typedef struct _mbus_data_information_block {
unsigned char dif; unsigned char dif;
unsigned char dife[10]; unsigned char dife[10];
size_t ndife; size_t ndife;
@ -142,7 +142,7 @@ typedef struct _mbus_data_information_block {
} mbus_data_information_block; } mbus_data_information_block;
typedef struct _mbus_value_information_block { typedef struct _mbus_value_information_block {
unsigned char vif; unsigned char vif;
unsigned char vife[10]; unsigned char vife[10];
size_t nvife; size_t nvife;
@ -152,18 +152,18 @@ typedef struct _mbus_value_information_block {
} mbus_value_information_block; } mbus_value_information_block;
typedef struct _mbus_data_record_header { typedef struct _mbus_data_record_header {
mbus_data_information_block dib; mbus_data_information_block dib;
mbus_value_information_block vib; mbus_value_information_block vib;
} mbus_data_record_header; } mbus_data_record_header;
typedef struct _mbus_data_record { typedef struct _mbus_data_record {
mbus_data_record_header drh; mbus_data_record_header drh;
unsigned char data[234]; unsigned char data[234];
size_t data_len; size_t data_len;
time_t timestamp; time_t timestamp;
@ -171,25 +171,25 @@ typedef struct _mbus_data_record {
} mbus_data_record; } mbus_data_record;
// //
// HEADER FOR VARIABLE LENGTH DATA FORMAT // HEADER FOR VARIABLE LENGTH DATA FORMAT
// //
typedef struct _mbus_data_variable_header { typedef struct _mbus_data_variable_header {
//Ident.Nr. Manufr. Version Medium Access No. Status Signature //Ident.Nr. Manufr. Version Medium Access No. Status Signature
//4 Byte 2 Byte 1 Byte 1 Byte 1 Byte 1 Byte 2 Byte //4 Byte 2 Byte 1 Byte 1 Byte 1 Byte 1 Byte 2 Byte
// ex // ex
// 88 63 80 09 82 4D 02 04 15 00 00 00 // 88 63 80 09 82 4D 02 04 15 00 00 00
unsigned char id_bcd[4]; // 88 63 80 09 unsigned char id_bcd[4]; // 88 63 80 09
unsigned char manufacturer[2]; // 82 4D unsigned char manufacturer[2]; // 82 4D
unsigned char version; // 02 unsigned char version; // 02
unsigned char medium; // 04 unsigned char medium; // 04
unsigned char access_no; // 15 unsigned char access_no; // 15
unsigned char status; // 00 unsigned char status; // 00
unsigned char signature[2]; // 00 00 unsigned char signature[2]; // 00 00
} mbus_data_variable_header; } mbus_data_variable_header;
#define MBUS_DATA_VARIABLE_HEADER_LENGTH 12 #define MBUS_DATA_VARIABLE_HEADER_LENGTH 12
@ -198,22 +198,22 @@ typedef struct _mbus_data_variable_header {
// VARIABLE LENGTH DATA FORMAT // VARIABLE LENGTH DATA FORMAT
// //
typedef struct _mbus_data_variable { typedef struct _mbus_data_variable {
mbus_data_variable_header header; mbus_data_variable_header header;
mbus_data_record *record; mbus_data_record *record;
size_t nrecords; size_t nrecords;
unsigned char *data; unsigned char *data;
size_t data_len; size_t data_len;
unsigned char more_records_follow; unsigned char more_records_follow;
// are these needed/used? // are these needed/used?
unsigned char mdh; unsigned char mdh;
unsigned char *mfg_data; unsigned char *mfg_data;
size_t mfg_data_len; size_t mfg_data_len;
} mbus_data_variable; } mbus_data_variable;
// //
@ -262,22 +262,22 @@ typedef struct _mbus_frame_data {
} mbus_frame_data; } mbus_frame_data;
// //
// HEADER FOR SECONDARY ADDRESSING // HEADER FOR SECONDARY ADDRESSING
// //
typedef struct _mbus_data_secondary_address { typedef struct _mbus_data_secondary_address {
//Ident.Nr. Manufr. Version Medium //Ident.Nr. Manufr. Version Medium
//4 Byte 2 Byte 1 Byte 1 Byte //4 Byte 2 Byte 1 Byte 1 Byte
// ex // ex
// 14 49 10 01 10 57 01 06 // 14 49 10 01 10 57 01 06
unsigned char id_bcd[4]; // 14 49 10 01 unsigned char id_bcd[4]; // 14 49 10 01
unsigned char manufacturer[2]; // 10 57 unsigned char manufacturer[2]; // 10 57
unsigned char version; // 01 unsigned char version; // 01
unsigned char medium; // 06 unsigned char medium; // 06
} mbus_data_secondary_address; } mbus_data_secondary_address;
@ -309,7 +309,7 @@ typedef struct _mbus_data_secondary_address {
#define MBUS_FRAME_FIXED_SIZE_ACK 1 #define MBUS_FRAME_FIXED_SIZE_ACK 1
#define MBUS_FRAME_FIXED_SIZE_SHORT 5 #define MBUS_FRAME_FIXED_SIZE_SHORT 5
#define MBUS_FRAME_FIXED_SIZE_CONTROL 6 #define MBUS_FRAME_FIXED_SIZE_CONTROL 6
#define MBUS_FRAME_FIXED_SIZE_LONG 6 #define MBUS_FRAME_FIXED_SIZE_LONG 6
// //
@ -463,7 +463,7 @@ typedef struct _mbus_data_secondary_address {
// //
// VARIABLE DATA FLAGS // VARIABLE DATA FLAGS
// //
#define MBUS_VARIABLE_DATA_MEDIUM_OTHER 0x00 #define MBUS_VARIABLE_DATA_MEDIUM_OTHER 0x00
#define MBUS_VARIABLE_DATA_MEDIUM_OIL 0x01 #define MBUS_VARIABLE_DATA_MEDIUM_OIL 0x01
#define MBUS_VARIABLE_DATA_MEDIUM_ELECTRICITY 0x02 #define MBUS_VARIABLE_DATA_MEDIUM_ELECTRICITY 0x02
@ -554,7 +554,7 @@ int mbus_data_fixed_parse (mbus_frame *frame, mbus_data_fixed *data);
int mbus_data_variable_parse(mbus_frame *frame, mbus_data_variable *data); int mbus_data_variable_parse(mbus_frame *frame, mbus_data_variable *data);
int mbus_frame_data_parse (mbus_frame *frame, mbus_frame_data *data); int mbus_frame_data_parse (mbus_frame *frame, mbus_frame_data *data);
int mbus_frame_pack(mbus_frame *frame, unsigned char *data, size_t data_size); int mbus_frame_pack(mbus_frame *frame, unsigned char *data, size_t data_size);
int mbus_frame_verify(mbus_frame *frame); int mbus_frame_verify(mbus_frame *frame);
@ -615,7 +615,7 @@ void mbus_hex_dump(const char *label, const char *buff, size_t len);
int mbus_data_manufacturer_encode(unsigned char *m_data, unsigned char *m_code); int mbus_data_manufacturer_encode(unsigned char *m_data, unsigned char *m_code);
const char *mbus_decode_manufacturer(unsigned char byte1, unsigned char byte2); const char *mbus_decode_manufacturer(unsigned char byte1, unsigned char byte2);
const char *mbus_data_product_name(mbus_data_variable_header *header); const char *mbus_data_product_name(mbus_data_variable_header *header);
int mbus_data_bcd_encode(unsigned char *bcd_data, size_t bcd_data_size, int value); int mbus_data_bcd_encode(unsigned char *bcd_data, size_t bcd_data_size, int value);
int mbus_data_int_encode(unsigned char *int_data, size_t int_data_size, int value); int mbus_data_int_encode(unsigned char *int_data, size_t int_data_size, int value);

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson, Raditex AB // Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -105,7 +105,7 @@ mbus_serial_set_baudrate(mbus_handle *handle, long baudrate)
return -1; return -1;
serial_data = (mbus_serial_data *) handle->auxdata; serial_data = (mbus_serial_data *) handle->auxdata;
if (serial_data == NULL) if (serial_data == NULL)
return -1; return -1;
@ -201,12 +201,12 @@ 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) if (serial_data == NULL)
{ {
return; return;
} }
free(serial_data->device); free(serial_data->device);
free(serial_data); free(serial_data);
handle->auxdata = NULL; handle->auxdata = NULL;
@ -226,7 +226,7 @@ mbus_serial_send_frame(mbus_handle *handle, mbus_frame *frame)
{ {
return -1; return -1;
} }
// Make sure serial connection is open // Make sure serial connection is open
if (isatty(handle->fd) == 0) if (isatty(handle->fd) == 0)
{ {
@ -238,7 +238,7 @@ mbus_serial_send_frame(mbus_handle *handle, mbus_frame *frame)
fprintf(stderr, "%s: mbus_frame_pack failed\n", __PRETTY_FUNCTION__); fprintf(stderr, "%s: mbus_frame_pack failed\n", __PRETTY_FUNCTION__);
return -1; return -1;
} }
#ifdef MBUS_SERIAL_DEBUG #ifdef MBUS_SERIAL_DEBUG
// if debug, dump in HEX form to stdout what we write to the serial port // if debug, dump in HEX form to stdout what we write to the serial port
printf("%s: Dumping M-Bus frame [%d bytes]: ", __PRETTY_FUNCTION__, len); printf("%s: Dumping M-Bus frame [%d bytes]: ", __PRETTY_FUNCTION__, len);
@ -254,16 +254,16 @@ mbus_serial_send_frame(mbus_handle *handle, mbus_frame *frame)
{ {
// //
// call the send event function, if the callback function is registered // call the send event function, if the callback function is registered
// //
if (_mbus_send_event) if (_mbus_send_event)
_mbus_send_event(MBUS_HANDLE_TYPE_SERIAL, buff, len); _mbus_send_event(MBUS_HANDLE_TYPE_SERIAL, buff, len);
} }
else else
{ {
fprintf(stderr, "%s: Failed to write frame to socket (ret = %d: %s)\n", __PRETTY_FUNCTION__, ret, strerror(errno)); fprintf(stderr, "%s: Failed to write frame to socket (ret = %d: %s)\n", __PRETTY_FUNCTION__, ret, strerror(errno));
return -1; return -1;
} }
// //
// wait until complete frame has been transmitted // wait until complete frame has been transmitted
// //
@ -281,13 +281,13 @@ mbus_serial_recv_frame(mbus_handle *handle, mbus_frame *frame)
char buff[PACKET_BUFF_SIZE]; char buff[PACKET_BUFF_SIZE];
int remaining, timeouts; int remaining, timeouts;
ssize_t len, nread; 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 // Make sure serial connection is open
if (isatty(handle->fd) == 0) if (isatty(handle->fd) == 0)
{ {
@ -310,7 +310,7 @@ mbus_serial_recv_frame(mbus_handle *handle, mbus_frame *frame)
// avoid out of bounds access // avoid out of bounds access
return MBUS_RECV_RESULT_ERROR; 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)
@ -321,11 +321,11 @@ mbus_serial_recv_frame(mbus_handle *handle, mbus_frame *frame)
} }
// printf("%s: Got %d byte [remaining %d, len %d]\n", __PRETTY_FUNCTION__, nread, remaining, len); // printf("%s: Got %d byte [remaining %d, len %d]\n", __PRETTY_FUNCTION__, nread, remaining, len);
if (nread == 0) if (nread == 0)
{ {
timeouts++; timeouts++;
if (timeouts >= 3) if (timeouts >= 3)
{ {
// abort to avoid endless loop // abort to avoid endless loop
@ -333,7 +333,7 @@ mbus_serial_recv_frame(mbus_handle *handle, mbus_frame *frame)
break; break;
} }
} }
if (len > (SSIZE_MAX-nread)) if (len > (SSIZE_MAX-nread))
{ {
// avoid overflow // avoid overflow
@ -349,13 +349,13 @@ mbus_serial_recv_frame(mbus_handle *handle, mbus_frame *frame)
// No data received // No data received
return MBUS_RECV_RESULT_TIMEOUT; return MBUS_RECV_RESULT_TIMEOUT;
} }
// //
// call the receive event function, if the callback function is registered // call the receive event function, if the callback function is registered
// //
if (_mbus_recv_event) if (_mbus_recv_event)
_mbus_recv_event(MBUS_HANDLE_TYPE_SERIAL, buff, len); _mbus_recv_event(MBUS_HANDLE_TYPE_SERIAL, buff, len);
if (remaining != 0) if (remaining != 0)
{ {
// Would be OK when e.g. scanning the bus, otherwise it is a failure. // Would be OK when e.g. scanning the bus, otherwise it is a failure.
@ -368,7 +368,7 @@ mbus_serial_recv_frame(mbus_handle *handle, mbus_frame *frame)
fprintf(stderr, "%s: M-Bus layer failed to parse data.\n", __PRETTY_FUNCTION__); fprintf(stderr, "%s: M-Bus layer failed to parse data.\n", __PRETTY_FUNCTION__);
return MBUS_RECV_RESULT_ERROR; return MBUS_RECV_RESULT_ERROR;
} }
return MBUS_RECV_RESULT_OK; return MBUS_RECV_RESULT_OK;
} }

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson, Raditex AB // Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -10,7 +10,7 @@
/** /**
* @file mbus-serial.h * @file mbus-serial.h
* *
* @brief Functions and data structures for sending M-Bus data via RS232. * @brief Functions and data structures for sending M-Bus data via RS232.
* *
*/ */

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson, Raditex AB // Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -104,12 +104,12 @@ 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) if (tcp_data == NULL)
{ {
return; return;
} }
free(tcp_data->host); free(tcp_data->host);
free(tcp_data); free(tcp_data);
handle->auxdata = NULL; handle->auxdata = NULL;
@ -158,12 +158,12 @@ mbus_tcp_send_frame(mbus_handle *handle, mbus_frame *frame)
{ {
// //
// call the send event function, if the callback function is registered // call the send event function, if the callback function is registered
// //
if (_mbus_send_event) if (_mbus_send_event)
_mbus_send_event(MBUS_HANDLE_TYPE_TCP, buff, len); _mbus_send_event(MBUS_HANDLE_TYPE_TCP, buff, len);
} }
else else
{ {
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;
@ -224,7 +224,7 @@ retry:
// avoid overflow // avoid overflow
return MBUS_RECV_RESULT_ERROR; 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);
@ -244,7 +244,7 @@ retry:
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/// The the timeout in seconds that will be used as the amount of time the /// The the timeout in seconds that will be used as the amount of time the
/// a read operation will wait before giving up. Note: This configuration has /// a read operation will wait before giving up. Note: This configuration has
/// to be made before calling mbus_tcp_connect. /// to be made before calling mbus_tcp_connect.
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -256,7 +256,7 @@ mbus_tcp_set_timeout_set(double seconds)
mbus_error_str_set("Invalid timeout (must be positive)."); mbus_error_str_set("Invalid timeout (must be positive).");
return -1; return -1;
} }
tcp_timeout_sec = (int)seconds; tcp_timeout_sec = (int)seconds;
tcp_timeout_usec = (seconds - tcp_timeout_sec) * 1000000; tcp_timeout_usec = (seconds - tcp_timeout_sec) * 1000000;

View File

@ -2,7 +2,7 @@
// Copyright (C) 2011, Robert Johansson, Raditex AB // Copyright (C) 2011, Robert Johansson, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -10,7 +10,7 @@
/** /**
* @file mbus-tcp.h * @file mbus-tcp.h
* *
* @brief Functions and data structures for sending M-Bus data via TCP. * @brief Functions and data structures for sending M-Bus data via TCP.
* *
*/ */

View File

@ -2,7 +2,7 @@
// Copyright (C) 2010, Raditex AB // Copyright (C) 2010, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //

View File

@ -2,7 +2,7 @@
// Copyright (C) 2010, Raditex AB // Copyright (C) 2010, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -10,7 +10,7 @@
/** /**
* @file mbus.h * @file mbus.h
* *
* @brief Main include file for the Freescada libmbus library. * @brief Main include file for the Freescada libmbus library.
* *
* Include this file to access the libmbus API: * Include this file to access the libmbus API:
@ -20,7 +20,7 @@
* *
*/ */
/*! \mainpage libmbus /*! \mainpage libmbus
* *
* These pages contain automatically generated documentation for the libmbus * These pages contain automatically generated documentation for the libmbus
* API. For examples on how to use the libmbus library, see the applications * API. For examples on how to use the libmbus library, see the applications

View File

@ -2,7 +2,7 @@
// Copyright (C) 2010, Raditex AB // Copyright (C) 2010, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -49,13 +49,13 @@ main(int argc, char *argv[])
memset(buf, 0, sizeof(buf)); memset(buf, 0, sizeof(buf));
len = fread(buf, 1, sizeof(buf), fp); len = fread(buf, 1, sizeof(buf), fp);
if (ferror(fp) != 0) if (ferror(fp) != 0)
{ {
fprintf(stderr, "%s: failed to read '%s'\n", argv[0], file); fprintf(stderr, "%s: failed to read '%s'\n", argv[0], file);
return 1; return 1;
} }
fclose(fp); fclose(fp);
memset(&reply, 0, sizeof(reply)); memset(&reply, 0, sizeof(reply));
@ -63,9 +63,9 @@ main(int argc, char *argv[])
mbus_parse(&reply, buf, len); mbus_parse(&reply, buf, len);
mbus_frame_data_parse(&reply, &frame_data); mbus_frame_data_parse(&reply, &frame_data);
mbus_frame_print(&reply); mbus_frame_print(&reply);
xml_result = normalized ? mbus_frame_data_xml_normalized(&frame_data) : mbus_frame_data_xml(&frame_data); xml_result = normalized ? mbus_frame_data_xml_normalized(&frame_data) : mbus_frame_data_xml(&frame_data);
if (xml_result == NULL) if (xml_result == NULL)
{ {
fprintf(stderr, "Failed to generate XML representation of MBUS frame: %s\n", mbus_error_str()); fprintf(stderr, "Failed to generate XML representation of MBUS frame: %s\n", mbus_error_str());
@ -73,7 +73,7 @@ main(int argc, char *argv[])
} }
printf("%s", xml_result); printf("%s", xml_result);
free(xml_result); free(xml_result);
return 0; return 0;
} }

View File

@ -2,7 +2,7 @@
// Copyright (C) 2010, Raditex AB // Copyright (C) 2010, Raditex AB
// All rights reserved. // All rights reserved.
// //
// rSCADA // rSCADA
// http://www.rSCADA.se // http://www.rSCADA.se
// info@rscada.se // info@rscada.se
// //
@ -24,7 +24,7 @@ main(int argc, char *argv[])
mbus_frame reply; mbus_frame reply;
mbus_frame_data frame_data; mbus_frame_data frame_data;
char *xml_result = NULL, *file = NULL; char *xml_result = NULL, *file = NULL;
if (argc == 3 && strcmp(argv[1], "-n") == 0) if (argc == 3 && strcmp(argv[1], "-n") == 0)
{ {
file = argv[2]; file = argv[2];
@ -46,25 +46,25 @@ main(int argc, char *argv[])
fprintf(stderr, "%s: failed to open '%s'\n", argv[0], file); fprintf(stderr, "%s: failed to open '%s'\n", argv[0], file);
return 1; return 1;
} }
memset(raw_buff, 0, sizeof(raw_buff)); memset(raw_buff, 0, sizeof(raw_buff));
len = fread(raw_buff, 1, sizeof(raw_buff), fp); len = fread(raw_buff, 1, sizeof(raw_buff), fp);
if (ferror(fp) != 0) if (ferror(fp) != 0)
{ {
fprintf(stderr, "%s: failed to read '%s'\n", argv[0], file); fprintf(stderr, "%s: failed to read '%s'\n", argv[0], file);
return 1; return 1;
} }
fclose(fp); fclose(fp);
buff_len = mbus_hex2bin(buff,sizeof(buff),raw_buff,sizeof(raw_buff)); buff_len = mbus_hex2bin(buff,sizeof(buff),raw_buff,sizeof(raw_buff));
memset(&reply, 0, sizeof(reply)); memset(&reply, 0, sizeof(reply));
memset(&frame_data, 0, sizeof(frame_data)); memset(&frame_data, 0, sizeof(frame_data));
//mbus_parse_set_debug(1); //mbus_parse_set_debug(1);
result = mbus_parse(&reply, buff, buff_len); result = mbus_parse(&reply, buff, buff_len);
if (result < 0) if (result < 0)
@ -77,21 +77,21 @@ main(int argc, char *argv[])
fprintf(stderr, "mbus_parse: need %d more bytes\n", result); fprintf(stderr, "mbus_parse: need %d more bytes\n", result);
return 1; return 1;
} }
result = mbus_frame_data_parse(&reply, &frame_data); result = mbus_frame_data_parse(&reply, &frame_data);
if (result != 0) if (result != 0)
{ {
mbus_frame_print(&reply); mbus_frame_print(&reply);
fprintf(stderr, "mbus_frame_data_parse: %s\n", mbus_error_str()); fprintf(stderr, "mbus_frame_data_parse: %s\n", mbus_error_str());
return 1; return 1;
} }
//mbus_frame_print(&reply); //mbus_frame_print(&reply);
//mbus_frame_data_print(&frame_data); //mbus_frame_data_print(&frame_data);
xml_result = normalized ? mbus_frame_data_xml_normalized(&frame_data) : mbus_frame_data_xml(&frame_data); xml_result = normalized ? mbus_frame_data_xml_normalized(&frame_data) : mbus_frame_data_xml(&frame_data);
if (xml_result == NULL) if (xml_result == NULL)
{ {
fprintf(stderr, "Failed to generate XML representation of MBUS frame: %s\n", mbus_error_str()); fprintf(stderr, "Failed to generate XML representation of MBUS frame: %s\n", mbus_error_str());
@ -100,7 +100,7 @@ main(int argc, char *argv[])
printf("%s", xml_result); printf("%s", xml_result);
free(xml_result); free(xml_result);
mbus_data_record_free(frame_data.data_var.record); mbus_data_record_free(frame_data.data_var.record);
return 0; return 0;
} }