add more files
This commit is contained in:
@@ -8,41 +8,54 @@
|
||||
#include "chrg_north.h"
|
||||
#include "chrg_south.h"
|
||||
|
||||
#define LOG_TAG "chrg.tty"
|
||||
#define DBG_LEVEL DBG_LOG
|
||||
#include <rtdbg.h>
|
||||
|
||||
struct chrg_tty_t chrgtty[TOTAL_TTY] = {
|
||||
[IDX_TTY_RS485] = {
|
||||
.dev = RT_NULL,
|
||||
.name = DEV_NAME_RS485,
|
||||
.index = IDX_TTY_RS485,
|
||||
.baudrate = BAUD_RATE_115200,
|
||||
.rb = RT_NULL,
|
||||
},
|
||||
[IDX_TTY_LCD] = {
|
||||
.dev = RT_NULL,
|
||||
.name = DEV_NAME_LCD,
|
||||
.index = IDX_TTY_LCD,
|
||||
.baudrate = BAUD_RATE_115200,
|
||||
.rb = RT_NULL,
|
||||
},
|
||||
[IDX_TTY_NORTH] = {
|
||||
.dev = RT_NULL,
|
||||
.name = DEV_NAME_NORTH,
|
||||
.index = IDX_TTY_NORTH,
|
||||
.baudrate = BAUD_RATE_2000000,
|
||||
.rb = RT_NULL,
|
||||
},
|
||||
[IDX_TTY_SOUTH] = {
|
||||
.dev = RT_NULL,
|
||||
.name = DEV_NAME_SOUTH,
|
||||
.index = IDX_TTY_SOUTH,
|
||||
.baudrate = BAUD_RATE_2000000,
|
||||
.rb = RT_NULL,
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static rt_err_t chrg_rs485_tty_input (rt_device_t dev, rt_size_t size)
|
||||
{
|
||||
rt_err_t ret = RT_EOK;
|
||||
rt_err_t ret;
|
||||
rt_uint8_t ch;
|
||||
rt_size_t i;
|
||||
struct chrg_tty_t *pTTY = &chrgtty[IDX_TTY_RS485];
|
||||
|
||||
pTTY->msg.dev = dev;
|
||||
pTTY->msg.size = size;
|
||||
|
||||
ret = rt_mq_send(&pTTY->mq_rx, &pTTY->msg, sizeof(struct rx_msg_t));
|
||||
if (ret == -RT_EFULL) {
|
||||
rt_kprintf("msg queue is full!\r\n");
|
||||
for (i = 0; i < size; i++) {
|
||||
if (rt_device_read(dev, 0, &ch, 1)) {
|
||||
rt_ringbuffer_put_force(pTTY->rb, &ch, 1);
|
||||
ret = rt_sem_release(&pTTY->sem_rx);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -50,15 +63,16 @@ static rt_err_t chrg_rs485_tty_input (rt_device_t dev, rt_size_t size)
|
||||
|
||||
static rt_err_t chrg_lcd_tty_input (rt_device_t dev, rt_size_t size)
|
||||
{
|
||||
rt_err_t ret = RT_EOK;
|
||||
rt_err_t ret;
|
||||
rt_uint8_t ch;
|
||||
rt_size_t i;
|
||||
struct chrg_tty_t *pTTY = &chrgtty[IDX_TTY_LCD];
|
||||
|
||||
pTTY->msg.dev = dev;
|
||||
pTTY->msg.size = size;
|
||||
|
||||
ret = rt_mq_send(&pTTY->mq_rx, &pTTY->msg, sizeof(struct rx_msg_t));
|
||||
if (ret == -RT_EFULL) {
|
||||
rt_kprintf("msg queue is full!\r\n");
|
||||
for (i = 0; i < size; i++) {
|
||||
if (rt_device_read(dev, 0, &ch, 1)) {
|
||||
rt_ringbuffer_put_force(pTTY->rb, &ch, 1);
|
||||
ret = rt_sem_release(&pTTY->sem_rx);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -66,15 +80,16 @@ static rt_err_t chrg_lcd_tty_input (rt_device_t dev, rt_size_t size)
|
||||
|
||||
static rt_err_t chrg_north_tty_input (rt_device_t dev, rt_size_t size)
|
||||
{
|
||||
rt_err_t ret = RT_EOK;
|
||||
rt_err_t ret;
|
||||
rt_uint8_t ch;
|
||||
rt_size_t i;
|
||||
struct chrg_tty_t *pTTY = &chrgtty[IDX_TTY_NORTH];
|
||||
|
||||
pTTY->msg.dev = dev;
|
||||
pTTY->msg.size = size;
|
||||
|
||||
ret = rt_mq_send(&pTTY->mq_rx, &pTTY->msg, sizeof(struct rx_msg_t));
|
||||
if (ret == -RT_EFULL) {
|
||||
rt_kprintf("msg queue is full!\r\n");
|
||||
for (i = 0; i < size; i++) {
|
||||
if (rt_device_read(dev, 0, &ch, 1)) {
|
||||
rt_ringbuffer_put_force(pTTY->rb, &ch, 1);
|
||||
ret = rt_sem_release(&pTTY->sem_rx);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -82,61 +97,31 @@ static rt_err_t chrg_north_tty_input (rt_device_t dev, rt_size_t size)
|
||||
|
||||
static rt_err_t chrg_south_tty_input (rt_device_t dev, rt_size_t size)
|
||||
{
|
||||
rt_err_t ret = RT_EOK;
|
||||
rt_err_t ret;
|
||||
rt_uint8_t ch;
|
||||
rt_size_t i;
|
||||
struct chrg_tty_t *pTTY = &chrgtty[IDX_TTY_SOUTH];
|
||||
|
||||
pTTY->msg.dev = dev;
|
||||
pTTY->msg.size = size;
|
||||
|
||||
ret = rt_mq_send(&pTTY->mq_rx, &pTTY->msg, sizeof(struct rx_msg_t));
|
||||
if (ret == -RT_EFULL) {
|
||||
rt_kprintf("msg queue is full!\r\n");
|
||||
for (i = 0; i < size; i++) {
|
||||
if (rt_device_read(dev, 0, &ch, 1)) {
|
||||
rt_ringbuffer_put_force(pTTY->rb, &ch, 1);
|
||||
ret = rt_sem_release(&pTTY->sem_rx);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void chrg_tty_recv_entry (void *data)
|
||||
rt_err_t chrg_tty_open (struct chrg_tty_t *pTTY)
|
||||
{
|
||||
struct chrg_tty_t *pTTY = (struct chrg_tty_t *)data;
|
||||
|
||||
rt_err_t ret = RT_EOK;
|
||||
rt_int32_t rx_len = 0;
|
||||
rt_uint8_t rx_raw[RT_SERIAL_RB_BUFSZ];
|
||||
|
||||
while (1) {
|
||||
rt_memset(&pTTY->msg, 0, sizeof(struct rx_msg_t));
|
||||
|
||||
ret = rt_mq_recv(&pTTY->mq_rx, &pTTY->msg, sizeof(struct rx_msg_t), RT_WAITING_FOREVER);
|
||||
if (ret == RT_EOK) {
|
||||
rt_memset(rx_raw, 0, RT_SERIAL_RB_BUFSZ);
|
||||
rx_len = rt_device_read(pTTY->msg.dev, 0, rx_raw, pTTY->msg.size);
|
||||
if (rx_len > 0) {
|
||||
switch (pTTY->index) {
|
||||
case IDX_TTY_NORTH: {
|
||||
struct chrg_north_t *pNOR = &chrgnor;
|
||||
rt_memset(&pNOR->buf, 0, sizeof(pNOR->buf));
|
||||
strcpy((char *)pNOR->buf, "send mb msg");
|
||||
rt_mb_send(&pNOR->mb, (rt_uint32_t)&pNOR->buf);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if (RT_NULL == pTTY) {
|
||||
return RT_EEMPTY;
|
||||
}
|
||||
}
|
||||
|
||||
rt_err_t chrg_tty_thread (struct chrg_tty_t *pTTY)
|
||||
{
|
||||
rt_err_t ret = RT_EOK;
|
||||
rt_thread_t tid_tty;
|
||||
|
||||
struct serial_configure cfg = {
|
||||
.baud_rate = BAUD_RATE_115200,
|
||||
.baud_rate = pTTY->baudrate,
|
||||
.data_bits = DATA_BITS_8,
|
||||
.stop_bits = STOP_BITS_1,
|
||||
.parity = PARITY_NONE,
|
||||
@@ -146,23 +131,21 @@ rt_err_t chrg_tty_thread (struct chrg_tty_t *pTTY)
|
||||
.flowcontrol = RT_SERIAL_FLOWCONTROL_NONE,
|
||||
};
|
||||
|
||||
pTTY->dev = rt_device_find(pTTY->name);
|
||||
if (RT_NULL == pTTY->dev) {
|
||||
rt_kprintf("dev is null.\r\n");
|
||||
LOG_E("dev '%s' not found.", pTTY->name);
|
||||
return RT_ERROR;
|
||||
}
|
||||
|
||||
rt_mq_init(&pTTY->mq_rx, pTTY->name, pTTY->pool_msg,
|
||||
sizeof(struct rx_msg_t), sizeof(pTTY->pool_msg), RT_IPC_FLAG_FIFO);
|
||||
|
||||
ret = rt_device_open(pTTY->dev, RT_DEVICE_OFLAG_RDWR|RT_DEVICE_FLAG_INT_RX);
|
||||
if (ret != RT_EOK) {
|
||||
rt_kprintf("open '%s' failed.\r\n", pTTY->name);
|
||||
LOG_E("open '%s' failed.", pTTY->name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = rt_device_control(pTTY->dev, RT_DEVICE_CTRL_CONFIG, &cfg);
|
||||
if (ret != RT_EOK) {
|
||||
rt_kprintf("control '%s' failed.\r\n", pTTY->name);
|
||||
LOG_E("control '%s' failed.", pTTY->name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -183,14 +166,16 @@ rt_err_t chrg_tty_thread (struct chrg_tty_t *pTTY)
|
||||
return RT_ERROR;
|
||||
}
|
||||
|
||||
tid_tty = rt_thread_create(pTTY->name, chrg_tty_recv_entry,
|
||||
pTTY, 4096, RT_MAIN_THREAD_PRIORITY+2, 20);
|
||||
ret = rt_sem_init(&pTTY->sem_rx, pTTY->name, 0, RT_IPC_FLAG_FIFO);
|
||||
if (ret != RT_EOK) {
|
||||
LOG_E("sem init '%s' failed.", pTTY->name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (tid_tty != RT_NULL) {
|
||||
rt_thread_startup(tid_tty);
|
||||
} else {
|
||||
rt_kprintf("create thread '%s' failed.\r\n", pTTY->name);
|
||||
return -RT_ERROR;
|
||||
pTTY->rb = rt_ringbuffer_create(64);
|
||||
if (RT_NULL == pTTY->rb) {
|
||||
rt_kprintf("create rb failed.\r\n");
|
||||
return RT_ERROR;
|
||||
}
|
||||
|
||||
return RT_EOK;
|
||||
@@ -207,14 +192,7 @@ static int chrg_tty_init (void)
|
||||
}
|
||||
|
||||
pTTY = &chrgtty[i];
|
||||
|
||||
pTTY->dev = rt_device_find(pTTY->name);
|
||||
if (RT_NULL == pTTY->dev) {
|
||||
rt_kprintf("dev '%s' not found.\r\n", pTTY->name);
|
||||
return RT_ERROR;
|
||||
}
|
||||
|
||||
chrg_tty_thread(pTTY);
|
||||
chrg_tty_open(pTTY);
|
||||
}
|
||||
|
||||
return RT_EOK;
|
||||
|
||||
Reference in New Issue
Block a user