| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466 |
- /**
- * @file _modbus_rt.c
- * @brief modbus_rt的pika层的API实现
- * @author SenySunny (senysunny@163.com)
- * @date 2023-05-14
- *
- * @attention
- *
- * <h2><center>© Copyright (c) 2022 Ma Longwei.
- * All rights reserved.</center></h2>
- *
- */
- #include "PikaStdData_List.h"
- #include "_modbus_rt__data_trans.h"
- #include "modbus_rt_platform_memory.h"
- #include "modbus_data_trans.h"
- int _modbus_rt__data_trans__reg2reg(PikaObj *self, int val) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return 0;
- #else
- return modbus_data_reg2reg((uint16_t)val);
- #endif
- }
- PikaObj* _modbus_rt__data_trans__regs2regs(PikaObj *self, PikaObj* val) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- size_t len_list = pikaList_getSize(val);
- PikaList* list = New_PikaList();
- for(size_t i = 0; i < len_list; i++ ) {
- uint16_t temp = (uint16_t)pikaList_getInt(val, i);
- pikaList_append(list, arg_newInt(modbus_data_reg2reg(temp)));
- }
- return list;
- #endif
- }
- Arg* _modbus_rt__data_trans__regs2bytes(PikaObj *self, PikaObj* val, int mode) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- uint8_t *_Dst = NULL;
- uint16_t *_Src = NULL;
- size_t len_list = pikaList_getSize(val);
- size_t len = len_list << 1;
- _Dst = modbus_rt_calloc(1,len);
- _Src = modbus_rt_calloc(1,len);
- for(size_t i = 0;i < len_list; i++) {
- _Src[i] = (uint16_t)pikaList_getInt(val, i);
- }
- modbus_data_regs2bytes(mode, _Dst, _Src, len_list);
- Arg* r = arg_newBytes(_Dst, len);
- modbus_rt_free(_Dst);
- modbus_rt_free(_Src);
- return r;
- #endif
- }
- char* _modbus_rt__data_trans__regs2str(PikaObj *self, PikaObj* val, int mode) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- char *_Dst = NULL;
- uint16_t *_Src = NULL;
- size_t len_list = pikaList_getSize(val);
- _Dst = modbus_rt_calloc(1,(len_list << 1) + 1);
- _Src = modbus_rt_calloc(1,len_list << 1);
- for(size_t i = 0;i < len_list; i++) {
- _Src[i] = (uint16_t)pikaList_getInt(val, i);
- }
- modbus_data_regs2str(mode, _Dst, _Src, len_list);
- char* str = obj_cacheStr(self, _Dst);
- modbus_rt_free(_Dst);
- modbus_rt_free(_Src);
- return str;
- #endif
- }
- PikaObj* _modbus_rt__data_trans__regs2signed(PikaObj *self, PikaObj* val, int mode){
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- int16_t *_Dst = NULL;
- uint16_t *_Src = NULL;
- size_t len_list = pikaList_getSize(val);
- _Dst = modbus_rt_calloc(1,len_list << 1);
- _Src = modbus_rt_calloc(1,len_list << 1);
- for(size_t i = 0;i < len_list; i++) {
- _Src[i] = (uint16_t)pikaList_getInt(val, i);
- }
- modbus_data_regs2signed(mode, _Dst, _Src, len_list);
- PikaList* list = New_PikaList();
- for(size_t i = 0; i < len_list; i++ ) {
- pikaList_append(list, arg_newInt(_Dst[i]));
- }
- modbus_rt_free(_Dst);
- modbus_rt_free(_Src);
- return list;
- #endif
- }
- PikaObj* _modbus_rt__data_trans__regs2int(PikaObj *self, PikaObj* val, int mode) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- int32_t *_Dst = NULL;
- uint16_t *_Src = NULL;
- size_t len_list = pikaList_getSize(val);
- size_t len_ret = len_list >> 1;
- if(len_list & 0x01) {
- len_ret += 1;
- }
- _Dst = modbus_rt_calloc(1,len_ret << 2);
- _Src = modbus_rt_calloc(1,len_list << 1);
- for(size_t i = 0;i < len_list; i++) {
- _Src[i] = (uint16_t)pikaList_getInt(val, i);
- }
- modbus_data_regs2int(mode, _Dst, _Src, len_list);
- PikaList* list = New_PikaList();
- for(size_t i = 0; i < len_ret; i++ ) {
- pikaList_append(list, arg_newInt(_Dst[i]));
- }
- modbus_rt_free(_Dst);
- modbus_rt_free(_Src);
- return list;
- #endif
- }
- PikaObj* _modbus_rt__data_trans__regs2uint(PikaObj *self, PikaObj* val, int mode) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- uint32_t *_Dst = NULL;
- uint16_t *_Src = NULL;
- size_t len_list = pikaList_getSize(val);
- size_t len_ret = len_list >> 1;
- if(len_list & 0x01) {
- len_ret += 1;
- }
- _Dst = modbus_rt_calloc(1,len_ret << 2);
- _Src = modbus_rt_calloc(1,len_list << 1);
- for(size_t i = 0;i < len_list; i++) {
- _Src[i] = (uint16_t)pikaList_getInt(val, i);
- }
- modbus_data_regs2uint(mode, _Dst, _Src, len_list);
- PikaList* list = New_PikaList();
- for(size_t i = 0; i < len_ret; i++ ) {
- pikaList_append(list, arg_newInt(_Dst[i]));
- }
- modbus_rt_free(_Dst);
- modbus_rt_free(_Src);
- return list;
- #endif
- }
- PikaObj* _modbus_rt__data_trans__regs2long(PikaObj *self, PikaObj* val, int mode) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- int64_t *_Dst = NULL;
- uint16_t *_Src = NULL;
- size_t len_list = pikaList_getSize(val);
- size_t len_ret = len_list >> 2;
- if(len_list & 0x03) {
- len_ret += 1;
- }
- _Dst = modbus_rt_calloc(1,len_ret << 3);
- _Src = modbus_rt_calloc(1,len_list << 1);
- for(size_t i = 0;i < len_list; i++) {
- _Src[i] = (uint16_t)pikaList_getInt(val, i);
- }
- modbus_data_regs2long(mode, _Dst, _Src, len_list);
- PikaList* list = New_PikaList();
- for(size_t i = 0; i < len_ret; i++ ) {
- pikaList_append(list, arg_newInt(_Dst[i]));
- }
- modbus_rt_free(_Dst);
- modbus_rt_free(_Src);
- return list;
- #endif
- }
- PikaObj* _modbus_rt__data_trans__regs2float(PikaObj *self, PikaObj* val, int mode) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- float *_Dst = NULL;
- uint16_t *_Src = NULL;
- size_t len_list = pikaList_getSize(val);
- size_t len_ret = len_list >> 1;
- if(len_list & 0x01) {
- len_ret += 1;
- }
- _Dst = modbus_rt_calloc(1,len_ret << 2);
- _Src = modbus_rt_calloc(1,len_list << 1);
- for(size_t i = 0;i < len_list; i++) {
- _Src[i] = (uint16_t)pikaList_getInt(val, i);
- }
- modbus_data_regs2float(mode, _Dst, _Src, len_list);
- PikaList* list = New_PikaList();
- for(size_t i = 0; i < len_ret; i++ ) {
- pikaList_append(list, arg_newFloat(_Dst[i]));
- }
- modbus_rt_free(_Dst);
- modbus_rt_free(_Src);
- return list;
- #endif
- }
- PikaObj* _modbus_rt__data_trans__regs2double(PikaObj *self, PikaObj* val, int mode) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- double *_Dst = NULL;
- uint16_t *_Src = NULL;
- size_t len_list = pikaList_getSize(val);
- size_t len_ret = len_list >> 2;
- if(len_list & 0x03) {
- len_ret += 1;
- }
- _Dst = modbus_rt_calloc(1,len_ret << 3);
- _Src = modbus_rt_calloc(1,len_list << 1);
- for(size_t i = 0;i < len_list; i++) {
- _Src[i] = (uint16_t)pikaList_getInt(val, i);
- }
- modbus_data_regs2double(mode, _Dst, _Src, len_list);
- PikaList* list = New_PikaList();
- for(size_t i = 0; i < len_ret; i++ ) {
- pikaList_append(list, arg_newFloat(_Dst[i]));
- }
- modbus_rt_free(_Dst);
- modbus_rt_free(_Src);
- return list;
- #endif
- }
- PikaObj* _modbus_rt__data_trans__bytes2regs(PikaObj *self, Arg* val, int mode) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- ArgType t = arg_getType(val);
- if (ARG_TYPE_BYTES != t) {
- return NULL;
- }
- uint16_t *_Dst = NULL;
- uint8_t* _Src = arg_getBytes(val);
- size_t _Src_len = arg_getBytesSize(val);
- size_t len_ret = _Src_len >> 1;
- if(_Src_len & 0x01) {
- len_ret += 1;
- }
- _Dst = modbus_rt_calloc(1,len_ret << 1);
- modbus_data_bytes2regs(mode, _Dst, _Src, _Src_len);
- PikaList* list = New_PikaList();
- for(size_t i = 0; i < len_ret; i++ ) {
- pikaList_append(list, arg_newInt(_Dst[i]));
- }
- modbus_rt_free(_Dst);
- return list;
- #endif
- }
- PikaObj* _modbus_rt__data_trans__str2regs(PikaObj *self, char* val, int mode) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- uint16_t *_Dst = NULL;
- char * _Src = val;
- size_t _Src_len = strlen(val) + 1;
- size_t len_ret = _Src_len >> 1;
- if(_Src_len & 0x01) {
- len_ret += 1;
- }
- _Dst = modbus_rt_calloc(1,len_ret << 1);
- modbus_data_str2regs(mode, _Dst, _Src, _Src_len);
- PikaList* list = New_PikaList();
- for(size_t i = 0; i < len_ret; i++ ) {
- pikaList_append(list, arg_newInt(_Dst[i]));
- }
- modbus_rt_free(_Dst);
- return list;
- #endif
- }
- PikaObj* _modbus_rt__data_trans__signed2regs(PikaObj *self, PikaObj* val, int mode) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- uint16_t *_Dst = NULL;
- int16_t * _Src = NULL;
- size_t len_list = pikaList_getSize(val);
- size_t len_ret = len_list;
- _Dst = modbus_rt_calloc(1,len_ret << 1);
- _Src = modbus_rt_calloc(1,len_list << 1);
- for(int i = 0; i < len_list; i++ ) {
- _Src[i] = (int16_t)pikaList_getInt(val, i);
- }
- modbus_data_signed2regs(mode, _Dst, _Src, len_list);
- PikaList* list = New_PikaList();
- for(int i = 0; i < len_ret; i++ ) {
- pikaList_append(list, arg_newInt(_Dst[i]));
- }
- modbus_rt_free(_Dst);
- modbus_rt_free(_Src);
- return list;
- #endif
- }
- PikaObj* _modbus_rt__data_trans__int2regs(PikaObj *self, PikaObj* val, int mode) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- uint16_t *_Dst = NULL;
- int32_t * _Src = NULL;
- size_t len_list = pikaList_getSize(val);
- size_t len_ret = len_list << 1;
- _Dst = modbus_rt_calloc(1,len_ret << 1);
- _Src = modbus_rt_calloc(1,len_list << 2);
- for(int i = 0; i < len_list; i++ ) {
- _Src[i] = (int32_t)pikaList_getInt(val, i);
- }
- modbus_data_int2regs(mode, _Dst, _Src, len_list);
- PikaList* list = New_PikaList();
- for(int i = 0; i < len_ret; i++ ) {
- pikaList_append(list, arg_newInt(_Dst[i]));
- }
- modbus_rt_free(_Dst);
- modbus_rt_free(_Src);
- return list;
- #endif
- }
- PikaObj* _modbus_rt__data_trans__uint2regs(PikaObj *self, PikaObj* val, int mode) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- uint16_t *_Dst = NULL;
- uint32_t * _Src = NULL;
- size_t len_list = pikaList_getSize(val);
- size_t len_ret = len_list << 1;
- _Dst = modbus_rt_calloc(1,len_ret << 1);
- _Src = modbus_rt_calloc(1,len_list << 2);
- for(int i = 0; i < len_list; i++ ) {
- _Src[i] = (uint32_t)pikaList_getInt(val, i);
- }
- modbus_data_uint2regs(mode, _Dst, _Src, len_list);
- PikaList* list = New_PikaList();
- for(int i = 0; i < len_ret; i++ ) {
- pikaList_append(list, arg_newInt(_Dst[i]));
- }
- modbus_rt_free(_Dst);
- modbus_rt_free(_Src);
- return list;
- #endif
- }
- PikaObj* _modbus_rt__data_trans__long2regs(PikaObj *self, PikaObj* val, int mode) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- uint16_t *_Dst = NULL;
- int64_t * _Src = NULL;
- size_t len_list = pikaList_getSize(val);
- size_t len_ret = len_list << 2;
- _Dst = modbus_rt_calloc(1,len_ret << 1);
- _Src = modbus_rt_calloc(1,len_list << 3);
- for(int i = 0; i < len_list; i++ ) {
- _Src[i] = (int64_t)pikaList_getInt(val, i);
- }
- modbus_data_long2regs(mode, _Dst, _Src, len_list);
- PikaList* list = New_PikaList();
- for(int i = 0; i < len_ret; i++ ) {
- pikaList_append(list, arg_newInt(_Dst[i]));
- }
- modbus_rt_free(_Dst);
- modbus_rt_free(_Src);
- return list;
- #endif
- }
- PikaObj* _modbus_rt__data_trans__float2regs(PikaObj *self, PikaObj* val, int mode) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- uint16_t *_Dst = NULL;
- float * _Src = NULL;
- size_t len_list = pikaList_getSize(val);
- size_t len_ret = len_list << 1;
- _Dst = modbus_rt_calloc(1,len_ret << 1);
- _Src = modbus_rt_calloc(1,len_list << 2);
- for(int i = 0; i < len_list; i++ ) {
- _Src[i] = (float)pikaList_getFloat(val, i);
- }
- modbus_data_float2regs(mode, _Dst, _Src, len_list);
- PikaList* list = New_PikaList();
- for(int i = 0; i < len_ret; i++ ) {
- pikaList_append(list, arg_newInt(_Dst[i]));
- }
- modbus_rt_free(_Dst);
- modbus_rt_free(_Src);
- return list;
- #endif
- }
- PikaObj* _modbus_rt__data_trans__double2regs(PikaObj *self, PikaObj* val, int mode) {
- #if (!MODBUS_DATA_TRANS_ENABLE)
- pika_platform_printf("MODBUS_DATA_TRANS_ENABLE is not enabled.\n");
- return NULL;
- #else
- (void)(self);
- uint16_t *_Dst = NULL;
- double * _Src = NULL;
- size_t len_list = pikaList_getSize(val);
- size_t len_ret = len_list << 2;
- _Dst = modbus_rt_calloc(1,len_ret << 1);
- _Src = modbus_rt_calloc(1,len_list << 3);
- for(int i = 0; i < len_list; i++ ) {
- _Src[i] = (double)pikaList_getFloat(val, i);
- }
- modbus_data_double2regs(mode, _Dst, _Src, len_list);
- PikaList* list = New_PikaList();
- for(int i = 0; i < len_ret; i++ ) {
- pikaList_append(list, arg_newInt(_Dst[i]));
- }
- modbus_rt_free(_Dst);
- modbus_rt_free(_Src);
- return list;
- #endif
- }
|