slave.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "slave.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include "rt_tick.h"
  5. #define DBG_ENABLE
  6. #define DBG_COLOR
  7. #define DBG_SECTION_NAME "slave"
  8. #define DBG_LEVEL DBG_LOG
  9. #include "dbg_log.h"
  10. extern const agile_modbus_slave_util_map_t bit_maps[1];
  11. extern const agile_modbus_slave_util_map_t input_bit_maps[1];
  12. extern const agile_modbus_slave_util_map_t register_maps[1];
  13. extern const agile_modbus_slave_util_map_t input_register_maps[1];
  14. extern int rtu_slave_init(const char *dev, pthread_t *tid);
  15. extern int tcp_slave_init(int port, pthread_t *tid);
  16. pthread_mutex_t slave_mtx;
  17. static int addr_check(agile_modbus_t *ctx, struct agile_modbus_slave_info *slave_info)
  18. {
  19. int slave = slave_info->sft->slave;
  20. if ((slave != ctx->slave) && (slave != AGILE_MODBUS_BROADCAST_ADDRESS) && (slave != 0xFF))
  21. return -AGILE_MODBUS_EXCEPTION_UNKNOW;
  22. return 0;
  23. }
  24. const agile_modbus_slave_util_t slave_util = {
  25. bit_maps,
  26. sizeof(bit_maps) / sizeof(bit_maps[0]),
  27. input_bit_maps,
  28. sizeof(input_bit_maps) / sizeof(input_bit_maps[0]),
  29. register_maps,
  30. sizeof(register_maps) / sizeof(register_maps[0]),
  31. input_register_maps,
  32. sizeof(input_register_maps) / sizeof(input_register_maps[0]),
  33. addr_check,
  34. NULL,
  35. NULL};
  36. int main(int argc, char *argv[])
  37. {
  38. if (argc < 3) {
  39. LOG_E("Please enter ModbusSlave [dev] [port]!");
  40. return -1;
  41. }
  42. pthread_mutex_init(&slave_mtx, NULL);
  43. rt_tick_init();
  44. pthread_t rtu_tid;
  45. pthread_t tcp_tid;
  46. int rc1 = rtu_slave_init(argv[1], &rtu_tid);
  47. int rc2 = tcp_slave_init(atoi(argv[2]), &tcp_tid);
  48. if (rc1 == 0)
  49. pthread_join(rtu_tid, NULL);
  50. if (rc2 == 0)
  51. pthread_join(tcp_tid, NULL);
  52. return 0;
  53. }