417 lines
13 KiB
C
417 lines
13 KiB
C
|
|
|||
|
#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);
|
|||
|
}
|
|||
|
|