--- a/LPCBus.py Wed May 16 10:41:17 2018 +0200
+++ b/LPCBus.py Fri May 18 11:06:51 2018 +0200
@@ -24,7 +24,8 @@
for section in ["decl", "init", "retrieve", "publish", "cleanup"]}
-LPCBusLDFLAGS = { "MC9:On Board" : "-lmbrtu" }
+# This is in case some bus has some special LDFLAGS +LPCBusLDFLAGS = {} # ex: { "MC9:On Board" : "-lonboard" } from plcopen.structures import LOCATIONDATATYPES
--- a/LPCBus/MC9_OnBoard_cleanup.c Wed May 16 10:41:17 2018 +0200
+++ b/LPCBus/MC9_OnBoard_cleanup.c Fri May 18 11:06:51 2018 +0200
@@ -1,11 +1,3 @@
-rt_task_delete(&RTU_UART_task);
-rt_task_join(&RTU_UART_task);
-rt_task_delete(&RTU_task);
-rt_task_join(&RTU_task);
-rt_mutex_delete(&RTU_BuffMutex);
-gpio_close(RTU_GPIO_dev);
--- a/LPCBus/MC9_OnBoard_decl.c Wed May 16 10:41:17 2018 +0200
+++ b/LPCBus/MC9_OnBoard_decl.c Fri May 18 11:06:51 2018 +0200
@@ -1,10 +1,5 @@
-#include <alchemy/task.h>
-#include <alchemy/mutex.h>
-#include <alchemy/timer.h>
/*------------------------- GPIO -------------------------------------*/
@@ -21,7 +16,6 @@
int pin_file; /* pin file for 2.6.29 interface*/
-struct gpio_device *RTU_GPIO_dev;
struct gpio_device *RUN_LED_dev;
struct gpio_device *CAN0_EN_dev;
@@ -153,204 +147,16 @@
-#define REG_DISCRETE_START 0 /**< Input discrete start address */
-#define REG_DISCRETE_NREGS 1024 /**< 1024 bits (type: single bit, Read only) */
-#define REG_COILS_START 0 /**< Coils start address */
-#define REG_COILS_NREGS 1024 /**< 1024 bits (type: single bit, Read/Write) */
-#define REG_INPUT_START 0 /**< Input registers start address */
-#define REG_INPUT_NREGS 1024 /**< 1024 words (type: 16-bit word, Read only) */
-#define REG_HOLDING_START 0 /**< Holding registers start address */
-#define REG_HOLDING_NREGS 1024 /**< 1024 words (type: 16-bit word, Read/Write) */
-#define MAX_MOD_RTU_DEVICES 16
-typedef struct _mbRtuRdHoldingRegs {
- unsigned short startAddr;
-typedef struct _mbRtuRdDiscInputs {
- unsigned short startAddr;
-// unsigned short* buffer;
-typedef struct _mbRtuRdCoils {
- unsigned short startAddr;
-typedef struct _mbRtuWrSingleCoil {
- unsigned short startAddr;
-typedef struct _mbRtuWrCoils {
- unsigned short startAddr;
-typedef struct _mbRtuRdInputRegs {
- unsigned short startAddr;
-typedef struct _mbRtuWrSingleReg {
- unsigned short startAddr;
-typedef struct _mbRtuWrMultiRegs {
- unsigned short startAddr;
-typedef struct _mbRtuSlaveConfig {
- unsigned char slaveAddr;
- mbRtuRdDiscInputs rdDiscInputs;
- mbRtuWrSingleCoil wrSingleCoil;
- mbRtuRdInputRegs rdInputRegs;
- mbRtuRdHoldingRegs rdHoldingRegs;
- mbRtuWrSingleReg wrSingleReg;
- mbRtuWrMultiRegs wrMultiRegs;
+/* TODO : DELETE !... but keep this until composer stops sending code snippets for mbrtu */ MB_PAR_ODD = 0, /**< ODD parity. */
MB_PAR_EVEN = 1, /**< Even parity. */
MB_PAR_NONE = 2 /**< No parity. */
-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 */
-short usRegHoldingValue[REG_HOLDING_NREGS]; /**< Array of Modbus holding registers */
-char ubCoilValue[REG_COILS_NREGS/8]; /**< Array of Modbus coils (8 coils per byte) */
-char ubRegDiscreteValue[REG_DISCRETE_NREGS/8]; /**< Array of Modbus discrete inputs (8 inputs per byte) */
unsigned long mbBaudRate = 115200; /**< Modbus baud-rate setting: 9600, 19200, 38400, 57600, 115200 */
eMBSerialParity mbParity = MB_PAR_NONE; /**< Modbus parity setting: odd, even, none */
-/* prototypes for functions defined in shared library */
-int mbmrtu_init(unsigned long ulBaudRate, eMBSerialParity eParity);
-void mbmrtu_BusUpdate(int);
-int mbmrtu_cleanup(void);
-static RT_TASK RTU_UART_task;
-static RT_TASK RTU_task;
-static RT_MUTEX RTU_BuffMutex;
-void LockMBRTUBuffer(void){
- while ( rt_mutex_acquire(&RTU_BuffMutex, TM_INFINITE ) == -EINTR);
-void UnLockMBRTUBuffer(void){
- rt_mutex_release(&RTU_BuffMutex);
- void*(*RTU_UART_task_proc)(void *);
-} MB_xeno_task_adaptor_t;
-static MB_xeno_task_adaptor_t MB_xeno_task_adaptor_data;
-void MB_xeno_task_adaptor(void* param)
- MB_xeno_task_adaptor_t *d = param;
- d->RTU_UART_task_proc(d->xSerHdl);
-int CreateMBRTUSerialTask(
- void*(*RTU_UART_task_proc)(void *),
- MB_xeno_task_adaptor_data.RTU_UART_task_proc = RTU_UART_task_proc;
- MB_xeno_task_adaptor_data.xSerHdl = param;
- if((err = rt_task_start(&RTU_UART_task,
- &MB_xeno_task_adaptor_data)) != 0)
-#define nsTOus(ns) (ns/1000L)
-#define nsTOms(ns) (ns/1000000L)
-#define INVALID_RTU_ADDR 255 /* Used when no Modbus RTU slave device is present */
-static void mbmrtu_BusUpdate_proc(void *param){
- while (rt_task_sleep_until(TM_INFINITE) == -EINTR){
- for(i=0;i<MAX_MOD_RTU_DEVICES;i++)
- if(mbRtuSlaveDev[i].slaveAddr != INVALID_RTU_ADDR)
- if(mbRtuDevTim[i].status != TIM_DISABLED)
- actTime = (uint64_t)nsTOms(rt_timer_read());
- mbRtuDevTim[i].actValue += actTime - mbRtuDevTim[i].oldTime;
- mbRtuDevTim[i].oldTime = actTime;
- if(mbRtuDevTim[i].actValue < mbRtuDevTim[i].toValue)
- mbRtuDevTim[i].status = TIM_EN_RUNNING;
- mbRtuDevTim[i].status = TIM_EN_EXPIRED;
- /* Check if communication depends on timer - if it does, check timer status */
- if((mbRtuDevTim[i].status == TIM_DISABLED) || (mbRtuDevTim[i].status == TIM_EN_EXPIRED))
- /* If timer is enabled, reset it's value, otherwise keep it disabled */
- if(mbRtuDevTim[i].status != TIM_DISABLED)
- mbRtuDevTim[i].actValue = 0; /* Reset timer value */
- mbRtuDevTim[i].status = TIM_EN_RUNNING;
- else /* Keep timer disabled */
- mbRtuDevTim[i].status = TIM_DISABLED;
-void TransmitMode(void){
- gpio_set_pin_value(RTU_GPIO_dev, 1);
-void RecieveMode(int us){
- while(rt_task_sleep_until(
- now + rt_timer_ns2ticks(1000LL*us)
- gpio_set_pin_value(RTU_GPIO_dev, 0);
#define MAX_ONBOARD_DEVICES 2
#define ONBOARD_READ_BUFSIZE 30
--- a/LPCBus/MC9_OnBoard_init.c Wed May 16 10:41:17 2018 +0200
+++ b/LPCBus/MC9_OnBoard_init.c Fri May 18 11:06:51 2018 +0200
@@ -2,12 +2,6 @@
-bzero(&usRegInputValue , sizeof(usRegInputValue ));
-bzero(&usRegHoldingValue , sizeof(usRegHoldingValue ));
-bzero(&ubCoilValue , sizeof(ubCoilValue ));
-bzero(&ubRegDiscreteValue, sizeof(ubRegDiscreteValue));
-bzero(&mbRtuSlaveDev , sizeof(mbRtuSlaveDev ));
-bzero(&mbRtuDevTim , sizeof(mbRtuDevTim ));
bzero(&onBoardReadBuf , sizeof(onBoardReadBuf_t ));
bzero(&onBoardWriteBuf , sizeof(onBoardWriteBuf_t ));
@@ -28,25 +22,6 @@
gpio_set_pin_value(CAN1_EN_dev, 0);
#endif /* CAN1_EN_GPIO_0_17 */
-RTU_GPIO_dev = gpio_open(111);
- fprintf(stderr, "Error while initializing RTU GPIO.\n");
-if((err = rt_mutex_create (&RTU_BuffMutex, "RTU_BuffMutex")))
-if((err = rt_task_create(&RTU_UART_task, "RTU_UART_task", 0, 50, T_JOINABLE)))
-mbmrtu_init(mbBaudRate, mbParity);
-if((err = rt_task_create(&RTU_task, "RTU_task", 0, 50, T_JOINABLE)))
-if(rt_task_start(&RTU_task, mbmrtu_BusUpdate_proc, NULL))
for(i=0; i<MAX_ONBOARD_DEVICES; i++) {
--- a/LPCBus/MC9_OnBoard_publish.c Wed May 16 10:41:17 2018 +0200
+++ b/LPCBus/MC9_OnBoard_publish.c Fri May 18 11:06:51 2018 +0200
@@ -1,11 +1,5 @@
-rt_task_unblock(&RTU_task);
ioctl(onboardbusfd, RTSMT_ONBOARD_RTIOC_WRITE, &onBoardWriteBuf);
--- a/LPCBus/MC9_OnBoard_retrieve.c Wed May 16 10:41:17 2018 +0200
+++ b/LPCBus/MC9_OnBoard_retrieve.c Fri May 18 11:06:51 2018 +0200
@@ -1,5 +1,3 @@
ioctl(onboardbusfd, RTSMT_ONBOARD_RTIOC_READ, &onBoardReadBuf);