--- a/LPCBus/MC9_Devices_cleanup.c Mon May 07 14:02:52 2018 +0200
+++ b/LPCBus/MC9_Devices_cleanup.c Wed May 16 10:41:17 2018 +0200
@@ -1,6 +1,8 @@
+rt_task_resume(&UART_task); rt_task_delete(&UART_task);
rt_task_join(&UART_task);
-gpio_close(RS485_GPIO_dev);
rt_mutex_delete(&UART_WriteMutex);
rt_mutex_delete(&UART_ReadMutex);
--- a/LPCBus/MC9_Devices_decl.c Mon May 07 14:02:52 2018 +0200
+++ b/LPCBus/MC9_Devices_decl.c Wed May 16 10:41:17 2018 +0200
@@ -20,146 +20,6 @@
-/*------------------------- GPIO -------------------------------------*/
-/* from armadeus/target/packages/as_devices/c/as_gpio* */
-# define ERROR(fmt, ...) printf(fmt, ##__VA_ARGS__)
-//# define ERROR(fmt, ...) /*fmt, ##__VA_ARGS__*/
- int pin_file; /* pin file for 2.6.29 interface*/
-struct gpio_device *RS485_GPIO_dev;
-static int write_file_bool(int fd, int value)
- ret = write(fd, value?"1":"0", 1);
- ERROR("write error\n");
- if (lseek(fd, 0, SEEK_SET) < 0) {
- ERROR("lseek error\n");
-static struct gpio_device *gpio_open(int aGpioNum)
- struct gpio_device *dev;
- export_file = open("/sys/class/gpio/export", O_WRONLY);
- ERROR("Can't open /sys/class/gpio/export\nBe sure that gpiolib is under your kernel\n");
- snprintf(buf, BUFF_SIZE, "%%d", aGpioNum);
- retval = write(export_file, buf, strlen(buf));
- ERROR("/sys/class/gpio/export can't be written\n");
- snprintf(buf, BUFF_SIZE, "/sys/class/gpio/gpio%%d/direction", aGpioNum);
- gpio_dir_fd = open(buf, O_WRONLY);
- ERROR("Can't open gpio%%d direction\n", aGpioNum);
- ret = write(gpio_dir_fd, "out", 3);
- ERROR("Error writing direction\n");
- snprintf(buf, BUFF_SIZE, "/sys/class/gpio/gpio%%d/value", aGpioNum);
- pin_file = open(buf, O_RDWR);
- ERROR("Can't export gpio number %%d\n", aGpioNum);
- dev = malloc(sizeof(struct gpio_device));
- ERROR("Can't allocate gpio_device structure\n");
- dev->port_num = aGpioNum;
- dev->pin_file = pin_file;
-static int gpio_close(struct gpio_device *aDev)
- ERROR("device is NULL\n");
- unexport_file = open("/sys/class/gpio/unexport", O_WRONLY);
- if (unexport_file < 0) {
- ERROR("Can't open /sys/class/gpio/unexport\nBe sure that gpiolib is under your kernel\n");
- snprintf(buf, BUFF_SIZE, "%%d", aDev->port_num);
- retval = write(unexport_file, buf, strlen(buf));
- ERROR("/sys/class/gpio/unexport can't be written\n");
-static int gpio_set_pin_value(struct gpio_device *aDev, int aValue)
- int pin_file = aDev->pin_file;
- retval = write_file_bool(pin_file, aValue);
- ERROR("Can't write value\n");
-#define TransmitMode() gpio_set_pin_value(RS485_GPIO_dev, 1)
-#define RecieveMode() gpio_set_pin_value(RS485_GPIO_dev, 0)
/*--------------------------- Serial Port handling ---------------------------*/
int openserial(char *devicename, unsigned long baudrate)
@@ -210,8 +70,6 @@
@@ -270,6 +128,7 @@
static RT_TASK UART_task;
static RT_MUTEX UART_WriteMutex;
static RT_MUTEX UART_ReadMutex;
+static int UART_task_active; void UART_task_proc(void *arg)
@@ -278,7 +137,11 @@
static uint64_t lastCommTime=0;
- while (rt_task_sleep_until(TM_INFINITE) == -EINTR){
+ while (UART_task_active){ // Communicate only with initialised UART devices
if(uartPortDevices[i] != NULL)
@@ -443,7 +306,6 @@
@@ -455,21 +317,10 @@
tcflush(UART_fd, TCIOFLUSH);
if(write(UART_fd, tmp, uartBufSize) != uartBufSize){
- /* Sleep until transmission completes + 0.5ms safety */
- while(rt_task_sleep_until(
- now + rt_timer_ns2ticks(
- 1000000000LL * uartBufSize * 10 / uartBaudrate
- /* Turn to listen mode*/
FD_ZERO(&set); /* clear the set */
FD_SET(UART_fd, &set); /* add our file descriptor to the set */
@@ -495,9 +346,6 @@
- /* Turn to transmit mode*/
/* Copy received buffer */
if((count == uartBufSize) && (tmp[uartBufSize-TAIL_LEN] == address)){
if(ChecksumValid((unsigned char*)tmp+1, uartBufSize)){
--- a/LPCBus/MC9_Devices_init.c Mon May 07 14:02:52 2018 +0200
+++ b/LPCBus/MC9_Devices_init.c Wed May 16 10:41:17 2018 +0200
@@ -1,6 +1,5 @@
char *serialdev = "/dev/ttyAPP1";
-int RS485_GPIO_NUM = 102;
uartDevWriteBuf_plc_state = EMPTY;
uartDevReadBuf_plc_state = EMPTY;
@@ -27,12 +26,6 @@
if((err = rt_mutex_create (&UART_ReadMutex, "UART_ReadMutex")))
-RS485_GPIO_dev = gpio_open(RS485_GPIO_NUM);
- fprintf(stderr, "Error while initializing RS485 GPIO.\n");
UART_fd = openserial(serialdev, uartBaudrate); /* uartBaudrate is initialized from Composer */
fprintf(stderr, "Error while initializing %%s.\n", serialdev);
@@ -44,7 +37,9 @@
InitUartPortDevices_shortBuffer();
-if((err = rt_task_create(&UART_task, "UART_task", 0, 50, T_JOINABLE)))
+if((err = rt_task_create(&UART_task, "UART_task", 0, 0, T_JOINABLE))) if((err = rt_task_start(&UART_task, &UART_task_proc, NULL)))
--- a/LPCBus/MC9_Devices_publish.c Mon May 07 14:02:52 2018 +0200
+++ b/LPCBus/MC9_Devices_publish.c Wed May 16 10:41:17 2018 +0200
@@ -12,5 +12,5 @@
uartDevWriteBuf_plc_state = FULL;
- rt_task_unblock(&UART_task);
+ rt_task_resume(&UART_task);