lpcmanager

c506994178b0
Parents 8172b739147a
Children ec1f5a69bbf5
Added support for onboard I2C periphery on GOT
--- a/LPCBus/MC9_OnBoard_cleanup.c Tue Apr 11 13:03:50 2017 +0200
+++ b/LPCBus/MC9_OnBoard_cleanup.c Wed Apr 19 10:01:19 2017 +0200
@@ -5,6 +5,10 @@
rt_task_join(&RTU_task);
rt_mutex_delete(&RTU_BuffMutex);
gpio_close(RTU_GPIO_dev);
+#ifdef GOT
+if(onboardbusfd!=-1)
+ rt_dev_close(onboardbusfd);
+#endif
#ifdef MC9
gpio_set_pin_value(CAN0_EN_dev, 1);
gpio_close(CAN0_EN_dev);
--- a/LPCBus/MC9_OnBoard_decl.c Tue Apr 11 13:03:50 2017 +0200
+++ b/LPCBus/MC9_OnBoard_decl.c Wed Apr 19 10:01:19 2017 +0200
@@ -4,7 +4,7 @@
#include <native/timer.h>
#include <unistd.h>
#include <fcntl.h>
-
+#include <rtdm/rtdm.h>
#include "beremiz.h"
/*------------------------- GPIO -------------------------------------*/
@@ -242,8 +242,6 @@
MB_PAR_NONE = 2 /**< No parity. */
} eMBSerialParity;
-#define MAX_ONBOARD_DEVICES 2
-unsigned char onBoardDev[MAX_ONBOARD_DEVICES][2]; /**< Arrays containing information about enabled on-board devices (initialized by Composer) */
mbRtuSlaveConfig mbRtuSlaveDev[MAX_MOD_RTU_DEVICES];/**< Tables containing information about connected Modbus network devices (initialized by Composer) */
commTimer mbRtuDevTim[MAX_MOD_RTU_DEVICES]; /**< Table of timers (one for each position) */
short usRegInputValue[REG_INPUT_NREGS]; /**< Array of Modbus input registers */
@@ -353,4 +351,28 @@
gpio_set_pin_value(RTU_GPIO_dev, 0);
}
+#ifdef GOT
+#define MAX_ONBOARD_DEVICES 2
+#define ONBOARD_READ_BUFSIZE 30
+#define ONBOARD_WRITE_BUFSIZE 30
+typedef char onBoardReadBuf_t[MAX_ONBOARD_DEVICES][ONBOARD_READ_BUFSIZE];
+typedef char onBoardWriteBuf_t[MAX_ONBOARD_DEVICES][ONBOARD_WRITE_BUFSIZE];
+typedef char onBoardDev_t[MAX_ONBOARD_DEVICES][2];
+
+typedef struct {
+ onBoardDev_t onBoardDev;
+ unsigned long long common_ticktime__;
+} onBoardBusInit_t;
+
+#define RTIOC_TYPE_SMT_ONBOARD RTDM_CLASS_EXPERIMENTAL
+#define RTSMT_ONBOARD_RTIOC_INIT _IOR(RTIOC_TYPE_SMT_ONBOARD, 0x00, onBoardBusInit_t)
+#define RTSMT_ONBOARD_RTIOC_READ _IOR(RTIOC_TYPE_SMT_ONBOARD, 0x01, onBoardReadBuf_t)
+#define RTSMT_ONBOARD_RTIOC_WRITE _IOR(RTIOC_TYPE_SMT_ONBOARD, 0x02, onBoardWriteBuf_t)
+
+static onBoardReadBuf_t onBoardReadBuf;
+static onBoardWriteBuf_t onBoardWriteBuf;
+static onBoardBusInit_t onBoardBusInit;
+
+static int onboardbusfd = -1;
+#endif /* GOT */
--- a/LPCBus/MC9_OnBoard_init.c Tue Apr 11 13:03:50 2017 +0200
+++ b/LPCBus/MC9_OnBoard_init.c Wed Apr 19 10:01:19 2017 +0200
@@ -1,12 +1,21 @@
+#define ONBOARDDEVFILENAME "onBoard"
+
int err;
-bzero(&onBoardDev , sizeof(onBoardDev ));
bzero(&usRegInputValue , sizeof(usRegInputValue ));
bzero(&usRegHoldingValue , sizeof(usRegHoldingValue ));
bzero(&ubCoilValue , sizeof(ubCoilValue ));
bzero(&ubRegDiscreteValue, sizeof(ubRegDiscreteValue));
bzero(&mbRtuSlaveDev , sizeof(mbRtuSlaveDev ));
bzero(&mbRtuDevTim , sizeof(mbRtuDevTim ));
+#ifdef GOT
+bzero(&onBoardReadBuf , sizeof(onBoardReadBuf_t ));
+bzero(&onBoardWriteBuf , sizeof(onBoardWriteBuf_t ));
+bzero(&onBoardBusInit , sizeof(onBoardBusInit_t ));
+
+onBoardBusInit.common_ticktime__ = common_ticktime__;
+#define onBoardDev (onBoardBusInit.onBoardDev)
+#endif /* GOT */
%(init_code)s
@@ -36,6 +45,31 @@
if(rt_task_start(&RTU_task, mbmrtu_BusUpdate_proc, NULL))
return err;
+#ifdef GOT
+unsigned char i;
+for(i=0; i<MAX_ONBOARD_DEVICES; i++) {
+ switch(onBoardDev[i][1]) {
+ case 1:
+ /* OnBoard I2C bus */
+ onboardbusfd = rt_dev_open(ONBOARDDEVFILENAME, 0);
+ if(onboardbusfd < 0) {
+ printf("can't open %%s rtdm device, %%s\n", ONBOARDDEVFILENAME,
+ strerror(-onboardbusfd));
+ return onboardbusfd;
+ }
+ err = rt_dev_ioctl(onboardbusfd, RTSMT_ONBOARD_RTIOC_INIT, &onBoardBusInit);
+ if(err) {
+ printf("error while RTSMT_ONBOARD_RTIOC_INIT, %%s\n", strerror(-err));
+ rt_dev_close(onboardbusfd);
+ return err;
+ }
+ break;
+ default:
+ break;
+ }
+}
+#endif /* GOT */
+
#if defined MC9
RUN_LED_dev = gpio_open(45);
#elif defined GOT
--- a/LPCBus/MC9_OnBoard_publish.c Tue Apr 11 13:03:50 2017 +0200
+++ b/LPCBus/MC9_OnBoard_publish.c Wed Apr 19 10:01:19 2017 +0200
@@ -4,4 +4,9 @@
UnLockMBRTUBuffer();
/* wakeup task */
-rt_task_unblock(&RTU_task);
+rt_task_unblock(&RTU_task);
+
+#ifdef GOT
+if(onboardbusfd!=-1)
+ rt_dev_ioctl(onboardbusfd, RTSMT_ONBOARD_RTIOC_WRITE, &onBoardWriteBuf);
+#endif
--- a/LPCBus/MC9_OnBoard_retrieve.c Tue Apr 11 13:03:50 2017 +0200
+++ b/LPCBus/MC9_OnBoard_retrieve.c Wed Apr 19 10:01:19 2017 +0200
@@ -1,4 +1,8 @@
LockMBRTUBuffer();
+#ifdef GOT
+if(onboardbusfd!=-1)
+ rt_dev_ioctl(onboardbusfd, RTSMT_ONBOARD_RTIOC_READ, &onBoardReadBuf);
+#endif
+
%(retrieve_code)s
-