gateway_mcu/CH32V303-FreeRTOS/App/application/Host/Src/hostQueueUart.c

417 lines
13 KiB
C
Raw Permalink Normal View History

#include "hostQueueUart.h"
#include "hostBusIdleDetection.h"
#include "FM_GPIO.h"
#include "semphr.h"
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>Ϣ<EFBFBD>Ĵ<EFBFBD>С */
#define QUEUE_SIZE 4
/* 485<38><35><EFBFBD>еij<D0B5><C4B3><EFBFBD> */
#define rs485QueueLength 5
#define mcuUartQueueLength 10
#define loraQueueLength 5
#define su806QueueLength 10
/* <20><><EFBFBD><EFBFBD>ͨѶ<CDA8>ڵĶ<DAB5><C4B6><EFBFBD> */
QueueHandle_t J0_485_Queue = NULL;
QueueHandle_t J2_485_Queue = NULL;
QueueHandle_t J4_485_Queue = NULL;
QueueHandle_t J6_485_Queue = NULL;
QueueHandle_t lora_uart_Queue = NULL;
QueueHandle_t su806_uart_Queue = NULL;
QueueHandle_t hostMcu_uart_Queue = NULL;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD> */
static SemaphoreHandle_t J0_FreeMemorySemaphore = NULL;
static SemaphoreHandle_t J2_FreeMemorySemaphore = NULL;
static SemaphoreHandle_t J4_FreeMemorySemaphore = NULL;
static SemaphoreHandle_t J6_FreeMemorySemaphore = NULL;
static SemaphoreHandle_t lora_FreeMemorySemaphore = NULL;
static SemaphoreHandle_t su806_FreeMemorySemaphore = NULL;
static SemaphoreHandle_t hostMcu_FreeMemorySemaphore = NULL;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>
static QueueSetHandle_t hostBinarySemaphoreSet = NULL;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD> */
static SemaphoreHandle_t J0_sendOverSemaphore = NULL;
static SemaphoreHandle_t J2_sendOverSemaphore = NULL;
static SemaphoreHandle_t J4_sendOverSemaphore = NULL;
static SemaphoreHandle_t J6_sendOverSemaphore = NULL;
static SemaphoreHandle_t lora_sendOverSemaphore = NULL;
static SemaphoreHandle_t su806_sendOverSemaphore = NULL;
static SemaphoreHandle_t hostMcu_sendOverSemaphore = NULL;
/* ͨ<><CDA8><EFBFBD>ýṹ<C3BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>ýṹ<C3BD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ڴ<EFBFBD> */
typedef struct _hostQueueSendDataInfo {
hostQueueUartSendInfo *J0_485_data;
hostQueueUartSendInfo *J2_485_data;
hostQueueUartSendInfo *J4_485_data;
hostQueueUartSendInfo *J6_485_data;
hostQueueUartSendInfo *lora_uart_data;
hostQueueUartSendInfo *su806_uart_data;
hostQueueUartSendInfo *hostMcu_uart_data;
} hostQueueSendDataInfo;
static hostQueueSendDataInfo hostQueueSendData;
/**
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD>к<EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD>
* @param
* @retval
*/
void hostUartSendInit(void)
{
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
J0_485_Queue = xQueueCreate(rs485QueueLength, QUEUE_SIZE);
J2_485_Queue = xQueueCreate(rs485QueueLength, QUEUE_SIZE);
J4_485_Queue = xQueueCreate(rs485QueueLength, QUEUE_SIZE);
J6_485_Queue = xQueueCreate(rs485QueueLength, QUEUE_SIZE);
lora_uart_Queue = xQueueCreate(rs485QueueLength, QUEUE_SIZE);
su806_uart_Queue = xQueueCreate(rs485QueueLength, QUEUE_SIZE);
hostMcu_uart_Queue = xQueueCreate(rs485QueueLength, QUEUE_SIZE);
/* <20><>ʼ<EFBFBD><CABC><EFBFBD>ͷ<EFBFBD><CDB7>ڴ<EFBFBD><DAB4><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
J0_FreeMemorySemaphore = xSemaphoreCreateBinary();
J2_FreeMemorySemaphore = xSemaphoreCreateBinary();
J4_FreeMemorySemaphore = xSemaphoreCreateBinary();
J6_FreeMemorySemaphore = xSemaphoreCreateBinary();
lora_FreeMemorySemaphore = xSemaphoreCreateBinary();
su806_FreeMemorySemaphore = xSemaphoreCreateBinary();
hostMcu_FreeMemorySemaphore = xSemaphoreCreateBinary();
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>
hostBinarySemaphoreSet = xQueueCreateSet(7);
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>
xQueueAddToSet(J0_FreeMemorySemaphore, hostBinarySemaphoreSet);
xQueueAddToSet(J2_FreeMemorySemaphore, hostBinarySemaphoreSet);
xQueueAddToSet(J4_FreeMemorySemaphore, hostBinarySemaphoreSet);
xQueueAddToSet(J6_FreeMemorySemaphore, hostBinarySemaphoreSet);
xQueueAddToSet(lora_FreeMemorySemaphore, hostBinarySemaphoreSet);
xQueueAddToSet(su806_FreeMemorySemaphore, hostBinarySemaphoreSet);
xQueueAddToSet(hostMcu_FreeMemorySemaphore, hostBinarySemaphoreSet);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD> */
J0_sendOverSemaphore = xSemaphoreCreateBinary();
xSemaphoreGive(J0_sendOverSemaphore);
J2_sendOverSemaphore = xSemaphoreCreateBinary();
xSemaphoreGive(J2_sendOverSemaphore);
J4_sendOverSemaphore = xSemaphoreCreateBinary();
xSemaphoreGive(J4_sendOverSemaphore);
J6_sendOverSemaphore = xSemaphoreCreateBinary();
xSemaphoreGive(J6_sendOverSemaphore);
lora_sendOverSemaphore = xSemaphoreCreateBinary();
xSemaphoreGive(lora_sendOverSemaphore);
su806_sendOverSemaphore = xSemaphoreCreateBinary();
xSemaphoreGive(su806_sendOverSemaphore);
hostMcu_sendOverSemaphore = xSemaphoreCreateBinary();
xSemaphoreGive(hostMcu_sendOverSemaphore);
}
/**
* @brief <EFBFBD><EFBFBD>J0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @param
* @retval
*/
void J0QueueSend(void)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> */
if (xQueueReceive(J0_485_Queue, hostQueueSendData.J0_485_data, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (xSemaphoreTake(J0_sendOverSemaphore, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20><><EFBFBD>߿<EFBFBD><DFBF><EFBFBD> */
if (xSemaphoreTake(J0_IDLESemaphore, portMAX_DELAY) == pdTRUE) {
return;
}
hostUartInterruptSend(g_J1_handle, hostQueueSendData.J0_485_data->data
, hostQueueSendData.J0_485_data->length);
}
/**
* @brief <EFBFBD><EFBFBD>J2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @param
* @retval
*/
void J2QueueSend(void)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> */
if (xQueueReceive(J2_485_Queue, hostQueueSendData.J2_485_data, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (xSemaphoreTake(J2_sendOverSemaphore, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20><><EFBFBD>߿<EFBFBD><DFBF><EFBFBD> */
if (xSemaphoreTake(J2_IDLESemaphore, portMAX_DELAY) == pdTRUE) {
return;
}
hostUartInterruptSend(g_J2_handle, hostQueueSendData.J2_485_data->data
, hostQueueSendData.J2_485_data->length);
}
/**
* @brief <EFBFBD><EFBFBD>J4<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @param
* @retval
*/
void J4QueueSend(void)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> */
if (xQueueReceive(J4_485_Queue, hostQueueSendData.J4_485_data, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (xSemaphoreTake(J4_sendOverSemaphore, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20><><EFBFBD>߿<EFBFBD><DFBF><EFBFBD> */
if (xSemaphoreTake(J4_IDLESemaphore, portMAX_DELAY) == pdTRUE) {
return;
}
hostUartInterruptSend(g_J4_handle, hostQueueSendData.J2_485_data->data
, hostQueueSendData.J4_485_data->length);
}
/**
* @brief <EFBFBD><EFBFBD>J6<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @param
* @retval
*/
void J6QueueSend(void)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> */
if (xQueueReceive(J6_485_Queue, hostQueueSendData.J6_485_data, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (xSemaphoreTake(J6_sendOverSemaphore, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20><><EFBFBD>߿<EFBFBD><DFBF><EFBFBD> */
if (xSemaphoreTake(J6_IDLESemaphore, portMAX_DELAY) == pdTRUE) {
return;
}
hostUartInterruptSend(g_J6_handle, hostQueueSendData.J6_485_data->data
, hostQueueSendData.J6_485_data->length);
}
/**
* @brief <EFBFBD><EFBFBD>lora<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @param
* @retval
*/
void LoraQueueSend(void)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> */
if (xQueueReceive(lora_uart_Queue, hostQueueSendData.lora_uart_data, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (xSemaphoreTake(lora_sendOverSemaphore, portMAX_DELAY) != pdTRUE) {
return;
}
hostUartInterruptSend(g_Lora_handle, hostQueueSendData.lora_uart_data->data
, hostQueueSendData.lora_uart_data->length);
}
/**
* @brief <EFBFBD><EFBFBD>su806<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @param
* @retval
*/
void Su806QueueSend(void)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> */
if (xQueueReceive(su806_uart_Queue, hostQueueSendData.su806_uart_data, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (xSemaphoreTake(su806_sendOverSemaphore, portMAX_DELAY) != pdTRUE) {
return;
}
hostUartInterruptSend(g_Su806_handle, hostQueueSendData.su806_uart_data->data
, hostQueueSendData.su806_uart_data->length);
}
/**
* @brief <EFBFBD><EFBFBD>hostMcu<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @param
* @retval
*/
void HostMcuQueueSend(void)
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> */
if (xQueueReceive(hostMcu_uart_Queue, hostQueueSendData.hostMcu_uart_data, portMAX_DELAY) != pdTRUE) {
return;
}
/* <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (xSemaphoreTake(hostMcu_sendOverSemaphore, portMAX_DELAY) != pdTRUE) {
return;
}
hostUartInterruptSend(g_Mcu_handle, hostQueueSendData.hostMcu_uart_data->data
, hostQueueSendData.hostMcu_uart_data->length);
}
/**
* @brief ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>жϷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD>ڴ<EFBFBD>
* @param
* @retval
*/
void hostBinarySemaphoreFreeMemory(void)
{
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>м<EFBFBD><D0BC>е<EFBFBD><D0B5>¼<EFBFBD>
QueueSetMemberHandle_t xActivatedMember = xQueueSelectFromSet(hostBinarySemaphoreSet, portMAX_DELAY);
if (xActivatedMember == J0_FreeMemorySemaphore) {
vPortFree(hostQueueSendData.J0_485_data);
vTaskDelay(1);
readJ0_485;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD>¼<EFBFBD>
xSemaphoreTake(J0_FreeMemorySemaphore, 0);
xSemaphoreGive(J0_sendOverSemaphore);
}
else if (xActivatedMember == J2_FreeMemorySemaphore) {
vPortFree(hostQueueSendData.J2_485_data);
vTaskDelay(1);
readJ2_485;
xSemaphoreTake(J2_FreeMemorySemaphore, 0);
xSemaphoreGive(J2_sendOverSemaphore);
}
else if (xActivatedMember == J4_FreeMemorySemaphore) {
vPortFree(hostQueueSendData.J4_485_data);
vTaskDelay(1);
readJ4_485;
xSemaphoreTake(J4_FreeMemorySemaphore, 0);
xSemaphoreGive(J4_sendOverSemaphore);
}
else if (xActivatedMember == J6_FreeMemorySemaphore) {
vPortFree(hostQueueSendData.J6_485_data);
vTaskDelay(1);
readJ6_485;
xSemaphoreTake(J6_FreeMemorySemaphore, 0);
xSemaphoreGive(J6_sendOverSemaphore);
}
else if (xActivatedMember == lora_FreeMemorySemaphore) {
vPortFree(hostQueueSendData.lora_uart_data);
xSemaphoreTake(lora_FreeMemorySemaphore, 0);
xSemaphoreGive(lora_sendOverSemaphore);
}
else if (xActivatedMember == su806_FreeMemorySemaphore) {
vPortFree(hostQueueSendData.su806_uart_data);
xSemaphoreTake(su806_FreeMemorySemaphore, 0);
xSemaphoreGive(su806_sendOverSemaphore);
}
else if (xActivatedMember == hostMcu_FreeMemorySemaphore) {
vPortFree(hostQueueSendData.hostMcu_uart_data);
xSemaphoreTake(hostMcu_FreeMemorySemaphore, 0);
xSemaphoreGive(hostMcu_sendOverSemaphore);
}
}
/**
* @brief ͨ<EFBFBD><EFBFBD><EFBFBD>жϷ<EFBFBD><EFBFBD><EFBFBD>
* @param device <EFBFBD>
data ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ָ<EFBFBD><EFBFBD>
len <EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
* @retval 0<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
*/
uint8_t hostUartInterruptSend(device_handle device, uint8_t *data, uint16_t len)
{
/* ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
uart_device_info *dev = (uart_device_info *)device;
dev->uart_send_data.data = data;
dev->uart_send_data.count = 0;
dev->uart_send_data.len = len;
/* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> */
if (device == g_J0_handle) {
xSemaphoreTake(J0_sendOverSemaphore, 0);
writeJ0_485;
USART_ITConfig(J0_USART, USART_IT_TXE, ENABLE);
USART_SendData(J0_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
}
else if (device == g_J2_handle) {
xSemaphoreTake(J2_sendOverSemaphore, 0);
writeJ2_485;
USART_ITConfig(J2_USART, USART_IT_TXE, ENABLE);
USART_SendData(J2_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
}
else if (device == g_J4_handle) {
xSemaphoreTake(J4_sendOverSemaphore, 0);
writeJ4_485;
USART_ITConfig(J4_USART, USART_IT_TXE, ENABLE);
USART_SendData(J4_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
}
else if (device == g_J6_handle) {
xSemaphoreTake(J6_sendOverSemaphore, 0);
writeJ6_485;
USART_ITConfig(J6_USART, USART_IT_TXE, ENABLE);
USART_SendData(J6_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
}
else if (device == g_Mcu_handle) {
xSemaphoreTake(hostMcu_sendOverSemaphore, 0);
USART_ITConfig(Mcu_USART, USART_IT_TXE, ENABLE);
USART_SendData(Mcu_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
}
else if (device == g_Lora_handle) {
xSemaphoreTake(lora_sendOverSemaphore, 0);
USART_ITConfig(Lora_USART, USART_IT_TXE, ENABLE);
USART_SendData(Lora_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
}
else if (device == g_Su806_handle) {
xSemaphoreTake(su806_sendOverSemaphore, 0);
USART_ITConfig(Su806_USART, USART_IT_TXE, ENABLE);
USART_SendData(Su806_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
}
return 0;
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
* @param
* @retval
*/
void J0_485_IN_TXE(void)
{
xSemaphoreGiveFromISR(J0_FreeMemorySemaphore, 0);
}
void J2_485_IN_TXE(void)
{
xSemaphoreGiveFromISR(J2_FreeMemorySemaphore, 0);
}
void J4_485_IN_TXE(void)
{
xSemaphoreGiveFromISR(J4_FreeMemorySemaphore, 0);
}
void J6_485_IN_TXE(void)
{
xSemaphoreGiveFromISR(J6_FreeMemorySemaphore, 0);
}
void Lora_uart_IN_TXE(void)
{
xSemaphoreGiveFromISR(lora_FreeMemorySemaphore, 0);
}
void Su806_uart_IN_TXE(void)
{
xSemaphoreGiveFromISR(su806_FreeMemorySemaphore, 0);
}
void hostMcu_uart_IN_TXE(void)
{
xSemaphoreGiveFromISR(hostMcu_FreeMemorySemaphore, 0);
}