P6UWaterBLE/hardinterface/BC25/nb_uart_driver_bc25.h

370 lines
12 KiB
C
Raw Normal View History

2024-06-03 15:49:39 +08:00
/************************************************************************************
* @Copyright (c) :(C)2017, Qindao ieslab Co., Ltd
* @FileName :pic24_nb_uart_driver.h
* @Author :QDIES PLATFORM TEAM
* @Version :V1.0
* @Date :2017-03-01
* @Description :
************************************************************************************/
#ifndef __NB_UART_DRIVER_BC25_H
#define __NB_UART_DRIVER_BC25_H
#include "sys_config.h"
#ifdef NB_MODULE_BC25
#include "ddl.h"
#define HDSC_HC32L196
#define CELL_ID_SIZE 10
#define NBUART_RCV_OVERTIME_S1 1
//<2F><><EFBFBD>д<EFBFBD><D0B4>ڣ<EFBFBD><DAA3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>1
#define NB_LPCOM_OPEN 0 //<2F><><EFBFBD><EFBFBD>BC95
#define NB_COM_OPEN 1 //<2F><><EFBFBD><EFBFBD>BC95
//<2F><><EFBFBD><EFBFBD>IO<49><4F><EFBFBD><EFBFBD>(IOһ<4F><D2BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>׼ȷ)<29><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>ʱ<EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define LPUART_TXRX_AF_NULL (GpioAf0)
#define UART_TXRX_AF_NULL (GpioAf0)
#if NB_LPCOM_OPEN
//LPUART0
#define NBLPUART0_RX_PORT (GpioPortB)
#define NBLPUART0_RX_PIN (GpioPin11)
#define NBLPUART0_RX_AF (GpioAf3)
#define NBLPUART0_TX_PORT (GpioPortB)
#define NBLPUART0_TX_PIN (GpioPin12)
#define NBLPUART0_TX_AF (GpioAf3)
#endif
#if NB_COM_OPEN
//UART1
#define NBUART_RX_PORT (GpioPortA)
#define NBUART_RX_PIN (GpioPin3)
#define NBUART_RX_AF (GpioAf1)
#define NBUART_TX_PORT (GpioPortA)
#define NBUART_TX_PIN (GpioPin2)
#define NBUART_TX_AF (GpioAf1)
#endif
#define NBCOM_MAX_NUM 2
#define NBLPCOM0 0 //<2F>͹<EFBFBD><CDB9>Ĵ<EFBFBD><C4B4><EFBFBD>
#define NBLPCOM1 1 //<2F><><EFBFBD><EFBFBD>
//UART<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BAUD_RATE_1200 416 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4M
#define BAUD_RATE_2400 207 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4M
#define BAUD_RATE_9600 47 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4M
#define BAUD_RATE_115200 3 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4M
//UART<52><54><EFBFBD><EFBFBD>λ
#define DATABIT_EIGHT 8
#define DATABIT_NINE 9
//UARTֹͣλ
#define STOP_ONE 1
#define STOP_TWO 2
//UARTУ<54><D0A3>λ
#define NO_CHECK 0 //<2F><>У<EFBFBD><D0A3>
#define ODD_CHECK 1 //<2F><>У<EFBFBD><D0A3>
#define EVEN_CHECK 2 //żУ<C5BC><D0A3>
#define NBIOT_FUNCTION 1 //NBIOT<4F><54><EFBFBD>ܲü<DCB2>(1:<3A><><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD> 0:<3A>ü<EFBFBD><C3BC><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>)
#define USE_ALT 1 //1:ʹ<>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<><30>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define AT_ERROR 5 //AT<41><54><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>ʱ,<2C>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
#define NB_RCV_COAP_DATA 0
#define NB_RCV_UDP1_DATA 1
#define NB_RCV_UDP2_DATA 2
//UART<52><54>ѯ<EFBFBD><D1AF>״̬<D7B4><CCAC>Ϣ
#define UART_ING ((s8)-1) //<2F><>ѯ<EFBFBD><D1AF>
#define UART_FINISH ((s8)-2) //<2F><><EFBFBD><EFBFBD>
#define UART_ERROR ((s8)-3) //<2F><><EFBFBD><EFBFBD>֡
#define UART_OK ((s8)-4) //<2F><>ȷ֡
/*************************************<2A><>ͨʹ<CDA8><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8>******************************************/
//<2F><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>е<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>S0-S10
#define S_IDLE 0
#define S0 10
#define S1 11
#define S2 12
#define S3 13
#define S4 14
#define S5 15
#define S6 16
#define S7 17
#define S8 18
#define S9 19
#define S10 20
#define S11 21
#define S12 22
#define S13 23
#define S14 24
#define S15 25
#define S16 26
#define S17 27
#define S18 28
#define S19 29
#define S20 30
#define S21 31
#define S22 32
#define S23 33
#define S24 34
#define S25 35
#define S26 36
#define S27 37
#define S28 38
#define S29 39
#define S30 40
#define S6_1 50
#define S7_1 51
#define S8_1 52
#define S9_1 53
#define S10_1 54
#define S11_1 55
//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ATָ<54><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define cst_AT_No_AT 0
#define cst_AT_No_AT_CFUN 1
#define cst_AT_No_AT_NBAND 2
#define cst_AT_No_AT_CGATT 3
#define cst_AT_No_AT_CSQ 4
#define cst_AT_No_AT_CGATT_how 5
#define cst_AT_No_AT_CEREG 6
#define cst_AT_No_AT_CSCON 7
#define cst_AT_No_AT_CIMI 8
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NBIOT<4F><54>ATָ<54><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define cst_AT_No_AT_CGDCONT 9
#define cst_AT_No_AT_NSOCR 10
#define cst_AT_No_AT_NSOST 11
#define cst_AT_No_AT_NBIOT_REV 12
#define cst_AT_No_AT_DATA_REV 13
//<2F><><EFBFBD><EFBFBD>Ϊע<CEAA><D7A2>GSM<53><4D><EFBFBD><EFBFBD>ATָ<54><D6B8>
#define cst_AT_No_AT_NSOCL 14
#define cst_AT_No_AT_NETCLOSE 15
#define cst_AT_No_AT_COPS 16
#define cst_AT_No_AT_CGSN 17
#define cst_AT_No_AT_NCDP 18
#define cst_AT_No_AT_NCDP_C 19
#define cst_AT_No_AT_NSMI 20
#define cst_AT_No_AT_NNMI 21
#define cst_AT_No_AT_NMGS 22
#define cst_AT_No_AT_CFUN_CK 23
#define cst_AT_No_AT_NUESTATS 24
#define cst_AT_NBAND 25
#define cst_AT_No_AT_RD_REV 26
#define cst_AT_No_AT_NCDP_CK 27
#define cst_AT_No_AT_DATE_TIME 28
#define cst_AT_No_AT_IMEI 29
//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD>ƶ<EFBFBD>ONENETָ<54><D6B8>
#define cst_AT_No_AT_MIPLDEL 30
#define cst_AT_No_AT_MIPLCONFIG 31
#define cst_AT_No_AT_MIPLADDOBJ 32
#define cst_AT_No_AT_MIPLNOTIFY 33
#define cst_AT_No_AT_MIPLOPEN 34
#define cst_AT_No_AT_MIPLWRITE 35
#define cst_AT_No_AT_MIPLNOTIFY_ACKID 36
#define cst_AT_No_AT_CPSMS 37
#define cst_AT_No_AT_MIPLCLOSE 38
#define cst_AT_No_AT_MIPLDELOBJ 39
#define cst_AT_No_AT_CMEE 40
#define cst_AT_No_AT_CCLK 41
#define cst_AT_No_AT_NCSEARFCN 42
#define cst_AT_No_AT_NPTWEDRXS 43
#define cst_AT_No_AT_MIPLCREATE 44
#define cst_AT_No_AT_MIPLDISCOVERRSP 45
#define cst_AT_No_AT_MIPLDISCOVER 46
#define cst_AT_No_AT_ICCID 47
#define cst_AT_No_AT_CFUN0 48
#define cst_AT_No_AT_CFUN1 49
#define cst_AT_No_AT_QIOPEN 50
#define cst_AT_No_AT_UDP_REV 51
#define cst_AT_No_AT_UPD_READ 52
#define cst_AT_No_AT_QPOWD 53
#define cst_AT_No_AT_MIPLCONFIG_CK 54
#define cst_AT_No_AT_NMGS_ACKID 55
#define cst_AT_QSCLK_OPEN 56
#define cst_AT_QSCLK_CLOSE 57
#define cst_AT_No_CSCON1 58
#define cst_AT_No_AT_QICFG 59
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define NBBAUD1200 0
#define NBBAUD2400 1
#define NBBAUD4800 2
#define NBBAUD9600 3
#define NBBAUD19200 4
#define NBBAUD38400 5
#define NBBAUD57600 6
#define NBBAUD115200 7
//ʱ<><CAB1>Ƶ<EFBFBD><C6B5>
#define NBUART1_CLOCK_HZ 2000000
#define NBUART2_CLOCK_HZ 2000000
#define NBUART3_CLOCK_HZ 2000000
#define NBUART4_CLOCK_HZ 2000000
#define NBUART5_CLOCK_HZ 2000000
#define NBLPUART_CLOCK_HZ 3686400 //32768
#define NBUART_CLOCK_HZ(_COM_) (((_COM_) == NBCOM1) ? NBUART1_CLOCK_HZ : ((_COM_) == NBCOM2) ? NBUART2_CLOCK_HZ : ((_COM_) == NBCOM3) ? NBUART3_CLOCK_HZ : ((_COM_) == NBCOM4) ? NBUART4_CLOCK_HZ : ((_COM_) == NBCOM5) ? NBUART5_CLOCK_HZ : NBLPUART_CLOCK_HZ)
//<2F><>żУ<C5BC><D0A3>
#define NBODD_PARITY 0
#define NBEVEN_PARITY 1
#define NBNONE_PARITY 2
//<2F><><EFBFBD><EFBFBD>λ
#define NBUART_WORDLEN_8B ((u32)0x00000000) //8λ
//ֹͣλ
#define NBUART_STOPBIT_1 ((u32)0x00000) //1<><31>ֹͣλ
#define NBUART_STOPBIT_1_5 ((u32)0x4000u) //1.5<EFBFBD><EFBFBD>ֹͣλ
#define NBUART_STOPBIT_2 ((u32)0x8000u) //2<><32>ֹͣλ
//У<><D0A3>
#define NBUART_NONE_PARITY ((u32)0x00000000) //<2F><>У<EFBFBD><D0A3>
#define NBUART_EVEN_PARITY ((u32)0x00000004) //żУ<C5BC><D0A3>
#define NBUART_ODD_PARITY ((u32)0x00000008) //<2F><>У<EFBFBD><D0A3>
#define NBUART_MODE_REC ((u32)0x00000001) // RX mode
#define NBUART_MODE_SEND ((u32)0x00000000) // TX mode
#define NBUART_MODE_SEND_REC ((u32)0x00000001) // RX and TX mode
//Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define NBUART_HWCTR_NONE ((u32)0x00000000) // <20><>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>
#define NBUART_OVERSAMPLE_16 ((u32)0x0000)
#define NBUART_OVERSAMPLE_8 ((u32)0x200u)
#define NBUART_ONE_BIT_SAMPLE_DIS ((u32)0x00000000)
#define NBUART_ONE_BIT_SAMPLE_EN ((u32)USART_CR3_ONEBIT)
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>޸ģ<DEB8>
#define NBLPUART0_BUF_SIZE 512
#define NBLPUART1_BUF_SIZE 512
#define ORDER_WRITE 0 //???????+MIPLWRITE
#define ORDER_EXECUTE 1 //???????+MIPLEXECUTE
//<2F><>Ӫ<EFBFBD><D3AA>
#define CHINA_MOBILE 0x7A //<2F>й<EFBFBD><D0B9>ƶ<EFBFBD>
#define CHINA_UNICOM 0x7B //<2F>й<EFBFBD><D0B9><EFBFBD>ͨ
#define CHINA_TELECOM 0x7C //<2F>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
#define CHINA_MOBILE_IOT 0x7D //<2F>й<EFBFBD><D0B9>ƶ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BC25_UP_BUF_SIZE 512
//<2F><><EFBFBD><EFBFBD>ͨ<EFBFBD>Žṹ<C5BD><E1B9B9>
typedef struct
{
u8 *send_buf; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ
u16 send_len; //<2F><>¼<EFBFBD><C2BC><EFBFBD>͵<EFBFBD><CDB5>ܳ<EFBFBD><DCB3><EFBFBD>
u16 send_count; //<2F><>¼<EFBFBD><C2BC><EFBFBD>͵ĵ<CDB5>ǰλ<C7B0><CEBB>
u8 send_style; //<2F><>¼<EFBFBD><C2BC><EFBFBD>ͷ<EFBFBD>ʽ<EFBFBD><CABD>ATָ<54><EFBFBD><EEA1A2><EFBFBD>š<EFBFBD>NBIOT<4F><54><EFBFBD>ݣ<EFBFBD>
u8 hex_flag; //<2F><>¼<EFBFBD><C2BC><EFBFBD>͵ĸߵ<C4B8>λ<EFBFBD><CEBB>HEX<45><58><EFBFBD>ݵĸߵ<C4B8>λ<EFBFBD><CEBB>
u16 rev_len; //NBIOT<4F><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
u8 rev_buf[BC25_UP_BUF_SIZE*2]; //NBIOT<4F><54><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD> ASCII
u8 rev_buf_handled[BC25_UP_BUF_SIZE]; //<2F><><EFBFBD><EFBFBD>Ϊhex
u8 sms_rev_len; //<2F><><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
u8 sms_rev_num[7]; //<2F><><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>
s8 rev_ack_flag; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>־λ
u8 sms_total_count; //<2F><><EFBFBD><EFBFBD><EFBFBD>ܴ洢<DCB4>ռ<EFBFBD>
u8 nbiot_rev_flag; //NBIOT<4F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
u8 nbiot_rev_ack; //NBIOT<4F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>--<2D><>Ҫ<EFBFBD><D2AA>дӦ<D0B4><D3A6>
u32 flow_count; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char nbiot_rev_serial_number[10];//<2F><><EFBFBD><EFBFBD>ACK_NUM<55><4D><EFBFBD><EFBFBD>
u8 nbiot_rev_serial_number_cnt;//<2F><><EFBFBD><EFBFBD>ACK_NUM<55><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
u8 udp1_rev_data_hint;//udp<64>յ<EFBFBD><D5B5><EFBFBD>Ϣ<EFBFBD><CFA2>ʾ
u8 udp2_rev_data_hint;//udp<64>յ<EFBFBD><D5B5><EFBFBD>Ϣ<EFBFBD><CFA2>ʾ
u8 nb_data_type;
u8 Onenet_type_down_order;
char nbiot_discover_num[10];
} UART_COMM;
typedef struct
{
u32 BaudRate;
u32 WordLength;
u32 StopBits;
u32 Parity;
u32 Mode;
u32 HwFlowCtl;
u32 OverSampling;
u32 OneBitSampling;
u8 LPModeFunction;
u8 UARTMode;
} NBUART_PARA_STRUCT;
//******************************* <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>***************************************
//******************************* <20>ⲿ<EFBFBD>ӿں<D3BF><DABA><EFBFBD>***********************************
void NbiotUartSend(u8 *buf, u16 len, u8 style);
s8 NbiotCheckAtAck(void);
void NbiotClearAtAck(void);
void GetRevSms(u8 *num, u8 *sms, u8 *len);
void NbiotRcv(u16 *len, u8 **data);
u8 NbiotRcvFinish(void);
void NBUartReceiveIT(void);
void NbiotClearMsg(void);
void NbiotGetRSRP(s16 *rsrp_data);
void NbiotGetSNR(s16 *snr_data);
void NbiotGetIMEI(char *imei);
void NbiotGetIMSI(char *imsi);
void NbiotGetICCID(char *iccid);
u8 NbiotGetNBAND(void);
void NbiotGetECL(s16 *ecl_data);
void NbiotGetCell_ID(u8 *cell_id_data);
void NbiotGetPCI(u16 *pci_data);
void NbiotGetCSQ(u8 *csq_data);
void NbiotGetEARFCN(u16 *earfcn_data);
void UdpStartCheckData(void);
void UdpEndCheckData(void);
u8 UdpIfNeedReadDataBc25(u8 connect_type);
u8 UdpIfNeedReadData(void);
//<2F><><EFBFBD><EFBFBD>udp<64><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD>־
void ClearUdpReadDataFlag(u8 connect_type);
u8 GetRcvDataType(void);//<2F><>ȡ<EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void SetRcvDataType(u8 temp_type);
void NbiotGetDiscover_num (char *discover_num);
u8 NbiotGetRevAck (void);
void ClearNbiotGetRevAck(void);
u8 NbiotGetOnenetTypeDownOrder (void);
void NbiotGetWriteAck_num (char *ack_num);
void SetUartCommRevFlag (void);
void NbiotSetRevMipldiscover(void);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>޸ģ<DEB8>UDP<44>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٲ<EFBFBD>һ<EFBFBD>Σ<EFBFBD>Ӧ<EFBFBD><D3A6>֡<EFBFBD><D6A1><EFBFBD>·<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᶪָ<E1B6AA><D6B8>
u8 Check_Udp_Data_Received(void);
void Clear_Udp_Rec_Data_Flag(void);
void UdpReadStart(void);
void UdpReadStop(void);
#endif
#endif /* __PIC24_NB_UART_DRIVER_H */