P6UWaterBLE/hardinterface/ML307A/nb_driver_ml307a.h

364 lines
8.5 KiB
C
Raw Normal View History

2024-06-03 15:49:39 +08:00
/************************************************************************************
* @Copyright (c) :(C)2017, Qindao ieslab Co., Ltd
* @FileName :nb_driver_bc25.h
* @Author :QDIES PLATFORM TEAM
* @Version :V1.0
* @Date :2020-8-13
* @Description :
************************************************************************************/
#ifndef __NB_DRIVER_ML302_H
#define __NB_DRIVER_ML302_H
#include "sys_config.h"
#ifdef MODULE_ML307A_TCP
#include "type.h"
#include <string.h>
/*-----------------<2D>˿<EFBFBD><CBBF><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>-------------------*/
#define RSTN_NB_PORT (GpioPortF)
#define RSTN_NB_PIN (GpioPin0)
#define BAT_NB_PORT (GpioPortE)
#define BAT_NB_PIN (GpioPin4)
#define PWR_NB_PORT (GpioPortA)//(GpioPortF)
#define PWR_NB_PIN (GpioPin15)//(GpioPin1)
#define NB_PSM_WAKE_PORT (GpioPortA)
#define NB_PSM_WAKE_PIN (GpioPin2)
#define RSTN_NB_LOW() Gpio_WriteOutputIO(RSTN_NB_PORT, RSTN_NB_PIN, GPIO_PIN_SET)
#define RSTN_NB_HIG() Gpio_WriteOutputIO(RSTN_NB_PORT, RSTN_NB_PIN, GPIO_PIN_RESET)
#define BAT_NB_DISABLE() Gpio_WriteOutputIO(BAT_NB_PORT, BAT_NB_PIN, GPIO_PIN_RESET)
#define BAT_NB_ENABLE() Gpio_WriteOutputIO(BAT_NB_PORT, BAT_NB_PIN, GPIO_PIN_SET)
#define PWR_NB_LOW() Gpio_WriteOutputIO(PWR_NB_PORT, PWR_NB_PIN, GPIO_PIN_SET)
#define PWR_NB_HIG() Gpio_WriteOutputIO(PWR_NB_PORT, PWR_NB_PIN, GPIO_PIN_RESET)
#define NB_PSM_WAKE_LOW() Gpio_WriteOutputIO(NB_PSM_WAKE_PORT , NB_PSM_WAKE_PIN, GPIO_PIN_SET)
#define NB_PSM_WAKE_HIG() Gpio_WriteOutputIO(NB_PSM_WAKE_PORT , NB_PSM_WAKE_PIN, GPIO_PIN_RESET)
#define MODULE_POWER_DELAY_TIME 1000 //<2F><>Դ<EFBFBD><D4B4>ͨ<EFBFBD>ȶ<EFBFBD>ʱ<EFBFBD><CAB1>
#define MODULE_POWERKEY_DELAY_TIME 3000 //<2F><><EFBFBD><EFBFBD>: <20><> PWR_KEY <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2s~3.5s
/*-----------------<2D>˿<EFBFBD><CBBF><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>-------------------*/
//<2F><>ѯ<EFBFBD><D1AF>״̬<D7B4><CCAC>Ϣ
#define TASK_BUSY 0 //BUSY״̬
#define TASK_IDLE 1 //IDLE״̬
//<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define NBIOT_ING 0xA2 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define NBIOT_ONLINE 0xA3 //NBIOT<4F><54><EFBFBD><EFBFBD>
#define NBIOT_SUCCESS 0xA4 //<2F><><EFBFBD>ͳɹ<CDB3>
#define NBIOT_ERROR 0xA5 //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef enum{
TASK_FAIL=0,
TASK_SUCCESS,
TASK_INIT,
}TYP_TASK_RESULT;
//NBIOT<4F><54><EFBFBD><EFBFBD>״̬
#define NB_ON_LINE 0x01 //<2F><><EFBFBD><EFBFBD>
#define NB_OFF_LINE 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CONNECT_ON_LINE 0x01 //<2F><><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
#define CONNECT_OFF_LINE 0x00 //<2F><><EFBFBD>ӶϿ<D3B6>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define NET_CEREG_MIN_TIMES 5
#define NET_CEREG_MAX_TIMES 30
/************************ATָ<54><EFBFBD><EEBCAF><EFBFBD><EFBFBD>*************************************/
//ATָ<54><D6B8>״̬<D7B4><CCAC>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>
typedef enum{
ResultOk=0,
ResultBusy,
ResultFail,
}TYP_RESULT_CODE;
//ATָ<54><D6B8><EFBFBD>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6>ʱ<EFBFBD><CAB1>
typedef enum{
WT_2S=2,
WT_5S=5,
WT_20S=20,
WT_40S=40
}TYP_AT_WAIT_TIME;
//ATָ<54><D6B8><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
typedef enum{
RETRY_0=0,
RETRY_1,
RETRY_2,
RETRY_3,
RETRY_4,
RETRY_5,
RETRY_10 = 10,
RETRY_15 = 15,
RETRY_30 = 30
}TYP_AT_RETRY_COUNT;
//ģ<><C4A3>ATָ<54><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef enum{
AT_CODE_AT=0,
AT_CODE_CGSN,
AT_CODE_CPIN,
AT_CODE_CIMI,
AT_CODE_MCCID,
AT_CODE_CFUN_CK,
AT_CODE_CFUN0,
AT_CODE_CFUN1,
AT_CODE_CSQ,
AT_CODE_MUESTATS,
AT_CODE_SBAND,
AT_CODE_CGDCONT,
AT_CODE_MIPCALL_CK,
AT_CODE_CEREG,
AT_CODE_MIPCALL,
AT_CODE_CCLK,
AT_CODE_MIPCFG_ACK1,
AT_CODE_MIPCFG_ACK0,
AT_CODE_MIPCFG_TCP,
AT_CODE_MIPOPEN,
AT_CODE_TCPSEND,
AT_CODE_TCPSEND_ACK,
AT_CODE_MIPCLOSE,
AT_CODE_MIPCFG_UDP1,
AT_CODE_MIPOPEN_UDP1,
AT_CODE_UDPSEND1,
AT_CODE_MIPCLOSE_UDP1,
AT_CODE_MIPCFG_UDP2,
AT_CODE_MIPOPEN_UDP2,
AT_CODE_UDPSEND2,
AT_CODE_MIPCLOSE_UDP2,
AT_CODE_MPOF,
AT_CODE_ALL
}TYP_AT_CMDCODE;
#define AT_CMD_COUNT AT_CODE_ALL
typedef struct
{
const TYP_AT_CMDCODE AtCode;
const char* pAtCmdStr;
const unsigned char WaitTime;
unsigned char ErrorLimit;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const unsigned char CaseAtNum;
} STRUCT_AT_CMD;
/********************************************************************/
//ATָ<54><D6B8>ͨ<EFBFBD><CDA8>״̬
typedef enum{
AT_REQUEST_IDLE=0,
AT_REQUEST_SEND,
AT_REQUEST_CHECK,
AT_REQUEST_WT
}TYP_STATE_AT_REQUEST;
//<2F><>״̬<D7B4><CCAC><EFBFBD>е<EFBFBD>״̬<D7B4><CCAC>
typedef enum{
S_NBIOT_MAIN_IDLE=0,
S_NBIOT_MAIN_POWER_INIT,
S_NBIOT_MAIN_NET_OPEN,
S_NBIOT_MAIN_DATA_SEND,
S_NBIOT_MAIN_TCP_OPEN,
S_NBIOT_MAIN_TCP_SEND,
S_NBIOT_MAIN_TCP_READ,
S_NBIOT_MAIN_UDP_OPEN,
S_NBIOT_MAIN_UDP_SEND,
S_NBIOT_MAIN_POWER_OFF
}TYP_STATE_MAIN_CONNECT;
//ģ<><EFBFBD><E9BFAA>״̬<D7B4><CCAC>
typedef enum{
MODULE_IDLE=0,
MODULE_POWERON,
MODULE_POWERON_WT,
MODULE_POWER_KEY_ON_WT,
}TYP_STEP_MODULE_POWERON;
//ģ<><C4A3><EFBFBD>ػ<EFBFBD>״̬<D7B4><CCAC>
typedef enum{
S_PWOFF_IDLE=0,
S_PWOFF_TCP_CLOSE,
S_PWOFF_UDP1_CLOSE,
S_PWOFF_UDP2_CLOSE,
S_PWOFF_MPOF,
S_PWOFF_PW_DOWN,
S_PWOFF_PW_DOWN_WAIT,
}TYP_STATE_POWER_OFF;
//ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>״̬<D7B4><CCAC>
typedef enum{
S_MODULE_INIT_IDLE=0,
S_MODULE_INIT_POWER_ON,
S_MODULE_INIT_AT,
S_MODULE_INIT_CGSN,
S_MODULE_INIT_CPIN,
S_MODULE_INIT_CIMI,
S_MODULE_INIT_MCCID,
S_MODULE_INIT_CFUN_CK,
S_MODULE_INIT_CFUN0,
S_MODULE_INIT_CFUN1,
S_MODULE_INIT_CSQ,
S_MODULE_INIT_MUESTATS,
S_MODULE_INIT_SBAND,
S_MODULE_INIT_MIPCALL_CK,
S_MODULE_INIT_CGDCONT,
S_MODULE_INIT_MIPCALL,
S_MODULE_INIT_CEREG_CK,
S_MODULE_INIT_CCLK,
}TYP_MODULE_INIT;
//TCP<43><50><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
typedef enum{
S_TCP_CONNECT_IDLE=0,
S_TCP_CONNECT_START,
S_TCP_CONNECT_MIPCFG,
S_TCP_CONNECT_MIPOPEN,
S_TCP_CONNECT_NSOCR_R
}TYP_TCP_CONNECT;
//TCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
typedef enum{
S_TCP_SEND_IDLE=0,
S_TCP_SEND_START,
S_TCP_SEND_DATALEN,
S_TCP_SEND_DATA
}TYP_TCP_SEND;
//UDP<44><50><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
typedef enum{
S_UDP_CONNECT_IDLE=0,
S_UDP_CONNECT_START,
S_UDP_CONNECT_MIPOPEN,
S_UDP_CONNECT_NSOCR_R
}TYP_UDP_CONNECT;
//UDP<44><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
typedef enum{
S_UDP_SEND_IDLE=0,
S_UDP_SEND_START,
S_UDP_SEND_DATALEN,
S_UDP_SEND_DATA
}TYP_UDP_SEND;
//PSM״̬<D7B4><CCAC><EFBFBD><EFBFBD>
typedef enum{
PSM_STATE_OUT=0,
PSM_STATE_WAKE,
PSM_STATE_SLEEP,
}TYP_PSM_STATE;
//ͨ<><CDA8>ģʽѡ<CABD><D1A1>
#define SIM_CARD_TELECOM 0x00 //<2F><><EFBFBD>ſ<EFBFBD>
#define SIM_CARD_MOBILE 0X01 //<2F>ƶ<EFBFBD><C6B6><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>Э<EFBFBD><D0AD>
#define NBIOT_CONNECT_COAP 0
#define NBIOT_CONNECT_UDP1 1
#define NBIOT_CONNECT_UDP2 2
#define SEND_TYPE_COAP 0
#define SEND_TYPE_UDP1 1
#define SEND_TYPE_UDP2 2
#define SEND_TYPE_TCP1 3
//******************************* <20><EFBFBD><EFBFBD><E5B6A8>*************************************
//<2F><><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
#ifndef APN_SIZE
#define APN_SIZE 32
#endif
typedef struct
{
u8 *work_mode; //<2F><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>һֱ<D2BB><D6B1><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
u8 *ip; //IP
u8 *spare_ip; //<2F><><EFBFBD><EFBFBD>IP
u8 *port; //<2F>˿ں<CBBF>
u8 *spare_port; //<2F><><EFBFBD>ö˿ں<CBBF>
u8 *apn; //APN
} CFIG_PARA;
//NBIOT<4F><54>Ϣ
typedef union
{
struct
{
u8 para_change : 1; //<2F><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
u8 station_close : 1; //<2F><>վ<EFBFBD><D5BE><EFBFBD><EFBFBD>
u8 open_spare_station : 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ
u8 close_spare_station : 1; //<2F>رձ<D8B1>վ
u8 apn_open : 1; //APN<50><4E><EFBFBD><EFBFBD>
u8 rev_data : 1; //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
} s;
u8 info;
} NBIOT_MSG;
//NBIOT<4F><54><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>
typedef struct
{
CFIG_PARA cfig_para; //<2F><><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
u8 csq; //<2F>ź<EFBFBD>ֵ
u8 net_state; //<2F><><EFBFBD><EFBFBD>״̬
u8 offline_reason; //<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
u8 Telecom; //<2F><>Ӫ<EFBFBD><D3AA>
u8 spare_station; //<2F><>վ
u8 coap_state;
u8 udp1_state;
u8 udp2_state;
} NBIOT_PARA;
//<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct
{
u8 *state; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>msg
u8 *buf; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
u16 len; //<2F><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
} NBIOT_SEND_DATA;
//******************************* <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>***************************************
//******************************* <20>ⲿ<EFBFBD>ӿں<D3BF><DABA><EFBFBD>***********************************
void NbiotOnlineTask(u8 *state);
void NbiotSendTask(u8 *addr, u16 len, u8 send_type,u8 *state);
void NbiotUdpOpenTask(void);
void NbiotReadECLSNRTask(u8 *state);
u8 NbiotIfIdle(void);
u8 NbiotIfOnline(void);
u8 NbiotIfSleep(void);
void NbiotPreSleep(void);
void NbiotWakeSleep(void);
u8 ConncetIfOnline(u8 connect_type);
void NB_NetConnectStart(unsigned char* temp_ip, u16 temp_port, u8 connect_type);
void NbiotGetCcidTask(u8 **ccid, u8 *state);
void NbiotMainMachine(void);
u8 If_NB_Poweron(void);
void StartPowerOffTask(void);
void set_ip_port(void);
void NbForcePowerOff(void);
u8 GetNbiotSendType(void);
u8 UdpIfOnline(void);
u8 TcpIfOnline(void);
u32 sys_get_net_state(void);
TYP_PSM_STATE getPsmState(void);
void NbiotPsmWakeupTask(void);
void NbiotPsmSleepTask(void);
void NbiotPsmCheckTask(void);
#endif
#endif