362 lines
9.8 KiB
C
362 lines
9.8 KiB
C
|
||
#include "hostSensorDataParse.h"
|
||
#include "hostQueueUart.h"
|
||
|
||
#include "mcu_common.h"
|
||
|
||
|
||
/**
|
||
* @brief 接收J0口传来的数据
|
||
* @param
|
||
* @retval
|
||
*/
|
||
void J0_SensorDataAnalysis(void)
|
||
{
|
||
static uint32_t tick;
|
||
|
||
if (J0_485RxBufferIndex == 0) {
|
||
tick = xTaskGetTickCount();
|
||
}
|
||
|
||
/* 单次进入最多6ms(3个时钟周期),串口中有数据 */
|
||
uint32_t nowTick = xTaskGetTickCount();
|
||
while ((getTickDiff(nowTick) < 3)
|
||
&& (uart_dev_char_present(g_J0_handle) == 1)
|
||
&& (maxdataLen > J0_485RxBufferIndex)) {
|
||
J0_485RxBuffer[J0_485RxBufferIndex++] = uart_dev_in_char(g_J0_handle);
|
||
}
|
||
|
||
/* 当时间到达或者数据量到达,就打包发送给智能模块 */
|
||
if ((J0_485RxBufferIndex >= maxdataLen) || (getTickDiff(tick) > delayTick)) {
|
||
uint32_t tempLen = 6 + J0_485RxBufferIndex + hostQueueUartSendInfoSize;
|
||
if (xPortGetFreeHeapSize() < tempLen + 1024) {
|
||
J0_485RxBufferIndex = 0;
|
||
return;
|
||
}
|
||
|
||
uint8_t *Buff = (uint8_t *)pvPortMalloc(tempLen);
|
||
hostQueueUartSendInfo *sendBuff = (hostQueueUartSendInfo *)Buff;
|
||
sendBuff->length = 6 + J0_485RxBufferIndex;
|
||
sendBuff->data = Buff + sizeof(hostQueueUartSendInfo);
|
||
uint8_t *send = sendBuff->data;
|
||
|
||
/* 起始标志 */
|
||
*send = 'S';
|
||
*(send + 1) = 'L';
|
||
|
||
/* 端口号 */
|
||
send += 2;
|
||
*send = J0;
|
||
|
||
/* 数据包长度 */
|
||
send += 1;
|
||
*send = (uint8_t)(J0_485RxBufferIndex >> 8);
|
||
*(send + 1) = (uint8_t)(J0_485RxBufferIndex);
|
||
|
||
/* 数据包 */
|
||
send += 2;
|
||
memcpy((char *)send, (char *)J0_485RxBuffer, J0_485RxBufferIndex);
|
||
|
||
/* 结束标志 */
|
||
send += J0_485RxBufferIndex;
|
||
*send = 0x17;
|
||
|
||
/* 队列中有空间,则将发送数据 */
|
||
if (uxQueueSpacesAvailable(su806_uart_Queue)) {
|
||
xQueueSend(su806_uart_Queue, &Buff, 10);
|
||
}
|
||
/* 队列无空间,将数据丢弃 */
|
||
else {
|
||
vPortFree(Buff);
|
||
}
|
||
|
||
/* 发送完成或遇到问题,将buff中的数据清零 */
|
||
J0_485RxBufferIndex = 0;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief 接收J2口传来的数据
|
||
* @param
|
||
* @retval
|
||
*/
|
||
void J2_SensorDataAnalysis(void)
|
||
{
|
||
static uint32_t tick;
|
||
|
||
if (J2_485RxBufferIndex == 0) {
|
||
tick = xTaskGetTickCount();
|
||
}
|
||
|
||
/* 单次进入最多6ms(3个时钟周期),串口中有数据 */
|
||
uint32_t nowTick = xTaskGetTickCount();
|
||
while ((getTickDiff(nowTick) < 3)
|
||
&& (uart_dev_char_present(g_J2_handle) == 1)
|
||
&& (maxdataLen > J2_485RxBufferIndex)) {
|
||
J2_485RxBuffer[J2_485RxBufferIndex++] = uart_dev_in_char(g_J2_handle);
|
||
}
|
||
|
||
/* 当时间到达或者数据量到达,就打包发送给智能模块 */
|
||
if ((J2_485RxBufferIndex >= maxdataLen) || (getTickDiff(tick) > delayTick)) {
|
||
uint32_t tempLen = 6 + J2_485RxBufferIndex + hostQueueUartSendInfoSize;
|
||
if (xPortGetFreeHeapSize() < tempLen + 1024) {
|
||
J2_485RxBufferIndex = 0;
|
||
return;
|
||
}
|
||
|
||
uint8_t *Buff = (uint8_t *)pvPortMalloc(tempLen);
|
||
hostQueueUartSendInfo *sendBuff = (hostQueueUartSendInfo *)Buff;
|
||
sendBuff->length = 6 + J2_485RxBufferIndex;
|
||
sendBuff->data = Buff + sizeof(hostQueueUartSendInfo);
|
||
uint8_t *send = sendBuff->data;
|
||
|
||
/* 起始标志 */
|
||
*send = 'S';
|
||
*(send + 1) = 'L';
|
||
|
||
/* 端口号 */
|
||
send += 2;
|
||
*send = J2;
|
||
|
||
/* 数据包长度 */
|
||
send += 1;
|
||
*send = (uint8_t)(J2_485RxBufferIndex >> 8);
|
||
*(send + 1) = (uint8_t)(J2_485RxBufferIndex);
|
||
|
||
/* 数据包 */
|
||
send += 2;
|
||
memcpy((char *)send, (char *)J2_485RxBuffer, J2_485RxBufferIndex);
|
||
|
||
/* 结束标志 */
|
||
send += J2_485RxBufferIndex;
|
||
*send = 0x17;
|
||
|
||
/* 队列中有空间,则将发送数据 */
|
||
if (uxQueueSpacesAvailable(su806_uart_Queue)) {
|
||
xQueueSend(su806_uart_Queue, &Buff, 10);
|
||
}
|
||
/* 队列无空间,将数据丢弃 */
|
||
else {
|
||
vPortFree(Buff);
|
||
}
|
||
|
||
/* 发送完成或遇到问题,将buff中的数据清零 */
|
||
J2_485RxBufferIndex = 0;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief 接收J4口传来的数据
|
||
* @param
|
||
* @retval
|
||
*/
|
||
void J4_SensorDataAnalysis(void)
|
||
{
|
||
static uint32_t tick;
|
||
|
||
if (J4_485RxBufferIndex == 0) {
|
||
tick = xTaskGetTickCount();
|
||
}
|
||
|
||
/* 单次进入最多6ms(3个时钟周期),串口中有数据 */
|
||
uint32_t nowTick = xTaskGetTickCount();
|
||
while ((getTickDiff(nowTick) < 3)
|
||
&& (uart_dev_char_present(g_J4_handle) == 1)
|
||
&& (maxdataLen > J4_485RxBufferIndex)) {
|
||
J4_485RxBuffer[J4_485RxBufferIndex++] = uart_dev_in_char(g_J4_handle);
|
||
}
|
||
|
||
/* 当时间到达或者数据量到达,就打包发送给智能模块 */
|
||
if ((J4_485RxBufferIndex >= maxdataLen) || (getTickDiff(tick) > delayTick)) {
|
||
uint32_t tempLen = 6 + J4_485RxBufferIndex + hostQueueUartSendInfoSize;
|
||
if (xPortGetFreeHeapSize() < tempLen + 1024) {
|
||
J4_485RxBufferIndex = 0;
|
||
return;
|
||
}
|
||
|
||
uint8_t *Buff = (uint8_t *)pvPortMalloc(tempLen);
|
||
hostQueueUartSendInfo *sendBuff = (hostQueueUartSendInfo *)Buff;
|
||
sendBuff->length = 6 + J4_485RxBufferIndex;
|
||
sendBuff->data = Buff + sizeof(hostQueueUartSendInfo);
|
||
uint8_t *send = sendBuff->data;
|
||
|
||
/* 起始标志 */
|
||
*send = 'S';
|
||
*(send + 1) = 'L';
|
||
|
||
/* 端口号 */
|
||
send += 2;
|
||
*send = J4;
|
||
|
||
/* 数据包长度 */
|
||
send += 1;
|
||
*send = (uint8_t)(J4_485RxBufferIndex >> 8);
|
||
*(send + 1) = (uint8_t)(J4_485RxBufferIndex);
|
||
|
||
/* 数据包 */
|
||
send += 2;
|
||
memcpy((char *)send, (char *)J4_485RxBuffer, J4_485RxBufferIndex);
|
||
|
||
/* 结束标志 */
|
||
send += J4_485RxBufferIndex;
|
||
*send = 0x17;
|
||
|
||
/* 队列中有空间,则将发送数据 */
|
||
if (uxQueueSpacesAvailable(su806_uart_Queue)) {
|
||
xQueueSend(su806_uart_Queue, &Buff, 10);
|
||
}
|
||
/* 队列无空间,将数据丢弃 */
|
||
else {
|
||
vPortFree(Buff);
|
||
}
|
||
|
||
/* 发送完成或遇到问题,将buff中的数据清零 */
|
||
J4_485RxBufferIndex = 0;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief 接收J6口传来的数据
|
||
* @param
|
||
* @retval
|
||
*/
|
||
void J6_SensorDataAnalysis(void)
|
||
{
|
||
static uint32_t tick;
|
||
|
||
if (J6_485RxBufferIndex == 0) {
|
||
tick = xTaskGetTickCount();
|
||
}
|
||
|
||
/* 单次进入最多6ms(3个时钟周期),串口中有数据 */
|
||
uint32_t nowTick = xTaskGetTickCount();
|
||
while ((getTickDiff(nowTick) < 3)
|
||
&& (uart_dev_char_present(g_J6_handle) == 1)
|
||
&& (maxdataLen > J6_485RxBufferIndex)) {
|
||
J6_485RxBuffer[J6_485RxBufferIndex++] = uart_dev_in_char(g_J6_handle);
|
||
}
|
||
|
||
/* 当时间到达或者数据量到达,就打包发送给智能模块 */
|
||
if ((J6_485RxBufferIndex >= maxdataLen) || (getTickDiff(tick) > delayTick)) {
|
||
uint32_t tempLen = 6 + J6_485RxBufferIndex + hostQueueUartSendInfoSize;
|
||
if (xPortGetFreeHeapSize() < tempLen + 1024) {
|
||
J6_485RxBufferIndex = 0;
|
||
return;
|
||
}
|
||
|
||
uint8_t *Buff = (uint8_t *)pvPortMalloc(tempLen);
|
||
hostQueueUartSendInfo *sendBuff = (hostQueueUartSendInfo *)Buff;
|
||
sendBuff->length = 6 + J6_485RxBufferIndex;
|
||
sendBuff->data = Buff + sizeof(hostQueueUartSendInfo);
|
||
uint8_t *send = sendBuff->data;
|
||
|
||
/* 起始标志 */
|
||
*send = 'S';
|
||
*(send + 1) = 'L';
|
||
|
||
/* 端口号 */
|
||
send += 2;
|
||
*send = J6;
|
||
|
||
/* 数据包长度 */
|
||
send += 1;
|
||
*send = (uint8_t)(J6_485RxBufferIndex >> 8);
|
||
*(send + 1) = (uint8_t)(J6_485RxBufferIndex);
|
||
|
||
/* 数据包 */
|
||
send += 2;
|
||
memcpy((char *)send, (char *)J6_485RxBuffer, J6_485RxBufferIndex);
|
||
|
||
/* 结束标志 */
|
||
send += J6_485RxBufferIndex;
|
||
*send = 0x17;
|
||
|
||
/* 队列中有空间,则将发送数据 */
|
||
if (uxQueueSpacesAvailable(su806_uart_Queue)) {
|
||
xQueueSend(su806_uart_Queue, &Buff, 10);
|
||
}
|
||
/* 队列无空间,将数据丢弃 */
|
||
else {
|
||
vPortFree(Buff);
|
||
}
|
||
|
||
/* 发送完成或遇到问题,将buff中的数据清零 */
|
||
J6_485RxBufferIndex = 0;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief 接收Lora口传来的数据
|
||
* @param
|
||
* @retval
|
||
*/
|
||
void Lora_SensorDataAnalysis(void)
|
||
{
|
||
static uint32_t tick;
|
||
|
||
if (loraRxBufferIndex == 0) {
|
||
tick = xTaskGetTickCount();
|
||
}
|
||
|
||
/* 单次进入最多6ms(3个时钟周期),串口中有数据 */
|
||
uint32_t nowTick = xTaskGetTickCount();
|
||
while ((getTickDiff(nowTick) < 3)
|
||
&& (uart_dev_char_present(g_Lora_handle) == 1)
|
||
&& (maxdataLen > loraRxBufferIndex)) {
|
||
loraRxBuffer[loraRxBufferIndex++] = uart_dev_in_char(g_Lora_handle);
|
||
}
|
||
|
||
/* 当时间到达或者数据量到达,就打包发送给智能模块 */
|
||
if ((loraRxBufferIndex >= maxdataLen) || (getTickDiff(tick) > delayTick)) {
|
||
uint32_t tempLen = 6 + loraRxBufferIndex + hostQueueUartSendInfoSize;
|
||
if (xPortGetFreeHeapSize() < tempLen + 1024) {
|
||
loraRxBufferIndex = 0;
|
||
return;
|
||
}
|
||
|
||
uint8_t *Buff = (uint8_t *)pvPortMalloc(tempLen);
|
||
hostQueueUartSendInfo *sendBuff = (hostQueueUartSendInfo *)Buff;
|
||
sendBuff->length = 6 + loraRxBufferIndex;
|
||
sendBuff->data = Buff + sizeof(hostQueueUartSendInfo);
|
||
uint8_t *send = sendBuff->data;
|
||
|
||
/* 起始标志 */
|
||
*send = 'S';
|
||
*(send + 1) = 'L';
|
||
|
||
/* 端口号 */
|
||
send += 2;
|
||
*send = Lora;
|
||
|
||
/* 数据包长度 */
|
||
send += 1;
|
||
*send = (uint8_t)(loraRxBufferIndex >> 8);
|
||
*(send + 1) = (uint8_t)(loraRxBufferIndex);
|
||
|
||
/* 数据包 */
|
||
send += 2;
|
||
memcpy((char *)send, (char *)loraRxBuffer, loraRxBufferIndex);
|
||
|
||
/* 结束标志 */
|
||
send += loraRxBufferIndex;
|
||
*send = 0x17;
|
||
|
||
/* 队列中有空间,则将发送数据 */
|
||
if (uxQueueSpacesAvailable(su806_uart_Queue)) {
|
||
xQueueSend(su806_uart_Queue, &Buff, 10);
|
||
}
|
||
/* 队列无空间,将数据丢弃 */
|
||
else {
|
||
vPortFree(Buff);
|
||
}
|
||
|
||
/* 发送完成或遇到问题,将buff中的数据清零 */
|
||
loraRxBufferIndex = 0;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|