chenbin 4 yıl önce
ebeveyn
işleme
7bb1298c28

+ 1 - 1
inc/small_modbus_base.h

@@ -1,4 +1,4 @@
-/*
+/*
  * Change Logs:
  * Date           Author       Notes
  * 2020-08-21     chenbin      small modbus the first version

+ 4 - 4
inc/small_modbus_port.h

@@ -1,11 +1,11 @@
-#ifndef __SMALL_MODBUS_PORT_H__
+#ifndef __SMALL_MODBUS_PORT_H__
 #define __SMALL_MODBUS_PORT_H__
 
 /*
 *RTTHREAD PORT
 */
-#define SMALL_MODBUS_RTTHREAD 0
-#define SMALL_MODBUS_RTTHREAD_USE_DEVICDE  0
+#define SMALL_MODBUS_RTTHREAD 1
+#define SMALL_MODBUS_RTTHREAD_USE_DEVICDE  1
 #define SMALL_MODBUS_RTTHREAD_USE_SOCKET   0
 
 #if SMALL_MODBUS_RTTHREAD
@@ -23,7 +23,7 @@
 /*
 *WIN32 PORT  
 */
-#define SMALL_MODBUS_WIN32 1
+#define SMALL_MODBUS_WIN32 0
 #if SMALL_MODBUS_WIN32
 #include "small_modbus_port_win32.h"
 #endif

+ 2 - 1
src/small_modbus_base.c

@@ -1,9 +1,10 @@
-/*
+/*
  * Change Logs:
  * Date           Author       Notes
  * 2020-08-21     chenbin      small modbus the first version
  */
 #include "small_modbus_base.h"
+#include "small_modbus_utils.h"
 
 int _modbus_init(small_modbus_t *smb)
 {

+ 102 - 15
src/small_modbus_port_rtthread.c

@@ -1,4 +1,4 @@
-/*
+/*
  * Change Logs:
  * Date           Author       Notes
  * 2021-03     		chenbin      small_modbus_rtthread.c  for rtthread
@@ -9,15 +9,11 @@
  * modbus on rtthread
  */
 #if SMALL_MODBUS_RTTHREAD
+#include "small_modbus_base.h"
 #include "small_modbus_utils.h"
 #include "small_modbus_rtu.h"
 #include "small_modbus_tcp.h"
 
-
-#ifdef RT_USING_DEVICE
-#include <rtdevice.h>
-#endif
-
 int _modbus_debug(small_modbus_t *smb,int level,const char *fmt, ...)
 {
 	static char log_buf[256];
@@ -33,8 +29,6 @@ int _modbus_debug(small_modbus_t *smb,int level,const char *fmt, ...)
 	rt_exit_critical();
 	return 0;
 }
-
-
 /*
 *modbus port device
 */
@@ -130,6 +124,7 @@ static int _modbus_rtdevice_wait(small_modbus_t *smb,int timeout)
 	}
 	return rc;
 }
+
 int modbus_port_device_init(small_modbus_port_device_t *port,const char *device_name)
 {
 	//rt_memcpy(&port->base,&_port_device_default,sizeof(small_modbus_port_t));
@@ -206,7 +201,99 @@ int modbus_set_oflag(small_modbus_t *smb,int oflag)
 /*
 *modbus port socket
 */
-#ifdef SMALL_MODBUS_RTTHREAD_USE_SOCKET
+#if SMALL_MODBUS_RTTHREAD_USE_SOCKET
+
+static rt_err_t _modbus_rtsocket_rx_indicate(rt_device_t dev, rt_size_t size)
+{
+	small_modbus_port_device_t *smb_port_device = dev->user_data;
+	
+	smb_port_device->rx_size = size;
+	
+	return rt_sem_release(&(smb_port_device->rx_sem));
+}
+
+static int _modbus_rtsocket_open(small_modbus_t *smb)
+{
+	small_modbus_port_device_t *smb_port_device = (small_modbus_port_device_t *)smb->port;
+	if(smb_port_device->device)
+	{
+		smb_port_device->device->user_data = smb_port_device;
+		
+		rt_device_set_rx_indicate(smb_port_device->device, _modbus_rtdevice_rx_indicate);
+		
+		rt_device_open(smb_port_device->device, smb_port_device->oflag);
+		//rt_device_open(smb_port_device->device, RT_DEVICE_FLAG_INT_RX);
+		//rt_device_open(smb_port_device->device, RT_DEVICE_FLAG_DMA_RX);
+		
+		if(smb_port_device->rts_set)
+		{
+			smb_port_device->rts_set(0);
+		}
+	}
+	return 0;
+}
+
+static int _modbus_rtsocket_close(small_modbus_t *smb)
+{
+	small_modbus_port_device_t *smb_port_device = (small_modbus_port_device_t *)smb->port;
+	if(smb_port_device->device)
+	{
+		rt_device_close(smb_port_device->device);
+	}
+	return 0;
+}
+
+static int _modbus_rtsocket_write(small_modbus_t *smb,uint8_t *data,uint16_t length)
+{
+	small_modbus_port_device_t *smb_port_device = (small_modbus_port_device_t *)smb->port;
+	rt_enter_critical();
+	
+	if(smb_port_device->rts_set)
+			smb_port_device->rts_set(1);
+		
+	rt_device_write(smb_port_device->device,0,data,length);
+	
+	if(smb_port_device->rts_set)
+			smb_port_device->rts_set(0);
+	
+	rt_exit_critical();
+	return length;
+}
+
+static int _modbus_rtsocket_read(small_modbus_t *smb,uint8_t *data,uint16_t length)
+{
+	small_modbus_port_device_t *port_device = (small_modbus_port_device_t *)smb->port;
+	
+	return rt_device_read(port_device->device,0,data,length);
+}
+
+static int _modbus_rtsocket_flush(small_modbus_t *smb)
+{
+	small_modbus_port_device_t *port_device = (small_modbus_port_device_t *)smb->port;
+	
+	int rc = rt_device_read(port_device->device,0,smb->read_buff,MODBUS_MAX_ADU_LENGTH);
+	
+	rt_sem_control(&(port_device->rx_sem), RT_IPC_CMD_RESET, RT_NULL);
+	return rc;
+}
+
+static int _modbus_rtsocket_wait(small_modbus_t *smb,int timeout)
+{
+	int rc = -1;
+	small_modbus_port_device_t *port_device = (small_modbus_port_device_t *)smb->port;
+	
+	rc = rt_sem_take(&(port_device->rx_sem),timeout);
+	if(rc < RT_EOK)
+	{
+		return MODBUS_TIMEOUT;
+	}
+	if(port_device->rx_size == 0)
+	{
+		return MODBUS_ERROR_READ;
+	}
+	return rc;
+}
+
 
 int modbus_port_socket_init(small_modbus_port_socket_t *port,char *hostname,char *hostport)
 {
@@ -214,12 +301,12 @@ int modbus_port_socket_init(small_modbus_port_socket_t *port,char *hostname,char
 	//rt_memcpy(&port->base,&_port_device_default,sizeof(small_modbus_port_t));
 	
 	(*(uint32_t *)&(port->base.type)) = MODBUS_PORT_DEVICE;
-	port->base.open = _modbus_rtdevice_open;
-	port->base.close = _modbus_rtdevice_close;
-	port->base.read = _modbus_rtdevice_read;
-	port->base.write = _modbus_rtdevice_write;
-	port->base.flush = _modbus_rtdevice_flush;
-	port->base.wait = _modbus_rtdevice_wait;
+	port->base.open = _modbus_rtsocket_open;
+	port->base.close = _modbus_rtsocket_close;
+	port->base.read = _modbus_rtsocket_read;
+	port->base.write = _modbus_rtsocket_write;
+	port->base.flush = _modbus_rtsocket_flush;
+	port->base.wait = _modbus_rtsocket_wait;
 	
 	port->hostname = hostname;
 	port->hostport = hostport;

+ 16 - 1
src/small_modbus_port_win32.c

@@ -1,4 +1,4 @@
-/*
+/*
  * Change Logs:
  * Date           Author       Notes
  * 2021-06     		chenbin      small_modbus_port_win32.c  for win32
@@ -9,5 +9,20 @@
  */
 #if SMALL_MODBUS_WIN32
 
+#include <windows.h>
+#include <winsock2.h>
+
+/* Add this for macros that defined unix flavor */
+#if (defined(__unix__) || defined(unix)) && !defined(USG)
+#include <sys/param.h>
+#endif
+
+#ifndef _MSC_VER
+#include <stdint.h>
+#else
+#include "stdint.h"
+#endif
+
+
 #endif
 

+ 124 - 101
src/small_modbus_utils.c

@@ -8,81 +8,136 @@
 #include "stdint.h"
 #include "string.h"
 
-/* Table of CRC values for high-order byte */
-static const uint8_t table_crc_hi[] = {
-    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
-    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
-    0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
-    0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
-    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
-    0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
-    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
-    0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
-    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
-    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
-    0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
-    0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
-    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
-    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
-    0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
-    0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
-    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
-    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
-    0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
-    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
-    0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
-    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
-    0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
-    0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
-    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
-    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
-};
-
-/* Table of CRC values for low-order byte */
-static const uint8_t table_crc_lo[] = {
-    0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
-    0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
-    0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
-    0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
-    0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
-    0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
-    0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
-    0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
-    0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
-    0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
-    0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
-    0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
-    0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
-    0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
-    0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
-    0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
-    0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
-    0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
-    0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
-    0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
-    0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
-    0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
-    0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
-    0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
-    0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
-    0x43, 0x83, 0x41, 0x81, 0x80, 0x40
-};
+///* Table of CRC values for high-order byte */
+//static const uint8_t table_crc_hi[] = {
+//    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
+//    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
+//    0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
+//    0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
+//    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
+//    0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
+//    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
+//    0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
+//    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
+//    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
+//    0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
+//    0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
+//    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
+//    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
+//    0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
+//    0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
+//    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
+//    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
+//    0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
+//    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
+//    0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
+//    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
+//    0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
+//    0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
+//    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
+//    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
+//};
+
+///* Table of CRC values for low-order byte */
+//static const uint8_t table_crc_lo[] = {
+//    0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
+//    0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
+//    0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
+//    0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
+//    0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
+//    0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
+//    0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
+//    0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
+//    0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
+//    0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
+//    0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
+//    0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
+//    0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
+//    0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
+//    0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
+//    0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
+//    0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
+//    0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
+//    0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
+//    0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
+//    0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
+//    0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
+//    0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
+//    0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
+//    0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
+//    0x43, 0x83, 0x41, 0x81, 0x80, 0x40
+//};
+
+//uint16_t modbus_crc16(uint8_t *buffer, uint16_t buffer_length)
+//{
+//    uint8_t crc_hi = 0xFF; /* high CRC byte initialized */
+//    uint8_t crc_lo = 0xFF; /* low CRC byte initialized */
+//    unsigned int i; /* will index into CRC lookup */
+
+//    /* pass through message buffer */
+//    while (buffer_length--) {
+//        i = crc_hi ^ *buffer++; /* calculate the CRC  */
+//        crc_hi = crc_lo ^ table_crc_hi[i];
+//        crc_lo = table_crc_lo[i];
+//    }
+//    return (crc_hi << 8 | crc_lo);
+//}
 
 uint16_t modbus_crc16(uint8_t *buffer, uint16_t buffer_length)
 {
-    uint8_t crc_hi = 0xFF; /* high CRC byte initialized */
-    uint8_t crc_lo = 0xFF; /* low CRC byte initialized */
-    unsigned int i; /* will index into CRC lookup */
+	uint16_t CRC= 0XFFFF;
+	uint16_t CRC_count = 0;
+	uint16_t i = 0;
+	for(CRC_count=0;CRC_count< buffer_length ; CRC_count++)
+	{
+		CRC= CRC^ *(buffer+CRC_count);
+		for(i=0;i<8;i++)
+		{
+			if(CRC&1)
+			{
+				CRC>>=1;
+				CRC^=0xA001;
+			}
+			else
+			{ 
+        CRC>>=1;
+			}
+		}
+	}
+	return CRC;
+}
 
-    /* pass through message buffer */
-    while (buffer_length--) {
-        i = crc_hi ^ *buffer++; /* calculate the CRC  */
-        crc_hi = crc_lo ^ table_crc_hi[i];
-        crc_lo = table_crc_lo[i];
-    }
-    return (crc_hi << 8 | crc_lo);
+int dio_get_val(uint8_t *array,uint16_t index)
+{
+	uint8_t offset_bit = (index & 0x07); //(index%8);  //
+	uint8_t offset_arr = (index >> 0x03); //(index/8);  //
+	return (array[offset_arr] & (0x01 << offset_bit))?1:0;
 }
 
+void dio_set_val(uint8_t *array,uint16_t index,int status)
+{
+	uint8_t offset_bit = (index & 0x07); //(index%8);  //
+	uint8_t offset_arr = (index >> 0x03); //(index/8);  //
+	if(status)
+	{
+		array[offset_arr] |= (0x01 << offset_bit);
+	}else
+	{
+		array[offset_arr] &= ~(0x01 << offset_bit);
+	}
+}
+
+int aio_get_val(uint16_t *array,uint16_t index)
+{
+	return array[index];
+}
+
+void aio_set_val(uint16_t *array,uint16_t index,int status)
+{
+	array[index] = status;
+}
+
+
 int modbus_check_addr_num(uint8_t function,uint16_t address,uint16_t num)
 {
 	switch (function)
@@ -185,38 +240,6 @@ void modbus_reg_m2h(void *dest_host,void *source_modbus_reg,int reg_num)
 	}while(--reg_num);
 }
 
-
-int dio_get_val(uint8_t *array,uint16_t index)
-{
-	uint8_t offset_bit = (index & 0x07); //(index%8);  //
-	uint8_t offset_arr = (index >> 0x03); //(index/8);  //
-	return (array[offset_arr] & (0x01 << offset_bit))?1:0;
-}
-
-void dio_set_val(uint8_t *array,uint16_t index,int status)
-{
-	uint8_t offset_bit = (index & 0x07); //(index%8);  //
-	uint8_t offset_arr = (index >> 0x03); //(index/8);  //
-	if(status)
-	{
-		array[offset_arr] |= (0x01 << offset_bit);
-	}else
-	{
-		array[offset_arr] &= ~(0x01 << offset_bit);
-	}
-}
-
-int aio_get_val(uint16_t *array,uint16_t index)
-{
-	return array[index];
-}
-
-void aio_set_val(uint16_t *array,uint16_t index,int status)
-{
-	array[index] = status;
-}
-
-
 static inline uint16_t bswap_16(uint16_t x)
 {
     return (x >> 8) | (x << 8);