_modbus.c 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. #include "_modbus__ModBus.h"
  2. #include "agile_modbus.h"
  3. #if !PIKASCRIPT_VERSION_REQUIRE_MINIMUN(1, 11, 1)
  4. #error "pikascript version must be greater than 1.11.1"
  5. #endif
  6. void _modbus__ModBus___init__rtu(PikaObj* self,
  7. int sendBUffSize,
  8. int readBuffSize) {
  9. agile_modbus_rtu_t ctx_rtu = {0};
  10. obj_setBytes(self, "sendBuff", NULL, sendBUffSize);
  11. obj_setBytes(self, "readBuff", NULL, readBuffSize);
  12. agile_modbus_rtu_init(&ctx_rtu, obj_getBytes(self, "sendBuff"),
  13. sendBUffSize, obj_getBytes(self, "readBuff"),
  14. readBuffSize);
  15. obj_setStruct(self, "ctx_rtu", ctx_rtu);
  16. agile_modbus_rtu_t* ctx_rtu_heap = obj_getStruct(self, "ctx_rtu");
  17. obj_setPtr(self, "ctx", &ctx_rtu_heap->_ctx);
  18. }
  19. void _modbus__ModBus_setSlave(PikaObj* self, int slave) {
  20. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  21. agile_modbus_set_slave(ctx, slave);
  22. }
  23. void _modbus__ModBus___init__tcp(PikaObj* self,
  24. int sendBuffSize,
  25. int readBuffSize) {
  26. agile_modbus_tcp_t ctx_tcp = {0};
  27. obj_setBytes(self, "sendBuff", NULL, sendBuffSize);
  28. obj_setBytes(self, "readBuff", NULL, readBuffSize);
  29. agile_modbus_tcp_init(&ctx_tcp, obj_getBytes(self, "sendBuff"),
  30. sendBuffSize, obj_getBytes(self, "readBuff"),
  31. readBuffSize);
  32. obj_setStruct(self, "ctx_tcp", ctx_tcp);
  33. agile_modbus_tcp_t* ctx_tcp_heap = obj_getStruct(self, "ctx_tcp");
  34. obj_setPtr(self, "ctx", &ctx_tcp_heap->_ctx);
  35. }
  36. int _modbus__ModBus_deserializeMaskWriteRegister(PikaObj* self, int msgLength) {
  37. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  38. return agile_modbus_deserialize_mask_write_register(ctx, msgLength);
  39. }
  40. Arg* _modbus__ModBus_deserializeReadRegisters(PikaObj* self, int msgLength) {
  41. uint16_t buff[128] = {0};
  42. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  43. int len = agile_modbus_deserialize_read_registers(ctx, msgLength,
  44. (uint16_t*)buff);
  45. return arg_newBytes((uint8_t*)buff, len * 2);
  46. }
  47. Arg* _modbus__ModBus_deserializeReadBits(PikaObj* self, int msgLength) {
  48. uint8_t buff[128] = {0};
  49. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  50. int len = agile_modbus_deserialize_read_bits(ctx, msgLength, buff);
  51. return arg_newBytes(buff, len);
  52. }
  53. Arg* _modbus__ModBus_deserializeReadInputBits(PikaObj* self, int msgLength) {
  54. uint8_t buff[128] = {0};
  55. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  56. int len = agile_modbus_deserialize_read_input_bits(ctx, msgLength, buff);
  57. return arg_newBytes(buff, len);
  58. }
  59. Arg* _modbus__ModBus_deserializeReadInputRegisters(PikaObj* self,
  60. int msgLength) {
  61. uint16_t buff[128] = {0};
  62. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  63. int len = agile_modbus_deserialize_read_input_registers(ctx, msgLength,
  64. (uint16_t*)buff);
  65. return arg_newBytes((uint8_t*)buff, len * 2);
  66. }
  67. Arg* _modbus__ModBus_deserializeReportSlaveId(PikaObj* self,
  68. int msgLength,
  69. int maxDest) {
  70. uint8_t buff[128] = {0};
  71. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  72. int len = agile_modbus_deserialize_report_slave_id(ctx, msgLength, maxDest,
  73. (uint8_t*)buff);
  74. return arg_newBytes(buff, len);
  75. }
  76. Arg* _modbus__ModBus_deserializeWriteAndReadRegisters(PikaObj* self,
  77. int msgLength) {
  78. uint16_t buff[128] = {0};
  79. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  80. int len = agile_modbus_deserialize_write_and_read_registers(
  81. ctx, msgLength, (uint16_t*)buff);
  82. return arg_newBytes((uint8_t*)buff, len * 2);
  83. }
  84. int _modbus__ModBus_deserializeWriteBit(PikaObj* self, int msgLength) {
  85. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  86. return agile_modbus_deserialize_write_bit(ctx, msgLength);
  87. }
  88. int _modbus__ModBus_deserializeWriteBits(PikaObj* self, int msgLength) {
  89. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  90. return agile_modbus_deserialize_write_bits(ctx, msgLength);
  91. }
  92. int _modbus__ModBus_deserializeWriteRegister(PikaObj* self, int msgLength) {
  93. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  94. return agile_modbus_deserialize_write_register(ctx, msgLength);
  95. }
  96. int _modbus__ModBus_deserializeWriteRegisters(PikaObj* self, int msgLength) {
  97. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  98. return agile_modbus_deserialize_write_registers(ctx, msgLength);
  99. }
  100. int _modbus__ModBus_serializeMaskWriteRegister(PikaObj* self,
  101. int addr,
  102. int andMask,
  103. int orMask) {
  104. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  105. return agile_modbus_serialize_mask_write_register(ctx, addr, andMask,
  106. orMask);
  107. }
  108. int _modbus__ModBus_serializeReadBits(PikaObj* self, int addr, int nb) {
  109. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  110. return agile_modbus_serialize_read_bits(ctx, addr, nb);
  111. }
  112. int _modbus__ModBus_serializeReadInputBits(PikaObj* self, int addr, int nb) {
  113. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  114. return agile_modbus_serialize_read_input_bits(ctx, addr, nb);
  115. }
  116. int _modbus__ModBus_serializeReadInputRegisters(PikaObj* self,
  117. int addr,
  118. int nb) {
  119. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  120. return agile_modbus_serialize_read_input_registers(ctx, addr, nb);
  121. }
  122. int _modbus__ModBus_serializeReadRegisters(PikaObj* self, int addr, int nb) {
  123. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  124. return agile_modbus_serialize_read_registers(ctx, addr, nb);
  125. }
  126. int _modbus__ModBus_serializeReportSlaveId(PikaObj* self) {
  127. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  128. return agile_modbus_serialize_report_slave_id(ctx);
  129. }
  130. int _modbus__ModBus_serializeWriteAndReadRegisters(PikaObj* self,
  131. int writeAddr,
  132. int writeNb,
  133. uint8_t* src,
  134. int readAddr,
  135. int readNb) {
  136. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  137. return agile_modbus_serialize_write_and_read_registers(
  138. ctx, writeAddr, writeNb, (uint16_t*)src, readAddr, readNb);
  139. }
  140. int _modbus__ModBus_serializeWriteBit(PikaObj* self, int addr, int status) {
  141. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  142. return agile_modbus_serialize_write_bit(ctx, addr, status);
  143. }
  144. int _modbus__ModBus_serializeWriteBits(PikaObj* self,
  145. int addr,
  146. int nb,
  147. uint8_t* src) {
  148. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  149. return agile_modbus_serialize_write_bits(ctx, addr, nb, src);
  150. }
  151. int _modbus__ModBus_serializeWriteRegister(PikaObj* self, int addr, int value) {
  152. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  153. return agile_modbus_serialize_write_register(ctx, addr, value);
  154. }
  155. int _modbus__ModBus_serializeWriteRegisters(PikaObj* self,
  156. int addr,
  157. int nb,
  158. uint8_t* src) {
  159. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  160. return agile_modbus_serialize_write_registers(ctx, addr, nb,
  161. (uint16_t*)src);
  162. }
  163. Arg* _modbus__ModBus_getSendBuff(PikaObj* self) {
  164. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  165. return arg_newBytes(ctx->send_buf, ctx->send_bufsz);
  166. }
  167. Arg* _modbus__ModBus_getReadBuff(PikaObj* self) {
  168. agile_modbus_t* ctx = obj_getPtr(self, "ctx");
  169. return arg_newBytes(ctx->read_buf, ctx->read_bufsz);
  170. }