zhangbo
4 天以前 64c36ecbd729ba99dcaba24c52512b0edb92a1b5
keil/include/main/main.c
@@ -24,6 +24,9 @@
#include "PCA9555.h"
#include "WS2812.h"
#include "DBG.h"
#include "dw_app_anchor.h"
#include "ymodem.h"
#include "mk_phy.h"
//#define DEBUG_MODE
extern int simple_main(void);
@@ -74,11 +77,11 @@
extern uint8_t pca9555writedata_input[10];//暂存输入寄存器所有配置的数组
extern uint8_t pca9555writedata_polarity[10];//暂存输入极性反转寄存器所有配置的数组
uint8_t temp_pca9555writedata_input[10];//暂存上一次输入寄存器所有配置的数组
typedef enum
{      UN_BIND=0,
        LINK_SUCCESS,
        SEARCH_DEV,
} Operation_step;
//typedef enum
//{      UN_BIND=0,
//        LINK_SUCCESS,
//        SEARCH_DEV,
//} Operation_step;
Operation_step UWB_work_state;
@@ -401,6 +404,9 @@
uint8_t gps_ntripsend;
extern uint8_t uwb_OpenClose_flag;
uint8_t Get_anchor_appdata_flag;
uint8_t Get_anchor_appdata_num;
static void sleep_timer_callback(void *dev, uint32_t time)
{
// powerON_Task();
@@ -409,7 +415,7 @@
        input5v_time=1;
        flag_secondtask = 1;
        led_flag=1;
        if(g_com_map[UWBFrequency]>1)
        if(g_com_map[UWBFrequency]>1||current_state==STATE_SLEEP)
        {
            uwb_time_count++;
        }
@@ -435,7 +441,7 @@
        }
        
        input5v_time=1;
        if(taglist_num==0&&g_com_map[UWBFrequency]==1&&g_com_map[UWBENBLE]==1&&uwb_OpenClose_flag==1)
        if(taglist_num==0&&g_com_map[UWBFrequency]==1&&g_com_map[UWBENBLE]==1&&uwb_OpenClose_flag==1&&current_state == STATE_NORMAL)
        {
            CloseUWB();
            Uwb_init();
@@ -525,7 +531,7 @@
void Program_Init(void)
{
    uint32_t gpsbaudrate1;
    Usart1ParseDataCallback = UsartParseDataHandler;//需改为默认为gps处理,UsartParseDataHandler为升级处理当调试时候改为
    Usart1ParseDataCallback = Usart1ParseDataHandler;//需改为默认为gps处理,UsartParseDataHandler为升级处理当调试时候改为
    parameter_init_anchor();//g_com_map表初始化角色默认为基站
    dev_id=g_com_map[DEV_ID];//这里不太对
//    g_com_map[GROUP_ID]=9;
@@ -581,17 +587,17 @@
    g_com_map[MODBUS_MODE] = 0;
    log_4g_enable_flag =1;//g_com_map[LOG_4G_ENABLE];
    g_com_map[VERSION] = (2<<8)|10;
    g_com_map[VERSION] = (1<<8)|0;
    LOG_INFO(TRACE_MODULE_APP,"设备ID: %x .\r\n",dev_id);
    LOG_INFO(TRACE_MODULE_APP,"固件版本:4G-GPS定位工卡 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff);
    LOG_INFO(TRACE_MODULE_APP,"固件版本:信标升级工卡 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff);
    LOG_INFO(TRACE_MODULE_APP,"服务器地址: %d.%d.%d.%d:%d.\r\n",g_com_map[IP_0],g_com_map[IP_1],g_com_map[IP_2],g_com_map[IP_3],g_com_map[PORT]);
    LOG_INFO(TRACE_MODULE_APP,"设备UWB状态: %x .\r\n",g_com_map[UWBENBLE]);
    LOG_INFO(TRACE_MODULE_APP,"设备GPS状态: %x .\r\n",g_com_map[GPSENBLE]);
    LOG_INFO(TRACE_MODULE_APP,"设备UWB工作间隔: %x .\r\n",g_com_map[UWBFrequency]);
    LOG_INFO(TRACE_MODULE_APP,"设备GPS工作间隔: %x .\r\n",g_com_map[GPSFrequency]);
    LOG_INFO(TRACE_MODULE_APP,"当前GPS工作波特率: %d .\r\n",gpsbaudrate1);
//    LOG_INFO(TRACE_MODULE_APP,"设备UWB状态: %x .\r\n",g_com_map[UWBENBLE]);
//    LOG_INFO(TRACE_MODULE_APP,"设备GPS状态: %x .\r\n",g_com_map[GPSENBLE]);
//    LOG_INFO(TRACE_MODULE_APP,"设备UWB工作间隔: %x .\r\n",g_com_map[UWBFrequency]);
//    LOG_INFO(TRACE_MODULE_APP,"设备GPS工作间隔: %x .\r\n",g_com_map[GPSFrequency]);
//    LOG_INFO(TRACE_MODULE_APP,"当前GPS工作波特率: %d .\r\n",gpsbaudrate1);
#ifdef _4G_115200
    LOG_INFO(TRACE_MODULE_APP,"当前4G波特率: 115200.\r\n");
#else
@@ -691,10 +697,10 @@
                TCPClient_Poll();
                Led_Task();
                if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP)
                {
                    TCPClient_Poll_1();
                }
//                if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP)
//                {
//                    TCPClient_Poll_1();
//                }
                if(flag_secondtask)
                {
                    flag_secondtask = 0;
@@ -763,15 +769,15 @@
//                    uart1_change_from_debug_to_gps();//测试
            //                PCA9555_Set_One_Value_Output(MCU_A,0);//输出低电平切换为GPS
            //保留串口输出到debug口这样可以看到看门狗的复位
            //关闭电源前检查PCA输出脚的电平保证不供电在关闭电源脚
            PCA9555_Set_One_Value_Output(LED_POWER,0);//输出低电平关闭LED
            PCA9555_Set_One_Value_Output(TTS_ENABLE,0);
            PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);
            PCA9555_Set_One_Value_Output(GPS_POWER,0);//关GPS
            delay_ms(200);
//            //关闭电源前检查PCA输出脚的电平保证不供电在关闭电源脚
//            PCA9555_Set_One_Value_Output(LED_POWER,0);//输出低电平关闭LED
//            PCA9555_Set_One_Value_Output(TTS_ENABLE,0);
//            PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);
//            PCA9555_Set_One_Value_Output(GPS_POWER,0);//关GPS
//            delay_ms(200);
            PCA9555_Set_One_Value_Output(PWR_ENABLE,0);//低电平关闭
//            PCA9555_Set_One_Value_Output(PWR_ENABLE,0);//低电平关闭
            PCA9555_Close_Power();
        }
    }
@@ -818,11 +824,12 @@
        Set4LEDColor(uwbled,rtkled,led4g,powerled);
        if(HIDO_TimerGetTick() - guanjiflagtime>3)
        {
            PCA9555_Set_One_Value_Output(TTS_ENABLE,0);     //关闭语音输入
            PCA9555_Set_One_Value_Output(LED_POWER,0);      //输出低电平关闭LED
            PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);
            PCA9555_Set_One_Value_Output(GPS_POWER,0);      //关GPS
            PCA9555_Set_One_Value_Output(PWR_ENABLE,0);     //低电平关闭
//            PCA9555_Set_One_Value_Output(TTS_ENABLE,0);     //关闭语音输入
//            PCA9555_Set_One_Value_Output(LED_POWER,0);      //输出低电平关闭LED
//            PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);
//            PCA9555_Set_One_Value_Output(GPS_POWER,0);      //关GPS
//            PCA9555_Set_One_Value_Output(PWR_ENABLE,0);     //低电平关闭
            PCA9555_Close_Power();
        }
    }
@@ -847,6 +854,7 @@
uint8_t GPS_UPLOAD_FLAG=0;
uint32_t elapsed_time_jibu;
extern uint8_t uwb_OpenClose_flag;
uint8_t uwb_close_count,uwb_close_count1;
void upload_apppoll()
{
@@ -858,7 +866,7 @@
            if(elapsed_time_jibu==1)
            {
                CloseUWB();
                UWBSendUDPTask();
//                UWBSendUDPTask();
            }
            else if(elapsed_time_jibu==g_com_map[UWBFrequency])
            {
@@ -879,7 +887,8 @@
        {
        case UWB_OPEN_COUNT:
            CloseUWB();
            UWBSendUDPTask();
//            UWBSendUDPTask();
//            uwb_close_count++;
            break;
        case UWB_MEASUREMENT_INTERVAL_SLEEP:
@@ -888,6 +897,7 @@
            Uwb_init();
            OpenUWB();
            state_start_time = uwb_time_count;
//            uwb_close_count1++;
            break;
        }
    }
@@ -937,13 +947,13 @@
}
uint8_t flag_4guart_needinit=0;
uint8_t index1,index2,index3;
int16_t Voltage_input;
int tt2;
int test1,test3;
uint32_t test4;
extern uint8_t receive_flag;
//uint8_t flag_4guart_needinit=0;
//uint8_t index1,index2,index3;
//int16_t Voltage_input;
//int tt2;
//int test1,test3;
//uint32_t test4;
//extern uint8_t receive_flag;
static void app_wdt_callback(void *dev, uint32_t status)
{
    ASSERT(status, "WDT TIMEOUT,程序复位");
@@ -955,6 +965,114 @@
    .int_en = true,
    .callback = app_wdt_callback,
};
uint8_t flag_4guart_needinit=0;
uint8_t index1,index2,index3;
int16_t Voltage_input;
int tt2;
int test1,test3;
uint32_t test4;
void Chuanshuwenjian_Poll()
{
    if(g_com_map[YAOGEIANC_UPWENJIAN_FLAG]==1)
    {
        calib_chip();
        wdt_close(WDT_ID0);
        Get_anchor_appdata_flag=1;
        struct UART_CFG_T test_uart_cfg =
        {
        .parity = UART_PARITY_NONE,
        .stop = UART_STOP_BITS_1,
        .data = UART_DATA_BITS_8,
        .flow = UART_FLOW_CONTROL_NONE,
        .rx_level = UART_RXFIFO_CHAR_1,
        .tx_level = UART_TXFIFO_EMPTY,
        .baud = BAUD_115200,
        .dma_en = true,
        .int_rx = false,
        .int_tx = false,
      };
       flash_open(FLASH_ID0, NULL);
       //uart_open(UART_ID1, &test_uart_cfg);
        uart_open(UART_ID1, &test_uart_cfg);
       //uart_receive(UART_ID1, trx_buf, 1, uart_receive_callback);
//      LOG_INFO(TRACE_MODULE_APP,"MK8000-文件传输启动\r\n");
//        Get_anchor_appdata_flag=1;
//        HAL_TIM_Base_Start_IT(&htim4);
        while(1)
        {
            if(SerialDownload()==0)
            {
//                Get_anchor_appdata_flag=0;
                g_com_map[YAOGEIANC_UPWENJIAN_FLAG]=0;
                save_com_map_to_flash();
                delay_ms(300);
//                Get_anchor_appdata_flag=0;
                SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
                  }
//                  else{
//                  SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
//                  }
        }
    }
}
uint16_t final_bag_num;
extern uint8_t Lora_qingqiu_flag;
uint8_t send_lora_data[250];
uint16_t mubiao_anchor_ID;
uint16_t Lora_qingqiu_bao;
uint8_t jindu;
uint8_t shengji_changdu;
uint8_t Dtu_shengji_jindu[20]= {0x55,0xAA,0x34,0x05};
extern uint32_t tempflag;
    uint32_t tx_en_start_u32;
    uint32_t tx_en_start_u321;
uint8_t baifenbi=5;
void Lora_upanc_ing_Poll( void )
{   uint16_t crc16;
//    if(Lora_upanc_flag==1)
//    {
//        Lora_deinit_Poll();
        if(Lora_qingqiu_flag==1)
        {
            CloseUWB();
//            mubiao_anchor_ID=0x1872;
            final_bag_num=(g_com_map[YAOGEIANC_UPWENJIAN_DAXIAO]/ONE_BAG_DAXIAO)+1;//计算一共要发都是包
//            final_bag_num=651;
            Lora_qingqiu_flag=0;
            send_lora_data[MSG_TYPE_IDX]=LORA_MSGTYPE_UPDATEFILE_RESP;//LORA MSG TYPE 定义
            memcpy(&send_lora_data[SOURCE_ID_IDX],&dev_id,2);//自己ID 占用2个字节
            memcpy(&send_lora_data[DEST_ID_IDX],&mubiao_anchor_ID,2);//标签或者基站的设备ID 2个字节
            memcpy(&send_lora_data[MUQIAN_BAG],&Lora_qingqiu_bao,2);
            memcpy(&send_lora_data[DATA_IDX], (HIDO_VOID *)(APP_CONFIG_APPLICATION_ADDRESS+Lora_qingqiu_bao*ONE_BAG_DAXIAO), ONE_BAG_DAXIAO);
            crc16=Cal_CRC16(send_lora_data,DATA_IDX+ONE_BAG_DAXIAO);
            memcpy(&send_lora_data[DATA_IDX+ONE_BAG_DAXIAO],&crc16,2);
//            Lora_status=1;
            jindu=(Lora_qingqiu_bao*100)/final_bag_num;
//            LOG_INFO(TRACE_MODULE_APP, "升级进度%d\r\n",jindu);
            Dtu_shengji_jindu[4]=jindu;
            memcpy(&Dtu_shengji_jindu[5],&mubiao_anchor_ID,2);
            if(jindu>baifenbi)
            {
            uart_send(UART_ID1, Dtu_shengji_jindu,9, NULL);
                baifenbi=baifenbi+10;
            }
            tx_en_start_u32 = phy_timer_count_get()+US_TO_PHY_TIMER_COUNT(100U);//发送必须要延时发送才可以用于测距否则立即发送会获取时间戳不对,需要计算程序运行时间,避免设置过去时间
            tempflag=uwb_tx(send_lora_data,DATA_IDX+ONE_BAG_DAXIAO+2+2,1,tx_en_start_u32);//立即发送
            tx_en_start_u321= phy_timer_count_get();
//            while(mac_is_busy());//等待发送完成
        }
//    }
}
int main(void)
{
    __enable_irq();
@@ -969,7 +1087,7 @@
//     delay_ms(100);
//   gaodu=GetPressAndHeight();
    PCA9555_init();
    board_debug_console_open_baud(TRACE_PORT_UART1,BAUD_921600);
    board_debug_console_open_baud(TRACE_PORT_UART1,BAUD_115200);
//   while(1);
    // Reset reason
    reset_cause_get();
@@ -992,7 +1110,7 @@
    Uart_Register(UART_ID_4G, UART_ID0);
    Uart_Register(UART_ID_DBG_GPS, UART_ID1);
    DBG_Init();
    SendComMap(0x50,0);
//    SendComMap(0x50,0);
    Internet_Init();
    TCPClient_Init();
//    if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_NTRIP)
@@ -1000,10 +1118,10 @@
//       NTRIPClient_Init();
//       NTRIPApp_Init();
//    }
    if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP)
    {
        TCPClient_Init_1();
    }
//    if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP)
//    {
//        TCPClient_Init_1();
//    }
//    HTTPClient_Init();
    wdt_open(WDT_ID0,&app_wdt_cfg);//30s检测喂狗
    LED_output_init();//配置彩色灯引脚
@@ -1036,19 +1154,27 @@
    g_com_map[MODBUS_MODE] = 0;
    state5v=0;
    state5V_prase_flag=state5v;
#ifdef UART_DEBUG_NORMALLY_OPEN
    uart1_change_from_gps_to_debug();
    PCA9555_Set_One_Value_Output(MCU_A,1);
#else
    gps_prase_flag=1;//恢复gps解析
    uart1_change_from_debug_to_gps();//测试
    PCA9555_Set_One_Value_Output(MCU_A,0);//输出低电平切换为GPS
    PCA9555_Set_One_Value_Output(MCU_A,0);//输出低电平切换为GPS
#endif
    if(g_com_map[UWBENBLE]==0)
    {
        CloseUWB();
    }
    sleep_timer_open(true, SLEEP_TIMER_MODE_RELOAD, sleep_timer_callback);
    sleep_timer_start(__MS_TO_32K_CNT(SLEEP_TIMER_NUM));//测试
    Chuanshuwenjian_Poll();
    PCA9555_Set_One_Value_Output(ADC_MINIUS,0);//拉低
    adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样
    pca_input_detection_init(pca_handler);//pca检测输入
    GPS_Init();
//    GPS_Init();
//    gaodu=GetPressAndHeight()*100;
    while (1)
    {
@@ -1058,10 +1184,10 @@
        HIDO_ATLitePoll();
        TCPClient_Poll();
        wdt_ping(WDT_ID0);//喂狗
        if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP)
        {
            TCPClient_Poll_1();
        }
//        if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP)
//        {
//            TCPClient_Poll_1();
//        }
        if(flag_secondtask)
        {
            flag_secondtask = 0;
@@ -1069,7 +1195,7 @@
        }
        IMUTask();
        IdleTask();
        check_step_and_update_state();
        led_offtask();
//        check_step_and_update_state();
//        led_offtask();
    }
}