g0b1vetx-board/Board/network/dtu-board.c
2023-11-30 08:10:01 +08:00

143 lines
3.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "main.h"
#include "os-app.h"
#include <stdio.h>
#include <rtthread.h>
#include <string.h>
#include "usart-board.h"
#include <MQTTPacket.h>
#include "transport.h"
#include "netdrv.h"
#if !defined(LOG_TAG)
#define LOG_TAG "dtu"
#endif
#include <elog.h>
ALIGN (RT_ALIGN_SIZE)
static char thread_stack[2048];
static struct rt_thread dtu_thread;
static char tx_buffer[512];
static char rx_buffer[512];
netDrv_t g_dtuDrv =
{
0, // 信号值
"", // iccid
Init, // 状态
tx_buffer, // 接受缓存
0, // 接受数据长度
rx_buffer, // 发送数据缓存
0, // 发送数据长度
};
static void net_data_rxdone (void)
{
rt_event_send (gUartEvents, EVENT_UART_ETH1_RX);
//rt_kprintf("net_data_rxdone\r\n");
}
static void thread_entry (void * argument)
{
rt_kprintf ("%s was start!\r\n", __FILE__);
g_ETH1Drv.rxdone = net_data_rxdone;
// MX_UART_Init(&g_ETH1Drv);
while (1)
{
MODE_RST:
g_dtuDrv.State = Init;
MX_UART_Init (&g_ETH1Drv);
HAL_GPIO_WritePin (ETH_RST_GPIO_Port, ETH_RST_Pin, GPIO_PIN_RESET);
rt_thread_mdelay (1000);
HAL_GPIO_WritePin (ETH_RST_GPIO_Port, ETH_RST_Pin, GPIO_PIN_SET);
rt_thread_mdelay (1000);
HAL_GPIO_WritePin (GPIOA, ETH_PW_Pin, GPIO_PIN_SET);
rt_thread_mdelay (8000);
g_dtuDrv.State = Conn;
while (1) // 判断是否链接成功
{
// 准备要上报数据
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_NETMODE_TX1, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL)) //
{
//rt_kprintf("MODE_RST\r\n");
MX_UART_PutBuffer (&g_ETH1Drv, g_dtuDrv.txbuff, g_dtuDrv.tx_size);
// rt_kprintf("tx\r\n");
// for(int i =0; i <g_dtuDrv.tx_size;i++ )
// {
// rt_kprintf("%02X ",g_dtuDrv.txbuff[i]);
// }
// rt_kprintf("\r\n");
}
// 接受到数据
if (RT_EOK == rt_event_recv (gUartEvents, EVENT_UART_ETH1_RX, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 0, RT_NULL))
{
// rt_kprintf ("ETH1Rx:%d\r\n", g_ETH1Drv.rx_size);
// for (int i = 0; i < g_ETH1Drv.rx_size; i++)
// {
// rt_kprintf ("%02X ", g_ETH1Drv.rx_buffer[i]);
// }
// rt_kprintf ("\r\n");
rt_memcpy (g_dtuDrv.rxbuff, g_ETH1Drv.rx_buffer, g_ETH1Drv.rx_size);
g_dtuDrv.rx_size = g_ETH1Drv.rx_size;
rt_event_send (gTrigEvents, EVENT_TRIG_NETMODE_RX1) ;
MX_UART_Clear (&g_ETH1Drv) ;
}
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_NETMODE_RST, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL))
{
goto MODE_RST;
}
rt_thread_delay (100);
// 读取IO 状态
}
}
}
void dtu_service_tx (char * buff, int size)
{
rt_memcpy (g_dtuDrv.txbuff, buff, size);
g_dtuDrv.tx_size = size;
rt_event_send (gTrigEvents, EVENT_TRIG_NETMODE_TX1) ;
}
void dtu_netreset (void)
{
rt_event_send (gTrigEvents, EVENT_TRIG_NETMODE_RST) ;
}
void DTUThreadStart (void)
{
/* 创建线程1名称是thread1入口是thread1_entry*/
rt_thread_init (&dtu_thread, "dtu_thread",
thread_entry, RT_NULL,
&thread_stack[0],
sizeof (thread_stack),
DTU_THREAD_PRIORITY, DTU_THREAD_TIMESLICE);
rt_thread_startup (&dtu_thread);
return ;
}