support software-defined ethercat

This commit is contained in:
Forsworns
2022-02-28 10:27:30 +08:00
parent 287cd1bd89
commit 392591e50d
14 changed files with 889 additions and 22 deletions
+4
View File
@@ -258,6 +258,10 @@ KERNELPATHS += -I$(KERNEL_ROOT)/../../APP_Framework/Framework/connection #
KERNELPATHS += -I$(KERNEL_ROOT)/../../APP_Framework/Framework/connection/zigbee #
endif
ifeq ($(CONFIG_ADAPTER_HFA21_ETHERCAT), y)
KERNELPATHS += -I$(KERNEL_ROOT)/../../APP_Framework/Framework/connection/ethercat #
endif
ifeq ($(CONFIG_SUPPORT_KNOWING_FRAMEWORK), y)
KERNELPATHS += -I$(KERNEL_ROOT)/../../APP_Framework/Framework/knowing #
KERNELPATHS += -I$(KERNEL_ROOT)/../../APP_Framework/Framework/knowing/tensorflow-lite/tensorflow-lite-for-mcu/source #
+10 -20
View File
@@ -123,41 +123,30 @@ static inline int SerialDevIntRead(struct SerialHardwareDevice *serial_dev, stru
NULL_PARAM_CHECK(serial_dev);
NULL_PARAM_CHECK(read_param);
int char_num = 0;
struct SerialHwDevDone *hwdev_done = serial_dev->hwdev_done;
struct SerialCfgParam *serial_cfg = (struct SerialCfgParam *)serial_dev->private_data;
uint8 *read_data = (uint8 *)read_param->buffer;
x_size_t read_length = read_param->size;
int start_pointer, end_pointer;
int i;
while (read_length)
{
uint8 get_char;
x_base lock;
start_pointer = serial_dev->serial_fifo.serial_rx->serial_recv_num;
end_pointer = serial_dev->serial_fifo.serial_rx->serial_send_num;
lock = CriticalAreaLock();
if (start_pointer == end_pointer) {
if (serial_dev->serial_fifo.serial_rx->serial_recv_num == serial_dev->serial_fifo.serial_rx->serial_send_num) {
if (RET_FALSE == serial_dev->serial_fifo.serial_rx->serial_rx_full) {
CriticalAreaUnLock(lock);
break;
}
}
/* Read all the chars from the serial_rx_buffer */
while (start_pointer != end_pointer)
{
read_data[char_num] = serial_dev->serial_fifo.serial_rx->serial_rx_buffer[start_pointer];
start_pointer += 1;
if (start_pointer >= serial_cfg->data_cfg.serial_buffer_size) {
start_pointer = 0;
}
char_num = char_num + 1;
get_char = serial_dev->serial_fifo.serial_rx->serial_rx_buffer[serial_dev->serial_fifo.serial_rx->serial_recv_num];
serial_dev->serial_fifo.serial_rx->serial_recv_num += 1;
if (serial_dev->serial_fifo.serial_rx->serial_recv_num >= serial_cfg->data_cfg.serial_buffer_size) {
serial_dev->serial_fifo.serial_rx->serial_recv_num = 0;
}
read_data[char_num]='\0';
if (RET_TRUE == serial_dev->serial_fifo.serial_rx->serial_rx_full) {
serial_dev->serial_fifo.serial_rx->serial_rx_full = RET_FALSE;
@@ -165,9 +154,10 @@ static inline int SerialDevIntRead(struct SerialHardwareDevice *serial_dev, stru
CriticalAreaUnLock(lock);
*read_data = get_char;
read_data++;
read_length--;
read_param->read_length += char_num;
serial_dev->serial_fifo.serial_rx->serial_recv_num = start_pointer;
read_param->read_length++;
}
return EOK;