Files
g0b1vetx-board/Board/network/dtu-board.c
T

143 lines
3.1 KiB
C

#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 ;
}