Commit 7ac79f0a947e8f7eb9990c1388a6400293108579

Authored by Stéphane Raimbault
1 parent e48f66e0

Removed glib dependency

... ... @@ -8,7 +8,6 @@ Cleanups
8 8 * split compute_response_size to reuse
9 9 * split modbus.c (tcp/rtu, query/response)
10 10 * t_id in param_msqg
11   -* drop glib dependency (not sure)
12 11 * only one build_header_message function to replace build_query_packet/response_packet
13 12  
14 13 Documentation
... ...
configure.ac
... ... @@ -10,14 +10,6 @@ AC_PROG_CC
10 10 AC_PROG_MAKE_SET
11 11 AC_PROG_LIBTOOL
12 12  
13   -# Checks for libraries.
14   -AM_PATH_GLIB_2_0(2.0.0,,AC_MSG_ERROR(libmodbus needs GLib 2.X))
15   -PKG_CHECK_MODULES(GLIB, glib-2.0)
16   -AC_SUBST(GLIB_CFLAGS)
17   -AC_SUBST(GLIB_LIBS)
18   -# Optional requirements to report via pkg-config (in modbus.pc)
19   -modbus_pkgdeps="glib-2.0"
20   -
21 13 # Checks for header files.
22 14 AC_HEADER_STDC
23 15 AC_CHECK_HEADERS([arpa/inet.h fcntl.h netinet/in.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h termio.h termios.h unistd.h])
... ...
modbus.pc.in
... ... @@ -5,7 +5,7 @@ includedir=@includedir@
5 5  
6 6 Name: modbus
7 7 Description: ModBus library
8   -Requires: @modbus_pkgdeps@
  8 +Requires:
9 9 Version: @VERSION@
10 10 Libs: -L${libdir} -lmodbus
11 11 Cflags: -I${includedir}
... ...
src/Makefile.am
... ... @@ -3,13 +3,10 @@ libmodbus_la_SOURCES = modbus.c modbus.h
3 3  
4 4 bin_PROGRAMS = test-modbus-master test-modbus-slave
5 5 test_modbus_master_SOURCES = test-modbus-master.c
6   -test_modbus_master_INCLUDES = @GLIB_CFLAGS@
7   -test_modbus_master_LDADD = libmodbus.la @GLIB_LIBS@
  6 +test_modbus_master_LDADD = libmodbus.la
8 7  
9 8 test_modbus_slave_SOURCES = test-modbus-slave.c
10   -test_modbus_slave_INCLUDES = @GLIB_CFLAGS@
11   -test_modbus_slave_LDADD = libmodbus.la @GLIB_LIBS@
  9 +test_modbus_slave_LDADD = libmodbus.la
12 10  
13   -INCLUDES = @GLIB_CFLAGS@ -I$(top_srcdir)/include
14   -LDADD = @GLIB_LIBS@
  11 +INCLUDES = -I$(top_srcdir)/include
15 12 CLEANFILES = *~
... ...
src/modbus.c
... ... @@ -37,7 +37,6 @@
37 37 #include <sys/time.h>
38 38 #include <unistd.h>
39 39 #include <errno.h>
40   -#include <glib.h>
41 40  
42 41 /* TCP */
43 42 #include <sys/types.h>
... ... @@ -137,7 +136,7 @@ static void error_treat(int ret, const char *string, modbus_param_t *mb_param)
137 136 {
138 137 if (ret == -1)
139 138 perror(string);
140   - g_print("\n\nERROR %s\n\n", string);
  139 + printf("\n\nERROR %s\n\n", string);
141 140  
142 141 if (mb_param->type_com == RTU) {
143 142 tcflush(mb_param->fd, TCIOFLUSH);
... ... @@ -334,12 +333,10 @@ int check_crc16(modbus_param_t *mb_param,
334 333 if (crc_calc == crc_received) {
335 334 ret = 0;
336 335 } else {
337   - char *s_error;
338   - s_error = g_strdup_printf(
339   - "invalid crc received %0X - crc_calc %0X",
  336 + char s_error[64];
  337 + sprintf(s_error, "invalid crc received %0X - crc_calc %0X",
340 338 crc_received, crc_calc);
341 339 error_treat(0, s_error, mb_param);
342   - g_free(s_error);
343 340 ret = INVALID_CRC;
344 341 }
345 342 } else {
... ... @@ -367,11 +364,11 @@ static int modbus_send(modbus_param_t *mb_param, unsigned char *query,
367 364 }
368 365  
369 366 if (mb_param->debug) {
370   - g_print("\n");
  367 + printf("\n");
371 368 for (i = 0; i < query_size; i++)
372   - g_print("[%.2X]", query[i]);
  369 + printf("[%.2X]", query[i]);
373 370  
374   - g_print("\n");
  371 + printf("\n");
375 372 }
376 373  
377 374 if (mb_param->type_com == RTU)
... ... @@ -404,7 +401,7 @@ int compute_query_size_header(int function)
404 401 else
405 402 byte = 0;
406 403  
407   - g_print("compute_query_size_header FC %d, B%d\n", function, byte);
  404 + printf("compute_query_size_header FC %d, B%d\n", function, byte);
408 405  
409 406 return byte;
410 407 }
... ... @@ -422,7 +419,7 @@ int compute_query_size_data(modbus_param_t *mb_param, unsigned char *msg)
422 419 byte = 0;
423 420  
424 421 byte += mb_param->checksum_size;
425   - g_print("compute_query_size_data FC %d, B %d\n", function, byte);
  422 + printf("compute_query_size_data FC %d, B %d\n", function, byte);
426 423  
427 424 return byte;
428 425 }
... ... @@ -431,7 +428,7 @@ int compute_query_size_data(modbus_param_t *mb_param, unsigned char *msg)
431 428 { \
432 429 while ((select_ret = select(mb_param->fd+1, &rfds, NULL, NULL, &tv)) == -1) { \
433 430 if (errno == EINTR) { \
434   - g_print("A non blocked signal was caught\n"); \
  431 + printf("A non blocked signal was caught\n"); \
435 432 /* Necessary after an error */ \
436 433 FD_ZERO(&rfds); \
437 434 FD_SET(mb_param->fd, &rfds); \
... ... @@ -472,9 +469,9 @@ int receive_msg(modbus_param_t *mb_param,
472 469  
473 470 if (mb_param->debug) {
474 471 if (msg_size_computed == MSG_SIZE_UNDEFINED)
475   - g_print("Waiting for a message...\n");
  472 + printf("Waiting for a message...\n");
476 473 else
477   - g_print("Waiting for a message (%d bytes)...\n", msg_size_computed);
  474 + printf("Waiting for a message (%d bytes)...\n", msg_size_computed);
478 475 }
479 476  
480 477 /* Add a file descriptor to the set */
... ... @@ -526,7 +523,7 @@ int receive_msg(modbus_param_t *mb_param,
526 523 if (mb_param->debug) {
527 524 int i;
528 525 for (i=0; i < read_ret; i++)
529   - g_print("<%.2X>", p_msg[i]);
  526 + printf("<%.2X>", p_msg[i]);
530 527 }
531 528  
532 529 if ((*msg_size) < msg_size_computed) {
... ... @@ -539,20 +536,20 @@ int receive_msg(modbus_param_t *mb_param,
539 536 size_to_read = compute_query_size_header(msg[mb_param->header_length + 1]);
540 537 msg_size_computed += size_to_read;
541 538 state = BYTE;
542   - g_print("\nBYTE:");
  539 + printf("\nBYTE:");
543 540 break;
544 541 case BYTE:
545 542 size_to_read = compute_query_size_data(mb_param, msg);
546 543 msg_size_computed += size_to_read;
547 544 state = COMPLETE;
548   - g_print("\nCOMPLETE:");
  545 + printf("\nCOMPLETE:");
549 546 break;
550 547 case COMPLETE:
551 548 size_to_read = 0;
552 549 break;
553 550 }
554 551 }
555   - g_print(" size to read %d\n", size_to_read);
  552 + printf(" size to read %d\n", size_to_read);
556 553  
557 554 /* Moves the pointer to receive other datas */
558 555 p_msg = &(p_msg[read_ret]);
... ... @@ -571,7 +568,7 @@ int receive_msg(modbus_param_t *mb_param,
571 568 }
572 569  
573 570 if (mb_param->debug)
574   - g_print("\n");
  571 + printf("\n");
575 572  
576 573 /* OK */
577 574 return 0;
... ... @@ -652,12 +649,10 @@ static int modbus_check_response(modbus_param_t *mb_param,
652 649 /* The chances are low to hit this
653 650 case but can avoid a vicious
654 651 segfault */
655   - char *s_error;
656   - s_error = g_strdup_printf(
657   - "Invalid exception code %d",
658   - response[offset + 2]);
  652 + char s_error[64];
  653 + sprintf(s_error, "Invalid exception code %d", response[offset + 2]);
659 654 error_treat(0, s_error, mb_param);
660   - g_free(s_error);
  655 + free(s_error);
661 656 return INVALID_EXCEPTION_CODE;
662 657 }
663 658 }
... ... @@ -735,12 +730,12 @@ void manage_query(modbus_param_t *mb_param, unsigned char *query,
735 730 count = (query[offset+4] << 8) + query[offset+5];
736 731 byte_count = 2 * count;
737 732 offset = build_response_packet(mb_param, slave, function, byte_count, response);
738   - g_print("offset %d\n", offset);
  733 + printf("offset %d\n", offset);
739 734 for (i = address; i < address + count; i++) {
740 735 response[offset++] = mb_mapping->tab_holding_registers[i] >> 8;
741 736 response[offset++] = mb_mapping->tab_holding_registers[i] & 0xFF;
742 737 }
743   - g_print("fin offset %d\n", offset);
  738 + printf("fin offset %d\n", offset);
744 739 break;
745 740 case FC_READ_INPUT_REGISTERS:
746 741 count = (query[offset+4] << 8) + query[offset+5];
... ... @@ -758,8 +753,8 @@ void manage_query(modbus_param_t *mb_param, unsigned char *query,
758 753 else if (data == 0x0)
759 754 mb_mapping->tab_coil_status[address] = OFF;
760 755 else
761   - g_print("FIXME Error %d\n", data);
762   - g_print("FIXME works only in TCP mode (CRC)");
  756 + printf("FIXME Error %d\n", data);
  757 + printf("FIXME works only in TCP mode (CRC)");
763 758 memcpy(response, query, query_size);
764 759 offset = query_size;
765 760 break;
... ... @@ -768,7 +763,7 @@ void manage_query(modbus_param_t *mb_param, unsigned char *query,
768 763 case FC_FORCE_MULTIPLE_COILS:
769 764 case FC_PRESET_MULTIPLE_REGISTERS:
770 765 case FC_REPORT_SLAVE_ID:
771   - g_print("Not implemented\n");
  766 + printf("Not implemented\n");
772 767 break;
773 768 }
774 769  
... ... @@ -897,7 +892,7 @@ int read_holding_registers(modbus_param_t *mb_param, int slave,
897 892 int status;
898 893  
899 894 if (count > MAX_READ_HOLD_REGS) {
900   - g_print("WARNING Too many holding registers requested\n");
  895 + printf("WARNING Too many holding registers requested\n");
901 896 count = MAX_READ_HOLD_REGS;
902 897 }
903 898  
... ... @@ -914,7 +909,7 @@ int read_input_registers(modbus_param_t *mb_param, int slave,
914 909 int status;
915 910  
916 911 if (count > MAX_READ_INPUT_REGS) {
917   - g_print("WARNING Too many input registers requested\n");
  912 + printf("WARNING Too many input registers requested\n");
918 913 count = MAX_READ_INPUT_REGS;
919 914 }
920 915  
... ... @@ -1023,7 +1018,7 @@ int force_multiple_coils(modbus_param_t *mb_param, int slave,
1023 1018 unsigned char query[MAX_PACKET_SIZE];
1024 1019  
1025 1020 if (coil_count > MAX_WRITE_COILS) {
1026   - g_print("WARNING Writing to too many coils\n");
  1021 + printf("WARNING Writing to too many coils\n");
1027 1022 coil_count = MAX_WRITE_COILS;
1028 1023 }
1029 1024  
... ... @@ -1071,7 +1066,7 @@ int preset_multiple_registers(modbus_param_t *mb_param, int slave,
1071 1066 unsigned char query[MAX_PACKET_SIZE];
1072 1067  
1073 1068 if (reg_count > MAX_WRITE_REGS) {
1074   - g_print("WARNING Trying to write to too many registers\n");
  1069 + printf("WARNING Trying to write to too many registers\n");
1075 1070 reg_count = MAX_WRITE_REGS;
1076 1071 }
1077 1072  
... ... @@ -1177,7 +1172,7 @@ static int modbus_connect_rtu(modbus_param_t *mb_param)
1177 1172 speed_t baud_rate;
1178 1173  
1179 1174 if (mb_param->debug) {
1180   - g_print("Opening %s at %d bauds (%s)\n",
  1175 + printf("Opening %s at %d bauds (%s)\n",
1181 1176 mb_param->device, mb_param->baud_i, mb_param->parity);
1182 1177 }
1183 1178  
... ... @@ -1191,7 +1186,7 @@ static int modbus_connect_rtu(modbus_param_t *mb_param)
1191 1186 mb_param->fd = open(mb_param->device, O_RDWR | O_NOCTTY | O_NDELAY);
1192 1187 if (mb_param->fd < 0) {
1193 1188 perror("open");
1194   - g_print("ERROR Opening device %s (no : %d)\n",
  1189 + printf("ERROR Opening device %s (no : %d)\n",
1195 1190 mb_param->device, errno);
1196 1191 return -1;
1197 1192 }
... ... @@ -1240,7 +1235,7 @@ static int modbus_connect_rtu(modbus_param_t *mb_param)
1240 1235 break;
1241 1236 default:
1242 1237 baud_rate = B9600;
1243   - g_print("WARNING Unknown baud rate %d for %s (B9600 used)\n",
  1238 + printf("WARNING Unknown baud rate %d for %s (B9600 used)\n",
1244 1239 mb_param->baud_i, mb_param->device);
1245 1240 }
1246 1241  
... ... @@ -1460,7 +1455,7 @@ static int modbus_connect_tcp(modbus_param_t *mb_param)
1460 1455 }
1461 1456  
1462 1457 if (mb_param->debug) {
1463   - g_print("Connecting to %s\n", mb_param->ip);
  1458 + printf("Connecting to %s\n", mb_param->ip);
1464 1459 }
1465 1460  
1466 1461 ret = connect(mb_param->fd, (struct sockaddr *)&addr,
... ... @@ -1499,34 +1494,38 @@ int modbus_mapping_new(modbus_mapping_t *mb_mapping,
1499 1494 {
1500 1495 /* 0X */
1501 1496 mb_mapping->nb_coil_status = nb_coil_status;
1502   - mb_mapping->tab_coil_status = (unsigned char *) g_malloc0(nb_coil_status * sizeof(unsigned char));
  1497 + mb_mapping->tab_coil_status = (unsigned char *) malloc(nb_coil_status * sizeof(unsigned char));
  1498 + memset(mb_mapping->tab_coil_status, 0, nb_coil_status * sizeof(unsigned char));
1503 1499 if (mb_mapping->tab_coil_status == NULL)
1504 1500 return FALSE;
1505 1501  
1506 1502 /* 1X */
1507 1503 mb_mapping->nb_input_status = nb_input_status;
1508   - mb_mapping->tab_input_status = (unsigned char *) g_malloc0(nb_input_status * sizeof(unsigned char));
  1504 + mb_mapping->tab_input_status = (unsigned char *) malloc(nb_input_status * sizeof(unsigned char));
  1505 + memset(mb_mapping->tab_input_status, 0, nb_input_status * sizeof(unsigned char));
1509 1506 if (mb_mapping->tab_input_status == NULL) {
1510   - g_free(mb_mapping->tab_coil_status);
  1507 + free(mb_mapping->tab_coil_status);
1511 1508 return FALSE;
1512 1509 }
1513 1510  
1514 1511 /* 3X */
1515 1512 mb_mapping->nb_input_registers = nb_input_registers;
1516   - mb_mapping->tab_input_registers = (unsigned short *) g_malloc0(nb_input_registers * sizeof(unsigned short));
  1513 + mb_mapping->tab_input_registers = (unsigned short *) malloc(nb_input_registers * sizeof(unsigned short));
  1514 + memset(mb_mapping->tab_input_registers, 0, nb_input_registers * sizeof(unsigned short));
1517 1515 if (mb_mapping->tab_input_registers == NULL) {
1518   - g_free(mb_mapping->tab_coil_status);
1519   - g_free(mb_mapping->tab_input_status);
  1516 + free(mb_mapping->tab_coil_status);
  1517 + free(mb_mapping->tab_input_status);
1520 1518 return FALSE;
1521 1519 }
1522 1520  
1523 1521 /* 4X */
1524 1522 mb_mapping->nb_holding_registers = nb_holding_registers;
1525   - mb_mapping->tab_holding_registers = (unsigned short *) g_malloc0(nb_holding_registers * sizeof(unsigned short));
  1523 + mb_mapping->tab_holding_registers = (unsigned short *) malloc(nb_holding_registers * sizeof(unsigned short));
  1524 + memset(mb_mapping->tab_holding_registers, 0, nb_holding_registers * sizeof(unsigned short));
1526 1525 if (mb_mapping->tab_holding_registers == NULL) {
1527   - g_free(mb_mapping->tab_coil_status);
1528   - g_free(mb_mapping->tab_input_status);
1529   - g_free(mb_mapping->tab_input_registers);
  1526 + free(mb_mapping->tab_coil_status);
  1527 + free(mb_mapping->tab_input_status);
  1528 + free(mb_mapping->tab_input_registers);
1530 1529 return FALSE;
1531 1530 }
1532 1531  
... ... @@ -1536,10 +1535,10 @@ int modbus_mapping_new(modbus_mapping_t *mb_mapping,
1536 1535 /* Frees the 4 arrays */
1537 1536 void modbus_mapping_free(modbus_mapping_t *mb_mapping)
1538 1537 {
1539   - g_free(mb_mapping->tab_coil_status);
1540   - g_free(mb_mapping->tab_input_status);
1541   - g_free(mb_mapping->tab_input_registers);
1542   - g_free(mb_mapping->tab_holding_registers);
  1538 + free(mb_mapping->tab_coil_status);
  1539 + free(mb_mapping->tab_input_status);
  1540 + free(mb_mapping->tab_input_registers);
  1541 + free(mb_mapping->tab_holding_registers);
1543 1542 }
1544 1543  
1545 1544 /* Listens for any query from a modbus master */
... ... @@ -1561,7 +1560,7 @@ int modbus_init_listen_tcp(modbus_param_t *mb_param)
1561 1560 perror("socket");
1562 1561 exit(1);
1563 1562 } else {
1564   - g_print("Socket OK\n");
  1563 + printf("Socket OK\n");
1565 1564 }
1566 1565  
1567 1566 ret = bind(new_socket, (struct sockaddr *)&addr,
... ... @@ -1571,7 +1570,7 @@ int modbus_init_listen_tcp(modbus_param_t *mb_param)
1571 1570 close(new_socket);
1572 1571 exit(1);
1573 1572 } else {
1574   - g_print("Bind OK\n");
  1573 + printf("Bind OK\n");
1575 1574 }
1576 1575  
1577 1576 ret = listen(new_socket, 1);
... ... @@ -1580,7 +1579,7 @@ int modbus_init_listen_tcp(modbus_param_t *mb_param)
1580 1579 close(new_socket);
1581 1580 exit(1);
1582 1581 } else {
1583   - g_print("Listen OK\n");
  1582 + printf("Listen OK\n");
1584 1583 }
1585 1584  
1586 1585 addrlen = sizeof(struct sockaddr_in);
... ... @@ -1591,8 +1590,8 @@ int modbus_init_listen_tcp(modbus_param_t *mb_param)
1591 1590 new_socket = 0;
1592 1591 exit(1);
1593 1592 } else {
1594   - g_print("The client %s is connected\n",
1595   - inet_ntoa(addr.sin_addr));
  1593 + printf("The client %s is connected\n",
  1594 + inet_ntoa(addr.sin_addr));
1596 1595 }
1597 1596  
1598 1597 return new_socket;
... ...
... ... @@ -17,7 +17,6 @@ def set_options(opt):
17 17  
18 18 def configure(conf):
19 19 conf.check_tool('compiler_cc')
20   - conf.check_pkg('glib-2.0', destvar='GLIB', mandatory=True)
21 20 conf.check_tool('misc')
22 21  
23 22 headers = 'arpa/inet.h fcntl.h netinet/in.h stdlib.h \
... ... @@ -62,8 +61,7 @@ def build(bld):
62 61 'prefix': bld.env()['PREFIX'],
63 62 'exec_prefix': bld.env()['PREFIX'],
64 63 'libdir': bld.env()['PREFIX'] + '/lib',
65   - 'includedir': bld.env()['PREFIX'] + '/include',
66   - 'modbus_pkgdeps' : 'glib-2.0'}
  64 + 'includedir': bld.env()['PREFIX'] + '/include'}
67 65  
68 66 def shutdown():
69 67 import UnitTest
... ...