初版
This commit is contained in:
@@ -0,0 +1,761 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : hci_ll.h
|
||||
|
||||
* Description : 提供Vendor Host 直接调用Controller API LL Part
|
||||
|
||||
* Author : Bingquan
|
||||
|
||||
* Email : bingquan_cai@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2018-12-04 11:58
|
||||
|
||||
* Copyright:(c)JIELI 2011-2017 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#ifndef _HCI_LL_H_
|
||||
#define _HCI_LL_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
#if 0
|
||||
// LE CONTROLLER COMMANDS
|
||||
#define HCI_LE_READ_ISO_TX_SYNC 0x0061
|
||||
#define HCI_LE_SET_CIG_PARAMS 0x0062
|
||||
#define HCI_LE_SETUP_ISO_DATA_PATH 0x006E
|
||||
#define HCI_LE_CREATE_BIG 0x0068
|
||||
|
||||
// LE EVENTS
|
||||
#define HCI_SUBEVENT_LE_BIG_INFO_ADV_REPORT_EVT 0x22
|
||||
#define HCI_SUBEVENT_LE_TERMINATE_BIG_CMPL_EVT 0x1C
|
||||
#define HCI_SUBEVENT_LE_BIG_SYNC_EST_EVT 0x1D
|
||||
#define HCI_SUBEVENT_LE_BIG_SYNC_LOST_EVT 0x1E
|
||||
#define HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS 0x13
|
||||
#define HCI_SUBEVENT_LE_ADVERTISING_REPORT 0x02
|
||||
|
||||
#endif
|
||||
|
||||
#define HCI_LE_CIS_ESTABLISHED_EVENT 0x19
|
||||
#define HCI_LE_CIS_REQUEST_EVENT 0x1A
|
||||
#define HCI_LE_CREATE_BIG_COMPLETE_EVENT 0x1B
|
||||
#define HCI_LE_SET_EXTENDED_ADVERTISING_ENABLE 0x0039
|
||||
|
||||
// Controller Error Codes
|
||||
#define CONNECTION_TERMINATED_BY_LOCAL_HOST 0x16
|
||||
|
||||
enum {
|
||||
LL_EVENT_SUPERVISION_TIMEOUT,
|
||||
LL_EVENT_RX,
|
||||
LL_EVENT_ACL_TX_POST,
|
||||
};
|
||||
|
||||
//使用的例子枚举
|
||||
enum {
|
||||
NULL_SET = 0,
|
||||
BIG_RX,
|
||||
BIG_TX,
|
||||
CIG_RX,
|
||||
CIG_TX,
|
||||
SCAN,
|
||||
ADV,
|
||||
EXT_ADV,
|
||||
EXT_SCAN,
|
||||
HEART_SET_TX, //新跳包发送房 BIG RX
|
||||
HEART_SET_RX, //新跳包发送房 BIG TX
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
u8 Own_Address_Type: 2;
|
||||
u8 Adv_Filter_Policy: 2;
|
||||
u8 Scan_Filter_Policy: 2;
|
||||
u8 initiator_filter_policy: 2;
|
||||
} hci_ll_param_t;
|
||||
|
||||
/*! \brief LE Advertising report event. */
|
||||
typedef enum {
|
||||
EVT_TYPE_ADV_IND,
|
||||
EVT_TYPE_ADV_DIRECT_IND,
|
||||
EVT_TYPE_ADV_SCAN_IND,
|
||||
EVT_TYPE_ADV_NONCONN_IND,
|
||||
EVT_TYPE_SCAN_RSP,
|
||||
} le_evt_type_e;
|
||||
|
||||
typedef struct {
|
||||
uint8_t Subevent_Code;
|
||||
uint8_t Num_Reports;
|
||||
uint8_t Event_Type;
|
||||
uint8_t Address_Type;
|
||||
uint8_t Address[6];
|
||||
uint8_t Data_Length;
|
||||
uint8_t Data[0];
|
||||
} _GNU_PACKED_ le_adv_report_evt_t;
|
||||
|
||||
/*! \brief LE Extended Advertising report event. */
|
||||
typedef union {
|
||||
struct {
|
||||
uint16_t Connectable_advertising : 1,
|
||||
Scannable_advertising : 1,
|
||||
Directed_advertising : 1,
|
||||
Scan_response : 1,
|
||||
Legacy_adv_PDUs_used : 1,
|
||||
Data_status : 2,
|
||||
All_other_bits : 9;
|
||||
};
|
||||
|
||||
uint16_t event_type;
|
||||
} _GNU_PACKED_ le_evt_type_t;
|
||||
|
||||
typedef struct {
|
||||
uint8_t Subevent_Code;
|
||||
uint8_t Num_Reports;
|
||||
le_evt_type_t Event_Type;
|
||||
uint8_t Address_Type;
|
||||
uint8_t Address[6];
|
||||
uint8_t Primary_PHY;
|
||||
uint8_t Secondary_PHY;
|
||||
uint8_t Advertising_SID;
|
||||
uint8_t Tx_Power;
|
||||
uint8_t RSSI;
|
||||
uint16_t Periodic_Advertising_Interval;
|
||||
uint8_t Direct_Address_Type;
|
||||
uint8_t Direct_Address[6];
|
||||
uint8_t Data_Length;
|
||||
uint8_t Data[0];
|
||||
} _GNU_PACKED_ le_ext_adv_report_evt_t;
|
||||
|
||||
struct __periodic_adv_report_event {
|
||||
u8 Subevent_Code;
|
||||
u16 Sync_Handle;
|
||||
u8 Tx_Power;
|
||||
u8 RSSI;
|
||||
u8 Unused;
|
||||
u8 Data_Status;
|
||||
u8 Data_Length;
|
||||
u8 Data[0];
|
||||
} _GNU_PACKED_ ;
|
||||
|
||||
struct __periodic_creat_sync {
|
||||
u8 Filter_Policy;
|
||||
u8 Advertising_SID;
|
||||
u8 Advertising_Address_Type;
|
||||
u8 Advertiser_Address[6];
|
||||
u8 Skip[2];
|
||||
u8 Sync_Timeout[2];
|
||||
u8 Unused;
|
||||
} _GNU_PACKED_;
|
||||
|
||||
/*! \brief LE Set Scan Parameters. */
|
||||
typedef struct {
|
||||
uint8_t LE_Scan_Type;
|
||||
uint16_t LE_Scan_Interval;
|
||||
uint16_t LE_Scan_Window;
|
||||
uint8_t Own_Address_Type;
|
||||
uint8_t Scanning_Filter_Policy;
|
||||
} _GNU_PACKED_ le_set_scan_param_t;
|
||||
|
||||
typedef struct {
|
||||
uint8_t Own_Address_Type;
|
||||
uint8_t Scanning_Filter_Policy;
|
||||
uint8_t Scanning_PHYs;
|
||||
uint8_t Scan_Type;
|
||||
uint16_t Scan_Interval;
|
||||
uint16_t Scan_Window;
|
||||
} _GNU_PACKED_ le_ext_scan_param_lite_t;
|
||||
|
||||
struct __ext_scan_param {
|
||||
u8 Own_Address_Type;
|
||||
u8 Scanning_Filter_Policy;
|
||||
u8 Scanning_PHYs;
|
||||
struct __scan_phy_param {
|
||||
u8 Scan_Type;
|
||||
u16 Scan_Interval;
|
||||
u16 Scan_Window;
|
||||
} _GNU_PACKED_ scan_phy_param[0];
|
||||
} _GNU_PACKED_;
|
||||
|
||||
struct __ext_scan_enable {
|
||||
u8 Enable;
|
||||
u8 Filter_Duplicates;
|
||||
u16 Duration;
|
||||
u16 Period;
|
||||
} _GNU_PACKED_;
|
||||
|
||||
/*! \brief LE Set Extended Advertising Parameters. */
|
||||
typedef struct {
|
||||
uint8_t Advertising_Handle;
|
||||
uint16_t Advertising_Event_Properties;
|
||||
uint8_t Primary_Advertising_Interval_Min[3];
|
||||
uint8_t Primary_Advertising_Interval_Max[3];
|
||||
uint8_t Primary_Advertising_Channel_Map;
|
||||
uint8_t Own_Address_Type;
|
||||
uint8_t Peer_Address_Type;
|
||||
uint8_t Peer_Address[6];
|
||||
uint8_t Advertising_Filter_Policy;
|
||||
uint8_t Advertising_Tx_Power;
|
||||
uint8_t Primary_Advertising_PHY;
|
||||
uint8_t Secondary_Advertising_Max_Skip;
|
||||
uint8_t Secondary_Advertising_PHY;
|
||||
uint8_t Advertising_SID;
|
||||
uint8_t Scan_Request_Notification_Enable;
|
||||
} _GNU_PACKED_ le_set_ext_adv_param_t;
|
||||
|
||||
#define ADVERTISING_DATE_LEN 96
|
||||
/*! \brief LE Set Extended Advertising Data. */
|
||||
typedef struct {
|
||||
uint8_t Advertising_Handle;
|
||||
uint8_t Operation;
|
||||
uint8_t Fragment_Preference;
|
||||
uint8_t Advertising_Data_Length;
|
||||
uint8_t Advertising_Data[ADVERTISING_DATE_LEN];
|
||||
} _GNU_PACKED_ le_set_ext_adv_data_t;
|
||||
|
||||
/*! \brief LE Set Extended Advertising Enable. */
|
||||
typedef struct {
|
||||
uint8_t Enable;
|
||||
uint8_t Number_of_Sets;
|
||||
uint8_t Advertising_Handle;
|
||||
uint16_t Duration;
|
||||
uint8_t Max_Extended_Advertising_Events;
|
||||
} _GNU_PACKED_ le_set_ext_adv_en_t;
|
||||
|
||||
struct periodic_advertising_param {
|
||||
u8 Advertising_Handle;
|
||||
u16 Periodic_Advertising_Interval_Min;
|
||||
u16 Periodic_Advertising_Interval_Max;
|
||||
u16 Periodic_Advertising_Properties;
|
||||
} _GNU_PACKED_;
|
||||
|
||||
struct periodic_advertising_data {
|
||||
u8 Advertising_Handle;
|
||||
u8 Operation;
|
||||
u8 Advertising_Data_Length;
|
||||
u8 Advertising_Data[255];
|
||||
} _GNU_PACKED_;
|
||||
|
||||
typedef struct {
|
||||
uint8_t Advertising_Handle;
|
||||
uint8_t Operation;
|
||||
uint8_t Advertising_Data_Length; // 0 to 252
|
||||
uint8_t Advertising_Data[0];
|
||||
} _GNU_PACKED_ le_set_prd_adv_data_t;
|
||||
|
||||
struct periodic_advertising_enable {
|
||||
u8 Enable;
|
||||
u8 Advertising_Handle;
|
||||
} _GNU_PACKED_;
|
||||
|
||||
typedef struct {
|
||||
uint16_t Sync_Handle;
|
||||
} _GNU_PACKED_ periodic_adv_terminate_sync;
|
||||
|
||||
/*! \brief HCI ACL Data packets */
|
||||
typedef struct {
|
||||
uint16_t Handle : 12;
|
||||
uint16_t PB_Flag : 2;
|
||||
uint16_t BC_Flag : 2;
|
||||
uint16_t Data_Total_Length;
|
||||
|
||||
uint8_t Data[0];
|
||||
} _GNU_PACKED_ hci_acl_data_packets_t ;
|
||||
|
||||
/*! \brief LE Set CIG Parameters */
|
||||
typedef struct {
|
||||
uint8_t GIG_ID;
|
||||
uint8_t SDU_Interval_C_To_P[3];
|
||||
uint8_t SDU_Interval_P_To_C[3];
|
||||
uint8_t Worst_Case_SCA;
|
||||
uint8_t Packing;
|
||||
uint8_t Framing;
|
||||
uint16_t Max_Transport_Latency_C_To_P;
|
||||
uint16_t Max_Transport_Latency_P_To_C;
|
||||
uint8_t CIS_Count;
|
||||
struct le_cis_param_t {
|
||||
uint8_t CIS_ID;
|
||||
uint16_t Max_SDU_C_To_P;
|
||||
uint16_t Max_SDU_P_To_C;
|
||||
uint8_t PHY_C_To_P;
|
||||
uint8_t PHY_P_To_C;
|
||||
uint8_t RTN_C_To_P;
|
||||
uint8_t RTN_P_To_C;
|
||||
} _GNU_PACKED_ param[0];
|
||||
} _GNU_PACKED_ le_set_cig_param_t;
|
||||
|
||||
/*! \brief LE Create CIS */
|
||||
typedef struct {
|
||||
uint8_t CIS_Count;
|
||||
struct le_cis_hdl_t {
|
||||
uint16_t CIS_Connection_Handle;
|
||||
uint16_t ACL_Connection_Handle;
|
||||
} _GNU_PACKED_ param[0];
|
||||
} _GNU_PACKED_ le_create_cis_t;
|
||||
|
||||
/*! \brief LE Remove CIS */
|
||||
typedef struct {
|
||||
uint8_t CIG_ID;
|
||||
} _GNU_PACKED_ le_remove_cig_t;
|
||||
|
||||
/*! \brief LE Setup ISO Data Path */
|
||||
typedef struct {
|
||||
uint16_t Connection_Handle;
|
||||
uint8_t Data_Path_Direction;
|
||||
uint8_t Data_Path_ID;
|
||||
struct {
|
||||
uint8_t Coding_Format;
|
||||
uint16_t Company_Identifier;
|
||||
uint16_t Vendor_ID;
|
||||
} _GNU_PACKED_ Codec_ID;
|
||||
uint8_t Controller_Delay[3];
|
||||
uint8_t Codec_Configuratin_Length;
|
||||
uint8_t Codec_Configuratin[0];
|
||||
} _GNU_PACKED_ le_setup_iso_data_path_t;
|
||||
|
||||
/*! \brief LE Remove ISO Data Path */
|
||||
typedef struct {
|
||||
uint16_t Connection_Handle;
|
||||
uint8_t Data_Path_Direction;
|
||||
} _GNU_PACKED_ le_remove_iso_data_path_t;
|
||||
|
||||
/*! \brief LE Create BIG */
|
||||
typedef struct {
|
||||
uint8_t BIG_Handle;
|
||||
uint8_t Advertising_Handle;
|
||||
uint8_t Num_BIS;
|
||||
uint8_t SDU_Interval[3];
|
||||
uint16_t Max_SDU;
|
||||
uint16_t Max_Transport_Latency;
|
||||
uint8_t RTN;
|
||||
uint8_t PHY;
|
||||
uint8_t Packing;
|
||||
uint8_t Framing;
|
||||
uint8_t Encryption;
|
||||
uint8_t Broadcast_Code[16];
|
||||
} _GNU_PACKED_ le_create_big_t;
|
||||
|
||||
/*! \brief LE Terminate BIG */
|
||||
typedef struct {
|
||||
uint8_t BIG_Handle;
|
||||
uint8_t Reason;
|
||||
} _GNU_PACKED_ le_terminate_big_t;
|
||||
|
||||
/*! \brief LE BIG Create Sync */
|
||||
typedef struct {
|
||||
uint8_t BIG_Handle;
|
||||
uint16_t Sync_Handle;
|
||||
uint8_t Encryption;
|
||||
uint8_t Broadcast_Code[16];
|
||||
uint8_t MSE;
|
||||
uint16_t BIG_Sync_Timeout;
|
||||
uint8_t Num_BIS;
|
||||
uint8_t BIS[0];
|
||||
} _GNU_PACKED_ le_big_create_sync_t;
|
||||
|
||||
typedef struct {
|
||||
uint8_t BIG_Handle;
|
||||
uint16_t Sync_Handle;
|
||||
uint8_t Encryption;
|
||||
uint8_t Broadcast_Code[16];
|
||||
uint8_t MSE;
|
||||
uint16_t BIG_Sync_Timeout;
|
||||
uint8_t Num_BIS;
|
||||
uint8_t BIS[2];
|
||||
} _GNU_PACKED_ le_big_create_sync_lite_t;
|
||||
|
||||
/*! \brief LE BIG Terminate Sync */
|
||||
typedef struct {
|
||||
uint8_t BIG_Handle;
|
||||
} _GNU_PACKED_ le_big_terminate_sync_t;
|
||||
|
||||
/*! \brief LE Read ISO TX Sync */
|
||||
typedef struct {
|
||||
uint16_t Connection_Handle;
|
||||
} _GNU_PACKED_ le_read_iso_tx_sync_t;
|
||||
|
||||
/*! \brief HCI ISO Data packets */
|
||||
typedef struct {
|
||||
uint32_t Connection_Handle : 12;
|
||||
uint32_t PB_Flag : 2;
|
||||
uint32_t TS_Flag : 1;
|
||||
uint32_t RFU : 1;
|
||||
uint32_t ISO_Data_Load_Length : 14;
|
||||
uint32_t RFU2 : 2;
|
||||
|
||||
uint32_t Time_Stamp;
|
||||
|
||||
uint32_t Packet_Sequence_Num : 16;
|
||||
uint32_t ISO_SDU_Length : 12;
|
||||
uint32_t RFU3 : 2;
|
||||
uint32_t Packet_Status_Flag : 2;
|
||||
|
||||
uint8_t ISO_SDU_Fragment[0];
|
||||
} _GNU_PACKED_ hci_iso_data_packets_t ;
|
||||
|
||||
typedef struct {
|
||||
u32 handle : 12;
|
||||
//0b00 frist fragment of a fragmented SDU
|
||||
//0b01 a continuation fragment of a fragmented SDU
|
||||
//0b10 a complete SDU
|
||||
//0b11 the last fragment of an SDU
|
||||
u32 pb_flag : 2;
|
||||
u32 ts_flag : 1;
|
||||
u32 rfu : 1;
|
||||
u32 iso_data_load_length : 14;
|
||||
u32 rfu2 : 2;
|
||||
|
||||
u32 time_stamp;
|
||||
|
||||
u32 packet_sequence_num : 16;
|
||||
u32 iso_sdu_length : 12;
|
||||
u32 rfu3 : 2;
|
||||
//0b00 Valid data. The complete ISO_SDU was received correctly.
|
||||
//0b01 Possibly invalid data. The contents of the ISO_SDU may contain errors or
|
||||
// part of the ISO_SDU may be missing. This is reported as "data with possible
|
||||
// errors".
|
||||
//0b10 Part(s) of the ISO_SDU were not received correctly. This is reported as
|
||||
// "lost data".
|
||||
u32 packet_status_flag : 2;
|
||||
|
||||
uint8_t *iso_sdu;
|
||||
} hci_iso_hdr_t;
|
||||
|
||||
/*! \brief LE BIGInfo Advertising report event */
|
||||
typedef struct {
|
||||
// uint8_t Subevent_Code;
|
||||
uint16_t Sync_Handle;
|
||||
uint8_t Num_BIS;
|
||||
uint8_t NSE;
|
||||
uint16_t ISO_Interval;
|
||||
uint8_t BN;
|
||||
uint8_t PTO;
|
||||
uint8_t IRC;
|
||||
uint16_t Max_PDU;
|
||||
uint8_t SDU_Interval[3];
|
||||
uint16_t Max_SDU;
|
||||
uint8_t PHY;
|
||||
uint8_t Framing;
|
||||
uint8_t Encryption;
|
||||
} _GNU_PACKED_ le_biginfo_adv_report_evt_t;
|
||||
|
||||
/*! \brief LE Create BIG Complete event */
|
||||
typedef struct {
|
||||
// uint8_t Subevent_Code;
|
||||
uint8_t Status;
|
||||
uint32_t BIG_Handle : 8,
|
||||
BIG_Sync_Delay : 24;
|
||||
uint32_t Transport_Latency_BIG : 24,
|
||||
PHY : 8;
|
||||
uint8_t NSE;
|
||||
uint8_t BN;
|
||||
uint8_t PTO;
|
||||
uint8_t IRC;
|
||||
uint16_t Max_PDU;
|
||||
uint16_t ISO_Interval;
|
||||
uint8_t Num_BIS;
|
||||
uint16_t Connection_Handle[0];
|
||||
} _GNU_PACKED_ le_create_big_complete_evt_t;
|
||||
|
||||
/*! \brief LE BIG Sync Established event */
|
||||
typedef struct {
|
||||
// uint8_t Subevent_Code;
|
||||
uint8_t Status;
|
||||
uint8_t BIG_Handle;
|
||||
uint32_t Transport_Latency_BIG : 24,
|
||||
NSE : 8;
|
||||
uint8_t BN;
|
||||
uint8_t PTO;
|
||||
uint8_t IRC;
|
||||
uint16_t Max_PDU;
|
||||
uint16_t ISO_Interval;
|
||||
uint8_t Num_BIS;
|
||||
uint16_t Connection_Handle[0];
|
||||
} _GNU_PACKED_ le_big_sync_established_evt_t;
|
||||
|
||||
/*! \brief LE Read ISO TX Sync Return Parameters */
|
||||
typedef struct {
|
||||
uint8_t Status;
|
||||
uint16_t Connection_Handle;
|
||||
uint16_t Paket_Sequence_Number;
|
||||
uint32_t TX_Time_Stamp;
|
||||
uint32_t Time_Offset : 24;
|
||||
} _GNU_PACKED_ le_read_iso_tx_sync_ret_t;
|
||||
|
||||
/*! \brief LE BIG Sync Lost event */
|
||||
typedef struct {
|
||||
uint8_t BIG_Handle;
|
||||
uint8_t Reason;
|
||||
} _GNU_PACKED_ le_big_sync_lost_evt_t;
|
||||
|
||||
/*! \brief LE CIS Request event */
|
||||
typedef struct {
|
||||
// uint8_t Subevent_Code;
|
||||
uint16_t ACL_Connection_Handle;
|
||||
uint16_t CIS_Connection_Handle;
|
||||
uint8_t CIG_ID;
|
||||
uint8_t CIS_ID;
|
||||
} _GNU_PACKED_ le_cis_request_evt_t;
|
||||
|
||||
/*! \brief LE CIS Established event */
|
||||
typedef struct {
|
||||
// uint8_t Subevent_Code;
|
||||
uint8_t Status;
|
||||
uint16_t Connection_Handle;
|
||||
uint8_t CIG_Sync_Delay[3];
|
||||
uint8_t CIS_Sync_Delay[3];
|
||||
uint8_t Transport_Latency_C_To_P[3];
|
||||
uint8_t Transport_Latency_P_To_C[3];
|
||||
uint8_t PHY_C_To_P;
|
||||
uint8_t PHY_P_To_C;
|
||||
uint8_t NSE;
|
||||
uint8_t BN_C_To_P;
|
||||
uint8_t BN_P_To_C;
|
||||
uint8_t FT_C_To_P;
|
||||
uint8_t FT_P_To_C;
|
||||
uint16_t Max_PDU_C_To_P;
|
||||
uint16_t Max_PDU_P_To_C;
|
||||
uint16_t ISO_Interval;
|
||||
} _GNU_PACKED_ le_cis_established_evt_t;
|
||||
/*! \brief LE Vendor Set BIG Transfer Param */
|
||||
typedef struct {
|
||||
uint16_t auxHdl;
|
||||
uint8_t bigHdl;
|
||||
} _GNU_PACKED_ leVendorSetBigTransParam_t;
|
||||
|
||||
/*! \brief LE Vendor BIG Sync Transfer */
|
||||
typedef struct {
|
||||
uint16_t auxHdl;
|
||||
uint8_t bigHdl;
|
||||
uint8_t maxPdu;
|
||||
uint8_t nse;
|
||||
uint8_t phys;
|
||||
uint16_t interval;
|
||||
uint32_t offset;
|
||||
uint16_t syncTimeoutMs;
|
||||
uint8_t encFormat;
|
||||
uint8_t encSr;
|
||||
} _GNU_PACKED_ leVendorBigSyncTrans_t;
|
||||
|
||||
typedef struct {
|
||||
// for BIG
|
||||
struct {
|
||||
uint32_t sync_offset; // Sync offset (uints:us).
|
||||
uint32_t tx_delay; // Tx delay (uints:us).
|
||||
uint32_t big_offset; // Big offset (uints:us).
|
||||
uint32_t aux_offset; // Aux offset (uints:us).
|
||||
uint8_t adv_cnt; // ADV counter
|
||||
uint8_t max_pdu; // Max PDU size(uints:octets)
|
||||
};
|
||||
|
||||
// for CIG
|
||||
struct {
|
||||
uint32_t cig_txDelay; // Tx delay (uints:us).
|
||||
uint32_t cig_offset; // Cig offset (uints:us).
|
||||
uint8_t cis_maxPdu; // Max PDU size(uints:octets)
|
||||
// for ACL
|
||||
uint8_t aclMaxPduCToP; // Central ACL max transmit PDU.
|
||||
uint8_t aclMaxPduPToC; // Peripheral ACL max transmit PDU.
|
||||
};
|
||||
} llVdrparam_t;
|
||||
|
||||
/*! \brief LE Set Periodic Advertising Receive Enable command */
|
||||
typedef struct {
|
||||
uint16_t Sync_Handle;
|
||||
uint8_t Enable;
|
||||
} _GNU_PACKED_ le_set_prd_adv_receive_en_t;
|
||||
|
||||
/*! \brief LE Periodic Advertising Sync Transfer command */
|
||||
typedef struct {
|
||||
uint16_t Connection_Handle;
|
||||
uint16_t Service_Data;
|
||||
uint16_t Sync_Handle;
|
||||
} _GNU_PACKED_ le_prd_adv_sync_trans_t;
|
||||
|
||||
/*! \brief LE Periodic Advertising Set Info Transfer command */
|
||||
typedef struct {
|
||||
uint16_t Connection_Handle;
|
||||
uint16_t Service_Data;
|
||||
uint8_t Advertising_Handle;
|
||||
} _GNU_PACKED_ le_prd_adv_set_info_trans_t;
|
||||
|
||||
/*! \brief LE Set Periodic Advertising Sync Transfer Parameters command */
|
||||
typedef struct {
|
||||
uint16_t Connection_Handle;
|
||||
uint8_t Mode;
|
||||
uint16_t Skip;
|
||||
uint16_t Sync_Timeout;
|
||||
uint8_t CTE_Type;
|
||||
} _GNU_PACKED_ le_set_prd_adv_sync_trans_param_t;
|
||||
|
||||
/*! \brief LE Set Default Periodic Advertising Sync Transfer Parameters command */
|
||||
typedef struct {
|
||||
uint8_t Mode;
|
||||
uint16_t Skip;
|
||||
uint16_t Sync_Timeout;
|
||||
uint8_t CTE_Type;
|
||||
} _GNU_PACKED_ le_set_default_prd_adv_sync_trans_param_t;
|
||||
|
||||
/*! \brief LE Periodic Advertising Sync Transfer Received event */
|
||||
typedef struct {
|
||||
// uint8_t Subevent_Code;
|
||||
uint8_t Status;
|
||||
uint16_t Connection_Handle;
|
||||
uint16_t Service_Data;
|
||||
uint16_t Sync_Handle;
|
||||
uint8_t Advertising_SID;
|
||||
uint8_t Advertiser_Address_Type;
|
||||
uint8_t Advertiser_Address[6];
|
||||
uint8_t Advertiser_PHY;
|
||||
uint16_t Periodic_Advertising_Interval;
|
||||
uint8_t Advertiser_Clock_Accuracy;
|
||||
uint8_t Num_Subevents;
|
||||
uint8_t Subevent_Interval;
|
||||
uint8_t Response_Slot_Delay;
|
||||
uint8_t Response_Slot_Spacing;
|
||||
} _GNU_PACKED_ le_prd_adv_sync_trans_evt_t;
|
||||
|
||||
//Adjust Host part API
|
||||
void ll_hci_init(void);
|
||||
|
||||
void ll_hci_reset(void);
|
||||
|
||||
void ll_hci_destory(void);
|
||||
|
||||
void ll_hci_set_event_mask(const u8 *mask);
|
||||
|
||||
void ll_hci_set_name(const char *name);
|
||||
|
||||
void ll_hci_adv_set_params(uint16_t adv_int_min, uint16_t adv_int_max, uint8_t adv_type,
|
||||
uint8_t direct_address_type, uint8_t *direct_address,
|
||||
uint8_t channel_map, uint8_t filter_policy);
|
||||
|
||||
void ll_hci_adv_set_data(uint8_t advertising_data_length, uint8_t *advertising_data);
|
||||
|
||||
void ll_hci_adv_scan_response_set_data(uint8_t scan_response_data_length, uint8_t *scan_response_data);
|
||||
|
||||
int ll_hci_adv_enable(bool enable);
|
||||
|
||||
void ll_hci_scan_set_params(uint8_t scan_type, uint16_t scan_interval, uint16_t scan_window);
|
||||
|
||||
int ll_hci_scan_enable(bool enable, u8 filter_duplicates);
|
||||
|
||||
int ll_hci_create_conn(u8 *conn_param, u8 *addr_param);
|
||||
int ll_hci_create_conn_ext(void *param);
|
||||
|
||||
int ll_hci_create_conn_cancel(void);
|
||||
|
||||
int ll_hci_vendor_send_key_num(u16 con_handle, u8 num);
|
||||
|
||||
int ll_vendor_latency_hold_cnt(u16 conn_handle, u16 hold_cnt);
|
||||
|
||||
int ll_vendor_open_latency(u16 conn_handle);
|
||||
|
||||
int ll_vendor_close_latency(u16 conn_handle);
|
||||
|
||||
int ll_hci_encryption(u8 *key, u8 *plaintext_data);
|
||||
|
||||
int ll_hci_get_le_rand(void);
|
||||
|
||||
|
||||
int ll_hci_start_encryption(u16 handle, u32 rand_low, u32 rand_high, u16 peer_ediv, u8 *ltk);
|
||||
|
||||
int ll_hci_long_term_key_request_reply(u16 handle, u8 *ltk);
|
||||
|
||||
int ll_hci_long_term_key_request_nagative_reply(u16 handle);
|
||||
|
||||
int ll_hci_connection_update(u16 handle, u16 conn_interval_min, u16 conn_interval_max,
|
||||
u16 conn_latency, u16 supervision_timeout,
|
||||
u16 minimum_ce_length, u16 maximum_ce_length);
|
||||
|
||||
u16 ll_hci_get_acl_data_len(void);
|
||||
|
||||
u16 ll_hci_get_acl_total_num(void);
|
||||
|
||||
void ll_hci_set_random_address(u8 *addr);
|
||||
|
||||
int ll_hci_disconnect(u16 handle, u8 reason);
|
||||
|
||||
int ll_hci_read_local_p256_pb_key(void);
|
||||
|
||||
int ll_hci_generate_dhkey(const u8 *data, u32 size);
|
||||
|
||||
//Adjust Controller part API
|
||||
void ll_hci_cmd_handler(int *cmd);
|
||||
|
||||
void ll_event_handler(int *msg);
|
||||
|
||||
void ll_hci_private_free_dma_rx(u8 *rx_head);
|
||||
|
||||
void ll_hci_set_data_length(u16 conn_handle, u16 tx_octets, u16 tx_time);
|
||||
|
||||
hci_ll_param_t *ll_hci_param_config_get(void);
|
||||
void hci_ll_get_device_address(uint8_t *addr_type, u8 *addr);
|
||||
void ll_hci_set_host_channel_classification(u8 *channel_map);
|
||||
|
||||
// ble5
|
||||
void ll_hci_set_ext_adv_params(u8 *data, u32 size);
|
||||
void ll_hci_set_ext_adv_data(u8 *data, u32 size);
|
||||
void ll_hci_set_ext_rsp_data(u8 *data, u32 size);
|
||||
void ll_hci_set_ext_adv_enable(u8 *data, u32 size);
|
||||
void ll_hci_set_phy(u16 conn_handle, u8 all_phys, u8 tx_phy, u8 rx_phy, u16 phy_options);
|
||||
void ll_hci_set_ext_scan_params(u8 *data, u32 size);
|
||||
void ll_hci_set_ext_scan_enable(u8 *data, u32 size);
|
||||
void ll_hci_ext_create_conn(u8 *data, u32 size);
|
||||
void ll_hci_set_periodic_adv_params(u8 *data, u32 size);
|
||||
void ll_hci_set_periodic_adv_data(u8 *data, u32 size);
|
||||
void ll_hci_set_periodic_adv_enable(u8 *data, u32 size);
|
||||
void ll_hci_periodic_adv_creat_sync(u8 *data, u32 size);
|
||||
void ll_hci_periodic_adv_terminate_sync(u8 *data, u32 size);
|
||||
void ll_hci_periodic_adv_create_sync_cancel(void);
|
||||
void ll_hci_set_cig_params(uint8_t *data, size_t size);
|
||||
void ll_hci_create_cis(uint8_t *data, size_t size);
|
||||
void ll_hci_remove_cig(uint8_t *data, size_t size);
|
||||
void ll_hci_accept_cis_req(uint8_t *data, size_t size);
|
||||
void ll_hci_create_big(uint8_t *data, size_t size);
|
||||
void ll_hci_big_create_sync(uint8_t *data, size_t size);
|
||||
void ll_hci_big_terminate_sync(uint8_t *data, size_t size);
|
||||
void ll_hci_read_iso_tx_sync(uint8_t *data, size_t size);
|
||||
void ll_hci_periodic_adv_receive_enable(uint8_t *data, size_t size);
|
||||
void ll_hci_periodic_adv_sync_transfer(uint8_t *data, size_t size);
|
||||
void ll_hci_periodic_adv_set_info_transfer(uint8_t *data, size_t size);
|
||||
void ll_hci_set_periodic_adv_sync_transfer_param(uint8_t *data, size_t size);
|
||||
void ll_hci_set_default_periodic_adv_sync_transfer_param(uint8_t *data, size_t size);
|
||||
void ll_hci_setup_iso_data_path(uint8_t *data, size_t size);
|
||||
void ll_hci_read_iso_tx_sync(uint8_t *data, size_t size);
|
||||
void ll_hci_terminate_big(uint8_t *data, size_t size);
|
||||
|
||||
int le_controller_set_mac(void *addr);
|
||||
void hci_add_event_handler(void *callback_handler);
|
||||
void hci_remove_event_handler(void *callback_handler);
|
||||
|
||||
/* vendor */
|
||||
void hci_iso_receive_callback_register(void *callback);
|
||||
void nonstandard_pop_iso_dtata(uint8_t U_F_flag, uint8_t pdu_len, uint8_t offset, uint8_t pb_flag, uint8_t *sdu);
|
||||
void ll_big_tx_align_callback_register(uint8_t big_handle, const void *callback);
|
||||
void ll_config_ctrler_clk(uint16_t handle, uint8_t sel);
|
||||
void ll_get_ctrler_clk(uint16_t hdl, uint16_t *us_1per12, uint32_t *ref_clk_us, uint32_t *evt);
|
||||
void ll_set_vendor_param(uint8_t *vendor_param, size_t size);
|
||||
void ll_big_set_vendor_param(uint8_t *vendor_param, size_t size);
|
||||
void ll_cig_set_vendor_param(uint8_t *vendor_param, size_t size);
|
||||
void ll_cig_tx_align_callback_register(uint8_t cig_id, const void *callback);
|
||||
void ll_conn_rx_acl_callback_register(void (*callback)(uint8_t *packet, size_t size));
|
||||
void ll_set_scan_priority(uint8_t priority);
|
||||
void rf_mdm_con_ble_sync_word(int tws_esco);
|
||||
uint8_t ll_iso_unpack_hdr(const uint8_t *sdu, hci_iso_hdr_t *hdr);
|
||||
void access_addr_generate(u8 *aa);
|
||||
int tws_host_ble_state_is_busy(void);
|
||||
int tws_host_get_ble_core_data(u8 *packet, int size);
|
||||
|
||||
typedef void (*timeout_callback_t)(void *priv);
|
||||
|
||||
void bb_le_timer_set(uint8_t idx, uint32_t usec, timeout_callback_t callback, void *priv);
|
||||
u32 bb_le_clk_get_time_us(void);
|
||||
uint8_t bb_le_timer_get(void);
|
||||
void bb_le_timer_reset(uint8_t idx, uint32_t usec);
|
||||
uint8_t ble_vendor_priv_get_case_user();
|
||||
void le_hci_shutdown_connection(u16 handle);
|
||||
void ll_hci_terminate_big(uint8_t *data, size_t size);
|
||||
void ll_hci_setup_iso_data_path(uint8_t *data, size_t size);
|
||||
|
||||
void ll_hci_remove_iso_data_path(uint8_t *data, size_t size);
|
||||
uint8_t ble_vendor_priv_get_case_user();
|
||||
#endif
|
||||
@@ -0,0 +1,234 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : ll_config.h
|
||||
|
||||
* Description : Lto 优化Macro 定义
|
||||
|
||||
* Author : Bingquan
|
||||
|
||||
* Email : bingquan_cai@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2018-12-19 16:12
|
||||
|
||||
* Copyright:(c)JIELI 2011-2017 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#ifndef _LL_CONFIG_H_
|
||||
#define _LL_CONFIG_H_
|
||||
#include <stdint.h> //for UINT64_C
|
||||
|
||||
/*
|
||||
*-------------------LE FEATURE SUPPORT
|
||||
* brief : 运行时优化(LTO)下,代码空间优化;
|
||||
*/
|
||||
|
||||
/* --- Core Spec 4.0 --- */
|
||||
#define LL_FEAT_ENCRYPTION (UINT64_C(1) << ( 0)) /*!< Encryption supported. */
|
||||
/* --- Core Spec 4.2 --- */
|
||||
#define LL_FEAT_CONN_PARAM_REQ_PROC (UINT64_C(1) << ( 1)) /*!< Connection Parameters Request Procedure supported. */
|
||||
#define LL_FEAT_EXT_REJECT_IND (UINT64_C(1) << ( 2)) /*!< Extended Reject Indication supported. */
|
||||
#define LL_FEAT_SLV_INIT_FEAT_EXCH (UINT64_C(1) << ( 3)) /*!< Slave-Initiated Features Exchange supported. */
|
||||
#define LL_FEAT_LE_PING (UINT64_C(1) << ( 4)) /*!< LE Ping supported. */
|
||||
#define LL_FEAT_DATA_LEN_EXT (UINT64_C(1) << ( 5)) /*!< Data Length Extension supported. */
|
||||
#define LL_FEAT_PRIVACY (UINT64_C(1) << ( 6)) /*!< LL Privacy supported. */
|
||||
#define LL_FEAT_EXT_SCAN_FILT_POLICY (UINT64_C(1) << ( 7)) /*!< Extended Scan Filter Policy supported. */
|
||||
/* --- Core Spec 5.0 --- */
|
||||
#define LL_FEAT_LE_2M_PHY (UINT64_C(1) << ( 8)) /*!< LE 2M PHY supported. */
|
||||
#define LL_FEAT_STABLE_MOD_IDX_TRANSMITTER (UINT64_C(1) << ( 9)) /*!< Stable Modulation Index - Transmitter supported. */
|
||||
#define LL_FEAT_STABLE_MOD_IDX_RECEIVER (UINT64_C(1) << (10)) /*!< Stable Modulation Index - Receiver supported. */
|
||||
#define LL_FEAT_LE_CODED_PHY (UINT64_C(1) << (11)) /*!< LE Coded PHY supported. */
|
||||
#define LL_FEAT_LE_EXT_ADV (UINT64_C(1) << (12)) /*!< LE Extended Advertising supported. */
|
||||
#define LL_FEAT_LE_PER_ADV (UINT64_C(1) << (13)) /*!< LE Periodic Advertising supported. */
|
||||
#define LL_FEAT_CH_SEL_2 (UINT64_C(1) << (14)) /*!< Channel Selection Algorithm #2 supported. */
|
||||
#define LL_FEAT_LE_POWER_CLASS_1 (UINT64_C(1) << (15)) /*!< LE Power Class 1 supported. */
|
||||
#define LL_FEAT_MIN_NUM_USED_CHAN (UINT64_C(1) << (16)) /*!< Minimum Number of Used Channels supported. */
|
||||
/* --- Core Spec 5.1 --- */
|
||||
#define LL_FEAT_CONN_CTE_REQ (UINT64_C(1) << (17)) /*!< Connection CTE Request supported */
|
||||
#define LL_FEAT_CONN_CTE_RSP (UINT64_C(1) << (18)) /*!< Connection CTE Response supported */
|
||||
#define LL_FEAT_CONNLESS_CTE_TRANS (UINT64_C(1) << (19)) /*!< Connectionless CTE Transmitter supported */
|
||||
#define LL_FEAT_CONNLESS_CTE_RECV (UINT64_C(1) << (20)) /*!< Connectionless CTE Receiver supported */
|
||||
#define LL_FEAT_ANTENNA_SWITCH_AOD (UINT64_C(1) << (21)) /*!< Anetenna Switching during CTE Transmission (AoD) supported */
|
||||
#define LL_FEAT_ANTENNA_SWITCH_AOA (UINT64_C(1) << (22)) /*!< Anetenna Switching during CTE Reception (AoA) supported */
|
||||
#define LL_FEAT_RECV_CTE (UINT64_C(1) << (23)) /*!< Receive Constant Tone Extension supported */
|
||||
#define LL_FEAT_PAST_SENDER (UINT64_C(1) << (24)) /*!< Periodic Advertising Sync Transfer – Sender supported. */
|
||||
#define LL_FEAT_PAST_RECIPIENT (UINT64_C(1) << (25)) /*!< Periodic Advertising Sync Transfer – Recipient supported. */
|
||||
#define LL_FEAT_SCA_UPDATE (UINT64_C(1) << (26)) /*!< Sleep Clock Accuracy Updates supported. */
|
||||
#define LL_FEAT_REMOTE_PUB_KEY_VALIDATION (UINT64_C(1) << (27)) /*!< Remote Public Key Validation supported. */
|
||||
/* --- Core Spec 5.2 --- */
|
||||
#define LL_FEAT_CIS_MASTER_ROLE (UINT64_C(1) << (28)) /*!< Connected Isochronous Stream Master Role supported. */
|
||||
#define LL_FEAT_CIS_SLAVE_ROLE (UINT64_C(1) << (29)) /*!< Connected Isochronous Stream Slave Role supported. */
|
||||
#define LL_FEAT_ISO_BROADCASTER (UINT64_C(1) << (30)) /*!< Isochronous Broadcaster Role supported. */
|
||||
#define LL_FEAT_ISO_SYNC (UINT64_C(1) << (31)) /*!< Isochronous Synchronizer Role supported. */
|
||||
#define LL_FEAT_ISO_HOST_SUPPORT (UINT64_C(1) << (32)) /*!< Host support for ISO Channels. */
|
||||
#define LL_FEAT_POWER_CONTROL_REQUEST (UINT64_C(1) << (33)) /*!< Power control requests supported. */
|
||||
#define LL_FEAT_POWER_CHANGE_IND (UINT64_C(1) << (34)) /*!< Power control power change indication supported. */
|
||||
#define LL_FEAT_PATH_LOSS_MONITOR (UINT64_C(1) << (35)) /*!< Path loss monitoring supported. */
|
||||
|
||||
#define LL_FEAT_PATH_LOSS_MONITOR (UINT64_C(1) << (35)) /*!< Path loss monitoring supported. */
|
||||
#define LL_FEAT_PERIODIC_ADV_ADI_SUPPORT (UINT64_C(1) << (36)) /*!< Periodic Advertising ADI supported. */
|
||||
#define LL_FEAT_CONN_SUBRATE (UINT64_C(1) << (37)) /*!< Connection subrating supported. */
|
||||
#define LL_FEAT_CONN_SUBRATE_HOST_SUPPORT (UINT64_C(1) << (38)) /*!< Connection subratingHost supported. */
|
||||
#define LL_FEAT_CHANNEL_CLASSIFICATION (UINT64_C(1) << (39)) /*!< Channel classification supported. */
|
||||
|
||||
#define LL_FEAT_VENDOR_BIG_SYNC_TRANSFER (UINT64_C(1) << (62)) /*!< Vendor BIG sync transfer. */
|
||||
#define LL_FEAT_VENDOR_BIG_TRANSFER (UINT64_C(1) << (63)) /*!< Vendor BIG transfer. */
|
||||
|
||||
#define LE_ENCRYPTION LL_FEAT_ENCRYPTION
|
||||
#define CONNECTION_PARAMETER_REQUEST LL_FEAT_CONN_PARAM_REQ_PROC
|
||||
#define EXTENDED_REJECT_INDICATION LL_FEAT_EXT_REJECT_IND
|
||||
#define LE_SLAVE_INIT_FEATURES_EXCHANGE LL_FEAT_SLV_INIT_FEAT_EXCH
|
||||
#define LE_PING LL_FEAT_LE_PING
|
||||
#define LE_DATA_PACKET_LENGTH_EXTENSION LL_FEAT_DATA_LEN_EXT
|
||||
#define LL_PRIVACY LL_FEAT_PRIVACY
|
||||
#define EXTENDED_SCANNER_FILTER_POLICIES LL_FEAT_EXT_SCAN_FILT_POLICY
|
||||
#define LE_2M_PHY LL_FEAT_LE_2M_PHY
|
||||
#define LE_CODED_PHY LL_FEAT_LE_CODED_PHY
|
||||
#define LE_EXTENDED_ADVERTISING LL_FEAT_LE_EXT_ADV
|
||||
#define LE_PERIODIC_ADVERTISING LL_FEAT_LE_PER_ADV
|
||||
#define CHANNEL_SELECTION_ALGORITHM_2 LL_FEAT_CH_SEL_2
|
||||
|
||||
|
||||
#define LE_CORE_V50_FEATURES \
|
||||
( \
|
||||
LE_2M_PHY | \
|
||||
LE_CODED_PHY | \
|
||||
LE_EXTENDED_ADVERTISING | \
|
||||
LE_PERIODIC_ADVERTISING | \
|
||||
CHANNEL_SELECTION_ALGORITHM_2 | \
|
||||
0 \
|
||||
)
|
||||
|
||||
#if (LE_CORE_V50_FEATURES & LE_PERIODIC_ADVERTISING)
|
||||
#if ((LE_CORE_V50_FEATURES & LE_EXTENDED_ADVERTISING) == 0)
|
||||
#error "enable <LE_PERIODIC_ADVERTISING> must enable <LE_EXTENDED_ADVERTISING> at the same time"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define LE_FEATURES_CONST_TONE (LL_FEAT_CONN_CTE_REQ | \
|
||||
LL_FEAT_CONN_CTE_RSP | \
|
||||
LL_FEAT_CONNLESS_CTE_TRANS | \
|
||||
LL_FEAT_CONNLESS_CTE_RECV | \
|
||||
LL_FEAT_ANTENNA_SWITCH_AOD | \
|
||||
LL_FEAT_ANTENNA_SWITCH_AOA | \
|
||||
LL_FEAT_RECV_CTE)
|
||||
|
||||
#define LE_FEATURES_PAST (LL_FEAT_PAST_SENDER | \
|
||||
LL_FEAT_PAST_RECIPIENT)
|
||||
|
||||
#define LE_FEATURES_CIS (LL_FEAT_CIS_MASTER_ROLE | \
|
||||
LL_FEAT_CIS_SLAVE_ROLE | \
|
||||
LL_FEAT_ISO_HOST_SUPPORT)
|
||||
|
||||
#define LE_FEATURES_BIS (LL_FEAT_ISO_BROADCASTER | \
|
||||
LL_FEAT_ISO_SYNC | \
|
||||
LL_FEAT_ISO_HOST_SUPPORT)
|
||||
|
||||
#define LE_FEATURES_ISO (LE_FEATURES_BIS|LE_FEATURES_CIS)
|
||||
|
||||
#define LE_FEATURES_POWER_CONTROL (LL_FEAT_POWER_CONTROL_REQUEST | \
|
||||
LL_FEAT_POWER_CHANGE_IND | \
|
||||
LL_FEAT_PATH_LOSS_MONITOR)
|
||||
|
||||
extern const uint64_t config_btctler_le_features;
|
||||
#define LE_FEATURES_IS_SUPPORT(x) (config_btctler_le_features & (x))
|
||||
|
||||
#define LE_FEATURES_IS_SUPPORT_OPTIMIZE(x) if (LE_FEATURES_IS_SUPPORT(x) == 0x0) return
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
*-------------------LE ROLES SUPPORT
|
||||
* brief : 运行时优化(LTO)下,代码空间优化;
|
||||
*/
|
||||
#define LE_MASTER BIT(0)
|
||||
#define LE_SLAVE BIT(1)
|
||||
#define LE_ADV BIT(2)
|
||||
#define LE_SCAN BIT(3)
|
||||
#define LE_INIT BIT(4)
|
||||
|
||||
/*! \brief Combination */
|
||||
#define LE_CONN (LE_MASTER|LE_SLAVE)
|
||||
|
||||
extern const int config_btctler_le_roles;
|
||||
#define LE_ROLES_IS_SUPPORT(x) (config_btctler_le_roles & x)
|
||||
|
||||
#define LE_ROLES_IS_SUPPORT_OPTIMIZE(x) if (LE_ROLES_IS_SUPPORT(x) == 0x0) return
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
extern const int config_btctler_le_tws;
|
||||
#define LE_TWS_IS_SUPPORT() (config_btctler_le_tws)
|
||||
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
extern const int config_btctler_le_afh_en;
|
||||
#define LE_AFH_IS_SUPPORT() (config_btctler_le_afh_en)
|
||||
|
||||
#define LE_AFH_IS_SUPPORT_OPTIMIZE(x) if (LE_AFH_IS_SUPPORT() == 0x0) return
|
||||
|
||||
/*
|
||||
*-------------------LE PARAM CHECK
|
||||
* brief : 运行时优化(LTO)下,代码空间优化;
|
||||
*/
|
||||
// extern const int config_btctler_le_param_check;
|
||||
#define LE_PARAM_IS_CHECK() TRUE//(config_btctler_le_param_check)
|
||||
/*
|
||||
*-------------------LE RAM CONTROL
|
||||
*
|
||||
*/
|
||||
extern const int config_btctler_le_hw_nums;
|
||||
extern const int config_btctler_le_rx_nums;
|
||||
extern const int config_btctler_le_acl_packet_length;
|
||||
extern const int config_btctler_le_acl_total_nums;
|
||||
extern const int config_btctler_le_slave_conn_update_winden;
|
||||
extern const int config_btctler_le_clock_accuracy;
|
||||
extern const int config_btctler_le_rtx_static_ram;
|
||||
extern const int config_btctler_le_iso_tx;
|
||||
extern const int config_btctler_le_iso_rx;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
*-------------------LE Multi-link CONTROL
|
||||
*/
|
||||
extern const int config_btctler_le_slave_multilink;
|
||||
extern const int config_btctler_le_master_multilink;
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
*-------------------LE Vendor baseband CONTROL
|
||||
*/
|
||||
#define VENDOR_BB_PIS_EN BIT(0)
|
||||
#define VENDOR_BB_PIS_HB BIT(1)
|
||||
#define VENDOR_BB_PIS_HB_M BIT(2)
|
||||
#define VENDOR_BB_MD_CLOSE BIT(3)
|
||||
#define VENDOR_BB_CONNECT_SLOT BIT(4)
|
||||
#define VENDOR_BB_NEW_SCAN_STRATEGY BIT(5)
|
||||
#define VENDOR_BB_VENDOR_AFH BIT(5)
|
||||
#define VENDOR_BB_PIS_HB_R BIT(6)
|
||||
#define VENDOR_BB_WL_COEX_ROLE_EN BIT(6)
|
||||
#define VENDOR_BB_WL_COEX_ROLE BIT(7)
|
||||
#define VENDOR_BB_ADV_PDU_INT(x) ((x) << 8) /* 4bit */
|
||||
#define VENDOR_BB_EVT_HOLD_TRIGG(x) ((x) << 12) /* 6bit */
|
||||
#define VENDOR_BB_RX_PAYLOAD_LEN(x) ((x) << 18) /* 7bit */
|
||||
#define VENDOR_BB_PIS_TX_PAYLOAD_LEN(x) ((x) << 25) /* 7bit*/
|
||||
|
||||
extern const u32 config_vendor_le_bb;
|
||||
extern const int config_ble_adv_tx_pwr_level;
|
||||
extern const int config_rf_oob;
|
||||
extern const int config_bb_optimized_ctrl;
|
||||
|
||||
//config_bb_optimized_ctrl 控制变量说明
|
||||
#define VENDOR_BB_ISO_DIRECT_PUSH BIT(21)
|
||||
#define VENDOR_BB_DUAL_BD_SWITCH BIT(22)
|
||||
|
||||
#define LE_ADV_AFH_CTRL_EN() (config_bb_optimized_ctrl & BIT(6))
|
||||
#define LE_ADV_PWR_CTRL_EN() (config_bb_optimized_ctrl & BIT(7))
|
||||
#define LE_BIS_RX_PRE_CLOSE() (config_bb_optimized_ctrl & BIT(8))
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
*-------------------LE close wait
|
||||
*/
|
||||
extern const int ble_disable_wait_enable;
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
#endif //_LL_CONFIG_H_
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : btcontroller_modules.h
|
||||
|
||||
* Description : Lto 优化Macro 定义
|
||||
|
||||
* Author : Bingquan
|
||||
|
||||
* Email : bingquan_cai@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2018-12-19 16:38
|
||||
|
||||
* Copyright:(c)JIELI 2011-2017 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#ifndef _BTCONTROLLER_MODE_H_
|
||||
#define _BTCONTROLLER_MODE_H_
|
||||
|
||||
/*
|
||||
ble 测试串口默认使用usb口,代码要确保usb口没有其他地方使用
|
||||
开启测试模式,uart0 key 等一些功能默认关闭,请看特殊情况
|
||||
自行处理
|
||||
|
||||
1、提供实验室测试rf bqb的时候配 BT_BQB
|
||||
|
||||
2、提供实验室测试rf fcc的时候配 BT_FCC
|
||||
|
||||
3、如果要定频测试配BT_FRE 频点:2402 , 发射功率最大
|
||||
|
||||
4、性能测试配BT_PER,使用仪器直接连接测试即可,测试完毕后
|
||||
需要复位或者上电开机才会恢复正常流程,不复位或上电的话只支持链接一个设备
|
||||
|
||||
量产测试性能可直接配BT_NORMAL 然后通过某个外部操作来
|
||||
调用 void bredr_set_dut_enble(u8 en,u8 phone )
|
||||
en 1 :使能 bredr dut 测试然后就可以使用仪器链接测试
|
||||
phone: 1 可以被手机连接,0 不可以被手机连接上
|
||||
|
||||
如果样机通过按键等操作进入dut测试调用bredr_set_dut_enble使能可以被仪器链接,
|
||||
同时调用下面函数,关闭耳机快速链接,开启可发现可链接
|
||||
tws_cancle_all_noconn() ;
|
||||
bt_cmd_prepare(USER_CTRL_WRITE_SCAN_ENABLE, 0, NULL);
|
||||
bt_cmd_prepare(USER_CTRL_WRITE_CONN_ENABLE, 0, NULL);
|
||||
|
||||
|
||||
5、可以调用 void bt_fix_fre_api() 函数实现经典蓝牙定频测试,频点2402,发射功率最大,
|
||||
调用后不可恢复之前状态,只是用来量产测试,测试完需要复位或重新上电开机!
|
||||
|
||||
6、可以调用 void ble_fix_fre_api()函数实现ble定频测试,发射功率最大,
|
||||
|
||||
*/
|
||||
|
||||
#define BT_NORMAL 0x01
|
||||
#define BT_BQB 0x02
|
||||
#define BT_FCC 0x04
|
||||
#define BT_FRE 0x10
|
||||
#define BT_PER 0x20
|
||||
|
||||
#define BT_QUA 0x40
|
||||
|
||||
// #define CONFIG_BT_MODE BT_NORMAL
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,326 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : btcontroller_modules.h
|
||||
|
||||
* Description : Lto 优化Macro 定义
|
||||
|
||||
* Author : Bingquan
|
||||
|
||||
* Email : bingquan_cai@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2018-12-19 16:38
|
||||
|
||||
* Copyright:(c)JIELI 2011-2017 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#ifndef _BTCONTROLLER_H_
|
||||
#define _BTCONTROLLER_H_
|
||||
|
||||
#include "hci_transport.h"
|
||||
#include "btcontroller_mode.h"
|
||||
|
||||
#include "ble/hci_ll.h"
|
||||
|
||||
#include "classic/hci_lmp.h"
|
||||
|
||||
|
||||
/* app 层修改蓝牙版本,可在BT_STATUS_INIT_OK case
|
||||
调用 set_bt_version 函数更改蓝牙版本号
|
||||
*/
|
||||
#define BLUETOOTH_CORE_SPEC_42 0x08
|
||||
#define BLUETOOTH_CORE_SPEC_50 0x09
|
||||
#define BLUETOOTH_CORE_SPEC_51 0x0a
|
||||
#define BLUETOOTH_CORE_SPEC_52 0x0b
|
||||
#define BLUETOOTH_CORE_SPEC_53 0x0c
|
||||
#define BLUETOOTH_CORE_SPEC_54 0x0d
|
||||
#define BLUETOOTH_CORE_SPEC_60 0x0e
|
||||
extern void set_bt_version(u8 version);
|
||||
|
||||
|
||||
/*
|
||||
*-------------------Module SUPPORT
|
||||
* brief : 运行时优化(LTO)下,代码空间优化;
|
||||
*/
|
||||
#define BT_MODULE_CLASSIC BIT(0)
|
||||
#define BT_MODULE_LE BIT(1)
|
||||
|
||||
extern const int config_btctler_modules;
|
||||
#define BT_MODULES_IS_SUPPORT(x) (config_btctler_modules & (x))
|
||||
/*-----------------------------------------------------------*/
|
||||
extern const int config_stack_modules;
|
||||
#define STACK_MODULES_IS_SUPPORT(x) (config_stack_modules & (x))
|
||||
|
||||
/*
|
||||
*-------------------Mode SELECT
|
||||
* brief : 运行时优化(LTO)下,代码空间优化;
|
||||
*/
|
||||
extern const int config_btctler_mode;
|
||||
#define BT_MODE_IS(x) (config_btctler_mode & (x))
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
extern const int config_btctler_hci_standard;
|
||||
#define BT_HCI_STANDARD_IS_SUPPORT(x) (config_btctler_hci_standard)
|
||||
|
||||
|
||||
extern const int config_bt_function ;
|
||||
#define BT_ENCTRY_TASK BIT(0)
|
||||
#define BT_MASTER_AFH BIT(1)
|
||||
#define BT_MASTER_QOS BIT(2)
|
||||
|
||||
|
||||
#define BT_FUNCTION_IS(x) (config_bt_function & (x))
|
||||
|
||||
|
||||
/*---------------------- tws fun-------------------------------------*/
|
||||
|
||||
extern const int CONFIG_BTCTLER_TWS_FUN;
|
||||
#define TWS_ESCO_FORWARD BIT(0) ///tws 通话转发使能
|
||||
|
||||
|
||||
#define TWS_FUNCTION_IS(x) ( CONFIG_BTCTLER_TWS_FUN & (x))
|
||||
|
||||
/*---------------------- tws fun end -------------------------------------*/
|
||||
|
||||
|
||||
extern const int CONFIG_TEST_DUT_CODE;
|
||||
extern const int CONFIG_TEST_FCC_CODE;
|
||||
extern const int CONFIG_TEST_DUT_ONLY_BOX_CODE;
|
||||
extern const int CONFIG_BREDR_INQUIRY;
|
||||
|
||||
extern const int CONFIG_INQUIRY_PAGE_OFFSET_ADJUST ;
|
||||
|
||||
extern const int CONFIG_LMP_NAME_REQ_ENABLE ;
|
||||
extern const int CONFIG_LMP_PASSKEY_ENABLE ;
|
||||
extern const int CONFIG_LMP_OOB_ENABLE ;
|
||||
extern const int CONFIG_LMP_MASTER_ESCO_ENABLE ;
|
||||
extern const int config_btctler_bredr_master ;
|
||||
extern const int config_bredr_afh_user ;
|
||||
extern const int config_bredr_master_afh ;
|
||||
extern const int CONFIG_ESCO_MUX_RX_BULK_ENABLE ;
|
||||
extern const int config_bt_temperature_pll_trim ;
|
||||
extern const int CONFIG_WIFI_DETECT_ENABLE;
|
||||
extern const int ESCO_FORWARD_ENABLE;
|
||||
extern const int CONFIG_DONGLE_SPEAK_ENABLE ;
|
||||
extern const int CONFIG_TWS_AUDIO_SHARE_ENABLE;
|
||||
extern const int CONFIG_AES_CCM_FOR_EDR_ENABLE ;
|
||||
/********************************************************************************/
|
||||
/*
|
||||
* API
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief rf_set_24g_hackable_coded
|
||||
*
|
||||
* @param coded 2.4G 配对码
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
void rf_set_24g_hackable_coded(int coded);
|
||||
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief bt_pll_para
|
||||
*
|
||||
* @param osc
|
||||
* @param sys
|
||||
* @param low_power
|
||||
* @param xosc
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
void bt_pll_para(u32 osc, u32 sys, u8 low_power, u8 xosc);
|
||||
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief bt_production_test
|
||||
*
|
||||
* @param en
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
void bt_production_test(u8 en);
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief bt_set_rxtx_status_enable
|
||||
*
|
||||
* @param en
|
||||
*
|
||||
*
|
||||
|
||||
TX RX
|
||||
AI800x PA13 PA12
|
||||
AC692x PA13 PA12
|
||||
AC693x PA8 PA9
|
||||
AC695x PA9 PA10
|
||||
AC696x PC1 PC2
|
||||
AC694x PB1 PB2
|
||||
AC697x PC2 PC3
|
||||
AC631x PA7 PA8
|
||||
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
void bt_set_rxtx_status_enable(u8 en);
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief bt_osc_offset_ext_save
|
||||
*
|
||||
* @param offset
|
||||
*
|
||||
* 更新并且保存频偏
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
void bt_osc_offset_ext_save(s32 offset);
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief bt_osc_offset_ext_updata
|
||||
*
|
||||
* @param offset
|
||||
*
|
||||
* 更新频偏
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
void bt_osc_offset_ext_updata(s32 offset);
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief 初始化配置蓝牙发射功率最大值范围
|
||||
*
|
||||
* @param pwr edr 连接后发射功率(range:0~9)
|
||||
* @param pg_pwr edr page 可连接状态发射功率
|
||||
* @param iq_pwr edr inquiry 可发现状态发射功率
|
||||
* @param ble_pwr ble 发射功率
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
/*
|
||||
蓝牙TX发射功率档位, 参考功率值(dbm) ,超过等级范围默认设置为最高档
|
||||
BD29: rang(0~8) {-18.3, -14.6, -12.1, -8.5, -6.0, -4.1, -1.1, +1.1, +4.0, +6.1}
|
||||
BD19: rang(0~10) {-17.6, -14.0, -11.5, -9.6, -6.6, -4.4, -0.79, +1.12, +3.8, +5.65, +8.04}
|
||||
BR23: rang(0~9) {-15.7, -12.5, -10.0, -6.6, -4.4, -2.5, -0.1, +2.1, +4.6, +6.4}
|
||||
BR25: rang(0~9) {-15.7, -12.5, -10.0, -6.6, -4.4, -2.5, -0.1, +2.1, +4.6, +6.4}
|
||||
BR30: rang(0~8) {-17.48, -11.46, -7.96, -3.59, -0.79, +1.12, +3.8, +6.5, +8.44}
|
||||
BR34: rang(0~10) {-17.6, -14.0, -11.5, -9.6, -6.6, -4.4, -1.8, 0, +2.1, +4, +6.3}
|
||||
*/
|
||||
|
||||
void bt_max_pwr_set(u8 pwr, u8 pg_pwr, u8 iq_pwr, u8 ble_pwr);
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief bt_set_ldos
|
||||
*
|
||||
* @param mode
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
void bt_set_ldos(u8 mode);
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief ble_set_fix_pwr
|
||||
*
|
||||
* @param fix (0~max)
|
||||
* 动态调整BLE的发射功率
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
void ble_set_fix_pwr(u8 fix);
|
||||
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief bredr_set_fix_pwr
|
||||
*
|
||||
* @param fix (0~max)
|
||||
* 动态调整EDR的发射功率
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
void bredr_set_fix_pwr(u8 fix);
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief ble_rf_vendor_fixed_channel
|
||||
*
|
||||
* @param channel_index: 指定信道定频: range 0~39 fixed freq, or 0xff --close fixed,default 37、38、39
|
||||
* @param pktcnt: adv方式,1次发包的个数: range 1~3
|
||||
* 配置ble 的 adv、scan、init 状态定频
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
bool ble_rf_vendor_fixed_channel(u8 channel_index, u8 pktcnt);
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief bredr_get_rssi_for_address
|
||||
* 获取已连接设备的rssi
|
||||
*
|
||||
* @param address 对方mac地址
|
||||
* @return rssi 值,range(-127 ~ +127)
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
s8 bredr_get_rssi_for_address(u8 *address);
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief 配置tx 是否支持包类型, (sdk默认支持)
|
||||
*
|
||||
* @param packet_type
|
||||
* @param support_en 0 or 1
|
||||
* @return true or false
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
typedef enum {
|
||||
PKT_TYPE_2DH5_EU = 0,
|
||||
} pkt_type_eu;
|
||||
|
||||
bool bredr_link_vendor_support_packet_enable(pkt_type_eu packet_type, u8 support_en);
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief 配置ble 优先级锁定不低压ACL, (sdk 默认自动调节)
|
||||
*
|
||||
* @param role:0--master,1--slave
|
||||
* @param enalbe 0 or 1
|
||||
* @return null
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
void ble_vendor_set_hold_prio(u8 role, u8 enable);
|
||||
|
||||
void set_bt_afh_classs_enc(u8 afh_class);
|
||||
void set_bt_enhanced_power_control(u8 en);
|
||||
void set_bt_data_rate_acl_3mbs_mode(u8 en);
|
||||
void set_bt_class_sc_enc(u8 en);
|
||||
|
||||
void set_bt_full_name_event(u8 en);
|
||||
|
||||
/* coexist between bt chips */
|
||||
void bt_wl_coex_init(uint8_t state);
|
||||
void bt_wl_coex_enable(bool enable);
|
||||
|
||||
/* *****************************************************************************/
|
||||
/**
|
||||
* @brief : bt_set_rxtx_status_enable
|
||||
*
|
||||
* @param : en
|
||||
* @note : This func should be called before initialization of btstack task
|
||||
*/
|
||||
/* *****************************************************************************/
|
||||
extern void bt_set_rxtx_status_enable(u8 en);
|
||||
/* *****************************************************************************/
|
||||
/**
|
||||
* @brief : bt_rf_PA_control_io_remap
|
||||
*
|
||||
* @param : tx_io:enumeration value {IO_PORTX_xx,...},0xffff indicate not using this io;
|
||||
* @param : rx_io:enumeration value {IO_PORTX_xx,...},0fffff indicate not using this io;
|
||||
* @note : This func should be called before initialization of btstack task
|
||||
*/
|
||||
/* *****************************************************************************/
|
||||
extern void bt_rf_PA_control_io_remap(u16 tx_io, u16 rx_io);
|
||||
|
||||
void disturb_scan_timeout_cb_api();
|
||||
int link_disturb_scan_enable();
|
||||
void set_lmp_support_dual_con(u8 en);
|
||||
typedef struct {
|
||||
u8 sel;
|
||||
u8 no_signalling;
|
||||
u8 is_ble;
|
||||
} DUT_TXMODE_RESET_PARA;
|
||||
#endif
|
||||
@@ -0,0 +1,69 @@
|
||||
|
||||
btctler_bss_start = .;
|
||||
|
||||
. = ALIGN(4);
|
||||
bredr_static_ram_start = .;
|
||||
bredr_static_ram_end = bredr_static_ram_start + CONFIG_BREDR_STATIC_RAM_LEN;
|
||||
. = bredr_static_ram_end + 8;
|
||||
|
||||
. = ALIGN(4);
|
||||
*(.ble_static_ram)
|
||||
|
||||
/* BTCTLER_CONTROLLER_BSS_START = .; */
|
||||
|
||||
/* *(.bd_base) */
|
||||
/* *(.bredr_rxtx_bulk) */
|
||||
/* acl_tx_pool = .; */
|
||||
/* *(.bredr_tx_bulk) */
|
||||
/* #ifdef CONFIG_BT_TX_BUFF_SIZE */
|
||||
/* acl_tx_pool_end = acl_tx_pool + CONFIG_BT_TX_BUFF_SIZE; */
|
||||
/* #else */
|
||||
/* acl_tx_pool_end = acl_tx_pool; */
|
||||
/* #endif */
|
||||
/* . = acl_tx_pool_end; */
|
||||
|
||||
/* acl_rx_pool = .; */
|
||||
/* *(.bredr_rx_bulk) */
|
||||
/* #ifdef CONFIG_BT_RX_BUFF_SIZE */
|
||||
/* acl_rx_pool_end = acl_rx_pool + CONFIG_BT_RX_BUFF_SIZE; */
|
||||
/* #else */
|
||||
/* acl_rx_pool_end = acl_rx_pool; */
|
||||
/* #endif */
|
||||
/* . = acl_rx_pool_end; */
|
||||
|
||||
/* tws_bulk_pool = .; */
|
||||
/* #ifdef CONFIG_TWS_BULK_POOL_SIZE */
|
||||
/* tws_bulk_pool_end = tws_bulk_pool + CONFIG_TWS_BULK_POOL_SIZE; */
|
||||
/* #else */
|
||||
/* tws_bulk_pool_end = tws_bulk_pool; */
|
||||
/* #endif */
|
||||
/* . = tws_bulk_pool_end; */
|
||||
|
||||
/* *(.bt_rf_bss) */
|
||||
/* *(.hci_controller_bss) */
|
||||
/* *(.hci_interface_bss) */
|
||||
/* *(.device_manager_bss) */
|
||||
/* *(.vendor_manager_bss) */
|
||||
/* BTCTLER_CONTROLLER_BSS_SIZE = ABSOLUTE(. - BTCTLER_CONTROLLER_BSS_START); */
|
||||
|
||||
/* BTCTLER_LE_CONTROLLER_BSS_START = .; */
|
||||
/* *(.ble_hci_bss) */
|
||||
/* *(.ble_ll_bss) */
|
||||
/* *(.ble_rf_bss) */
|
||||
/* BTCTLER_LE_CONTROLLER_BSS_SIZE = ABSOLUTE(. - BTCTLER_LE_CONTROLLER_BSS_START); */
|
||||
|
||||
/* BTCTLER_CL_BSS_START = .; */
|
||||
/* *(.classic_rf_bss) */
|
||||
/* *(.classic_lmp_bss) */
|
||||
/* *(.classic_lmp_auth_bss) */
|
||||
/* *(.classic_lmp_bigint_bss) */
|
||||
/* *(.classic_lmp_crypt_bss) */
|
||||
/* *(.classic_lmp_ecdh_bss) */
|
||||
/* *(.classic_lmp_linkbulk_bss) */
|
||||
/* *(.classic_lmp_hmac_bss) */
|
||||
/* *(.classic_bb_bss) */
|
||||
/* *(.classic_hci_bss) */
|
||||
/* BTCTLER_CL_BSS_SIZE = ABSOLUTE(. - BTCTLER_CL_BSS_START); */
|
||||
|
||||
btctler_bss_end = .;
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
|
||||
/* . = ALIGN(4); */
|
||||
/* bredr_static_ram_start = .; */
|
||||
/* bredr_static_ram_end = bredr_static_ram_start + CONFIG_BREDR_STATIC_RAM_LEN; */
|
||||
/* . = bredr_static_ram_end; */
|
||||
|
||||
/* btctler_data_start = .; */
|
||||
/* */
|
||||
/* BTCTLER_CONTROLLER_DATA_START = .; */
|
||||
/* *(.bt_rf_data) */
|
||||
/* *(.vendor_manager_data) */
|
||||
/* *(.device_manager_data) */
|
||||
/* *(.hci_controller_data) */
|
||||
/* *(.hci_interface_data) */
|
||||
/* BTCTLER_CONTROLLER_DATA_SIZE = ABSOLUTE(. - BTCTLER_CONTROLLER_DATA_START); */
|
||||
/* */
|
||||
/* BTCTLER_LE_CONTROLLER_DATA_START = .; */
|
||||
/* *(.ble_ll_data) */
|
||||
/* *(.ble_hci_data) */
|
||||
/* *(.classic_hci_data) */
|
||||
/* *(.ble_rf_data) */
|
||||
/* BTCTLER_LE_CONTROLLER_DATA_SIZE = ABSOLUTE(. - BTCTLER_LE_CONTROLLER_DATA_START); */
|
||||
/* */
|
||||
/* BTCTLER_CL_DATA_START = .; */
|
||||
/* *(.classic_lmp_data) */
|
||||
/* *(.classic_lmp_auth_data) */
|
||||
/* *(.classic_lmp_bigint_data) */
|
||||
/* *(.classic_lmp_crypt_data) */
|
||||
/* *(.classic_lmp_ecdh_data) */
|
||||
/* *(.classic_lmp_linkbulk_data) */
|
||||
/* *(.classic_lmp_hmac_data) */
|
||||
/* *(.classic_rf_data) */
|
||||
/* *(.classic_bb_data) */
|
||||
/* BTCTLER_CL_DATA_SIZE = ABSOLUTE(. - BTCTLER_CL_DATA_START); */
|
||||
/* */
|
||||
/* btctler_data_end = .; */
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
|
||||
. = ALIGN(4);
|
||||
tws_sync_call_begin = .;
|
||||
KEEP(*(.tws_sync_call))
|
||||
tws_sync_call_end = .;
|
||||
|
||||
. = ALIGN(4);
|
||||
tws_func_stub_begin = .;
|
||||
KEEP(*(.tws_func_stub))
|
||||
tws_func_stub_end = .;
|
||||
|
||||
. = ALIGN(4);
|
||||
tlcap_channel_begin = .;
|
||||
KEEP(*(.tlcap_channel))
|
||||
tlcap_channel_end = .;
|
||||
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
#ifndef BTCTRLER_TASK_H
|
||||
#define BTCTRLER_TASK_H
|
||||
|
||||
#include "typedef.h"
|
||||
#include "system/task.h"
|
||||
|
||||
enum {
|
||||
LMP_EVENT = Q_USER + 1,
|
||||
LMP_HCI_CMD,
|
||||
LMP_HCI_CMD_TO_CONN,
|
||||
HCI_COMMON_CMD,
|
||||
LL_EVENT,
|
||||
HCI_CMD_TO_LL,
|
||||
TWS_LMP_EVENT,
|
||||
MSG_BT_UPDATA_START,
|
||||
MSG_BT_UPDATE_LOADER_DOWNLOAD_START,
|
||||
MSG_BLE_TEST_UPDATA_START,
|
||||
MSG_BLE_TEST_OTA_LOADER_DOWNLOAD_START,
|
||||
MSG_TASK_READY,
|
||||
MSG_TASK_DEL,
|
||||
MSG_BLE_SET_BTSTASK_DATA,
|
||||
};
|
||||
|
||||
enum {
|
||||
BTCTRLER_EVENT_RESUME_REQ = 1,
|
||||
};
|
||||
|
||||
#define SYS_EVENT_FROM_CTRLER (('C' << 24) | ('T' << 16) | ('R' << 8) | '\0')
|
||||
|
||||
|
||||
struct lmp_connection;
|
||||
|
||||
int lmp_task_do_event(struct lmp_connection *conn, int argc, ...);
|
||||
|
||||
int bredr_link_event(void *link, int argc, ...);
|
||||
|
||||
int bredr_tws_link_event(void *link, int argc, ...);
|
||||
|
||||
int btctrler_hci_cmd_to_task(int cmd, int argc, ...);
|
||||
|
||||
int lmp_hci_cmd_to_conn_for_handle(u16 handle, int argc, ...);
|
||||
|
||||
int lmp_hci_cmd_to_conn_for_addr(u8 *addr, int argc, ...);
|
||||
|
||||
int lmp_hci_cmd_to_conn(void *conn, int argc, ...);
|
||||
|
||||
|
||||
#define lmp_hci_cmd_to_task(argc, ...) btctrler_hci_cmd_to_task(LMP_HCI_CMD, argc, ## __VA_ARGS__)
|
||||
|
||||
#define ll_hci_cmd_to_task(argc, ...) btctrler_hci_cmd_to_task(HCI_CMD_TO_LL, argc, ## __VA_ARGS__)
|
||||
|
||||
|
||||
int btctrler_task_init(const void *transport, const void *config);
|
||||
|
||||
void btctrler_resume_req();
|
||||
|
||||
void btctrler_resume();
|
||||
|
||||
int btctrler_suspend(u8 suepend_rx_bulk);
|
||||
|
||||
int btctrler_task_ready();
|
||||
|
||||
int btctrler_task_exit();
|
||||
|
||||
int btctrler_task_close_bredr();
|
||||
void btctrler_task_init_bredr();
|
||||
|
||||
void set_idle_period_slot(u16 slot);
|
||||
enum {
|
||||
TESTBOX_INFO_VBAT_VALUE = 0, //(u16 (*handle)(void))
|
||||
TESTBOX_INFO_VBAT_PERCENT, //(u8 (*handle)(void))
|
||||
TESTBOX_INFO_BURN_CODE, //(u8 *(*handle)(u8 *len))
|
||||
TESTBOX_INFO_SDK_VERSION, //(u8 *(*handle)(u8 *len))
|
||||
};
|
||||
|
||||
void bt_testbox_ex_info_get_handle_register(u8 info_type, void *handle);
|
||||
u8 bredr_bulk_change_rx_bulk(u8 mode);
|
||||
void lmp_set_features_req_step(u8 *addr);
|
||||
|
||||
struct ble_dut_tx_param_t {
|
||||
u8 ch_index; //data[0]
|
||||
u8 payload_len; //data[1]
|
||||
u8 payload_type;//data[2]
|
||||
u8 phy_type; //data[3]
|
||||
};
|
||||
|
||||
struct ble_dut_rx_param_t {
|
||||
u8 ch_index; //data[0]
|
||||
u8 phy_type; //data[1]
|
||||
};
|
||||
|
||||
enum BLE_DUT_CTRL_TYPE {
|
||||
BLE_DUT_SET_RX_MODE = 0, //param1:struct ble_dut_rx_param_t *param;
|
||||
BLE_DUT_SET_TX_MODE, //param1:struct ble_dut_tx_param_t *param;
|
||||
BLE_DUT_SET_TEST_END, //param1:u16 *pkt_valid_cnt,param2:u16 *pkt_err_cnt;
|
||||
BLE_DUT_GET_RX_RSSI, //param1:s8 *rx_rssi;
|
||||
};
|
||||
|
||||
struct ble_dut_ops_t {
|
||||
|
||||
/* *****************************************************************************/
|
||||
/**
|
||||
* @brief : initialize the ble dut test module
|
||||
*
|
||||
* @param : void
|
||||
*
|
||||
* @return : pointer to instance of test module
|
||||
*/
|
||||
/* *****************************************************************************/
|
||||
void *(*init)(void);
|
||||
|
||||
/* *****************************************************************************/
|
||||
/**
|
||||
* @brief : ble dut test control api,such as setting rx/tx mode,stop testing
|
||||
*
|
||||
* @param : control type,using enum BLE_DUT_CTRL_TYPE value;
|
||||
* @param : vary from different control type;
|
||||
*/
|
||||
/* *****************************************************************************/
|
||||
int (*ioctrl)(int ctrl, ...);
|
||||
|
||||
/* *****************************************************************************/
|
||||
/**
|
||||
* @brief : exit the ble dut test module
|
||||
*
|
||||
* @param : poniter to instance of test module
|
||||
*/
|
||||
/* *****************************************************************************/
|
||||
void (*exit)(void *priv);
|
||||
};
|
||||
|
||||
extern const struct ble_dut_ops_t *__ble_dut_ops;
|
||||
|
||||
struct le_adv_link_param_cfg {
|
||||
u8 param1;
|
||||
s8 param2[2];
|
||||
s8 param3[2];
|
||||
u8 param4[2];
|
||||
u8 param5;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,311 @@
|
||||
#ifndef LMP_API_H
|
||||
#define LMP_API_H
|
||||
|
||||
|
||||
#include "generic/typedef.h"
|
||||
|
||||
struct a2dp_media_frame {
|
||||
u8 *packet;
|
||||
u32 clkn;
|
||||
u8 coding_type;
|
||||
};
|
||||
enum {
|
||||
SEND_ACL_ESCO_MODE = 1,
|
||||
SEND_ACL_SHARE_MODE,
|
||||
SEND_ACL_A2DP_SOURCE_MODE = 0xfa,
|
||||
|
||||
};
|
||||
|
||||
struct lp_ws_t {
|
||||
u16 lrc_ws_inc;
|
||||
u16 lrc_ws_init;
|
||||
u16 bt_osc_ws_inc;
|
||||
u16 bt_osc_ws_init;
|
||||
u8 osc_change_mode;
|
||||
};
|
||||
|
||||
void lmp_private_a2dp_start(void *_conn);
|
||||
|
||||
void lmp_private_a2dp_stop(void *_conn);
|
||||
|
||||
int lmp_private_is_clearing_a2dp_packet(void *_conn);
|
||||
|
||||
int lmp_private_a2dp_channel_exist(void *_conn);
|
||||
|
||||
int lmp_private_get_sbc_remain_time(void *_conn, u8 include_tws);
|
||||
|
||||
void lmp_private_set_media_type(u8 *addr, u8 type);
|
||||
|
||||
u8 lmp_private_get_media_open_state_for_addr(u8 *addr);
|
||||
u8 lmp_private_get_media_type_for_addr(u8 *addr);
|
||||
u8 lmp_private_get_media_type(void *conn);
|
||||
u32 lmp_private_get_media_sample_rate(void *conn);
|
||||
u8 lmp_private_get_media_bit_wide(void *_conn);
|
||||
u16 lmp_private_get_media_codec_version(void *_conn);
|
||||
|
||||
void *lmp_private_open_sbc_channel(u8 *addr);
|
||||
|
||||
void lmp_private_set_a2dp_rx_notify(void *_conn, void *priv, void (*notify)(void *));
|
||||
|
||||
void lmp_private_free_sbc_packet(void *_conn, void *packet);
|
||||
|
||||
int lmp_private_get_sbc_data_len(void *_conn);
|
||||
|
||||
int lmp_private_get_rx_buffer_size();
|
||||
|
||||
void lmp_private_set_max_rx_buf_persent(u8 *addr, int persent);
|
||||
|
||||
void *lmp_private_fetch_sbc_packet(void *_conn, int *len, void *_prev, int);
|
||||
|
||||
int lmp_private_get_sbc_packet_num(void *_conn);
|
||||
void lmp_private_close_sbc_channel(void *_conn);
|
||||
|
||||
void lmp_private_a2dp_mute(u8 *addr);
|
||||
|
||||
void lmp_private_a2dp_unmute(void *addr);
|
||||
|
||||
bool lmp_private_a2dp_is_mute(void *addr);
|
||||
|
||||
int lmp_private_get_sbc_packet(void *_conn, struct a2dp_media_frame *frame, int block);
|
||||
|
||||
void lmp_private_put_sbc_packet(void *_conn, void *packet);
|
||||
|
||||
u8 *lmp_private_get_tx_packet_buffer(int size);
|
||||
|
||||
int lmp_private_clear_a2dp_packet(void *_conn, u16 seqn_number);
|
||||
|
||||
|
||||
u8 *lmp_get_esco_link_addr(void);
|
||||
u8 check_esco_conn_exist(u8 *current_addr);
|
||||
int lmp_private_get_esco_packet_type();
|
||||
|
||||
u8 check_esco_conn_exist(u8 *current_addr);
|
||||
void *lmp_private_get_esco_packet(int *len, u32 *hash);
|
||||
|
||||
void lmp_private_free_esco_packet(void *packet);
|
||||
|
||||
int lmp_private_send_esco_packet(void *priv, u8 *packet, int len);
|
||||
|
||||
int lmp_private_get_esco_tx_packet_num();
|
||||
|
||||
void lmp_esco_set_rx_notify(u8 *addr, void *priv, void (*notify)(void *));
|
||||
void lmp_esco_set_tx_notify(u8 *addr, void *priv, void (*notify)(void *, u32 clk));
|
||||
|
||||
u8 *lmp_private_remote_addr_for_handler(int handle);
|
||||
|
||||
u16 lmp_private_handler_for_remote_addr(u8 *addr, int link_type);
|
||||
|
||||
int lmp_private_get_rx_buffer_total_size(void *_conn);
|
||||
|
||||
int lmp_private_get_rx_buffer_remain_size(void *_conn);
|
||||
|
||||
void lmp_hci_private_hold_acl_packet(u8 *packet);
|
||||
|
||||
void lmp_hci_private_free_acl_packet(u8 *packet);
|
||||
|
||||
void lmp_hci_private_try_free_acl_packet(u8 *packet);
|
||||
|
||||
int lmp_hci_send_packet(u8 *packet, int len, u8 mode);
|
||||
u16 lmp_private_get_acl_u_tx_packet_num(void *_conn, int mode);
|
||||
void lmp_private_del_acl_u_tx_packet(void *_conn, u8 tx_mode, u32 del_num);
|
||||
u16 lmp_private_get_acl_u_tx_packet_len(void *_conn, int mode);
|
||||
|
||||
int lmp_hci_send_packet_standard(const u8 *packet, int len);
|
||||
int lmp_hci_send_broadcase_packet_standard(const u8 *packet, int len);
|
||||
|
||||
int lmp_hci_reset();
|
||||
|
||||
int lmp_hci_write_scan_enable(u8 enable);
|
||||
int lmp_hci_write_quick_scan_enable(u8 enable);
|
||||
|
||||
void lmp_hci_write_class_of_device(int dev_class);
|
||||
|
||||
void lmp_hci_write_local_name(const char *name);
|
||||
void lmp_hci_write_local_priv_version(const char *ic_verson, const char *priv_version, u8 *tws_local_addr);
|
||||
|
||||
void lmp_hci_write_local_address(const u8 *addr);
|
||||
|
||||
void lmp_hci_write_simple_pairing_mode(u8 enable);
|
||||
|
||||
void lmp_hci_write_super_timeout(u16 timeout);
|
||||
void lmp_hci_write_page_timeout(u16 timeout);
|
||||
void lmp_hci_write_tws_internal_addr(u8 *internal_addr_local, u8 *internal_addr_remote);
|
||||
|
||||
void lmp_hci_write_link_supervision_timeout(u16 handle, int);
|
||||
|
||||
int lmp_hci_write_le_host_support(int features);
|
||||
|
||||
int lmp_hci_read_pin_type();
|
||||
|
||||
void lmp_hci_write_build_publickey(u16 mode);
|
||||
|
||||
void lmp_hci_set_pin_code(const char *code, u8 len);
|
||||
|
||||
void lmp_hci_pin_code_request_reply(u8 *addr, u8 len, u8 *pin_code);
|
||||
|
||||
void lmp_hci_pin_code_request_negative_reply(u8 *addr);
|
||||
|
||||
int lmp_hci_write_pin_type(u8 type);
|
||||
|
||||
int lmp_hci_set_connection_encryption(u16 handle, int enable);
|
||||
|
||||
void lmp_hci_io_capability_request_reply(u8 *addr, u8 io_cap, u8 oob_data, u8 auth_req);
|
||||
|
||||
void lmp_hci_user_confirmation_request_reply(u8 *address);
|
||||
|
||||
void lmp_hci_user_confirmation_request_negative_reply(u8 *addr);
|
||||
|
||||
int lmp_hci_disconnect(u16 handle, u8 reason);
|
||||
int lmp_hci_test_key_cmd(u8 cmd, u16 handle);
|
||||
int lmp_hci_send_user_info_cmd(u32 info, u16 handle);
|
||||
|
||||
void lmp_hci_accept_connection_request(u8 *addr, u8 role);
|
||||
|
||||
void lmp_hci_accept_sco_connection_request(u8 *addr, u32 tx_bandwidth,
|
||||
u32 rx_bandwidth, u16 max_latency, u16 content_format,
|
||||
u8 retransmission, u16 packey_type);
|
||||
|
||||
void lmp_hci_reject_connection_request(u8 *addr, u8 reason);
|
||||
|
||||
void lmp_hci_switch_role_command(u8 *addr, u8 role);
|
||||
|
||||
void lmp_hci_authentication_requested(u8 *addr);
|
||||
|
||||
void lmp_hci_link_key_request_reply(u8 *addr, u8 *link_key);
|
||||
|
||||
void lmp_hci_link_key_request_negative_reply(u8 *addr);
|
||||
|
||||
void lmp_hci_write_default_link_policy_settings(u16 setting);
|
||||
|
||||
void lmp_hci_release_packet(u8 *packet);
|
||||
|
||||
void lmp_hci_create_connection(const u8 *addr, u16 packet_type,
|
||||
u8 repetition_mode, u8 reserved,
|
||||
u16 clk_offset, u8 allow_role_switch);
|
||||
|
||||
void lmp_hci_connection_cancel(u8 *addr);;
|
||||
|
||||
void lmp_hci_cancel_page();
|
||||
void lmp_hci_inquiry(int lap, u8 length, u8 num);
|
||||
void lmp_hci_cancel_inquiry();
|
||||
void lmp_hci_sniff_mode_command(u16 handle, u16 max_interval, u16 min_interval, u16 attempt, u16 timeout);
|
||||
void lmp_hci_exit_sniff_mode_command(u16 handle);
|
||||
|
||||
void lmp_hci_host_num_of_completed_packets(u16 handle, u16 num_of_completed_packet);
|
||||
|
||||
int lmp_hci_read_remote_version_information(u16 handle);
|
||||
|
||||
void lmp_hci_read_remote_supported_features(u16 handle);
|
||||
|
||||
void lmp_hci_read_remote_extended_features(u16 handle, u8 page_num);
|
||||
|
||||
void lmp_hci_role_discovery(u16 handle);
|
||||
|
||||
void lmp_hci_read_clock_offset(u16 handle);
|
||||
void lmp_hci_change_conn_packet_type(u16 handle, u16 type);
|
||||
|
||||
void lmp_hci_tx_qos_req(u16 handle);
|
||||
void lmp_hci_read_link_policy_settings(u16 handle);
|
||||
void lmp_hci_write_link_policy_settings(u16 handle, u16 policy);
|
||||
|
||||
void lmp_hci_remote_name_request(u8 *addr, u8 page_scan_repetition_mode, u16 clk_offset);
|
||||
|
||||
void lmp_set_sniff_establish_by_remote(u8 enable);
|
||||
|
||||
void lmp_set_sniff_disable(void);
|
||||
|
||||
|
||||
u8 lmp_hci_read_local_supported_features(int octet);
|
||||
|
||||
void lmp_hci_write_local_supported_features(u8 features, int octet);
|
||||
|
||||
|
||||
u8 lmp_standard_connect_check(void);
|
||||
|
||||
void lmp_hci_send_keypress_notification(u8 *addr, u8 key);
|
||||
void lmp_hci_user_keypress_request_reply(u8 *addr, u32 key);
|
||||
void lmp_hci_user_keypress_request_negative_reply(u8 *addr, u8 key);
|
||||
|
||||
|
||||
void lmp_hci_set_role_switch_supported(bool enable);
|
||||
void lmp_hci_tx_channel_chassification(u8 *map);
|
||||
|
||||
|
||||
extern int lmp_speak_mic_send_internal(void *priv, u8 *data, int len);
|
||||
|
||||
u8 *get_tws_internal_addr(int channel);
|
||||
|
||||
extern int lmp_private_esco_suspend_resume(int flag);;
|
||||
|
||||
void user_set_tws_box_mode(u8 mode);
|
||||
|
||||
|
||||
void bt_set_tx_power(u8 txpower);
|
||||
|
||||
|
||||
void bredr_bulk_change(u8 mode);
|
||||
|
||||
|
||||
extern u8 get_bredr_link_state();
|
||||
|
||||
extern u32 get_bt_slot_time(u8 type, u32 time, int *ret_time, int (*local_us_time)(void));
|
||||
extern u32 get_sync_rec_instant_us_time();
|
||||
extern u8 tws_remote_state_check(void);
|
||||
extern void tws_remote_state_clear(void);
|
||||
extern void user_set_tws_box_mode(u8 mode);
|
||||
|
||||
|
||||
extern void bredr_fcc_init(u8 mode, u8 fre);
|
||||
extern void bredr_set_dut_enble(u8 en, u8 phone);
|
||||
|
||||
|
||||
|
||||
struct link_fix_rx_result {
|
||||
s8 rx_rssi;
|
||||
u32 rx_err_b; //接收到err bit
|
||||
u32 rx_sum_b; //接收到正确bit
|
||||
u32 rx_perr_p; //接收到crc 错误 包数
|
||||
u32 rx_herr_p; //接收到crc 以外其他错误包数
|
||||
u32 rx_invail_p; //接收到crc错误bit太多的包数,丢弃不统计到err bit中
|
||||
|
||||
u32 rx_right_sum_p; //接收到正确包数
|
||||
u32 rx_err_sum_p; //接收到错误包数
|
||||
};
|
||||
|
||||
#define DH1_1 0
|
||||
#define DH3_1 1
|
||||
#define DH5_1 2
|
||||
#define DH1_2 3
|
||||
#define DH3_2 4
|
||||
#define DH5_2 5
|
||||
|
||||
int link_fix_tx_enable(u8 *remote_addr, u8 fre, u8 packet_type, u16 payload, u16 payload_len, u8 pwr);
|
||||
int link_fix_rx_enable(u8 *remote_addr, u8 fre, u8 packet_type, u16 payload, u16 payload_len, u8 pwr);
|
||||
void link_fix_txrx_disable();
|
||||
void link_fix_rx_update_result(struct link_fix_rx_result *result);
|
||||
void link_fix_rx_dump_result();
|
||||
void bt_lmp_store_16(uint8_t *buffer, uint16_t pos, uint16_t value);
|
||||
extern u8 *get_audio_share_master_addr();
|
||||
extern u8 *get_audio_share_slave_addr();
|
||||
extern bool is_master_device_tws_share_conn(u8 *addr);
|
||||
extern bool is_slave_device_tws_share_conn(u8 *addr);
|
||||
extern void lmp_private_close_share_sbc_channel(u8 *addr);
|
||||
extern void *lmp_private_open_share_sbc_channel(u8 *addr, u16 channel_remote_cid, u8 codec_type, u16 simple);
|
||||
extern void set_donlge_quick_sniff_run_slot(int quick_sniff_run_slot);
|
||||
extern bool is_priority_device_tws_share_conn(u8 *addr);
|
||||
extern bool is_master_device_tws_share_conn_tx(u8 *addr);
|
||||
|
||||
void lp_winsize_init(const struct lp_ws_t *lp);
|
||||
|
||||
void bt_max_pwr_set(u8 pwr, u8 pg_pwr, u8 iq_pwr, u8 ble_pwr);
|
||||
void lmp_esco_set_tx_notify(u8 *addr, void *priv, void (*notify)(void *, u32 clk));
|
||||
void set_edr_wait_conn_run_slot(u16 idle_run, u8 inquiry_scan_run, u8 page_scan_run, u8 random);
|
||||
|
||||
int lmp_private_get_speak_mic_data_len() ;
|
||||
u32 lmp_media_get_speak_mic_packet_num();
|
||||
void lmp_private_free_speak_mic_packet(void *packet);
|
||||
void *lmp_private_get_speak_mic_packet(int *len, u32 *hash);
|
||||
void lmp_jl_dongle_mic_set_rx_notify(u8 *addr, void *priv, void (*notify)(void *));
|
||||
int check_a2dp_source_send_packet_limit_cnt(u8 *addr, u8 dump_limit);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,18 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : lmp_config.h
|
||||
|
||||
* Description : Lto 优化Macro 定义
|
||||
|
||||
* Author : Bingquan
|
||||
|
||||
* Email : bingquan_cai@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2018-12-19 16:38
|
||||
|
||||
* Copyright:(c)JIELI 2011-2017 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#ifndef _LMP_CONFIG_H_
|
||||
#define _LMP_CONFIG_H_
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,300 @@
|
||||
#ifndef TWS_API_H
|
||||
#define TWS_API_H
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
#include "classic/tws_event.h"
|
||||
#include "classic/tws_local_media_sync.h"
|
||||
#include "classic/tws_data_trans.h"
|
||||
|
||||
#define TWS_ROLE_MASTER 0
|
||||
#define TWS_ROLE_SLAVE 1
|
||||
|
||||
/*
|
||||
* tws 状态
|
||||
*/
|
||||
#define TWS_STA_SIBLING_DISCONNECTED 0x00000001 //tws未连接
|
||||
#define TWS_STA_SIBLING_CONNECTED 0x00000002 //tws已连接
|
||||
#define TWS_STA_PHONE_DISCONNECTED 0x00000004 //手机未连接
|
||||
#define TWS_STA_PHONE_CONNECTED 0x00000008 //手机已连接
|
||||
#define TWS_STA_ESCO_OPEN 0x00000010 //正在打电话
|
||||
#define TWS_STA_SBC_OPEN 0x00000020 //正在播歌
|
||||
#define TWS_STA_PHON_INCOME_ING 0x00000040
|
||||
#define TWS_STA_LOCAL_TWS_OPEN 0x00000080 //开启local_tws
|
||||
#define TWS_STA_ESCO_OPEN_LINK 0x00000100 //正在打电话,create link
|
||||
#define TWS_STA_PHONE_SNIFF 0x00000200
|
||||
#define TWS_STA_TWS_SNIFF 0x00000400
|
||||
#define TWS_STA_TWS_UNPAIRED 0x00000800
|
||||
#define TWS_STA_TWS_PAIRED 0x00001000
|
||||
#define TWS_STA_MONITOR_ING 0x00002000 //tws主从收到监听信息
|
||||
#define TWS_STA_MONITOR_START 0x00004000
|
||||
#define TWS_STA_HAVE_PAGE_INFO 0x00008000
|
||||
#define TWS_STA_LE_AUDIO_CONNECTED 0x00010000
|
||||
|
||||
#define TWS_SYNC_CALL_TX 1
|
||||
#define TWS_SYNC_CALL_RX 2
|
||||
|
||||
struct tws_sync_call {
|
||||
int uuid;
|
||||
void (*func)(int priv, int err);
|
||||
const char *task_name;
|
||||
};
|
||||
|
||||
extern const struct tws_sync_call tws_sync_call_begin[];
|
||||
extern const struct tws_sync_call tws_sync_call_end[];
|
||||
|
||||
#define list_for_each_tws_sync_call(p) \
|
||||
for (p = tws_sync_call_begin; p < tws_sync_call_end; p++)
|
||||
|
||||
|
||||
#define TWS_SYNC_CALL_REGISTER(sync_call) \
|
||||
static const struct tws_sync_call __tws_##sync_call sec(.tws_sync_call)
|
||||
|
||||
|
||||
#define TWS_FUNC_ID(a, b, c, d) (((a) << 24) | ((b) << 16) | ((c) << 8) | (d))
|
||||
|
||||
typedef void (*tws_func_t)(void *data, u16 len, bool rx);
|
||||
|
||||
struct tws_func_stub {
|
||||
u32 func_id;
|
||||
tws_func_t func; //call from irq
|
||||
};
|
||||
|
||||
#define REGISTER_TWS_FUNC_STUB(stub) \
|
||||
static const struct tws_func_stub stub sec(.tws_func_stub)
|
||||
|
||||
extern const struct tws_func_stub tws_func_stub_begin[];
|
||||
extern const struct tws_func_stub tws_func_stub_end[];
|
||||
|
||||
static inline tws_func_t tws_function_get_by_id(u32 id)
|
||||
{
|
||||
const struct tws_func_stub *p;
|
||||
|
||||
for (p = tws_func_stub_begin; p < tws_func_stub_end; p++) {
|
||||
if (p->func_id == id) {
|
||||
return p->func;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void tws_function_call_by_id(u32 id, void *data, u16 len, bool rx)
|
||||
{
|
||||
const struct tws_func_stub *p;
|
||||
|
||||
for (p = tws_func_stub_begin; p < tws_func_stub_end; p++) {
|
||||
if (p->func_id == id) {
|
||||
p->func(data, len, rx);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
typedef void (*tws_event_handler_t)(int argc, u8 *argv);
|
||||
|
||||
void tws_api_set_event_handler(tws_event_handler_t handler);
|
||||
|
||||
|
||||
/*
|
||||
* 通过搜索码搜索tws设备
|
||||
*/
|
||||
int tws_api_search_sibling_by_code();
|
||||
|
||||
/*
|
||||
*打开可发现, 可连接,可被手机和tws搜索到
|
||||
*/
|
||||
int tws_api_wait_pair_by_code(u16 code, const char *name, int timeout_ms);
|
||||
int tws_api_wait_pair_by_ble(u16 code, const char *name, int timeout_ms);
|
||||
|
||||
int tws_api_wait_tws_pair(int code, const char *name);
|
||||
|
||||
int tws_api_wait_phone_pair(int code, const char *name);
|
||||
|
||||
int tws_api_auto_pair(int timeout);
|
||||
|
||||
int tws_wait_tws_pair(u16 code, const char *name);
|
||||
|
||||
int tws_wait_phone_pair(u16 code, const char *name);
|
||||
|
||||
|
||||
/*
|
||||
*取消可发现, 可连接,可被tws搜索到
|
||||
*/
|
||||
int tws_api_cancle_wait_pair();
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 搜索并连接已经配对过的tws
|
||||
* timeout: 单位ms, 0 表示不超时
|
||||
* 返回值: 0: 函数调用成功
|
||||
*/
|
||||
int tws_api_create_connection(int timeout);
|
||||
|
||||
|
||||
/*
|
||||
* 取消搜索已配对的tws
|
||||
*/
|
||||
int tws_api_cancle_create_connection();
|
||||
|
||||
|
||||
/*
|
||||
* 打开可发现,可连接, 可以被手机和已配对过的tws连接
|
||||
*/
|
||||
int tws_api_wait_connection();
|
||||
|
||||
|
||||
/*
|
||||
* 断开tws直接的连接
|
||||
* reason: 断开原因
|
||||
*/
|
||||
int tws_api_detach(enum tws_detach_reason reason, int timeout);
|
||||
|
||||
/*
|
||||
* 获取主从, 播歌和打电话状态下结果不可靠,请勿调用
|
||||
*/
|
||||
int tws_api_get_role();
|
||||
|
||||
|
||||
int tws_api_get_role_async();
|
||||
/*
|
||||
* 获取tws 连接的状态
|
||||
* 返回值: 详见顶部TWS_STA_**
|
||||
*/
|
||||
int tws_api_get_tws_state();
|
||||
|
||||
int tws_api_get_lmp_state(u8 *bt_addr);
|
||||
|
||||
bool tws_api_is_connect();
|
||||
/*
|
||||
* 设置tws对方地址
|
||||
*/
|
||||
int tws_api_set_sibling_addr(u8 *addr);
|
||||
|
||||
/*
|
||||
* 获取tws对方地址
|
||||
*/
|
||||
int tws_api_get_sibling_addr(u8 *addr);
|
||||
|
||||
|
||||
/*
|
||||
* 获取tws本地地址
|
||||
*/
|
||||
int tws_api_get_local_addr(u8 *addr);
|
||||
|
||||
/*
|
||||
*发送解除配对命令给对方, 成功后会收到TWS_EVENT_REMOVE_PAIRS事件
|
||||
*/
|
||||
int tws_api_remove_pairs();
|
||||
|
||||
|
||||
/*
|
||||
* 设置本地声道
|
||||
* 'L': 左声道
|
||||
* 'R': 右声道
|
||||
* 'U': 双声道合并
|
||||
*/
|
||||
void tws_api_set_local_channel(char channel);
|
||||
|
||||
/*
|
||||
* 获取本地声道
|
||||
*/
|
||||
char tws_api_get_local_channel();
|
||||
|
||||
/*
|
||||
* 通过uuid,主从同步调用相同函数
|
||||
*/
|
||||
int tws_api_sync_call_by_uuid(int uuid, int priv, int delay_ms);
|
||||
|
||||
/*
|
||||
* tws 数据发送函数, 要求 len <= 512
|
||||
*/
|
||||
int tws_api_send_data_to_sibling(void *data, u16 len, u32 func_id);
|
||||
|
||||
int tws_api_send_data_to_slave(void *data, int len, u32 func_id);
|
||||
|
||||
int tws_profile_init();
|
||||
int tws_profile_exit();
|
||||
|
||||
|
||||
|
||||
int tws_api_connect_in_esco();
|
||||
int tws_api_cancle_connect_in_esco();
|
||||
|
||||
/*
|
||||
* 使能对耳自动主从切换
|
||||
*/
|
||||
void tws_api_auto_role_switch_enable();
|
||||
|
||||
/*
|
||||
* 关闭对耳自动主从切换
|
||||
*/
|
||||
void tws_api_auto_role_switch_disable();
|
||||
|
||||
int tws_api_get_low_latency_state();
|
||||
|
||||
int tws_api_low_latency_enable(bool enable);
|
||||
|
||||
|
||||
void tws_api_set_quick_connect_addr(u8 *addr);
|
||||
|
||||
u8 *tws_api_get_quick_connect_addr();
|
||||
|
||||
void tws_api_common_addr_en(u8 en);
|
||||
|
||||
void tws_api_pair_all_way(u8 en);
|
||||
|
||||
int tws_api_power_saving_mode_enable();
|
||||
|
||||
int tws_api_power_saving_mode_disable();
|
||||
|
||||
int tws_api_enter_pure_monitor_mode();
|
||||
|
||||
int tws_api_tx_sniff_req(u16 interval, u16 run_slot);
|
||||
|
||||
void tws_api_tx_unsniff_req();
|
||||
|
||||
void tws_try_connect_disable(void);
|
||||
|
||||
void tws_api_role_switch();
|
||||
|
||||
int tws_open_tws_conn(int timeout);
|
||||
|
||||
int tws_close_tws_pair();
|
||||
|
||||
int tws_close_phone_wait_pair();
|
||||
|
||||
int tws_remove_tws_pairs();
|
||||
|
||||
int tws_disconnect();
|
||||
|
||||
int tws_fast_conn_with_pair(u8 role_type);
|
||||
|
||||
void tws_tx_sniff_req(void);
|
||||
|
||||
void tws_tx_unsniff_req(void);
|
||||
|
||||
int tws_api_is_sniff_state();
|
||||
|
||||
int tws_in_sniff_state(void);
|
||||
|
||||
int tws_sniff_state_check(void);
|
||||
|
||||
void tws_api_set_pair_code(u16 pair_code);
|
||||
|
||||
int tws_api_get_mclkn();
|
||||
|
||||
void tws_api_role_switch_lock_msec(int msec);
|
||||
void tws_api_esco_rssi_role_switch(bool en);//通话根据信号强度主从切换使能
|
||||
|
||||
int tws_api_wait_pair_when_phone_connect(int timeout_ms);
|
||||
|
||||
void tws_api_set_quick_rxtx_time(u16 time_msec);
|
||||
|
||||
void tws_api_cancel_search_sibling(void);
|
||||
extern u32 tws_conn_get_mclkn(u32 *timebase);
|
||||
extern int bredr_clkn2offset(int clkn_begin, int clkn_end);
|
||||
|
||||
u32 bt_audio_reference_clock_time(u8 network);
|
||||
#endif
|
||||
@@ -0,0 +1,56 @@
|
||||
#ifndef TWS_DATA_TRANS_H
|
||||
#define TWS_DATA_TRANS_H
|
||||
|
||||
#include "generic/typedef.h"
|
||||
|
||||
enum {
|
||||
TWS_DATA_TRANS_SOURCE,
|
||||
TWS_DATA_TRANS_SINK,
|
||||
};
|
||||
|
||||
enum tws_data_trans_attr {
|
||||
TWS_DTC_LOCAL_MEDIA,
|
||||
TWS_DTC_MIC_REC,
|
||||
};
|
||||
|
||||
u8 tws_api_data_trans_open(u8 channel, enum tws_data_trans_attr attr, u16 buf_size);
|
||||
|
||||
|
||||
int tws_api_data_trans_start(u8 channel, u8 *arg, u8 len);
|
||||
|
||||
|
||||
int tws_api_data_trans_stop(u8 channel);
|
||||
|
||||
|
||||
int tws_api_data_trans_close(u8 channel);
|
||||
|
||||
|
||||
void tws_api_data_trans_auto_drop(u8 channel, int enable);
|
||||
|
||||
int tws_api_data_trans_send(u8 channel, u8 *buf, int len);
|
||||
|
||||
void *tws_api_data_trans_buf_alloc(u8 channel, int len);
|
||||
|
||||
int tws_api_data_trans_push(u8 channel, void *_frame, int len);
|
||||
|
||||
void *tws_api_data_trans_pop(u8 channel, int *len);
|
||||
|
||||
void tws_api_data_trans_free(u8 channel, void *_frame);
|
||||
|
||||
void *tws_api_data_trans_fetch(u8 channel, void *_prev, int *len);
|
||||
|
||||
void tws_api_data_trans_clear(u8 channel);
|
||||
|
||||
int tws_api_data_trans_check(u8 channel, u16 *ready_len, u16 *total_len);
|
||||
int tws_api_data_trans_check_start();
|
||||
|
||||
|
||||
void tws_api_data_trans_rx_notify_register(u8 channel, void (*notify)(void *), void *notify_priv);
|
||||
|
||||
void tws_api_data_trans_rx_notify_unregister(u8 channel);
|
||||
|
||||
u8 local_tws_data_trans_open_send();
|
||||
|
||||
bool tws_api_data_trans_connect(void);
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
#ifndef TWS_EVENT_H
|
||||
#define TWS_EVENT_H
|
||||
|
||||
#define KEY_EVENT_FROM_TWS (('T' << 24) | ('W' << 16) | ('S' << 8) | '\0')
|
||||
#define SYS_BT_EVENT_FROM_TWS (('T' << 24) | ('W' << 16) | ('S' << 8) | '\0')
|
||||
|
||||
enum {
|
||||
TWS_STA_WAIT_SIBLING_PAIR = 1,
|
||||
TWS_STA_SEARCH_SIBLING,
|
||||
TWS_STA_CREATE_CONNECTION_BREDR,
|
||||
TWS_STA_CREATE_CONNECTION_BLE,
|
||||
TWS_STA_WAIT_CONNECTION_BREDR,
|
||||
TWS_STA_WAIT_CONNECTION_BLE,
|
||||
TWS_STA_DISCONNECTION,
|
||||
TWS_STA_CONNECTION,
|
||||
TWS_STA_START_MONITOR,
|
||||
TWS_STA_MONITOR,
|
||||
TWS_STA_WAIT_PHONE_PAIR,
|
||||
TWS_STA_WAIT_PAIR,
|
||||
};
|
||||
|
||||
enum tws_role_switch_action {
|
||||
TWS_ROLE_SWITCH_ACTION_READY,
|
||||
TWS_ROLE_SWITCH_BY_AUTO,
|
||||
TWS_ROLE_SWITCH_BY_MANUAL,
|
||||
};
|
||||
|
||||
enum {
|
||||
LOCAL_REMOTE_ADDR = 0,
|
||||
TWS_PAIR_REMOTE_ADDR_STATE_OK,
|
||||
TWS_PAIR_REMOTE_ADDR_STATE_NOT,
|
||||
};
|
||||
|
||||
enum tws_detach_reason {
|
||||
TWS_DETACH_BY_LOCAL = 0x01,
|
||||
TWS_DETACH_BY_REMOTE = 0x02,
|
||||
TWS_DETACH_BY_POWEROFF = 0x04,
|
||||
TWS_DETACH_BY_SUPER_TIMEOUT = 0x08,
|
||||
TWS_DETACH_BY_REMOVE_PAIRS = 0x10,
|
||||
TWS_DETACH_BY_TESTBOX_CON = 0x20,
|
||||
TWS_DETACH_SUSS = 0x40,
|
||||
TWS_DETACH_BY_FORCE = 0x80,
|
||||
};
|
||||
|
||||
|
||||
#define TWS_CONN_CHANNEL 0
|
||||
#define TWS_MONITOR_CHANNEL 1
|
||||
#define TWS_LINK_SYNC_CHANNEL 1
|
||||
#define TWS_LMP_SYNC_CHANNEL 2
|
||||
#define TWS_AFH_SYNC_CHANNEL 3
|
||||
#define TWS_TX_SYNC_CHANNEL 4
|
||||
#define TWS_LOW_LATENCY_CHANNEL 5
|
||||
#define TWS_DATA_SYNC_CHANNEL 6
|
||||
#define TWS_SBC_SYNC_CHANNEL 7
|
||||
#define TWS_EVENT_SYNC_CHANNEL 8
|
||||
#define TWS_SYNC_CALL_CHANNEL 9
|
||||
#define TWS_POWER_BALANCE_CHANNEL 10
|
||||
#define TWS_CI_DATA_SYNC_CHANNEL 11
|
||||
#define TWS_LOCAL_MEIDA_SYNC_CHANNEL 12
|
||||
#define TWS_LMP_SLOT_CHANNEL 13
|
||||
#define TWS_DATA_TRANS_CHANNEL 14
|
||||
|
||||
enum {
|
||||
TWS_EVENT_SEARCH_TIMEOUT = 1,
|
||||
TWS_EVENT_CONNECTED,
|
||||
TWS_EVENT_CONNECTION_TIMEOUT,
|
||||
TWS_EVENT_CONNECTION_DETACH,
|
||||
TWS_EVENT_REMOVE_PAIRS,
|
||||
TWS_EVENT_PHONE_LINK_DETACH,
|
||||
TWS_EVENT_SYNC_FUN_CMD,
|
||||
TWS_EVENT_SYNC_FUN_TRANID,
|
||||
TWS_EVENT_CONNECT_TEST,
|
||||
TWS_EVENT_ROLE_SWITCH,
|
||||
TWS_EVENT_LOCAL_MEDIA_START,
|
||||
TWS_EVENT_LOCAL_MEDIA_STOP,
|
||||
TWS_EVENT_ESCO_ADD_CONNECT,
|
||||
TWS_EVENT_SETUP_MONITOR_LINK,
|
||||
TWS_EVENT_MONITOR_START,
|
||||
TWS_EVENT_DATA_TRANS_OPEN,
|
||||
TWS_EVENT_DATA_TRANS_START,
|
||||
TWS_EVENT_DATA_TRANS_STOP,
|
||||
TWS_EVENT_DATA_TRANS_CLOSE,
|
||||
|
||||
TWS_EVENT_MODE_CHANGE, //sniff without phone
|
||||
|
||||
TWS_EVENT_MONITOR_M_START_ENTER_ESCO,
|
||||
TWS_EVENT_MONITOR_S_START_ENTER_ESCO,
|
||||
TWS_EVENT_ESCO_ROLE_SWITCH_START,
|
||||
|
||||
TWS_EVENT_TONE_TEST = 0xff,
|
||||
};
|
||||
|
||||
|
||||
struct tws_event {
|
||||
u8 event;
|
||||
u8 args[15];
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
#ifndef TWS_LOCAL_MEDIA_SYNC_H
|
||||
#define TWS_LOCAL_MEDIA_SYNC_H
|
||||
|
||||
#include "generic/list.h"
|
||||
#include "generic/typedef.h"
|
||||
|
||||
|
||||
|
||||
void tws_api_local_media_trans_start();
|
||||
|
||||
void tws_api_local_media_trans_set_buf(void *buf, int size);
|
||||
|
||||
void *tws_api_local_media_trans_alloc(int len);
|
||||
|
||||
void tws_api_local_media_trans_free(void *frame);
|
||||
|
||||
void tws_api_local_media_trans_push(void *frame, int len);
|
||||
|
||||
void *tws_api_local_media_trans_pop(int *len);
|
||||
|
||||
void *tws_api_local_media_trans_fetch(void *prev, int *len);
|
||||
|
||||
void tws_api_local_media_trans_stop();
|
||||
|
||||
void tws_api_local_media_trans_packet_del(void *_frame);
|
||||
int tws_api_local_media_trans_check_total(u8 head);
|
||||
int tws_api_local_media_trans_check_ready_total(void);
|
||||
void tws_api_local_media_trans_clear(void);
|
||||
int tws_api_local_media_packet_cnt(u8 *rx_packet_cnt, u8 *wait_send_pcaket_cnt);
|
||||
|
||||
// 填数超过了一定值才可以发送
|
||||
void tws_api_local_media_set_limit_size(int size);
|
||||
|
||||
int tws_api_local_media_trans_bulk_push(u8 *buf, int len);
|
||||
|
||||
int tws_api_local_media_push_with_sequence(u8 *buf, int len, u16 seqn);
|
||||
|
||||
int tws_api_local_media_push_with_timestamp(u8 *buf, int len, u32 timestamp);
|
||||
|
||||
int tws_api_local_media_trans_open(u16 buf_size);
|
||||
|
||||
int tws_api_local_media_dec_start(u8 *arg, u8 len);
|
||||
|
||||
int tws_api_local_media_dec_stop();
|
||||
|
||||
void tws_api_auto_drop_frame_enable(int enable);
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
*(.uECC_bss)
|
||||
*(.ECDH_sample_bss)
|
||||
*(.crypto_bss)
|
||||
@@ -0,0 +1,5 @@
|
||||
|
||||
*(.crypto_ecdh_data)
|
||||
*(.crypto_data)
|
||||
*(.uECC_data)
|
||||
*(.ECDH_sample_data)
|
||||
@@ -0,0 +1,24 @@
|
||||
|
||||
*(.crypto_ecdh_code)
|
||||
*(.crypto_ecdh_const)
|
||||
|
||||
*(.crypto_bigint_code)
|
||||
*(.crypto_bigint_const)
|
||||
|
||||
*(.crypto_code)
|
||||
*(.crypto_const)
|
||||
|
||||
*(.ECDH_sample_code)
|
||||
*(.ECDH_sample_const)
|
||||
|
||||
*(.uECC_code)
|
||||
*(.uECC_const)
|
||||
|
||||
*(.hmac_code)
|
||||
*(.hmac_const)
|
||||
|
||||
*(.hash_sample_code)
|
||||
*(.hash_sample_const)
|
||||
|
||||
*(.aes_cmac_sample_code)
|
||||
*(.aes_cmac_sample_const)
|
||||
@@ -0,0 +1,249 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : hci_transport.h
|
||||
|
||||
* Description :
|
||||
|
||||
* Author : Bingquan
|
||||
|
||||
* Email : bingquan_cai@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2017-01-17 15:14
|
||||
|
||||
* Copyright:(c)JIELI 2011-2016 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#ifndef __BTCONTROLLER_HCI_TRANSPORT_H
|
||||
#define __BTCONTROLLER_HCI_TRANSPORT_H
|
||||
|
||||
//#include <stdint.h>
|
||||
#include "generic/typedef.h"
|
||||
|
||||
#if defined __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* API_START */
|
||||
typedef struct {
|
||||
uint32_t baudrate;
|
||||
int flowcontrol;
|
||||
const char *device_name;
|
||||
} btstack_uart_config_t;
|
||||
|
||||
typedef enum {
|
||||
// UART active, sleep off
|
||||
BTSTACK_UART_SLEEP_OFF = 0,
|
||||
// used for eHCILL
|
||||
BTSTACK_UART_SLEEP_RTS_HIGH_WAKE_ON_CTS_PULSE,
|
||||
// used for H5 and for eHCILL without support for wake on CTS pulse
|
||||
BTSTACK_UART_SLEEP_RTS_LOW_WAKE_ON_RX_EDGE,
|
||||
|
||||
} btstack_uart_sleep_mode_t;
|
||||
|
||||
typedef enum {
|
||||
BTSTACK_UART_SLEEP_MASK_RTS_HIGH_WAKE_ON_CTS_PULSE = 1 << BTSTACK_UART_SLEEP_RTS_HIGH_WAKE_ON_CTS_PULSE,
|
||||
BTSTACK_UART_SLEEP_MASK_RTS_LOW_WAKE_ON_RX_EDGE = 1 << BTSTACK_UART_SLEEP_RTS_LOW_WAKE_ON_RX_EDGE
|
||||
} btstack_uart_sleep_mode_mask_t;
|
||||
|
||||
typedef struct {
|
||||
/**
|
||||
* init transport
|
||||
* @param uart_config
|
||||
*/
|
||||
int (*init)(const btstack_uart_config_t *uart_config);
|
||||
|
||||
/**
|
||||
* open transport connection
|
||||
*/
|
||||
int (*open)(void);
|
||||
|
||||
/**
|
||||
* close transport connection
|
||||
*/
|
||||
int (*close)(void);
|
||||
|
||||
/**
|
||||
* set callback for block received. NULL disables callback
|
||||
*/
|
||||
void (*set_block_received)(void (*block_handler)(void));
|
||||
|
||||
/**
|
||||
* set callback for sent. NULL disables callback
|
||||
*/
|
||||
void (*set_block_sent)(void (*block_handler)(void));
|
||||
|
||||
/**
|
||||
* set baudrate
|
||||
*/
|
||||
int (*set_baudrate)(uint32_t baudrate);
|
||||
|
||||
/**
|
||||
* set parity
|
||||
*/
|
||||
int (*set_parity)(int parity);
|
||||
|
||||
/**
|
||||
* set flowcontrol
|
||||
*/
|
||||
int (*set_flowcontrol)(int flowcontrol);
|
||||
|
||||
/**
|
||||
* receive block
|
||||
*/
|
||||
void (*receive_block)(uint8_t *buffer, uint16_t len);
|
||||
|
||||
/**
|
||||
* send block
|
||||
*/
|
||||
void (*send_block)(const uint8_t *buffer, uint16_t length);
|
||||
|
||||
// support for sleep modes in TI's H4 eHCILL and H5
|
||||
|
||||
/**
|
||||
* query supported wakeup mechanisms
|
||||
* @return supported_sleep_modes mask
|
||||
*/
|
||||
int (*get_supported_sleep_modes)(void);
|
||||
|
||||
/**
|
||||
* set UART sleep mode - allows to turn off UART and it's clocks to save energy
|
||||
* Supported sleep modes:
|
||||
* - off: UART active, RTS low if receive_block was called and block not read yet
|
||||
* - RTS high, wake on CTS: RTS should be high. On CTS pulse, UART gets enabled again and RTS goes to low
|
||||
* - RTS low, wake on RX: data on RX will trigger UART enable, bytes might get lost
|
||||
*/
|
||||
void (*set_sleep)(btstack_uart_sleep_mode_t sleep_mode);
|
||||
|
||||
/**
|
||||
* set wakeup handler - needed to notify hci transport of wakeup requests by Bluetooth controller
|
||||
* Called upon CTS pulse or RX data. See sleep modes.
|
||||
*/
|
||||
void (*set_wakeup_handler)(void (*wakeup_handler)(void));
|
||||
|
||||
} btstack_uart_block_t;
|
||||
|
||||
// common implementations
|
||||
const btstack_uart_block_t *btstack_uart_block_posix_instance(void);
|
||||
const btstack_uart_block_t *btstack_uart_block_windows_instance(void);
|
||||
const btstack_uart_block_t *btstack_uart_block_embedded_instance(void);
|
||||
const btstack_uart_block_t *btstack_uart_block_freertos_instance(void);
|
||||
|
||||
/* HCI packet types */
|
||||
typedef struct {
|
||||
/**
|
||||
* transport name
|
||||
*/
|
||||
const char *name;
|
||||
|
||||
/**
|
||||
* init transport
|
||||
* @param transport_config
|
||||
*/
|
||||
void (*init)(const void *transport_config);
|
||||
|
||||
/**
|
||||
* open transport connection
|
||||
*/
|
||||
int (*open)(void);
|
||||
|
||||
/**
|
||||
* close transport connection
|
||||
*/
|
||||
int (*close)(void);
|
||||
|
||||
/**
|
||||
* register packet handler for HCI packets: ACL, SCO, and Events
|
||||
*/
|
||||
void (*register_packet_handler)(void (*handler)(int packet_type, const u8 *packet, int size));
|
||||
|
||||
/**
|
||||
* support async transport layers, e.g. IRQ driven without buffers
|
||||
*/
|
||||
int (*can_send_packet_now)(uint8_t packet_type);
|
||||
|
||||
/**
|
||||
* send packet
|
||||
*/
|
||||
int (*send_packet)(int packet_type, const u8 *packet, int size);
|
||||
|
||||
/**
|
||||
* extension for UART transport implementations
|
||||
*/
|
||||
int (*set_baudrate)(uint32_t baudrate);
|
||||
|
||||
/**
|
||||
* extension for UART H5 on CSR: reset BCSP/H5 Link
|
||||
*/
|
||||
void (*reset_link)(void);
|
||||
|
||||
/**
|
||||
* extension for USB transport implementations: config SCO connections
|
||||
*/
|
||||
void (*set_sco_config)(uint16_t voice_setting, int num_connections);
|
||||
|
||||
} hci_transport_t;
|
||||
|
||||
typedef enum {
|
||||
HCI_TRANSPORT_CONFIG_UART,
|
||||
HCI_TRANSPORT_CONFIG_USB
|
||||
} hci_transport_config_type_t;
|
||||
|
||||
typedef struct {
|
||||
hci_transport_config_type_t type;
|
||||
} hci_transport_config_t;
|
||||
|
||||
typedef struct {
|
||||
hci_transport_config_type_t type; // == HCI_TRANSPORT_CONFIG_UART
|
||||
uint32_t baudrate_init; // initial baud rate
|
||||
uint32_t baudrate_main; // = 0: same as initial baudrate
|
||||
int flowcontrol; //
|
||||
const char *device_name;
|
||||
} hci_transport_config_uart_t;
|
||||
|
||||
|
||||
// inline various hci_transport_X.h files
|
||||
|
||||
/*
|
||||
* @brief Setup H4 instance with uart_driver
|
||||
* @param uart_driver to use
|
||||
*/
|
||||
const hci_transport_t *hci_transport_h4_instance(const btstack_uart_block_t *uart_driver);
|
||||
|
||||
/*
|
||||
* @brief Setup H5 instance with uart_driver
|
||||
* @param uart_driver to use
|
||||
*/
|
||||
const hci_transport_t *hci_transport_h5_instance(const btstack_uart_block_t *uart_driver);
|
||||
|
||||
/*
|
||||
* @brief Enable H5 Low Power Mode: enter sleep mode after x ms of inactivity
|
||||
* @param inactivity_timeout_ms or 0 for off
|
||||
*/
|
||||
void hci_transport_h5_set_auto_sleep(uint16_t inactivity_timeout_ms);
|
||||
|
||||
/*
|
||||
* @brief Enable BSCP mode H5, by enabling event parity
|
||||
*/
|
||||
void hci_transport_h5_enable_bcsp_mode(void);
|
||||
|
||||
/*
|
||||
* @brief
|
||||
*/
|
||||
const hci_transport_t *hci_transport_usb_instance(void);
|
||||
|
||||
const hci_transport_t *hci_transport_uart_instance(void);
|
||||
|
||||
const hci_transport_t *hci_transport_h4_controller_instance(void);
|
||||
|
||||
const hci_transport_t *hci_transport_h4_host_instance(void);
|
||||
/**
|
||||
* @brief Specify USB Bluetooth device via port numbers from root to device
|
||||
*/
|
||||
void hci_transport_usb_set_path(int len, uint8_t *port_numbers);
|
||||
|
||||
/* API_END */
|
||||
extern const hci_transport_t *hci_transport;
|
||||
|
||||
#if defined __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // __HCI_TRANSPORT_H
|
||||
@@ -0,0 +1,51 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : btcontroller_config.h
|
||||
|
||||
* Description : 优化代码需要,libs 依赖app 定义变量,由app 定义变量值决定libs 优化
|
||||
|
||||
* Author : Bingquan
|
||||
|
||||
* Email : bingquan_cai@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2018-12-19 16:10
|
||||
|
||||
* Copyright:(c)JIELI 2011-2017 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#ifndef _BTCONTROLLER_CONFIG_H_
|
||||
#define _BTCONTROLLER_CONFIG_H_
|
||||
|
||||
#include "btcontroller_modules.h"
|
||||
|
||||
#include "ble/ll_config.h"
|
||||
|
||||
// #define CONFIG_LE_FEATURES \
|
||||
(\
|
||||
LE_ENCRYPTION | \
|
||||
LE_CORE_V50_FEATURES \
|
||||
)
|
||||
|
||||
#define CONFIG_LE_FEATURES 0//(LE_ENCRYPTION)
|
||||
|
||||
// #define CONFIG_LE_ROLES (LE_ADV|LE_SCAN|LE_INIT|LE_SLAVE|LE_MASTER)
|
||||
// #define CONFIG_LE_ROLES (LE_ADV|LE_SCAN)
|
||||
#define CONFIG_LE_ROLES (LE_ADV)
|
||||
|
||||
#include "classic/lmp_config.h"
|
||||
|
||||
#define CONFIG_CL_FEATURES
|
||||
|
||||
#define CONFIG_CL_EX_FEATURES
|
||||
|
||||
|
||||
#define TWS_BLE_ESCO_CONNECT //通话过程进行连接使能
|
||||
|
||||
|
||||
/*
|
||||
*-------------------
|
||||
* 蓝牙基带运行的模式
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,90 @@
|
||||
#ifndef A2DP_MEDIA_CODEC_H
|
||||
#define A2DP_MEDIA_CODEC_H
|
||||
|
||||
|
||||
#include "generic/typedef.h"
|
||||
#include "classic/hci_lmp.h"
|
||||
|
||||
#ifndef A2DP_CODEC_SBC
|
||||
#define A2DP_CODEC_SBC 0x00
|
||||
#define A2DP_CODEC_MPEG12 0x01
|
||||
#define A2DP_CODEC_MPEG24 0x02
|
||||
#define A2DP_CODEC_ATRAC 0x03
|
||||
#define A2DP_CODEC_NON_A2DP 0xFF
|
||||
|
||||
#define A2DP_CODEC_LDAC 0xB
|
||||
#define A2DP_CODEC_LHDC 0xE
|
||||
#define A2DP_CODEC_LHDC_V5 0xC
|
||||
#endif
|
||||
|
||||
#define seqn_after(a, b) ((s16)((s16)(b) - (s16)(a)) < 0)
|
||||
#define seqn_before(a, b) seqn_after(b, a)
|
||||
|
||||
|
||||
void *a2dp_open_media_file(u8 *addr);
|
||||
|
||||
void a2dp_media_close(u8 *addr);
|
||||
|
||||
void a2dp_close_media_file(void *file);
|
||||
|
||||
void a2dp_media_start_play(void *_file);
|
||||
|
||||
void a2dp_media_stop_play(void *_file);
|
||||
|
||||
int a2dp_media_set_rx_notify(void *_file, void *priv, void (*notify)(void *));
|
||||
|
||||
extern int a2dp_media_get_packet(void *_file, struct a2dp_media_frame *frame);
|
||||
|
||||
extern int a2dp_media_try_get_packet(void *_file, struct a2dp_media_frame *frame);
|
||||
|
||||
extern void a2dp_media_put_packet(void *_file, void *packet);
|
||||
|
||||
extern int a2dp_media_get_remain_buffer_size();
|
||||
|
||||
extern int a2dp_media_get_remain_play_time(void *_file, u8 include_tws);
|
||||
|
||||
extern int a2dp_media_get_total_data_len(void *_file);
|
||||
|
||||
extern int a2dp_media_get_packet_num(void *_file);
|
||||
|
||||
extern int a2dp_media_clear_packet_before_seqn(void *_file, u16 seqn_number);
|
||||
|
||||
extern void *a2dp_media_fetch_packet(void *_file, int *len, void *prev_packet);
|
||||
|
||||
extern void *a2dp_media_fetch_packet_and_wait(void *_file, int *len, void *prev_packet, int msec);
|
||||
|
||||
extern void a2dp_media_free_packet(void *_file, void *_packet);
|
||||
|
||||
extern int a2dp_media_channel_exist(void *_file);
|
||||
|
||||
extern int a2dp_media_is_clearing_frame(void *_file);
|
||||
|
||||
extern int a2dp_media_get_codec_type(void *_file);
|
||||
extern int a2dp_media_get_sample_rate(void *_file);
|
||||
extern int a2dp_media_get_bit_wide(void *_file);
|
||||
extern int a2dp_media_get_codec_version(void *_file);
|
||||
|
||||
extern int a2dp_media_get_rtp_header_len(u8 coding_type, u8 *buf, int len);
|
||||
|
||||
extern int sbc_frame_length(u8 data, u8 bitpool);
|
||||
|
||||
extern void a2dp_media_mute(u8 *addr);
|
||||
extern bool a2dp_media_unmute(u8 *addr);
|
||||
extern bool a2dp_media_is_mute(u8 *addr);
|
||||
|
||||
extern int aac_energy_check(u8 *packet, u16 size);
|
||||
extern void aac_decoder_energy_det_close();
|
||||
|
||||
void a2dp_media_update_delay_report_time(void *_file, u16 time);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,865 @@
|
||||
#ifndef __AVCTP_USER_H__
|
||||
#define __AVCTP_USER_H__
|
||||
|
||||
|
||||
#include "typedef.h"
|
||||
#include "btstack_typedef.h"
|
||||
|
||||
|
||||
|
||||
///***注意:该文件的枚举与库编译密切相关,主要是给用户提供调用所用。用户不能自己在中间添加值。*/
|
||||
////----user (command) codes----////
|
||||
typedef enum {
|
||||
/*
|
||||
使用bt_cmd_prepare(USER_CMD_TYPE cmd,u16 param_len,u8 *param)发送命令
|
||||
//返回0表支持参数个数正确,返回1表不支持,2是参数错误
|
||||
要三个参数,没参数说明的命令参数param_len传0,param传NULL
|
||||
例子A、USER_CTRL_HFP_CALL_SET_VOLUME命令需要1个参数的使用例子:
|
||||
u8 vol = 8;
|
||||
bt_cmd_prepare(USER_CTRL_HFP_CALL_SET_VOLUME,1, &vol);
|
||||
|
||||
例子B、USER_CTRL_HFP_DIAL_NUMBER 参数要用数组先存起来,param_len是号码长度,param可传参数数组指针,
|
||||
user_val->income_phone_num已经存好号码
|
||||
bt_cmd_prepare(USER_CTRL_HFP_DIAL_NUMBER,user_val->phone_num_len,user_val->income_phone_num);
|
||||
|
||||
*/
|
||||
|
||||
//链路操作部分
|
||||
//回连,使用的是VM的地址,一般按键操作不使用该接口
|
||||
USER_CTRL_START_CONNECTION = 0x00,
|
||||
//通过地址去连接,如果知道地址想去连接使用该接口
|
||||
USER_CTRL_START_CONNEC_VIA_ADDR,
|
||||
//通过指定地址手动回连,该地址是最后一个断开设备的地址
|
||||
USER_CTRL_START_CONNEC_VIA_ADDR_MANUALLY,
|
||||
//通过地址去连接spp,如果知道地址想去连接使用该接口
|
||||
USER_CTRL_START_CONNEC_SPP_VIA_ADDR,
|
||||
|
||||
//断开连接,断开当前所有蓝牙连接,可以加地址进行指定断开
|
||||
USER_CTRL_DISCONNECTION_HCI,
|
||||
|
||||
//取消链接
|
||||
USER_CTRL_CONNECTION_CANCEL,
|
||||
|
||||
//读取远端名字
|
||||
USER_CTRL_READ_REMOTE_NAME,
|
||||
//连接或断开SCO或esco,选择这个命令会自动判断要断开还是连接sco
|
||||
USER_CTRL_SCO_LINK,
|
||||
//连接SCO或esco
|
||||
USER_CTRL_CONN_SCO,
|
||||
//断开sco或esco
|
||||
USER_CTRL_DISCONN_SCO,
|
||||
//断开并配置拒绝远端ESCO连接
|
||||
USER_CTRL_DISCONN_REJECT_SCO,
|
||||
//断开SDP,一般按键操作不使用该接口
|
||||
USER_CTRL_DISCONN_SDP_MASTER,
|
||||
|
||||
//直接发底层断开,跳过协议的断开
|
||||
USER_CTRL_DETACH,
|
||||
|
||||
//关闭蓝牙可发现
|
||||
USER_CTRL_WRITE_SCAN_DISABLE,
|
||||
//打开蓝牙可发现
|
||||
USER_CTRL_WRITE_SCAN_ENABLE,
|
||||
//关闭蓝牙可连接
|
||||
USER_CTRL_WRITE_CONN_DISABLE,
|
||||
//打开蓝牙可连接
|
||||
USER_CTRL_WRITE_CONN_ENABLE,
|
||||
//控制蓝牙搜索,需要搜索附件设备做功能的连续说明情况在补充完善功能
|
||||
USER_CTRL_SEARCH_DEVICE,
|
||||
//取消搜索
|
||||
USER_CTRL_INQUIRY_CANCEL,
|
||||
//取消配对
|
||||
USER_CTRL_PAGE_CANCEL,
|
||||
///进入sniff模式,一般按键操作不使用该接口
|
||||
USER_CTRL_SNIFF_IN,
|
||||
USER_CTRL_SNIFF_EXIT,
|
||||
USER_CTRL_SNIFF_CLEAR_CNT,
|
||||
USER_CTRL_ALL_SNIFF_EXIT,
|
||||
|
||||
//链路操作层接口位置预留
|
||||
USER_CTRL_HCI_FUNCTION1,
|
||||
|
||||
//hfp链路部分
|
||||
//控制打电话音量,注意可能有些手机进度条有变化音量大小没变化,同步要设置样机DAC音量
|
||||
/*跟电话音量操作有关的操作最终都执行回调函数call_vol_change*/
|
||||
USER_CTRL_HFP_CMD_BEGIN = 0x20,
|
||||
USER_CTRL_HFP_CMD_CONN, /* 做HFP 连接 */
|
||||
USER_CTRL_HFP_CALL_VOLUME_UP, /*音量加1,手机可以同步显示*/
|
||||
USER_CTRL_HFP_CALL_VOLUME_DOWN, /*音量减1,手机可以同步显示*/
|
||||
USER_CTRL_HFP_CALL_SET_VOLUME, /*设置固定值,手机可以同步显示,需要传1个音量值*/
|
||||
USER_CTRL_HFP_CALL_GET_VOLUME, /*获取音量,默认从call_vol_change返回*/
|
||||
|
||||
//来电接听电话
|
||||
USER_CTRL_HFP_CALL_ANSWER,
|
||||
//挂断电话
|
||||
USER_CTRL_HFP_CALL_HANGUP,
|
||||
//回拨上一个打出电话
|
||||
USER_CTRL_HFP_CALL_LAST_NO,
|
||||
//获取当前通话电话号码
|
||||
USER_CTRL_HFP_CALL_CURRENT,
|
||||
//通话过程中根据提示输入控制
|
||||
/*例子
|
||||
char num = '1';
|
||||
bt_cmd_prepare(USER_CTRL_HFP_DTMF_TONES,1,(u8 *)&num);
|
||||
*/
|
||||
//发送打电话时的信号选择DTMF tones ,有一个参数,参数支持{0-9, *, #, A, B, C, D}
|
||||
USER_CTRL_HFP_DTMF_TONES,
|
||||
//根据电话号码拨号
|
||||
/**USER_CTRL_HFP_DIAL_NUMBER命令有参数,参数要用数组先存起来,
|
||||
param_len是号码长度,param可传参数数组指针*/
|
||||
USER_CTRL_HFP_DIAL_NUMBER,
|
||||
//*控制siri状态*//*可以注册回调函数获取返回值*/
|
||||
USER_CTRL_HFP_GET_SIRI_STATUS,
|
||||
//*开启siri*/
|
||||
USER_CTRL_HFP_GET_SIRI_OPEN,
|
||||
//*关闭siri,一般说完话好像自动关闭了,如果要提前终止可调用*/
|
||||
USER_CTRL_HFP_GET_SIRI_CLOSE,
|
||||
/*获取手机的日期和时间,苹果可以,一般安卓机好像都不行*/
|
||||
USER_CTRL_HFP_GET_PHONE_DATE_TIME,
|
||||
USER_CTRL_HFP_CMD_SEND_BIA,
|
||||
/*获取手机厂商的命令 */
|
||||
USER_CTRL_HFP_CMD_GET_MANUFACTURER,
|
||||
/*更新当前的电量给手机*/
|
||||
USER_CTRL_HFP_CMD_UPDATE_BATTARY,
|
||||
//三方通话操作
|
||||
//应答
|
||||
//挂断当前去听另一个(未接听或者在保留状态都可以)
|
||||
USER_CTRL_HFP_THREE_WAY_ANSWER1,
|
||||
//保留当前去接听, 或者用于两个通话的切换
|
||||
USER_CTRL_HFP_THREE_WAY_ANSWER2,
|
||||
USER_CTRL_HFP_THREE_WAY_ANSWER1X, //目前没有用
|
||||
USER_CTRL_HFP_THREE_WAY_ANSWER2X, //目前没有用
|
||||
//可以发完USER_CTRL_HFP_THREE_WAY_ANSWER2,又发ANSWER3,自己看看效果
|
||||
USER_CTRL_HFP_THREE_WAY_ANSWER3,
|
||||
//拒听
|
||||
USER_CTRL_HFP_THREE_WAY_REJECT, //拒绝后台来电
|
||||
USER_CTRL_HFP_DISCONNECT, //断开HFP连接
|
||||
|
||||
//bt_cmd_prepare(USER_CTRL_HFP_SEND_USER_AT_CMD,len,data_ptr);
|
||||
USER_CTRL_HFP_SEND_USER_AT_CMD, //用户发送自己定义的AT命令
|
||||
USER_CTRL_HFP_CMD_FUNCTION1, //预留HFP命令位置
|
||||
USER_CTRL_HFP_CMD_FUNCTION2, //预留HFP命令位置
|
||||
USER_CTRL_HFP_CMD_END,
|
||||
|
||||
//音乐控制部分
|
||||
USER_CTRL_AVCTP_CMD_BEGIN = 0x40,
|
||||
//只会发pause命令
|
||||
USER_CTRL_AVCTP_PAUSE_MUSIC,
|
||||
//音乐播放,会根据协议栈记录的状态发PLAY或者PAUSE
|
||||
USER_CTRL_AVCTP_OPID_PLAY,
|
||||
//音乐暂停,会根据协议栈记录的状态发PLAY或者PAUSE
|
||||
USER_CTRL_AVCTP_OPID_PAUSE,
|
||||
//音乐停止
|
||||
USER_CTRL_AVCTP_OPID_STOP,
|
||||
//音乐下一首
|
||||
USER_CTRL_AVCTP_OPID_NEXT,
|
||||
//音乐上一首
|
||||
USER_CTRL_AVCTP_OPID_PREV,
|
||||
//音乐快进
|
||||
USER_CTRL_AVCTP_OPID_FORWARD,
|
||||
//音乐快退
|
||||
USER_CTRL_AVCTP_OPID_REWIND,
|
||||
//音乐循环模式
|
||||
USER_CTRL_AVCTP_OPID_REPEAT_MODE,
|
||||
USER_CTRL_AVCTP_OPID_SHUFFLE_MODE,
|
||||
//获取播放歌曲总时间和当前时间接口
|
||||
USER_CTRL_AVCTP_OPID_GET_PLAY_TIME,
|
||||
//获取当前音乐的一些信息.
|
||||
//通过bt_music_info_handle_register注册的接口返回
|
||||
USER_CTRL_AVCTP_OPID_GET_MUSIC_INFO,
|
||||
|
||||
//同步音量接口
|
||||
USER_CTRL_AVCTP_OPID_SEND_VOL,
|
||||
// //AVCTP断开,是音乐控制链路,
|
||||
USER_CTRL_AVCTP_DISCONNECT,
|
||||
// //AVCTP连接,是音乐控制链路,
|
||||
USER_CTRL_AVCTP_CONN,
|
||||
|
||||
USER_CTRL_AVCTP_PLAY_MUSIC, //预留AVCTP命令位置
|
||||
USER_CTRL_AVCTP_CMD_FUNCTION2, //预留AVCTP命令位置
|
||||
USER_CTRL_AVCTP_CMD_END,
|
||||
|
||||
//高级音频部分
|
||||
USER_CTRL_A2DP_CMD_BEGIN = 0x60,
|
||||
//有判断条件的,回连过程连接高级音频,避免手机连也自动发起连接,一般按键操作不使用该接口
|
||||
USER_CTRL_AUTO_CONN_A2DP,
|
||||
//连接高级音频,回来最后一个断开设备的地址
|
||||
USER_CTRL_CONN_A2DP,
|
||||
//断开高级音频,只断开高级音频链路,如果有电话还会保留
|
||||
USER_CTRL_DISCONN_A2DP,
|
||||
//maybe BQB test will use
|
||||
USER_CTRL_A2DP_CMD_START ,
|
||||
USER_CTRL_A2DP_CMD_CLOSE ,
|
||||
USER_CTRL_A2DP_CMD_SUSPEND ,
|
||||
USER_CTRL_A2DP_CMD_GET_CONFIGURATION ,
|
||||
USER_CTRL_A2DP_CMD_ABORT ,
|
||||
USER_CTRL_A2DP_CMD_DELAY_REPORT, /*delay report cmd*/
|
||||
/**音乐音量同步接口,自动选择通过HID还是AVRCP来发送*/
|
||||
USER_CTRL_CMD_SYNC_VOL_INC,
|
||||
/**音乐音量同步接口,自动选择通过HID还是AVRCP来发送*/
|
||||
USER_CTRL_CMD_SYNC_VOL_DEC,
|
||||
USER_CTRL_A2DP_CMD_FUNCTION1, //预留A2DP命令位置
|
||||
USER_CTRL_A2DP_CMD_FUNCTION2, //预留A2DP命令位置
|
||||
USER_CTRL_A2DP_CMD_END,
|
||||
|
||||
///*hid操作定义*/
|
||||
USER_CTRL_HID_CMD_BEGIN = 0x70,
|
||||
//按键连接
|
||||
USER_CTRL_HID_CONN,
|
||||
// //只发一个按键,安卓手机使用
|
||||
USER_CTRL_HID_ANDROID,
|
||||
//只发一个按键,苹果和部分安卓手机适用
|
||||
USER_CTRL_HID_IOS,
|
||||
// //发两个拍照按键
|
||||
USER_CTRL_HID_BOTH,
|
||||
//HID断开
|
||||
USER_CTRL_HID_DISCONNECT,
|
||||
//Home Key,apply to IOS and Android
|
||||
USER_CTRL_HID_HOME ,
|
||||
//Return Key,only support Android
|
||||
USER_CTRL_HID_RETURN ,
|
||||
//LeftArrow Key
|
||||
USER_CTRL_HID_LEFTARROW ,
|
||||
//RightArrow Key
|
||||
USER_CTRL_HID_RIGHTARROW ,
|
||||
//Volume Up
|
||||
USER_CTRL_HID_VOL_UP ,
|
||||
//Volume Down
|
||||
USER_CTRL_HID_VOL_DOWN ,
|
||||
//提高接口给用户层发送HID数据
|
||||
USER_CTRL_HID_SEND_DATA ,
|
||||
|
||||
USER_CTRL_HID_CMD_END,
|
||||
|
||||
///蓝牙串口发送命令
|
||||
USER_CTRL_SPP_CMD_BEGIN = 0x80,
|
||||
/**USER_CTRL_SPP_SEND_DATA命令有参数,参数会先存起来,
|
||||
param_len是数据长度,param发送数据指针
|
||||
返回0,表示准备成功,其它值参考底下的错误表*/
|
||||
USER_CTRL_SPP_SEND_DATA, //len <= 512
|
||||
USER_CTRL_SPP_TRY_SEND_DATA,//
|
||||
USER_CTRL_SPP_UPDATA_DATA,
|
||||
//serial port profile disconnect command
|
||||
USER_CTRL_SPP_DISCONNECT,
|
||||
|
||||
//支持多串口功能的时候发送接口,例如支持一台手机的多个串口软件同时连接
|
||||
USER_CTRL_SPP_SEND_DATA_ID_A,
|
||||
USER_CTRL_SPP_SEND_DATA_ID_B,
|
||||
USER_CTRL_SPP_SEND_DATA_ID_C,
|
||||
USER_CTRL_SPP_SEND_DATA_ID_D,
|
||||
USER_CTRL_SPP_SEND_DATA_ID_E,
|
||||
USER_CTRL_SPP_SEND_DATA_ID_F,
|
||||
USER_CTRL_SPP_SEND_DATA_ID_G,
|
||||
USER_CTRL_SPP_DISCONNECT_UPDATE,
|
||||
USER_CTRL_SPP_CMD_END,
|
||||
|
||||
///IAP发送命令,当不需要支持IAP时可配置第二路SPP
|
||||
USER_CTRL_IAP_CMD_BEGIN = 0x90,
|
||||
/**USER_CTRL_IAP_SEND_DATA命令有参数,参数会先存起来,
|
||||
param_len是数据长度,param发送数据指针
|
||||
返回0,表示准备成功,其它值参考底下的错误表*/
|
||||
USER_CTRL_IAP_SEND_DATA, //len <= 512
|
||||
//serial port profile disconnect command
|
||||
USER_CTRL_IAP_DISCONNECT,
|
||||
USER_CTRL_IAP_CMD_END,
|
||||
|
||||
///pbg发送命令
|
||||
USER_CTRL_PBG_CMD_BEGIN = 0xA0,
|
||||
USER_CTRL_PBG_SEND_DATA,//len <= 512
|
||||
USER_CTRL_PBG_TRY_SEND_DATA,//
|
||||
USER_CTRL_PBG_CMD_END,
|
||||
|
||||
///adt 发送命令
|
||||
USER_CTRL_ADT_CMD_BEGIN = 0xB0,
|
||||
USER_CTRL_ADT_CONNECT,
|
||||
USER_CTRL_ADT_KEY_MIC_OPEN,
|
||||
USER_CTRL_ADT_SEND_DATA,//len <= 512
|
||||
USER_CTRL_ADT_TRY_SEND_DATA,//
|
||||
USER_CTRL_ADT_CMD_END,
|
||||
|
||||
///蓝牙电话本功能发送命令
|
||||
USER_CTRL_PBAP_CMD_BEGIN = 0xC0,
|
||||
USER_CTRL_PBAP_CONNECT,
|
||||
//获取当前号码name
|
||||
USER_CTRL_PBAP_READ_LIST,
|
||||
//电话本功能读取通话记录的前n条
|
||||
USER_CTRL_PBAP_READ_PART,
|
||||
//电话本功能读全部记录
|
||||
USER_CTRL_PBAP_READ_ALL,
|
||||
//电话本功能中断读取记录
|
||||
USER_CTRL_PBAP_STOP_READING,
|
||||
|
||||
USER_CTRL_PBAP_CMD_END,
|
||||
|
||||
//新增一个HSP的操作接口
|
||||
USER_CTRL_HSP_CMD_BEGIN = 0xD0,
|
||||
USER_CTRL_HSP_CONNECT, //断开HSP连接
|
||||
USER_CTRL_HSP_DISCONNECT, //断开HSP连接
|
||||
USER_CTRL_HSP_SPEAK_VOLUME_UP, /*音量加1*/
|
||||
USER_CTRL_HSP_SPEAK_VOLUME_DOWN, /*音量减*/
|
||||
USER_CTRL_HSP_MIC_VOLUME_UP, /*mic音量加1*/
|
||||
USER_CTRL_HSP_MIC_VOLUME_DOWN, /*mic音量减1*/
|
||||
USER_CTRL_HSP_CKPD_CMD, /*hsp 接听*/
|
||||
USER_CTRL_HSP_CMD_END,
|
||||
|
||||
|
||||
//MAP功能发送命令
|
||||
USER_CTRL_MAP_CMD_BEGIN = 0xE0,
|
||||
//MAP读取时间
|
||||
USER_CTRL_MAP_READ_TIME,
|
||||
//MAP停止读取
|
||||
USER_CTRL_MAP_STOP_READING,
|
||||
USER_CTRL_MAP_CMD_END,
|
||||
|
||||
//PAN功能发送命令
|
||||
USER_CTRL_PAN_CMD_BEGIN = 0xF0,
|
||||
USER_CTRL_PAN_CONNECT,
|
||||
USER_CTRL_PAN_SEND_DATA,
|
||||
USER_CTRL_PAN_CMD_END,
|
||||
|
||||
//OPP功能发送命令
|
||||
USER_CTRL_OPP_CMD_BEGIN = 0x100,
|
||||
USER_CTRL_OPP_CONNECTION,
|
||||
USER_CTRL_OPP_DISCONNECTION,
|
||||
USER_CTRL_OPP_CMD_END,
|
||||
|
||||
|
||||
//蓝牙其他操作
|
||||
//蓝牙关闭
|
||||
USER_CTRL_POWER_OFF = 0x110,
|
||||
//蓝牙开启
|
||||
USER_CTRL_POWER_ON,
|
||||
//几个蓝牙连接数据库的操作接口
|
||||
//回连VM中最新一个设备记忆
|
||||
USER_CTRL_CONNECT_LAST_REMOTE_INFO,
|
||||
//删除最新的一个设备记忆
|
||||
USER_CTRL_DEL_LAST_REMOTE_INFO,
|
||||
//删除所有设备记忆
|
||||
USER_CTRL_DEL_ALL_REMOTE_INFO,
|
||||
//测试盒测试的时候用来发操作消息
|
||||
USER_CTRL_TEST_KEY,
|
||||
//自定义LMP的数据发送,
|
||||
//通过重新定义weak函数void bt_get_uesr_info(u32 info)获取值;
|
||||
USER_CTRL_SEND_USER_INFO,
|
||||
//加密流程需要输入数字的接口
|
||||
USER_CTRL_KEYPRESS,
|
||||
//加密流程本地需要按键确认继续连接的接口
|
||||
USER_CTRL_PAIR,
|
||||
//发送跳频数据的接口,长度是10个byte
|
||||
USER_CTRL_AFH_CHANNEL,
|
||||
//蓝牙库里面有些流程需要建立定时查询的接口
|
||||
USER_CTRL_HALF_SEC_LOOP_CREATE,
|
||||
//蓝牙库里面有些流程需要删除定时查询的接口
|
||||
USER_CTRL_HALF_SEC_LOOP_DEL,
|
||||
/*单独HID和普通蓝牙模式的切换接口,音箱SDK才有完整流程*/
|
||||
USER_CTRL_CMD_CHANGE_PROFILE_MODE,
|
||||
//唤醒协议栈跑一次
|
||||
USER_CTRL_CMD_RESUME_STACK,
|
||||
USER_CTRL_TWS_AUDIO_SHARE_START_CONNECT,
|
||||
USER_CTRL_ATWS_AUDIO_SHARE_CMD_START ,
|
||||
USER_CTRL_ATWS_AUDIO_SHARE_CMD_SUSPEND ,
|
||||
|
||||
USER_CTRL_LAST
|
||||
} USER_CMD_TYPE;
|
||||
|
||||
|
||||
////----反馈给客户使用的状态----////
|
||||
typedef enum {
|
||||
/*下面是一些即时反馈的状态,无法重复获取的状态*/
|
||||
BT_STATUS_POWER_ON = 1, /*上电*/
|
||||
BT_STATUS_POWER_OFF = 2,
|
||||
BT_STATUS_INIT_OK, /*初始化完成*/
|
||||
BT_STATUS_EXIT_OK, /*蓝牙退出完成*/
|
||||
BT_STATUS_START_CONNECTED, /*开始连接*/
|
||||
BT_STATUS_FIRST_CONNECTED, /*连接成功*/
|
||||
BT_STATUS_SECOND_CONNECTED, /*连接成功*/
|
||||
BT_STATUS_ENCRY_COMPLETE, /*加密完成*/
|
||||
BT_STATUS_FIRST_DISCONNECT, /*断开连接*/
|
||||
BT_STATUS_SECOND_DISCONNECT, /*断开连接*/
|
||||
BT_STATUS_PHONE_INCOME, /*来电*/
|
||||
BT_STATUS_PHONE_NUMBER, /*来电话号码*/
|
||||
BT_STATUS_PHONE_MANUFACTURER, /*获取手机的厂商*///13
|
||||
|
||||
BT_STATUS_PHONE_OUT, /*打出电话*/
|
||||
BT_STATUS_PHONE_ACTIVE, /*接通电话*/
|
||||
BT_STATUS_PHONE_HANGUP, /*挂断电话*/
|
||||
BT_STATUS_BEGIN_AUTO_CON, /*发起回连*/
|
||||
BT_STATUS_MUSIC_SOUND_COME, /*库中加入auto mute判断音乐播放开始*/
|
||||
BT_STATUS_MUSIC_SOUND_GO, /*库中加入auto mute判断音乐播放暂停*/
|
||||
BT_STATUS_RESUME, /*后台有效,手动切回蓝牙*/
|
||||
BT_STATUS_RESUME_BTSTACK, /*后台有效,后台时来电切回蓝牙*/
|
||||
BT_STATUS_SUSPEND, /*蓝牙挂起,退出蓝牙*/
|
||||
BT_STATUS_LAST_CALL_TYPE_CHANGE, /*最后拨打电话的类型,只区分打入和打出两种状态*///23
|
||||
|
||||
BT_STATUS_CALL_VOL_CHANGE, /*通话过程中设置音量会产生这个状态变化*/
|
||||
BT_STATUS_SCO_STATUS_CHANGE, /*当esco/sco连接或者断开时会产生这个状态变化*/
|
||||
BT_STATUS_CONNECT_WITHOUT_LINKKEY, /*判断是首次连接还是配对后的连接,主要依据要不要简易配对或者pin code*/
|
||||
BT_STATUS_PHONE_BATTERY_CHANGE, /*电话电量变化,该状态仅6个等级,0-5*/
|
||||
BT_STATUS_RECONNECT_LINKKEY_LOST, /*回连时发现linkkey丢失了,即手机取消配对了*/
|
||||
BT_STATUS_RECONN_OR_CONN, /*回连成功还是被连接*/
|
||||
BT_STATUS_BT_TEST_BOX_CMD, /*蓝牙收到测试盒消息。1-升级,2-fast test*/
|
||||
BT_STATUS_BT_TWS_CONNECT_CMD,
|
||||
BT_STATUS_SNIFF_STATE_UPDATE, /*SNIFF STATE UPDATE*/
|
||||
BT_STATUS_TONE_BY_FILE_NAME, /*直接使用文件名播放提示音*/
|
||||
|
||||
BT_STATUS_PHONE_DATE_AND_TIME, /*获取到手机的时间和日期,注意会有兼容性问题*/
|
||||
BT_STATUS_INBAND_RINGTONE,
|
||||
BT_STATUS_VOICE_RECOGNITION,
|
||||
BT_STATUS_SIRI_OPEN,
|
||||
BT_STATUS_SIRI_CLOSE,
|
||||
BT_STATUS_SIRI_GET_STATE,
|
||||
BT_STATUS_AVRCP_INCOME_OPID, /*收到远端设备发过来的AVRCP命令*/
|
||||
BT_STATUS_AVRCP_VOL_CHANGE, /*协议栈更新音量值出来*/
|
||||
BT_STATUS_HFP_SERVICE_LEVEL_CONNECTION_OK,
|
||||
BT_STATUS_CONN_A2DP_CH,
|
||||
BT_STATUS_DISCON_A2DP_CH,
|
||||
BT_STATUS_CONN_HFP_CH,
|
||||
BT_STATUS_DISCON_HFP_CH,
|
||||
BT_STATUS_INQUIRY_TIMEOUT,
|
||||
BT_STATUS_PHONE_NAME, /*获取来电号码name*/
|
||||
/*下面是1个持续的状态,是get_stereo_bt_connect_status获取*/
|
||||
|
||||
/*下面是6个持续的状态,是bt_get_connect_status()获取*/
|
||||
BT_STATUS_INITING, /*正在初始化*/
|
||||
BT_STATUS_WAITINT_CONN, /*等待连接*/
|
||||
BT_STATUS_AUTO_CONNECTINT, /*正在回连*/
|
||||
BT_STATUS_CONNECTING, /*已连接,没有电话和音乐在活动*/
|
||||
BT_STATUS_TAKEING_PHONE, /*正在电话*/
|
||||
BT_STATUS_PLAYING_MUSIC, /*正在音乐*/
|
||||
BT_STATUS_A2DP_MEDIA_START,
|
||||
BT_STATUS_A2DP_MEDIA_STOP,
|
||||
BT_STATUS_AVDTP_START,
|
||||
BT_STATUS_AVDTP_SUSPEND,
|
||||
BT_STATUS_SCO_CONNECTION_REQ,
|
||||
BT_STATUS_SCO_DISCON,
|
||||
|
||||
|
||||
BT_STATUS_BROADCAST_STATE,/*braoadcaset中*/
|
||||
BT_STATUS_DONGLE_SPEAK_MIC_OPEN,
|
||||
BT_STATUS_DONGLE_SPEAK_MIC_CLOSE,
|
||||
|
||||
BT_STATUS_TRIM_OVER, /*测试盒TRIM完成*/
|
||||
} STATUS_FOR_USER;
|
||||
|
||||
typedef enum {
|
||||
BT_CALL_BATTERY_CHG = 0, //电池电量改变
|
||||
BT_CALL_SIGNAL_CHG, //网络信号改变
|
||||
BT_CALL_INCOMING, //电话打入
|
||||
BT_CALL_OUTGOING, //电话打出
|
||||
BT_CALL_ACTIVE, //接通电话
|
||||
BT_CALL_HANGUP, //电话挂断
|
||||
BT_CALL_ALERT, //远端reach
|
||||
BT_SIRI_STATE, //SIRI状态
|
||||
BT_CALL_VOL_CHANGED,
|
||||
} BT_CALL_IND_STA;
|
||||
|
||||
typedef enum {
|
||||
BT_MUSIC_STATUS_IDLE = 0,
|
||||
BT_MUSIC_STATUS_STARTING,
|
||||
BT_MUSIC_STATUS_SUSPENDING,
|
||||
} BT_MUSIC_STATE; //音乐状态
|
||||
|
||||
typedef enum {
|
||||
BT_ESCO_STATUS_CLOSE = 0,
|
||||
BT_ESCO_STATUS_OPEN,
|
||||
} BT_ESCO_STATE; //esoc状态
|
||||
|
||||
struct bt_event {
|
||||
u8 event;
|
||||
u8 args[7];
|
||||
u32 value;
|
||||
};
|
||||
|
||||
//bt_cmd_prepare_for_addr和bt_cmd_prepare
|
||||
//返回值参考
|
||||
enum {
|
||||
CMD_PREPARE_ERR_CODE_OK = 0,
|
||||
CMD_PREPARE_ERR_CODE_NOT_INIT,
|
||||
CMD_PREPARE_ERR_CODE_NO_MALLOC,
|
||||
CMD_PREPARE_ERR_CODE_PARAM_INVALID,
|
||||
CMD_PREPARE_ERR_CODE_TOO_FAST,
|
||||
CMD_PREPARE_ERR_CODE_CONN_MAX,
|
||||
CMD_PREPARE_ERR_CODE_CMD_MAX_NUM,
|
||||
CMD_PREPARE_ERR_CODE_DATA_MAX_NUM,
|
||||
CMD_PREPARE_ERR_CODE_DEV_NOT_FOUND,
|
||||
CMD_PREPARE_ERR_CODE_NOT_SUPPORT,
|
||||
};
|
||||
|
||||
#define SYS_BT_EVENT_TYPE_CON_STATUS (('C' << 24) | ('O' << 16) | ('N' << 8) | '\0')
|
||||
#define SYS_BT_EVENT_TYPE_HCI_STATUS (('H' << 24) | ('C' << 16) | ('I' << 8) | '\0')
|
||||
|
||||
|
||||
|
||||
#define REMOTE_DEFAULT 0x00
|
||||
#define REMOTE_SINK 0x01
|
||||
#define REMOTE_SOURCE 0x02
|
||||
|
||||
|
||||
#define SPP_CH 0x01
|
||||
#define HFP_CH 0x02
|
||||
#define A2DP_CH 0x04 //media
|
||||
#define AVCTP_CH 0x08
|
||||
#define HID_CH 0x10
|
||||
#define AVDTP_CH 0x20
|
||||
#define PBAP_CH 0x40
|
||||
#define HFP_AG_CH 0x80
|
||||
#define A2DP_SRC_CH 0x2000
|
||||
|
||||
|
||||
#define HFP_UPDATE_BATTERY BIT(0) //hfp电量上报功能
|
||||
|
||||
struct sniff_ctrl_config_t {
|
||||
u16 sniff_max_interval;
|
||||
u16 sniff_mix_interval;
|
||||
u16 sniff_attemp;
|
||||
u16 sniff_timeout;
|
||||
u8 sniff_addr[6];
|
||||
};
|
||||
|
||||
|
||||
#define AVC_PLAY 0x44
|
||||
#define AVC_STOP 0x45
|
||||
#define AVC_PAUSE 0x46
|
||||
|
||||
/*提供根据地址参数的命令接口
|
||||
addr指定就按指定的查找,NULL就默认正在使用那个
|
||||
cmd 用户可以使用USER_CMD_TYPE的枚举值
|
||||
param_len 传参数需要的值或者data包的长度
|
||||
param 传的是要发数据的包指针
|
||||
*/
|
||||
extern u32 bt_cmd_prepare_for_addr(u8 *addr, USER_CMD_TYPE cmd, u16 param_len, u8 *param);
|
||||
//单个连接的时候不想管地址的命令接口
|
||||
extern u32 bt_cmd_prepare(USER_CMD_TYPE cmd, u16 param_len, u8 *param);
|
||||
//作为发射器时操作命令的接口
|
||||
extern u32 bt_emitter_cmd_prepare(USER_CMD_TYPE cmd, u16 param_len, u8 *param);
|
||||
/*根据规则生产BLE的随机地址*/
|
||||
extern void bt_make_ble_address(u8 *ble_address, u8 *edr_address);
|
||||
|
||||
|
||||
/****************蓝牙的一些状态获取接口*************************/
|
||||
/*
|
||||
u16 bt_get_curr_channel_state(); 与 channel 判断区分
|
||||
主动获取当前链路的连接状态,可以用来判断有哪些链路连接上了
|
||||
*/
|
||||
extern u16 bt_get_curr_channel_state();
|
||||
/*
|
||||
u8 bt_get_call_status(); 与BT_CALL_IND_STA 枚举的值判断
|
||||
用于获取当前蓝牙电话的状态
|
||||
*/
|
||||
extern u8 bt_get_call_status();
|
||||
/*根据地址获取电话状态*/
|
||||
extern u8 bt_get_call_status_for_addr(u8 *addr);
|
||||
/*根据地址获取hfp对应的音量值*/
|
||||
extern u8 bt_get_call_vol_for_addr(u8 *addr);
|
||||
|
||||
/*当前连接的设备是不是jl测试盒*/
|
||||
extern bool bt_get_remote_test_flag();
|
||||
//查询当前蓝牙的状态
|
||||
extern u8 bt_get_connect_status(void);
|
||||
/*查询高级音频的状态*/
|
||||
extern u8 bt_a2dp_get_status(void);
|
||||
/*获取上电回连地址列表里面的信息*/
|
||||
extern u8 bt_get_current_poweron_memory_search_index(u8 *temp_mac_addr);
|
||||
/*清除上电回连地址列表计数信息*/
|
||||
extern void bt_clear_current_poweron_memory_search_index(u8 inc);
|
||||
/*用来获取蓝牙连接的设备个数,不包含page状态的计数*/
|
||||
extern u8 bt_get_total_connect_dev(void);
|
||||
/*可以通过地址查询HFP的状态*/
|
||||
extern u8 bt_check_conn_is_hangup_for_addr(u8 *addr);
|
||||
//bt_get_auto_connect_state有时效性,一般不用。可以用消息BT_STATUS_RECONN_OR_CONN
|
||||
/*判断是否主动回连*/
|
||||
extern u8 bt_get_auto_connect_state(u8 *addr);
|
||||
/*根据地址获取对应设备的高级音频音量*/
|
||||
extern int bt_get_music_volume(bd_addr_t addr);
|
||||
/*获取原来连接设备的地址信息,只适合支持一拖一使用*/
|
||||
extern u8 *bt_get_current_remote_addr(void);
|
||||
|
||||
enum {
|
||||
BD_ESCO_IDLE = 0, /*当前没有设备通话中*/
|
||||
BD_ESCO_BUSY_CURRENT, /*当前地址对应的设备通话中*/
|
||||
BD_ESCO_BUSY_OTHER, /*通话中的设备非当前地址*/
|
||||
};
|
||||
extern u8 bt_check_esco_state_via_addr(u8 *addr);
|
||||
//判断SCO/esco有没有正在使用,两个接口一样的
|
||||
extern u8 bt_get_esco_coder_busy_flag();
|
||||
|
||||
/*sniff 的计数查询*/
|
||||
extern void bt_clear_sniff_cnt(void);
|
||||
extern bool bt_api_conn_mode_check(u8 enable, u8 *addr);
|
||||
extern u8 bt_api_enter_sniff_status_check(u16 time_cnt, u8 *addr);
|
||||
/****************蓝牙的一些状态获取接口end*************************/
|
||||
|
||||
/*个性化参数设置*/
|
||||
/*配置测试盒测试的全局标识*/
|
||||
extern void bt_set_remote_test_flag(u8 own_remote_test);
|
||||
/**配置SBC的bitpool,值越大,质量好,一般用38或者53*/
|
||||
extern void bt_set_sbc_cap_bitpool(u8 sbc_cap_bitpoola);
|
||||
/**提供接口修改aac的bitrate,但是有些手机不一定能接受*/
|
||||
extern void bt_set_aac_bitrate(u32 bitrate);
|
||||
/*用户调试设置地址,6个byte*/
|
||||
extern void bt_set_bt_mac_addr(u8 *addr);
|
||||
|
||||
/*用户调试设置name,最长32个字符*/
|
||||
extern void bt_set_host_name(const char *name, u8 len);
|
||||
/*用户调试设置pin code*/
|
||||
extern void bt_set_pin_code(const char *code);
|
||||
/*该接口用于设置上电回连需要依次搜索设备的个数。*/
|
||||
extern void bt_set_auto_conn_device_num(u8 num);
|
||||
|
||||
/*//回连的超时设置。ms单位。但是对手机发起的连接是没作用的*/
|
||||
extern void bt_set_super_timeout_value(u16 time);
|
||||
|
||||
/*设置电量显示发送更新的周期时间,为0表示关闭电量显示功能*/
|
||||
extern void bt_set_update_battery_time(u8 time);
|
||||
/*给用户设置蓝牙支持连接的个数,主要用于控制控制可发现可连接和回连流程*/
|
||||
extern void bt_set_user_ctrl_conn_num(u8 num);
|
||||
/*提供接口外部设置要保留hfp不要蓝牙通话*/
|
||||
extern void bt_set_disable_sco_flag(bool flag);
|
||||
|
||||
/*提供接口外部设置简易配对参数*/
|
||||
extern void bt_set_simple_pair_param(u8 io_cap, u8 oob_data, u8 mitm);
|
||||
/*//回连的超时设置。ms单位。但是对手机发起的连接是没作用的*/
|
||||
extern void bt_set_super_timeout_value(u16 time);
|
||||
/*//回连page的超时设置。ms单位*/
|
||||
extern void bt_set_page_timeout_value(u16 time);
|
||||
|
||||
extern void bt_set_user_background_goback(u8 en);
|
||||
/*设置一个标识给库里面说明正在退出蓝牙*/
|
||||
extern void bt_set_stack_exiting(u8 exit);
|
||||
/*配置协议栈支持HID功能,为了兼容以前的HID独立模式,音箱SDK有使用流程*/
|
||||
extern void bt_set_hid_independent_flag(bool flag);
|
||||
/*配置通话使用16k的msbc还是8k的cvsd*/
|
||||
extern void bt_set_support_msbc_flag(bool flag);
|
||||
/*配置协议栈使用支持AAC的信息*/
|
||||
extern void bt_set_support_aac_flag(bool flag);
|
||||
/*配置协议栈使用支持LHDC的信息*/
|
||||
extern void bt_set_support_lhdc_flag(bool flag);
|
||||
extern void bt_set_support_lhdc_v5_flag(bool flag);
|
||||
/*配置协议栈使用支持LDAC的信息*/
|
||||
extern void bt_set_support_ldac_flag(bool flag);
|
||||
|
||||
|
||||
|
||||
/*有些自选接口用来实现个性化功能流程,回调函数注册,记得常来看看哟*/
|
||||
//蓝牙库注册接口的函数
|
||||
/*音乐的ID3信息返回接口注册函数*/
|
||||
extern void bt_music_info_handle_register(void (*handler)(u8 type, u32 time, u8 *info, u16 len));
|
||||
/*手机更样机音乐模式的音量同步*/
|
||||
extern void bt_music_vol_change_handle_register(void (*handle)(int vol), int (*handle2)(void));
|
||||
/*获取到名字后的回调函数接口注册函数*/
|
||||
extern void bt_read_remote_name_handle_register(void (*remote_name)(u8 status, u8 *addr, u8 *name));
|
||||
/*电量发送时获取电量等级的接口注册--0-9等级*/
|
||||
extern void bt_get_battery_value_handle_register(int (*handle)(void));
|
||||
/*电量发送时获取电量等级的接口注册--百分比值*/
|
||||
extern void bt_get_battery_percent_handle_register(int (*handle)(void));
|
||||
/*支持串口功能的数据处理接口*/
|
||||
extern void bt_spp_data_deal_handle_register(void (*handler)(u8 packet_type, u16 channel, u8 *packet, u16 size));
|
||||
/*注册接口获取测试盒快速测试的开始状态*/
|
||||
extern void bt_fast_test_handle_register(void (*handle)(void));
|
||||
/*进入了DUT测试,有些状态值反馈到上层处理,参数预留以后扩展*/
|
||||
extern void bt_dut_test_handle_register(void (*handle)(u8));
|
||||
/*蓝牙搜索其他设备时的一些设备信息返回*/
|
||||
extern void bt_inquiry_result_handle_register(u8(*handle)(char *name, u8 name_len, u8 *addr, u32 dev_class, char rssi));
|
||||
|
||||
|
||||
|
||||
|
||||
/****8发射器的一些相关接口*********/
|
||||
//发射器获取连接状态接口
|
||||
u8 bt_emitter_get_connect_status(void);
|
||||
//发射器获取当前连接链路状态接口
|
||||
u16 bt_emitter_get_curr_channel_state();
|
||||
//发射器获取当前音乐状态接口
|
||||
u8 bt_emitter_get_a2dp_status(void);
|
||||
|
||||
/**发射器和接收器按键切换的时候要申请和释放资源**/
|
||||
extern int bt_a2dp_source_init(void *buf, u16 len, int deal_flag);
|
||||
/**发射器和接收器按键切换的时候要申请和释放资源**/
|
||||
extern int bt_hfp_ag_buf_init(void *buf, int size, int deal_flag);
|
||||
/*配置蓝牙协议栈处于发射器流程*/
|
||||
extern void bt_emitter_set_enable_flag(u8 flag);
|
||||
/*发射器启动还是暂停数据发送的接口,会发start和suspend命令*/
|
||||
extern void bt_emitter_send_media_toggle(u8 *addr, u8 toggle);
|
||||
/*查询当前有没有a2dp source(发射器的音频发送链路)在连接状态*/
|
||||
extern u8 bt_a2dp_is_source_dev_null();
|
||||
|
||||
/****8发射器的一些相关接口end*********/
|
||||
|
||||
//LDAC采样率
|
||||
#define LDAC_SAMPLING_FREQ_44100 0x20
|
||||
#define LDAC_SAMPLING_FREQ_48000 0x10
|
||||
#define LDAC_SAMPLING_FREQ_88200 0x08
|
||||
#define LDAC_SAMPLING_FREQ_96000 0x04
|
||||
// 配置LDAC支持的采样率
|
||||
extern void bt_set_a2dp_ldac_sampling_freq(u8 a2dp_ldac_sampling_freq);
|
||||
#define LE_AUDIO_CLASS BIT(14)
|
||||
|
||||
//LHDC_V5 采样率
|
||||
#define LHDC_V5_SAMPLING_FREQ_192000 0x01
|
||||
#define LHDC_V5_SAMPLING_FREQ_96000 0x04
|
||||
#define LHDC_V5_SAMPLING_FREQ_48000 0x10
|
||||
#define LHDC_V5_SAMPLING_FREQ_44100 0x20
|
||||
// 配置LDAC支持的采样率
|
||||
extern void bt_set_a2dp_lhdc_v5_sampling_freq(u8 a2dp_lhdc_v5_sampling_freq);
|
||||
|
||||
/*提供接口修改设备类型信息,修改什么的类型,会影响到手机显示的图标*/
|
||||
extern void bt_change_hci_class_type(u32 class);
|
||||
/*设备信息值举例*/
|
||||
#define BD_CLASS_WEARABLE_HEADSET 0x240404/*ios10.2 display headset icon*/
|
||||
#define BD_CLASS_HANDS_FREE 0x240408/*ios10.2 display bluetooth icon*/
|
||||
#define BD_CLASS_MICROPHONE 0x240410
|
||||
#define BD_CLASS_LOUDSPEAKER 0x240414
|
||||
#define BD_CLASS_HEADPHONES 0x240418
|
||||
#define BD_CLASS_CAR_AUDIO 0x240420 /*car audio类型苹果手机可以自动弹出确认框*/
|
||||
#define BD_CLASS_HIFI_AUDIO 0x240428
|
||||
#define BD_CLASS_PAN_DEV 0X020118
|
||||
#define BD_CLASS_MOUSE 0x002580
|
||||
#define BD_CLASS_KEYBOARD 0x002540
|
||||
#define BD_CLASS_KEYBOARD_MOUSE 0x0025C0
|
||||
#define BD_CLASS_REMOTE_CONTROL 0x00254C
|
||||
#define BD_CLASS_TRANSFER_HEALTH 0x10091C
|
||||
|
||||
|
||||
|
||||
|
||||
/************用户自定义HID的一些接口*******************/
|
||||
typedef struct __hid_sdp_info {
|
||||
u16 vid_private;
|
||||
u16 pid_private;
|
||||
u16 ver_private;
|
||||
|
||||
u8 sub_class;
|
||||
u8 country_code;
|
||||
bool virtual_cable;
|
||||
bool reconnect_initiate;
|
||||
bool sdp_disable;
|
||||
bool battery_power;
|
||||
bool remote_wake;
|
||||
bool normally_connectable;
|
||||
bool boot_device;
|
||||
u16 version;
|
||||
u16 parser_version;
|
||||
u16 profile_version;
|
||||
u16 supervision_timeout;
|
||||
u16 language;
|
||||
u16 bt_string_offset;
|
||||
u16 descriptor_len;
|
||||
u8 *descriptor;
|
||||
char *service_name;
|
||||
char *service_description;
|
||||
char *provide_name;
|
||||
void (*sdp_request_respone_callback)(u8 type);
|
||||
u8 *extra_buf;
|
||||
u8 extra_len;
|
||||
} hid_sdp_info_t;
|
||||
|
||||
typedef struct {
|
||||
u16 chl_id;
|
||||
u16 data_len;
|
||||
u8 *data_ptr;
|
||||
} hid_s_param_t;
|
||||
|
||||
extern u16 bt_sdp_create_diy_device_ID_service(u8 *buffer, u16 buffer_size);
|
||||
extern u16 bt_sdp_create_diy_hid_service(u8 *buffer, u16 buffer_size, const u8 *hid_descriptor, u16 hid_descriptor_size);
|
||||
/************用户自定义HID的一些接口 end*******************/
|
||||
|
||||
|
||||
/*该接口会直接操作VM,可以读取蓝牙记录列表中的蓝牙地址信息
|
||||
* mac_addr: 是用来保存多个地址信息的buffer,
|
||||
* conn_device_num: 是期望读取最大个数(支持1-9)
|
||||
* id: 一般设备是0。发射器和独立的HID模式是1
|
||||
*/
|
||||
u8 bt_restore_remote_device_info_opt(bd_addr_t *mac_addr, u8 conn_device_num, u8 id);
|
||||
/*remote dev type*/
|
||||
/*0:unknow,1-android,2:apple_inc,0x03-xiaomi*/
|
||||
enum {
|
||||
REMOTE_DEV_UNKNOWN = 0,
|
||||
REMOTE_DEV_ANDROID ,
|
||||
REMOTE_DEV_IOS ,
|
||||
REMOTE_DEV_XIAOMI ,
|
||||
REMOTE_DEV_DONGLE_SPEAK = 0xfa ,
|
||||
REMOTE_DEV_TWS_SHARE = 0xFB ,
|
||||
};
|
||||
/*这个接口会直接访问VM,根据地址获取已经记录好的设备厂商
|
||||
*读操作时op_flag和value参数都传0。返回值参考上面的枚举
|
||||
* */
|
||||
u8 bt_remote_dev_company_ioctrl(bd_addr_t dev_addr, u8 op_flag, u8 value);
|
||||
|
||||
|
||||
/*模式切换相关的接口*/
|
||||
/*蓝牙协议栈初始化*/
|
||||
int btstack_init();
|
||||
/*退出蓝牙函数*/
|
||||
int btstack_exit();
|
||||
/*后台的恢复接口*/
|
||||
void btstack_resume();//background resume
|
||||
/*后台时退出蓝牙的处理接口*/
|
||||
int btstack_suspend();
|
||||
|
||||
/*查询地址是不是杰理配套的蓝牙dongle*/
|
||||
int btstack_get_dev_type_for_addr(u8 *addr);
|
||||
/*查询当前有没有杰理配套的蓝牙dongle连接*/
|
||||
bool bt_check_is_have_dongle_dev_conn();
|
||||
bool bt_check_is_have_tws_share_dev_conn();
|
||||
u8 *get_tws_share_dev_addr();
|
||||
int btstack_get_dongle_speak_status(void *device);
|
||||
int btstack_get_dev_type_tws_share_for_addr(u8 *addr);
|
||||
|
||||
/*一拖二的一些状态获取接口和操作接口*/
|
||||
/*获取的值上限是bt_set_auto_conn_device_num接口配置的值,一般用于做回连策略*/
|
||||
int btstack_get_num_of_remote_device_recorded();
|
||||
/*根据记录的蓝牙库conn地址去操作*/
|
||||
/*根据地址获取该地址对应的conn结构体地址*/
|
||||
void *btstack_get_conn_device(u8 *addr);
|
||||
/*获取当前有多少个已经连接的设备*/
|
||||
int btstack_get_conn_devices(void *devices[], int max_num);
|
||||
/*根据记录的conn结构体地址获取对应设备的地址*/
|
||||
u8 *btstack_get_device_mac_addr(void *device);
|
||||
/*根据记录的conn结构体地址获取对应设备的a2dp播放状态*/
|
||||
int btstack_get_device_a2dp_state(void *device);
|
||||
/*根据记录的conn结构体地址操作命令,命令列表也是USER_CMD_TYPE的枚举值
|
||||
* 这个接口只使用那些不需要参数的命令,需要的参数的不用这个*/
|
||||
int btstack_device_control(void *device, int cmd);
|
||||
/*根据记录的conn结构体地址获取对应设备的连接链路信息*/
|
||||
int btstack_get_device_channel_state(void *device);
|
||||
/*根据记录的conn结构体地址获取对应设备的电话状态*/
|
||||
int btstack_bt_get_call_status(void *device);
|
||||
/*根据记录的conn结构体地址获取对应设备的esco状态*/
|
||||
int btstack_get_call_esco_status(void *device);
|
||||
/*根据记录的conn结构体地址去断开对应的设备*/
|
||||
void btstack_device_detach(void *device);
|
||||
//记录是自动断开A2DP的地址,回连检查的时候区分手机断开的情况
|
||||
void bt_stack_save_a2dp_auto_discon_addr(u8 *addr, u8 pause_music_flag);
|
||||
//检查是自动断开的再回连
|
||||
bool bt_stack_check_a2dp_auto_discon_addr(u8 *addr);
|
||||
/*获取正在处于来电状态的设备数目*/
|
||||
u8 bt_stack_get_incoming_call_num();
|
||||
/*根据地址获取设备是否支持来电铃声*/
|
||||
u8 btstack_get_inband_ringtone_flag_for_addr(u8 *addr);
|
||||
/*根据地址配置ESCO的状态*/
|
||||
void bt_api_esco_status(u8 *addr, u8 status);
|
||||
/*可以获取传入地址之外的另一个设备地址信息,没有返回NULL*/
|
||||
u8 *btstack_get_other_dev_addr(u8 *addr);
|
||||
/*上电会根据配置读取连接过的设备地址,保持在一个数组
|
||||
* 这个接口根据数组位置获取地址出来,返回真表示获取成功,addr是获取到的地址值*/
|
||||
bool btstack_get_remote_addr(u8 *addr, u8 index);
|
||||
//跟bt_get_curr_channel_state作用一样,支持按地址查询
|
||||
u16 bt_get_curr_channel_state_for_addr(u8 *addr);
|
||||
//跟bt_get_connect_status一样,支持按地址查询
|
||||
u16 bt_get_connect_state_for_addr(u8 *addr);
|
||||
//或取蓝牙的RSSI
|
||||
extern s8 get_rssi_api(s8 *phone_rssi, s8 *tws_rssi);
|
||||
//pdg自定义l2cap协议的一个例子
|
||||
extern void pbg_profile_init(u16 psm);
|
||||
extern void pbg_event_handler_register(void (*handler)(u8 packet_type, u16 channel, u8 *packet, u16 size));
|
||||
//根据地址刷新一下连接信息的时间戳,第2个参数用get_remote_dev_info_index或取
|
||||
void updata_last_link_key(bd_addr_t bd_addr, u8 id);
|
||||
u8 get_remote_dev_info_index();
|
||||
extern int bt_a2dp_source_init(void *buf, u16 len, int deal_flag);
|
||||
void lmp_negotiate_esco_parm(u8 en);
|
||||
u8 *get_cur_connect_phone_mac_addr(void);
|
||||
bool is_have_dongle_dev_conn();
|
||||
extern u8 get_inband_ringtone_flag_for_addr(u8 *addr);
|
||||
u8 *get_other_dev_addr(u8 *addr);
|
||||
extern void make_rand_num(u8 *buf);
|
||||
#endif
|
||||
@@ -0,0 +1,611 @@
|
||||
#ifndef _BLUETOOTH_H_
|
||||
#define _BLUETOOTH_H_
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
|
||||
//LE
|
||||
#include "le/ble_data_types.h"
|
||||
#include "le/ble_api.h"
|
||||
#include "le/le_user.h"
|
||||
#include "le/att.h"
|
||||
#include "le/gatt.h"
|
||||
#include "le/sm.h"
|
||||
|
||||
#define ISO_SDU_DTAT_LENGTH 0x032c //812byte
|
||||
#define ISO_PDU_DTAT_LENGTH 251 //251byte
|
||||
#define ISO_PDU_INTERVAL_M_S 0x4e20 //20ms
|
||||
#define ISO_PDU_INTERVAL_S_M 0x4e20 //20ms
|
||||
#define HCI_ISO_DATA_PACKET 0x05
|
||||
|
||||
//Classic
|
||||
|
||||
|
||||
|
||||
|
||||
//Common
|
||||
#include "btstack_event.h"
|
||||
|
||||
|
||||
#define HCI_COMMAND_DATA_PACKET 0x01
|
||||
#define HCI_ACL_DATA_PACKET 0x02
|
||||
#define HCI_SCO_DATA_PACKET 0x03
|
||||
#define HCI_EVENT_PACKET 0x04
|
||||
|
||||
// OGFs
|
||||
#define OGF_LINK_CONTROL 0x01
|
||||
#define OGF_LINK_POLICY 0x02
|
||||
#define OGF_CONTROLLER_BASEBAND 0x03
|
||||
#define OGF_INFORMATIONAL_PARAMETERS 0x04
|
||||
#define OGF_STATUS_PARAMETERS 0x05
|
||||
#define OGF_TESTING 0x06
|
||||
#define OGF_LE_CONTROLLER 0x08
|
||||
#define OGF_VENDOR_LE_CONTROLLER 0x3e
|
||||
#define OGF_VENDOR 0x3f
|
||||
|
||||
|
||||
// Events from host controller to host
|
||||
|
||||
/**
|
||||
* @format 1
|
||||
* @param status
|
||||
*/
|
||||
#define HCI_EVENT_INQUIRY_COMPLETE 0x01
|
||||
|
||||
/**
|
||||
* @format 1B11132
|
||||
* @param num_responses
|
||||
* @param bd_addr
|
||||
* @param page_scan_repetition_mode
|
||||
* @param reserved1
|
||||
* @param reserved2
|
||||
* @param class_of_device
|
||||
* @param clock_offset
|
||||
*/
|
||||
#define HCI_EVENT_INQUIRY_RESULT 0x02
|
||||
|
||||
/**
|
||||
* @format 12B11
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param bd_addr
|
||||
* @param link_type
|
||||
* @param encryption_enabled
|
||||
*/
|
||||
#define HCI_EVENT_CONNECTION_COMPLETE 0x03
|
||||
/**
|
||||
* @format B31
|
||||
* @param bd_addr
|
||||
* @param class_of_device
|
||||
* @param link_type
|
||||
*/
|
||||
#define HCI_EVENT_CONNECTION_REQUEST 0x04
|
||||
/**
|
||||
* @format 121
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param reason
|
||||
*/
|
||||
#define HCI_EVENT_DISCONNECTION_COMPLETE 0x05
|
||||
/**
|
||||
* @format 12
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
*/
|
||||
#define HCI_EVENT_AUTHENTICATION_COMPLETE 0x06
|
||||
/**
|
||||
* @format 1BN
|
||||
* @param status
|
||||
* @param bd_addr
|
||||
* @param remote_name
|
||||
*/
|
||||
#define HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE 0x07
|
||||
/**
|
||||
* @format 121
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param encryption_enabled
|
||||
*/
|
||||
#define HCI_EVENT_ENCRYPTION_CHANGE 0x08
|
||||
/**
|
||||
* @format 12
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
*/
|
||||
#define HCI_EVENT_CHANGE_CONNECTION_LINK_KEY_COMPLETE 0x09
|
||||
/**
|
||||
* @format 121
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param key_flag
|
||||
*/
|
||||
#define HCI_EVENT_MASTER_LINK_KEY_COMPLETE 0x0A
|
||||
|
||||
#define HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE 0x0B
|
||||
|
||||
#define HCI_EVENT_READ_REMOTE_VERSION_INFORMATION_COMPLETE 0x0C
|
||||
|
||||
#define HCI_EVENT_QOS_SETUP_COMPLETE 0x0D
|
||||
|
||||
/**
|
||||
* @format 12R
|
||||
* @param num_hci_command_packets
|
||||
* @param command_opcode
|
||||
* @param return_parameters
|
||||
*/
|
||||
#define HCI_EVENT_COMMAND_COMPLETE 0x0E
|
||||
/**
|
||||
* @format 112
|
||||
* @param status
|
||||
* @param num_hci_command_packets
|
||||
* @param command_opcode
|
||||
*/
|
||||
#define HCI_EVENT_COMMAND_STATUS 0x0F
|
||||
|
||||
/**
|
||||
* @format 1
|
||||
* @param hardware_code
|
||||
*/
|
||||
#define HCI_EVENT_HARDWARE_ERROR 0x10
|
||||
|
||||
#define HCI_EVENT_FLUSH_OCCURRED 0x11
|
||||
|
||||
/**
|
||||
* @format 1B1
|
||||
* @param status
|
||||
* @param bd_addr
|
||||
* @param role
|
||||
*/
|
||||
#define HCI_EVENT_ROLE_CHANGE 0x12
|
||||
|
||||
// TODO: number_of_handles 1, connection_handle[H*i], hc_num_of_completed_packets[2*i]
|
||||
#define HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS 0x13
|
||||
|
||||
/**
|
||||
* @format 1H12
|
||||
* @param status
|
||||
* @param handle
|
||||
* @param mode
|
||||
* @param interval
|
||||
*/
|
||||
#define HCI_EVENT_MODE_CHANGE_EVENT 0x14
|
||||
|
||||
// TODO: num_keys, bd_addr[B*i], link_key[16 octets * i]
|
||||
#define HCI_EVENT_RETURN_LINK_KEYS 0x15
|
||||
|
||||
/**
|
||||
* @format B
|
||||
* @param bd_addr
|
||||
*/
|
||||
#define HCI_EVENT_PIN_CODE_REQUEST 0x16
|
||||
|
||||
/**
|
||||
* @format B
|
||||
* @param bd_addr
|
||||
*/
|
||||
#define HCI_EVENT_LINK_KEY_REQUEST 0x17
|
||||
|
||||
// TODO: bd_addr B, link_key 16octets, key_type 1
|
||||
#define HCI_EVENT_LINK_KEY_NOTIFICATION 0x18
|
||||
|
||||
/**
|
||||
* @format 1
|
||||
* @param link_type
|
||||
*/
|
||||
#define HCI_EVENT_DATA_BUFFER_OVERFLOW 0x1A
|
||||
|
||||
/**
|
||||
* @format H1
|
||||
* @param handle
|
||||
* @param lmp_max_slots
|
||||
*/
|
||||
#define HCI_EVENT_MAX_SLOTS_CHANGED 0x1B
|
||||
|
||||
/**
|
||||
* @format 1H2
|
||||
* @param status
|
||||
* @param handle
|
||||
* @param clock_offset
|
||||
*/
|
||||
#define HCI_EVENT_READ_CLOCK_OFFSET_COMPLETE 0x1C
|
||||
|
||||
/**
|
||||
* @format 1H2
|
||||
* @param status
|
||||
* @param handle
|
||||
* @param packet_types
|
||||
* @pnote packet_type is in plural to avoid clash with Java binding Packet.getPacketType()
|
||||
*/
|
||||
#define HCI_EVENT_CONNECTION_PACKET_TYPE_CHANGED 0x1D
|
||||
|
||||
#define HCI_EVENT_PAGE_SCAN_REPETITION_MODE_CHANGE 0x20
|
||||
/**
|
||||
* @format 1B11321
|
||||
* @param num_responses
|
||||
* @param bd_addr
|
||||
* @param page_scan_repetition_mode
|
||||
* @param reserved
|
||||
* @param class_of_device
|
||||
* @param clock_offset
|
||||
* @param rssi
|
||||
*/
|
||||
#define HCI_EVENT_INQUIRY_RESULT_WITH_RSSI 0x22
|
||||
|
||||
#define HCI_EVENT_READ_REMOTE_EXTERNED_FEATURES_COMPLETE 0x23
|
||||
/**
|
||||
* @format 1HB111221
|
||||
* @param status
|
||||
* @param handle
|
||||
* @param bd_addr
|
||||
* @param link_type
|
||||
* @param transmission_interval
|
||||
* @param retransmission_interval
|
||||
* @param rx_packet_length
|
||||
* @param tx_packet_length
|
||||
* @param air_mode
|
||||
*/
|
||||
#define HCI_EVENT_SYNCHRONOUS_CONNECTION_COMPLETE 0x2C
|
||||
|
||||
// TODO: serialize extended_inquiry_response and provide parser
|
||||
/**
|
||||
* @format 1B11321
|
||||
* @param num_responses
|
||||
* @param bd_addr
|
||||
* @param page_scan_repetition_mode
|
||||
* @param reserved
|
||||
* @param class_of_device
|
||||
* @param clock_offset
|
||||
* @param rssi
|
||||
*/
|
||||
#define HCI_EVENT_EXTENDED_INQUIRY_RESPONSE 0x2F
|
||||
#define HCI_EVENT_EXTENDED_INQUIRY_RESULT 0x2F
|
||||
|
||||
/**
|
||||
* @format 1H
|
||||
* @param status
|
||||
* @param handle
|
||||
*/
|
||||
#define HCI_EVENT_ENCRYPTION_KEY_REFRESH_COMPLETE 0x30
|
||||
|
||||
#define HCI_EVENT_IO_CAPABILITY_REQUEST 0x31
|
||||
#define HCI_EVENT_IO_CAPABILITY_RESPONSE 0x32
|
||||
|
||||
/**
|
||||
* @format B4
|
||||
* @param bd_addr
|
||||
* @param numeric_value
|
||||
*/
|
||||
#define HCI_EVENT_USER_CONFIRMATION_REQUEST 0x33
|
||||
|
||||
/**
|
||||
* @format B
|
||||
* @param bd_addr
|
||||
*/
|
||||
#define HCI_EVENT_USER_PASSKEY_REQUEST 0x34
|
||||
|
||||
/**
|
||||
* @format B
|
||||
* @param bd_addr
|
||||
*/
|
||||
#define HCI_EVENT_REMOTE_OOB_DATA_REQUEST 0x35
|
||||
|
||||
/**
|
||||
* @format 1B
|
||||
* @param status
|
||||
* @param bd_addr
|
||||
*/
|
||||
#define HCI_EVENT_SIMPLE_PAIRING_COMPLETE 0x36
|
||||
#define HCI_EVENT_LINK_SUPPERVISION_TIMEOUT_CHANGE_EVENT 0x38
|
||||
|
||||
#define HCI_EVENT_USER_PRESSKEY_NOTIFICATION 0x3B
|
||||
#define HCI_EVENT_REMOTE_KEYPRESS_NOTIFICATION 0x3C
|
||||
#define HCI_EVENT_REMOTE_SUPPORTED_FEATURES_NOTIFICATION 0x3D
|
||||
#define HCI_EVENT_LE_META 0x3E
|
||||
|
||||
// last used HCI_EVENT in 2.1 is 0x3d
|
||||
// last used HCI_EVENT in 4.1 is 0x57
|
||||
|
||||
#define HCI_EVENT_VENDOR_CONNECTION_COMPLETE 0xEF
|
||||
|
||||
//event definition for new vendor sub event
|
||||
#define HCI_EVENT_VENDOR_META 0xF5
|
||||
#define HCI_SUBEVENT_VENDOR_TEST_MODE_CFG 0x01
|
||||
|
||||
#define HCI_EVENT_VENDOR_DONGGLE_SPEAK_MIC 0xF4
|
||||
#define HCI_EVENT_VENDOR_FRE_OFFSET_TRIM 0xF6
|
||||
#define HCI_EVENT_VENDOR_ENCRY_COMPLETE 0xF7
|
||||
#define HCI_EVENT_VENDOR_NO_RECONN_ADDR 0xF8
|
||||
#define HCI_EVENT_VENDOR_SETUP_COMPLETE 0xF9
|
||||
#define HCI_EVENT_VENDOR_DUT 0xFA
|
||||
#define HCI_EVENT_VENDOR_OSC_INTERNAL 0xFB
|
||||
#define HCI_EVENT_VENDOR_FAST_TEST 0xFC
|
||||
#define HCI_EVENT_VENDOR_REMOTE_UPDATE 0xFD
|
||||
#define HCI_EVENT_VENDOR_REMOTE_TEST 0xFE
|
||||
#define HCI_EVENT_VENDOR_SPECIFIC 0xFF
|
||||
|
||||
#define BTSTACK_EVENT_HCI_CONNECTIONS_DELETE 0x6D
|
||||
|
||||
/**
|
||||
* @format 11H11B2221
|
||||
* @param subevent_code
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param role
|
||||
* @param peer_address_type
|
||||
* @param peer_address
|
||||
* @param conn_interval
|
||||
* @param conn_latency
|
||||
* @param supervision_timeout
|
||||
* @param master_clock_accuracy
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_CONNECTION_COMPLETE 0x01
|
||||
|
||||
// array of advertisements, not handled by event accessor generator
|
||||
#define HCI_SUBEVENT_LE_ADVERTISING_REPORT 0x02
|
||||
|
||||
/**
|
||||
* @format 11H222
|
||||
* @param subevent_code
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param conn_interval
|
||||
* @param conn_latency
|
||||
* @param supervision_timeout
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_CONNECTION_UPDATE_COMPLETE 0x03
|
||||
|
||||
/**
|
||||
* @format 1HD2
|
||||
* @param subevent_code
|
||||
* @param connection_handle
|
||||
* @param random_number
|
||||
* @param encryption_diversifier
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_READ_REMOTE_USED_FEATURES_COMPLETE 0x04
|
||||
|
||||
/**
|
||||
* @format 1HD2
|
||||
* @param subevent_code
|
||||
* @param connection_handle
|
||||
* @param random_number
|
||||
* @param encryption_diversifier
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_LONG_TERM_KEY_REQUEST 0x05
|
||||
|
||||
/**
|
||||
* @format 1H2222
|
||||
* @param subevent_code
|
||||
* @param connection_handle
|
||||
* @param interval_min
|
||||
* @param interval_max
|
||||
* @param latency
|
||||
* @param timeout
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_REMOTE_CONNECTION_PARAMETER_REQUEST 0x06
|
||||
|
||||
/**
|
||||
* @format 1H2222
|
||||
* @param subevent_code
|
||||
* @param connection_handle
|
||||
* @param max_tx_octets
|
||||
* @param max_tx_time
|
||||
* @param max_rx_octets
|
||||
* @param max_rx_time
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_DATA_LENGTH_CHANGE 0x07
|
||||
|
||||
/**
|
||||
* @format 11QQ
|
||||
* @param subevent_code
|
||||
* @param status
|
||||
* @param dhkey_x x coordinate of P256 public key
|
||||
* @param dhkey_y y coordinate of P256 public key
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE 0x08
|
||||
/**
|
||||
* @format 11Q
|
||||
* @param subevent_code
|
||||
* @param status
|
||||
* @param dhkey Diffie-Hellman key
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_GENERATE_DHKEY_COMPLETE 0x09
|
||||
|
||||
/**
|
||||
* @format 11H11BBB2221
|
||||
* @param subevent_code
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param role
|
||||
* @param peer_address_type
|
||||
* @param perr_addresss
|
||||
* @param local_resolvable_private_addres
|
||||
* @param peer_resolvable_private_addres
|
||||
* @param conn_interval
|
||||
* @param conn_latency
|
||||
* @param supervision_timeout
|
||||
* @param master_clock_accuracy
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE 0x0A
|
||||
|
||||
// array of advertisements, not handled by event accessor generator
|
||||
#define HCI_SUBEVENT_LE_DIRECT_ADVERTISING_REPORT 0x0B
|
||||
|
||||
/**
|
||||
* @format 11211
|
||||
* @param subevent_code
|
||||
* @param status
|
||||
* @param connection_handle
|
||||
* @param TX_PHY
|
||||
* @param RX_PHY
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_PHY_UPDATE_COMPLETE 0x0C
|
||||
|
||||
// array of advertisements, not handled by event accessor generator
|
||||
#define HCI_SUBEVENT_LE_EXTENDED_ADVERTISING_REPORT 0x0D
|
||||
|
||||
#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHED 0x0E
|
||||
|
||||
/**
|
||||
* @format 1211111B
|
||||
* @param subevent_code
|
||||
* @param sync_handle
|
||||
* @param tx_power
|
||||
* @param rssi
|
||||
* @param unused
|
||||
* @param data_status
|
||||
* @param data_length
|
||||
* @param data
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_REPORT 0x0F
|
||||
|
||||
/**
|
||||
* @format 2
|
||||
* @param sync_handle
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_LOST 0x10
|
||||
|
||||
/**
|
||||
* @format
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_SCAN_TIMEOUT 0x11
|
||||
|
||||
/**
|
||||
* @format 1121
|
||||
* @param subevent_code
|
||||
* @param status
|
||||
* @param advertising_handle
|
||||
* @param connection_handle
|
||||
* @param num_completed_extended_advertising_events
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_ADVERTISING_SET_TERMINATED 0x12
|
||||
|
||||
/**
|
||||
* @format 1116
|
||||
* @param subevent_code
|
||||
* @param advertising_handle
|
||||
* @param scanner_address_type
|
||||
* @param scanner_address
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_SCAN_REQUEST_RECEIVED 0x13
|
||||
|
||||
/**
|
||||
* @format 21
|
||||
* @param subevent_code
|
||||
* @param connection_handle
|
||||
* @param channel_selection_algorithm
|
||||
*/
|
||||
#define HCI_SUBEVENT_LE_CHANNEL_SELECTION_ALGORITHM 0x14
|
||||
|
||||
|
||||
#define HCI_SUBEVENT_LE_VENDOR_INTERVAL_COMPLETE 0xF0
|
||||
|
||||
/**
|
||||
* @format
|
||||
*/
|
||||
#define HCI_EVENT_ANCS_META 0xEA
|
||||
#define HCI_EVENT_AMS_META 0xF2
|
||||
|
||||
typedef enum {
|
||||
AMS_RemoteCommandIDPlay = 0,
|
||||
AMS_RemoteCommandIDPause,
|
||||
AMS_RemoteCommandIDTogglePlayPause,
|
||||
AMS_RemoteCommandIDNextTrack,
|
||||
AMS_RemoteCommandIDPreviousTrack,
|
||||
AMS_RemoteCommandIDVolumeUp,
|
||||
AMS_RemoteCommandIDVolumeDown,
|
||||
AMS_RemoteCommandIDAdvanceRepeatMode,
|
||||
AMS_RemoteCommandIDAdvanceShuffleMode,
|
||||
AMS_RemoteCommandIDSkipForward,
|
||||
AMS_RemoteCommandIDSkipBackward,
|
||||
AMS_RemoteCommandIDLikeTrack,
|
||||
AMS_RemoteCommandIDDislikeTrack,
|
||||
AMS_RemoteCommandIDBookmarkTrack,
|
||||
} ams_request_cmd_e;
|
||||
bool ams_send_request_command(ams_request_cmd_e cmd_id);
|
||||
|
||||
/*
|
||||
config_map:
|
||||
bit0--IDPlayer,bit1--IDQueue,bit2--IDTrack
|
||||
*/
|
||||
#define AMS_IDPlayer_ENABLE BIT(0)
|
||||
#define AMS_IDQueue_ENABLE BIT(1)
|
||||
#define AMS_IDTrack_ENABLE BIT(2)
|
||||
bool ams_entity_attribute_config(int config_map);
|
||||
|
||||
/**
|
||||
* compact HCI Command packet description
|
||||
*/
|
||||
typedef struct {
|
||||
uint16_t opcode;
|
||||
const char *format;
|
||||
} hci_cmd_t;
|
||||
|
||||
int hci_send_cmd(const hci_cmd_t *cmd, ...);
|
||||
|
||||
|
||||
extern const hci_cmd_t hci_reset;
|
||||
extern const hci_cmd_t hci_read_bd_addr;
|
||||
extern const hci_cmd_t hci_read_local_supported_features;
|
||||
extern const hci_cmd_t hci_read_buffer_size;
|
||||
extern const hci_cmd_t hci_read_local_supported_commands;
|
||||
extern const hci_cmd_t hci_read_local_version_information;
|
||||
extern const hci_cmd_t hci_read_le_host_supported;
|
||||
extern const hci_cmd_t hci_read_local_name;
|
||||
extern const hci_cmd_t hci_write_class_of_device;
|
||||
extern const hci_cmd_t hci_write_local_name;
|
||||
extern const hci_cmd_t hci_write_scan_enable;
|
||||
extern const hci_cmd_t hci_set_event_mask;
|
||||
extern const hci_cmd_t hci_le_add_device_to_white_list;
|
||||
extern const hci_cmd_t hci_le_clear_white_list;
|
||||
extern const hci_cmd_t hci_le_connection_update;
|
||||
extern const hci_cmd_t hci_le_create_connection;
|
||||
extern const hci_cmd_t hci_le_create_connection_cancel;
|
||||
extern const hci_cmd_t hci_le_encrypt;
|
||||
extern const hci_cmd_t hci_le_generate_dhkey;
|
||||
extern const hci_cmd_t hci_le_long_term_key_negative_reply;
|
||||
extern const hci_cmd_t hci_le_long_term_key_request_reply;
|
||||
extern const hci_cmd_t hci_le_rand;
|
||||
extern const hci_cmd_t hci_le_read_advertising_channel_tx_power;
|
||||
extern const hci_cmd_t hci_le_read_buffer_size;
|
||||
extern const hci_cmd_t hci_le_read_channel_map;
|
||||
extern const hci_cmd_t hci_le_read_local_p256_public_key;
|
||||
extern const hci_cmd_t hci_le_read_maximum_data_length;
|
||||
extern const hci_cmd_t hci_le_read_remote_used_features;
|
||||
extern const hci_cmd_t hci_le_read_suggested_default_data_length;
|
||||
extern const hci_cmd_t hci_le_read_supported_features;
|
||||
extern const hci_cmd_t hci_le_read_supported_states;
|
||||
extern const hci_cmd_t hci_le_read_white_list_size;
|
||||
extern const hci_cmd_t hci_le_receiver_test;
|
||||
extern const hci_cmd_t hci_le_remove_device_from_white_list;
|
||||
extern const hci_cmd_t hci_le_set_advertise_enable;
|
||||
extern const hci_cmd_t hci_le_set_advertising_data;
|
||||
extern const hci_cmd_t hci_le_set_advertising_parameters;
|
||||
extern const hci_cmd_t hci_le_set_data_length;
|
||||
extern const hci_cmd_t hci_le_set_event_mask;
|
||||
extern const hci_cmd_t hci_le_set_host_channel_classification;
|
||||
extern const hci_cmd_t hci_le_set_random_address;
|
||||
extern const hci_cmd_t hci_le_set_scan_enable;
|
||||
extern const hci_cmd_t hci_le_set_scan_parameters;
|
||||
extern const hci_cmd_t hci_le_set_scan_response_data;
|
||||
extern const hci_cmd_t hci_le_start_encryption;
|
||||
extern const hci_cmd_t hci_le_test_end;
|
||||
extern const hci_cmd_t hci_le_transmitter_test;
|
||||
extern const hci_cmd_t hci_le_write_suggested_default_data_length;
|
||||
extern const hci_cmd_t hci_le_set_phy;
|
||||
|
||||
extern const hci_cmd_t hci_le_set_ext_advertising_parameters;
|
||||
extern const hci_cmd_t hci_le_set_ext_advertising_data;
|
||||
extern const hci_cmd_t hci_le_set_ext_advertise_enable;
|
||||
extern const hci_cmd_t hci_le_set_ext_scan_parameters;
|
||||
extern const hci_cmd_t hci_le_set_ext_scan_enable;
|
||||
|
||||
enum VENDOR_REMOTE_TEST_VALUE {
|
||||
VENDOR_TEST_DISCONNECTED = 0,
|
||||
VENDOR_TEST_LEGACY_CONNECTED_BY_BT_CLASSIC,
|
||||
VENDOR_TEST_LEGACY_CONNECTED_BY_BLE,
|
||||
VENDOR_TEST_CONNECTED_WITH_TWS,
|
||||
VENDOR_TEST_BLE_DISCONNECTED,
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,115 @@
|
||||
SECTIONS
|
||||
{
|
||||
.data : ALIGN(4)
|
||||
{
|
||||
btstack_data_start = .;
|
||||
*(.bt_stack_data)
|
||||
*(.ble_db_data)
|
||||
*(.ble_sm_data)
|
||||
*(.ble_att_data)
|
||||
*(.ble_gatt_data)
|
||||
*(.fmna_stack_data)
|
||||
*(.fmna_plaform_data)
|
||||
*(.fmna_crypto_data)
|
||||
|
||||
/*mesh*/
|
||||
BTSTACK_LE_HOST_MESH_DATA_START = .;
|
||||
. = (. +3) & ~ 3;
|
||||
_net_buf_pool_list = .;
|
||||
*(._net_buf_pool.static.*)
|
||||
|
||||
*(.ble_mesh_data)
|
||||
*(.ble_mesh_tinycrypt_data)
|
||||
BTSTACK_LE_HOST_MESH_DATA_SIZE = ABSOLUTE(. - BTSTACK_LE_HOST_MESH_DATA_START);
|
||||
|
||||
btstack_data_end = .;
|
||||
|
||||
} > ram0
|
||||
|
||||
.bss (NOLOAD) :ALIGN(4)
|
||||
{
|
||||
btstack_bss_start = .;
|
||||
*(.bt_stack_bss)
|
||||
*(.ble_db_bss)
|
||||
*(.ble_sm_bss)
|
||||
*(.ble_att_bss)
|
||||
*(.ble_gatt_bss)
|
||||
*(.btstack_pool)
|
||||
*(.fmna_stack_bss)
|
||||
*(.fmna_plaform_bss)
|
||||
*(.fmna_crypto_bss)
|
||||
|
||||
/*mesh*/
|
||||
BTSTACK_LE_HOST_MESH_BSS_START = .;
|
||||
*(.ble_mesh_bss)
|
||||
*(.ble_mesh_tinycrypt_bss)
|
||||
BTSTACK_LE_HOST_MESH_BSS_SIZE = ABSOLUTE(. - BTSTACK_LE_HOST_MESH_BSS_START);
|
||||
|
||||
btstack_bss_end = .;
|
||||
} > ram0
|
||||
|
||||
.text : ALIGN(4)
|
||||
{
|
||||
btstack_code_start = .;
|
||||
|
||||
. = ALIGN(4);
|
||||
|
||||
a2dp_source_media_codec_begin = .;
|
||||
KEEP(*(.a2dp_source_media_codec))
|
||||
a2dp_source_media_codec_end = .;
|
||||
a2dp_sink_media_probe_begin = .;
|
||||
KEEP(*(.a2dp_sink_media_probe))
|
||||
a2dp_sink_media_probe_end = .;
|
||||
|
||||
a2dp_sink_media_codec_begin = .;
|
||||
KEEP(*(.a2dp_sink_media_codec))
|
||||
a2dp_sink_media_codec_end = .;
|
||||
|
||||
a2dp_event_handler_begin = .;
|
||||
KEEP(*(.a2dp_event_handler))
|
||||
a2dp_event_handler_end = .;
|
||||
|
||||
sdp_record_item_begin = .;
|
||||
KEEP(*(.sdp_record_item))
|
||||
sdp_record_item_end = .;
|
||||
|
||||
bt_sleep_begin = .;
|
||||
KEEP(*(.bt_sleep))
|
||||
bt_sleep_end = .;
|
||||
|
||||
*(.bt_stack_const)
|
||||
*(.bt_stack_code)
|
||||
*(.ble_db_const)
|
||||
*(.ble_db_code)
|
||||
*(.ble_sm_const)
|
||||
*(.ble_sm_code)
|
||||
*(.ble_att_const)
|
||||
*(.ble_att_code)
|
||||
*(.ble_gatt_const)
|
||||
*(.ble_gatt_code)
|
||||
*(.fmna_stack_const)
|
||||
*(.fmna_stack_code)
|
||||
*(.fmna_plaform_const)
|
||||
*(.fmna_plaform_code)
|
||||
*(.fmna_crypto_const)
|
||||
*(.fmna_crypto_code)
|
||||
|
||||
/*mesh*/
|
||||
BTSTACK_LE_HOST_MESH_CODE_START = .;
|
||||
*(.ble_mesh_code)
|
||||
*(.ble_mesh_tinycrypt_code)
|
||||
|
||||
*(.ble_mesh_const)
|
||||
*(.ble_mesh_tinycrypt_const)
|
||||
BTSTACK_LE_HOST_MESH_CODE_SIZE = ABSOLUTE(. - BTSTACK_LE_HOST_MESH_CODE_START);
|
||||
|
||||
btstack_code_end = .;
|
||||
. = ALIGN(4);
|
||||
} > code0
|
||||
}
|
||||
|
||||
BTSTACK_LE_HOST_MESH_RAM_TOTAL = BTSTACK_LE_HOST_MESH_DATA_SIZE + BTSTACK_LE_HOST_MESH_BSS_SIZE;
|
||||
BTSTACK_LE_HOST_MESH_FLASH_TOTAL = BTSTACK_LE_HOST_MESH_CODE_SIZE;
|
||||
|
||||
BTSTACK_CODE_SIZE = (btstack_code_end - btstack_code_start) + (btstack_data_end - btstack_data_start);
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
#ifndef BTSTACK_TASK_H
|
||||
#define BTSTACK_TASK_H
|
||||
|
||||
int btstack_init();
|
||||
int btstack_exit();
|
||||
|
||||
void ble_bqb_test_thread_init(void);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,46 @@
|
||||
#ifndef _BTSTACK_TYPEDEF_H_
|
||||
#define _BTSTACK_TYPEDEF_H_
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
#define BT_BTSTACK_CLASSIC BIT(0)
|
||||
#define BT_BTSTACK_LE_ADV BIT(1)
|
||||
#define BT_BTSTACK_LE BIT(2)
|
||||
|
||||
extern const int config_stack_modules;
|
||||
#define STACK_MODULES_IS_SUPPORT(x) (config_stack_modules & (x))
|
||||
|
||||
#define BD_ADDR_LEN 6
|
||||
|
||||
#define SYNC_TIMEOUT_MS(x) {(x / 10) & 0xff, (x / 10) >> 8}
|
||||
|
||||
#define ALIGN_2BYTE(size) (((size)+1)&0xfffffffe)
|
||||
#define BYTE_LEN(x...) sizeof((u8 []) {x})
|
||||
#define MS_TO_SLOT(x) (x * 8 / 5)
|
||||
#define UINT24_TO_BYTE(x) \
|
||||
{ \
|
||||
(uint8_t)(x), \
|
||||
(uint8_t)((x) >> 8), \
|
||||
(uint8_t)((x) >> 16) \
|
||||
}
|
||||
|
||||
typedef uint8_t bd_addr_t[BD_ADDR_LEN];
|
||||
|
||||
typedef uint16_t hci_con_handle_t;
|
||||
|
||||
typedef int (*sm_stack_packet_handler_t)(uint8_t packet_type, uint8_t *packet, uint16_t size);
|
||||
|
||||
typedef void (*btstack_packet_handler_t)(u8 packet_type, u16 channel, u8 *packet, u16 size);
|
||||
|
||||
typedef void (*ble_cbk_handler_t)(void);
|
||||
|
||||
void reverse_bd_addr(const bd_addr_t src, bd_addr_t dest);
|
||||
|
||||
void reverse_bytes(const u8 *src, u8 *dst, u32 len);
|
||||
|
||||
uint16_t little_endian_read_16(const uint8_t *buffer, int pos);
|
||||
uint32_t little_endian_read_24(const uint8_t *buffer, int pos);
|
||||
uint32_t little_endian_read_32(const uint8_t *buffer, int pos);
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,152 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : att.h
|
||||
|
||||
* Description :
|
||||
|
||||
* Author : minxian
|
||||
|
||||
* Email : liminxian@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2020-07-01 16:33
|
||||
|
||||
* Copyright:(c)JIELI 2011-2020 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#ifndef _BT_ATT_H_
|
||||
#define _BT_ATT_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "btstack/btstack_typedef.h"
|
||||
|
||||
#if defined __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// Minimum/default MTU
|
||||
#define ATT_DEFAULT_MTU 23
|
||||
|
||||
#define ATT_EVENT_MTU_EXCHANGE_COMPLETE 0xB5
|
||||
#define ATT_EVENT_HANDLE_VALUE_INDICATION_COMPLETE 0xB6
|
||||
#define ATT_EVENT_CAN_SEND_NOW 0xB7
|
||||
|
||||
#define ATT_TRANSACTION_MODE_NONE 0x0
|
||||
#define ATT_TRANSACTION_MODE_ACTIVE 0x1
|
||||
#define ATT_TRANSACTION_MODE_EXECUTE 0x2
|
||||
#define ATT_TRANSACTION_MODE_CANCEL 0x3
|
||||
#define ATT_TRANSACTION_MODE_VALIDATE 0x4
|
||||
|
||||
#define ATT_PROPERTY_BROADCAST 0x01
|
||||
#define ATT_PROPERTY_READ 0x02
|
||||
#define ATT_PROPERTY_WRITE_WITHOUT_RESPONSE 0x04
|
||||
#define ATT_PROPERTY_WRITE 0x08
|
||||
#define ATT_PROPERTY_NOTIFY 0x10
|
||||
#define ATT_PROPERTY_INDICATE 0x20
|
||||
|
||||
|
||||
typedef enum {
|
||||
ATT_OP_AUTO_READ_CCC = 0, //server端 检查对方使能通知CCC来控制 notify or indicate发送
|
||||
ATT_OP_NOTIFY = 1, //server端 默认notify方式发送,不检查使能通知CCC (不需要对方回应答包,没有流控)
|
||||
ATT_OP_INDICATE = 2, //server端 默认INDICATE方式发送,不检查使能通知CCC (需要对方回应答包,有流控)
|
||||
ATT_OP_READ, //client端 单次读, 用于获取<=MTU 的数据包 (需要对方回应答包,有流控)
|
||||
ATT_OP_READ_LONG, //client端 多次读,用于支持获取>MTU 的数据包 (需要对方回应答包,有流控)
|
||||
ATT_OP_WRITE, //client端 写发送 (需要对方回应答包,有流控)
|
||||
ATT_OP_WRITE_WITHOUT_RESPOND,//client端 写发送 (不需要对方回应答包,没有流控)
|
||||
//add here
|
||||
|
||||
ATT_OP_CMD_MAX = 15,
|
||||
} att_op_type_e;
|
||||
|
||||
//------
|
||||
typedef struct {
|
||||
uint16_t start_group_handle;//
|
||||
uint16_t end_group_handle;
|
||||
uint16_t uuid16; //为0则是 uuid128
|
||||
uint8_t uuid128[16];
|
||||
} service_report_t; //==le_service_t
|
||||
|
||||
typedef struct {
|
||||
uint16_t start_handle;
|
||||
uint16_t value_handle; //属性操作handle
|
||||
uint16_t end_handle;
|
||||
uint16_t properties; //属性对应 ATT_PROPERTY_XXX
|
||||
uint16_t uuid16; //为0则是 uuid128
|
||||
uint8_t uuid128[16];
|
||||
} charact_report_t; //==le_characteristic_t
|
||||
|
||||
typedef struct {
|
||||
u16 packet_type; //数据包类型(notify,indicate,read_respone,...)
|
||||
u16 value_handle; //属性操作handle
|
||||
u16 value_offset; //包偏移
|
||||
u16 blob_length; //包长度
|
||||
u8 *blob; //包内容
|
||||
u16 conn_handle; //连接handle
|
||||
} att_data_report_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
service_report_t services;
|
||||
charact_report_t characteristic;
|
||||
u16 service_index;
|
||||
u16 characteristic_index;
|
||||
} search_result_t;
|
||||
|
||||
typedef struct {
|
||||
u16 handle;//descriptor's handle
|
||||
u16 uuid16;//为0则是 uuid128
|
||||
u8 uuid128[16];
|
||||
} charact_descriptor_t;
|
||||
|
||||
|
||||
void att_ccc_config_init(void);
|
||||
void att_set_ccc_config(uint16_t handle, uint16_t cfg);
|
||||
uint16_t att_get_ccc_config(uint16_t handle);
|
||||
void att_server_set_exchange_mtu(u16 con_handle);
|
||||
void att_set_db(uint8_t const *db);//change profile_data
|
||||
|
||||
//多机接口
|
||||
|
||||
// 获取空闲的conn_handle存储索引
|
||||
int get_att_handle_idle(void);
|
||||
// 根据 conn_handle 获取存储索引
|
||||
u8 get_att_handle_index(u16 conn_handle);
|
||||
//初始化 CCC管理
|
||||
void multi_att_ccc_config_init(void);
|
||||
//设置CCC
|
||||
void multi_att_set_ccc_config(uint16_t conn_handle, uint16_t att_handle, uint16_t cfg);
|
||||
//获取CCC的值
|
||||
uint16_t multi_att_get_ccc_config(uint16_t conn_handle, uint16_t att_handle);
|
||||
//断开, 清链路CCC
|
||||
int multi_att_clear_ccc_config(uint16_t conn_handle);
|
||||
|
||||
// ATT Client Read Callback for Dynamic Data
|
||||
// - if buffer == NULL, don't copy data, just return size of value
|
||||
// - if buffer != NULL, copy data and return number bytes copied
|
||||
// @param con_handle of hci le connection
|
||||
// @param attribute_handle to be read
|
||||
// @param offset defines start of attribute value
|
||||
// @param buffer
|
||||
// @param buffer_size
|
||||
typedef uint16_t (*att_read_callback_t)(uint16_t con_handle, uint16_t attribute_handle, uint16_t offset, uint8_t *buffer, uint16_t buffer_size);
|
||||
|
||||
// ATT Client Write Callback for Dynamic Data
|
||||
// @param con_handle of hci le connection
|
||||
// @param attribute_handle to be written
|
||||
// @param transaction - ATT_TRANSACTION_MODE_NONE for regular writes, ATT_TRANSACTION_MODE_ACTIVE for prepared writes and ATT_TRANSACTION_MODE_EXECUTE
|
||||
// @param offset into the value - used for queued writes and long attributes
|
||||
// @param buffer
|
||||
// @param buffer_size
|
||||
// @param signature used for signed write commmands
|
||||
// @returns 0 if write was ok, ATT_ERROR_PREPARE_QUEUE_FULL if no space in queue, ATT_ERROR_INVALID_OFFSET if offset is larger than max buffer
|
||||
typedef int (*att_write_callback_t)(uint16_t con_handle, uint16_t attribute_handle, uint16_t transaction_mode, uint16_t offset, uint8_t *buffer, uint16_t buffer_size);
|
||||
|
||||
void ble_att_server_setup_init(const u8 *profile_db, att_read_callback_t read_cbk, att_write_callback_t write_cbk);
|
||||
|
||||
void att_server_request_can_send_now_event(hci_con_handle_t con_handle);
|
||||
|
||||
int att_server_notify(hci_con_handle_t con_handle, uint16_t attribute_handle, uint8_t *value, uint16_t value_len);
|
||||
|
||||
int att_server_indicate(hci_con_handle_t con_handle, uint16_t attribute_handle, uint8_t *value, uint16_t value_len);
|
||||
|
||||
extern void att_server_init(uint8_t const *db, att_read_callback_t read_callback, att_write_callback_t write_callback);
|
||||
extern void att_server_register_packet_handler(btstack_packet_handler_t handler);
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,77 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : bluetooth_data_types.h
|
||||
|
||||
* Description :
|
||||
|
||||
* Author :
|
||||
*********************************************************************************************/
|
||||
|
||||
/**
|
||||
*/
|
||||
|
||||
#ifndef __BLUETOOTH_DATA_TYPES_H
|
||||
#define __BLUETOOTH_DATA_TYPES_H
|
||||
|
||||
#define BLUETOOTH_DATA_TYPE_FLAGS 0x01 // Flags
|
||||
#define BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS 0x02 // Incomplete List of 16-bit Service Class UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS 0x03 // Complete List of 16-bit Service Class UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_32_BIT_SERVICE_CLASS_UUIDS 0x04 // Incomplete List of 32-bit Service Class UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_32_BIT_SERVICE_CLASS_UUIDS 0x05 // Complete List of 32-bit Service Class UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS 0x06 // Incomplete List of 128-bit Service Class UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS 0x07 // Complete List of 128-bit Service Class UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_SHORTENED_LOCAL_NAME 0x08 // Shortened Local Name
|
||||
#define BLUETOOTH_DATA_TYPE_COMPLETE_LOCAL_NAME 0x09 // Complete Local Name
|
||||
#define BLUETOOTH_DATA_TYPE_TX_POWER_LEVEL 0x0A // Tx Power Level
|
||||
#define BLUETOOTH_DATA_TYPE_CLASS_OF_DEVICE 0x0D // Class of Device
|
||||
#define BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_HASH_C 0x0E // Simple Pairing Hash C
|
||||
#define BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_HASH_C_192 0x0E // Simple Pairing Hash C-192
|
||||
#define BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F // Simple Pairing Randomizer R
|
||||
#define BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R_192 0x0F // Simple Pairing Randomizer R-192
|
||||
#define BLUETOOTH_DATA_TYPE_DEVICE_ID 0x10 // Device ID
|
||||
#define BLUETOOTH_DATA_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 // Security Manager TK Value
|
||||
#define BLUETOOTH_DATA_TYPE_SECURITY_MANAGER_OUT_OF_BAND_FLAGS 0x11 // Security Manager Out of Band Flags
|
||||
#define BLUETOOTH_DATA_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 // Slave Connection Interval Range
|
||||
#define BLUETOOTH_DATA_TYPE_LIST_OF_16_BIT_SERVICE_SOLICITATION_UUIDS 0x14 // List of 16-bit Service Solicitation UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_LIST_OF_32_BIT_SERVICE_SOLICITATION_UUIDS 0x1F // List of 32-bit Service Solicitation UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_LIST_OF_128_BIT_SERVICE_SOLICITATION_UUIDS 0x15 // List of 128-bit Service Solicitation UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_SERVICE_DATA 0x16 // Service Data
|
||||
#define BLUETOOTH_DATA_TYPE_SERVICE_DATA_16_BIT_UUID 0x16 // Service Data - 16-bit UUID
|
||||
#define BLUETOOTH_DATA_TYPE_SERVICE_DATA_32_BIT_UUID 0x20 // Service Data - 32-bit UUID
|
||||
#define BLUETOOTH_DATA_TYPE_SERVICE_DATA_128_BIT_UUID 0x21 // Service Data - 128-bit UUID
|
||||
#define BLUETOOTH_DATA_TYPE_LE_SECURE_CONNECTIONS_CONFIRMATION_VALUE 0x22 // LE Secure Connections Confirmation Value
|
||||
#define BLUETOOTH_DATA_TYPE_LE_SECURE_CONNECTIONS_RANDOM_VALUE 0x23 // LE Secure Connections Random Value
|
||||
#define BLUETOOTH_DATA_TYPE_URI 0x24 // URI
|
||||
#define BLUETOOTH_DATA_TYPE_INDOOR_POSITIONING 0x25 // Indoor Positioning
|
||||
#define BLUETOOTH_DATA_TYPE_TRANSPORT_DISCOVERY_DATA 0x26 // Transport Discovery Data
|
||||
#define BLUETOOTH_DATA_TYPE_PUBLIC_TARGET_ADDRESS 0x17 // Public Target Address
|
||||
#define BLUETOOTH_DATA_TYPE_RANDOM_TARGET_ADDRESS 0x18 // Random Target Address
|
||||
#define BLUETOOTH_DATA_TYPE_APPEARANCE 0x19 // Appearance
|
||||
#define BLUETOOTH_DATA_TYPE_ADVERTISING_INTERVAL 0x1A // Advertising Interval
|
||||
#define BLUETOOTH_DATA_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B // LE Bluetooth Device Address
|
||||
#define BLUETOOTH_DATA_TYPE_LE_ROLE 0x1C // LE Role
|
||||
#define BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_HASH_C_256 0x1D // Simple Pairing Hash C-256
|
||||
#define BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R_256 0x1E // Simple Pairing Randomizer R-256
|
||||
#define BLUETOOTH_DATA_TYPE_LIST_OF_32_BIT_SERVICE_SOLICITATION_UUIDS 0x1F // List of 32-bit Service Solicitation UUIDs
|
||||
#define BLUETOOTH_DATA_TYPE_SERVICE_DATA_32_BIT_UUID 0x20 // Service Data - 32-bit UUID
|
||||
#define BLUETOOTH_DATA_TYPE_SERVICE_DATA_128_BIT_UUID 0x21 // Service Data - 128-bit UUID
|
||||
#define BLUETOOTH_DATA_TYPE_LE_SECURE_CONNECTIONS_CONFIRMATION_VALUE 0x22 // LE Secure Connections Confirmation Value
|
||||
#define BLUETOOTH_DATA_TYPE_LE_SECURE_CONNECTIONS_RANDOM_VALUE 0x23 // LE Secure Connections Random Value
|
||||
#define BLUETOOTH_DATA_TYPE_URI 0x24 // URI
|
||||
#define BLUETOOTH_DATA_TYPE_INDOOR_POSITIONING 0x25 // Indoor Positioning
|
||||
#define BLUETOOTH_DATA_TYPE_TRANSPORT_DISCOVERY_DATA 0x26 // Transport Discovery Data
|
||||
#define BLUETOOTH_DATA_TYPE_LE_SUPPORTED_FEATURES 0x27 // LE Supported Features
|
||||
#define BLUETOOTH_DATA_TYPE_CHANNEL_MAP_UPDATE_INDICATION 0x28 // Channel Map Update Indication
|
||||
#define BLUETOOTH_DATA_TYPE_PB_ADV 0x29 // PB-ADV
|
||||
#define BLUETOOTH_DATA_TYPE_MESH_MESSAGE 0x2A // Mesh Message
|
||||
#define BLUETOOTH_DATA_TYPE_MESH_BEACON 0x2B // Mesh Beacon
|
||||
#define BLUETOOTH_DATA_TYPE_BIGINFO 0x2C // BIGInfo
|
||||
#define BLUETOOTH_DATA_TYPE_BROADCAST_CODE 0x2D // Broadcast_Code
|
||||
#define BLUETOOTH_DATA_TYPE_RESOLVABLE_SET_IDENTIFIER 0x2E // Resolvable Set Identifier
|
||||
#define BLUETOOTH_DATA_TYPE_ADVERTISING_INTERVAL_LONG 0x2F // Advertising Interval long
|
||||
#define BLUETOOTH_DATA_TYPE_BROADCAST_NAME 0x30 // Broadcast_Name
|
||||
#define BLUETOOTH_DATA_TYPE_ENCRYPTED_ADVERTISING_DATA 0x31 // Encrypted Advertising Data
|
||||
#define BLUETOOTH_DATA_TYPE_PERIODIC_ADVERTISING_RESPONSE_TIMING_INFO 0x32 // Periodic Advertising Response Timing Information
|
||||
#define BLUETOOTH_DATA_TYPE_3D_INFORMATION_DATA 0x3D // 3D Information Data
|
||||
#define BLUETOOTH_DATA_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF // Manufacturer Specific Data
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,58 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : btstack_event.h
|
||||
|
||||
* Description :
|
||||
|
||||
* Author : Minxian
|
||||
|
||||
* Email : liminxian@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2020-07-01 16:23
|
||||
|
||||
* Copyright:(c)JIELI 2011-2020 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#ifndef __BT_GATT_H
|
||||
#define __BT_GATT_H
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
typedef struct {
|
||||
uint16_t start_group_handle;
|
||||
uint16_t end_group_handle;
|
||||
uint16_t uuid16;
|
||||
uint8_t uuid128[16];
|
||||
} le_service_t, gatt_client_service_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint16_t start_handle;
|
||||
uint16_t value_handle;
|
||||
uint16_t end_handle;
|
||||
uint16_t properties;
|
||||
uint16_t uuid16;
|
||||
uint8_t uuid128[16];
|
||||
} le_characteristic_t, gatt_client_characteristic_t;
|
||||
|
||||
typedef struct {
|
||||
uint16_t handle;
|
||||
uint16_t uuid16;
|
||||
uint8_t uuid128[16];
|
||||
} gatt_client_characteristic_descriptor_t;
|
||||
|
||||
void gatt_client_deserialize_service(const uint8_t *packet, int offset, gatt_client_service_t *service);
|
||||
|
||||
void gatt_client_deserialize_characteristic(const uint8_t *packet, int offset, gatt_client_characteristic_t *characteristic);
|
||||
|
||||
void gatt_client_deserialize_characteristic_descriptor(const uint8_t *packet, int offset, gatt_client_characteristic_descriptor_t *descriptor);
|
||||
|
||||
uint8_t gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t offset);
|
||||
|
||||
uint8_t gatt_client_read_value_of_characteristic_using_value_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t value_handle);
|
||||
|
||||
uint8_t gatt_client_write_value_of_characteristic_without_response(hci_con_handle_t con_handle, uint16_t value_handle, uint16_t value_length, uint8_t *value);
|
||||
|
||||
uint8_t gatt_client_write_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t value_handle, uint16_t value_length, uint8_t *data);
|
||||
|
||||
void gatt_client_request_can_send_now_event(hci_con_handle_t con_handle);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,222 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : le_counter.h
|
||||
|
||||
* Description :
|
||||
|
||||
* Author : Bingquan
|
||||
|
||||
* Email : bingquan_cai@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2017-01-17 15:17
|
||||
|
||||
* Copyright:(c)JIELI 2011-2016 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
|
||||
#ifndef __LE_COMMON_DEFINE_H_
|
||||
#define __LE_COMMON_DEFINE_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include <stdint.h>
|
||||
#include "btstack/bluetooth.h"
|
||||
|
||||
//--------------------------------------------
|
||||
|
||||
#define ADV_SET_1M_PHY 1
|
||||
#define ADV_SET_2M_PHY 2
|
||||
#define ADV_SET_CODED_PHY 3
|
||||
|
||||
#define SCAN_SET_1M_PHY BIT(0)
|
||||
#define SCAN_SET_2M_PHY BIT(1)
|
||||
#define SCAN_SET_CODED_PHY BIT(2)
|
||||
|
||||
#define INIT_SET_1M_PHY BIT(0)
|
||||
#define INIT_SET_2M_PHY BIT(1)
|
||||
#define INIT_SET_CODED_PHY BIT(2)
|
||||
|
||||
#define CONN_SET_1M_PHY BIT(0)
|
||||
#define CONN_SET_2M_PHY BIT(1)
|
||||
#define CONN_SET_CODED_PHY BIT(2)
|
||||
|
||||
#define CONN_SET_PHY_OPTIONS_NONE 0
|
||||
#define CONN_SET_PHY_OPTIONS_S2 1
|
||||
#define CONN_SET_PHY_OPTIONS_S8 2
|
||||
|
||||
struct conn_param_t {
|
||||
u16 interval;
|
||||
u16 latency;
|
||||
u16 timeout;
|
||||
};
|
||||
|
||||
// #define NOTIFY_TYPE 1
|
||||
// #define INDICATION_TYPE 2
|
||||
// Minimum/default MTU
|
||||
|
||||
#define ATT_CTRL_BLOCK_SIZE (188) //note: fixed,libs use
|
||||
#define ATT_PACKET_HEAD_SIZE (6) //note: fixed,libs use
|
||||
|
||||
/*adv type*/
|
||||
enum {
|
||||
ADV_IND = 0, /*Connectable and scannable undirected advertising*/
|
||||
ADV_DIRECT_IND, /*Connectable high duty cycle directed advertising */
|
||||
ADV_SCAN_IND, /*Scannable undirected advertising*/
|
||||
ADV_NONCONN_IND, /*Non connectable undirected advertising*/
|
||||
ADV_DIRECT_IND_LOW, /*Connectable low duty cycle directed advertising*/
|
||||
};
|
||||
|
||||
|
||||
/*adv channel*/
|
||||
#define ADV_CHANNEL_37 BIT(0)
|
||||
#define ADV_CHANNEL_38 BIT(1)
|
||||
#define ADV_CHANNEL_39 BIT(2)
|
||||
#define ADV_CHANNEL_ALL (ADV_CHANNEL_37 | ADV_CHANNEL_38 | ADV_CHANNEL_39)
|
||||
|
||||
/*scan type*/
|
||||
enum {
|
||||
SCAN_PASSIVE = 0,
|
||||
SCAN_ACTIVE,
|
||||
};
|
||||
|
||||
/*advertising report,event type*/
|
||||
#define EVENT_ADV_IND ADV_IND
|
||||
#define EVENT_ADV_DIRECT_IND ADV_DIRECT_IND
|
||||
#define EVENT_ADV_SCAN_IND ADV_SCAN_IND
|
||||
#define EVENT_ADV_NONCONN_IND ADV_NONCONN_IND
|
||||
#define EVENT_SCAN_RSP (4)
|
||||
|
||||
#define EVENT_DEFAULT_REPORT_BITMAP (0x1f)
|
||||
|
||||
|
||||
/*flags*/
|
||||
#define FLAGS_LIMITED_DISCOVERABLE_MODE BIT(0)
|
||||
#define FLAGS_GENERAL_DISCOVERABLE_MODE BIT(1)
|
||||
#define FLAGS_EDR_NOT_SUPPORTED BIT(2)
|
||||
#define FLAGS_LE_AND_EDR_SAME_CONTROLLER BIT(3)
|
||||
#define FLAGS_LE_AND_EDR_SAME_HOST BIT(4)
|
||||
|
||||
/*eir packet_type*/
|
||||
typedef enum {
|
||||
HCI_EIR_DATATYPE_FLAGS = 0x01,
|
||||
HCI_EIR_DATATYPE_MORE_16BIT_SERVICE_UUIDS = 0x02,
|
||||
HCI_EIR_DATATYPE_COMPLETE_16BIT_SERVICE_UUIDS = 0x03,
|
||||
HCI_EIR_DATATYPE_MORE_32BIT_SERVICE_UUIDS = 0x04,
|
||||
HCI_EIR_DATATYPE_COMPLETE_32BIT_SERVICE_UUIDS = 0x05,
|
||||
HCI_EIR_DATATYPE_MORE_128BIT_SERVICE_UUIDS = 0x06,
|
||||
HCI_EIR_DATATYPE_COMPLETE_128BIT_SERVICE_UUIDS = 0x07,
|
||||
HCI_EIR_DATATYPE_SHORTENED_LOCAL_NAME = 0x08,
|
||||
HCI_EIR_DATATYPE_COMPLETE_LOCAL_NAME = 0x09,
|
||||
HCI_EIR_DATATYPE_TX_POWER_LEVEL = 0x0A,
|
||||
HCI_EIR_DATATYPE_CLASS_OF_DEVICE = 0x0D,
|
||||
HCI_EIR_DATATYPE_SIMPLE_PAIRING_HASH_C = 0x0E,
|
||||
HCI_EIR_DATATYPE_SIMPLE_PAIRING_RANDOMIZER_R = 0x0F,
|
||||
HCI_EIR_DATATYPE_SECURITY_MANAGER_TK_VALUE = 0x10,
|
||||
HCI_EIR_DATATYPE_SECURITY_MANAGER_OOB_FLAGS = 0x11,
|
||||
HCI_EIR_DATATYPE_SLAVE_CONNECTION_INTERVAL_RANGE = 0x12,
|
||||
HCI_EIR_DATATYPE_16BIT_SERVICE_SOLICITATION_UUIDS = 0x14,
|
||||
HCI_EIR_DATATYPE_128BIT_SERVICE_SOLICITATION_UUIDS = 0x15,
|
||||
HCI_EIR_DATATYPE_SERVICE_DATA = 0x16,
|
||||
HCI_EIR_DATATYPE_APPEARANCE_DATA = 0x19,
|
||||
HCI_EIR_DATATYPE_ADVERTISING_INTERVAL = 0X1A,
|
||||
HCI_EIR_DATATYPE_LE_BLUETOOTH_DEVICE_ADDRESS = 0X1B,
|
||||
HCI_EIR_DATATYPE_LE_ROLE = 0X1C,
|
||||
HCI_EIR_DATATYPE_SIMPLE_PAIRING_HASH_C256 = 0X1D,
|
||||
HCI_EIR_DATATYPE_SIMPLE_PAIRING_RANDOMIZER_R256 = 0X1E,
|
||||
HCI_EIR_DATATYPE_LIST_OF_32BIT_SERVICE_SOLICITATION_UUIDS = 0X1F,
|
||||
HCI_EIR_DATATYPE_SERVICE_DATA_32BIT_UUID = 0X20,
|
||||
HCI_EIR_DATATYPE_SERVICE_DATA_128BIT_UUID = 0X21,
|
||||
HCI_EIR_DATATYPE_LE_SECURE_CONNECTIONS_CONFIRMATION_VALUE = 0X22,
|
||||
HCI_EIR_DATATYPE_LE_SECURE_CONNECTIONS_RANDOM_VALUE = 0X23,
|
||||
HCI_EIR_DATATYPE_URI = 0X24,
|
||||
HCI_EIR_DATATYPE_INDOOR_POSITIONING = 0X25,
|
||||
HCI_EIR_DATATYPE_TRANSPORT_DISCOVERY_DATA = 0X26,
|
||||
HCI_EIR_DATATYPE_LE_SUPPORTED_FEATURES = 0X27,
|
||||
HCI_EIR_DATATYPE_CHANNEL_MAP_UPDATE_INDICATION = 0X28,
|
||||
HCI_EIR_DATATYPE_BIGINFO = 0X2C,
|
||||
HCI_EIR_DATATYPE_BROADCAST_CODE = 0X2D,
|
||||
HCI_EIR_DATATYPE_RESOLVABLE_SET_IDENTIFIER = 0X2E,
|
||||
HCI_EIR_DATATYPE_ADVERTISING_INTERVAL_LONG = 0X2F,
|
||||
HCI_EIR_DATATYPE_BROADCAST_NAME = 0X30,
|
||||
HCI_EIR_DATATYPE_3D_INFORMATION_DATA = 0X3D,
|
||||
HCI_EIR_DATATYPE_MANUFACTURER_SPECIFIC_DATA = 0xFF
|
||||
} HCI_EIR_datatype_t;
|
||||
|
||||
|
||||
//按(长度 + 类型 + 内容)这样的格,组合填入广播包数据
|
||||
static inline u8 make_eir_packet_data(u8 *buf, u16 offset, u8 data_type, u8 *data, u8 data_len)
|
||||
{
|
||||
if (ADV_RSP_PACKET_MAX - offset < data_len + 2) {
|
||||
return offset + data_len + 2;
|
||||
}
|
||||
|
||||
buf[0] = data_len + 1;
|
||||
buf[1] = data_type;
|
||||
memcpy(buf + 2, data, data_len);
|
||||
return data_len + 2;
|
||||
}
|
||||
|
||||
//按(长度 + 类型 + 内容)这样的格,组合填入广播包数据
|
||||
static inline u8 make_eir_packet_val(u8 *buf, u16 offset, u8 data_type, u32 val, u8 val_size)
|
||||
{
|
||||
if (ADV_RSP_PACKET_MAX - offset < val_size + 2) {
|
||||
return offset + val_size + 2;
|
||||
}
|
||||
|
||||
buf[0] = val_size + 1;
|
||||
buf[1] = data_type;
|
||||
memcpy(buf + 2, &val, val_size);
|
||||
return val_size + 2;
|
||||
}
|
||||
|
||||
#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */
|
||||
#define BLE_APPEARANCE_GENERIC_PHONE 64 /* Generic Phone. */
|
||||
#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /* Generic Computer. */
|
||||
#define BLE_APPEARANCE_GENERIC_WATCH 192 /* Generic Watch. */
|
||||
#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /* Watch: Sports Watch. */
|
||||
#define BLE_APPEARANCE_GENERIC_CLOCK 256 /* Generic Clock. */
|
||||
#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /* Generic Display. */
|
||||
#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /* Generic Remote Control. */
|
||||
#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /* Generic Eye-glasses. */
|
||||
#define BLE_APPEARANCE_GENERIC_TAG 512 /* Generic Tag. */
|
||||
#define BLE_APPEARANCE_GENERIC_KEYRING 576 /* Generic Keyring. */
|
||||
#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /* Generic Media Player. */
|
||||
#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /* Generic Barcode Scanner. */
|
||||
#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /* Generic Thermometer. */
|
||||
#define BLE_APPEARANCE_THERMOMETER_EAR 769 /* Thermometer: Ear. */
|
||||
#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /* Generic Heart rate Sensor. */
|
||||
#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /* Heart Rate Sensor: Heart Rate Belt. */
|
||||
#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /* Generic Blood Pressure. */
|
||||
#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /* Blood Pressure: Arm. */
|
||||
#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /* Blood Pressure: Wrist. */
|
||||
#define BLE_APPEARANCE_GENERIC_HID 960 /* Human Interface Device (HID). */
|
||||
#define BLE_APPEARANCE_HID_KEYBOARD 961 /* Keyboard (HID Subtype). */
|
||||
#define BLE_APPEARANCE_HID_MOUSE 962 /* Mouse (HID Subtype). */
|
||||
#define BLE_APPEARANCE_HID_JOYSTICK 963 /* Joystick (HID Subtype). */
|
||||
#define BLE_APPEARANCE_HID_GAMEPAD 964 /* Gamepad (HID Subtype). */
|
||||
#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /* Digitizer Tablet (HID Subtype). */
|
||||
#define BLE_APPEARANCE_HID_CARD_READER 966 /* Card Reader (HID Subtype). */
|
||||
#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /* Digital Pen (HID Subtype). */
|
||||
#define BLE_APPEARANCE_HID_BARCODE 968 /* Barcode Scanner (HID Subtype). */
|
||||
#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /* Generic Glucose Meter. */
|
||||
#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /* Generic Running Walking Sensor. */
|
||||
#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /* Running Walking Sensor: In-Shoe. */
|
||||
#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /* Running Walking Sensor: On-Shoe. */
|
||||
#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /* Running Walking Sensor: On-Hip. */
|
||||
#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /* Generic Cycling. */
|
||||
#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /* Cycling: Cycling Computer. */
|
||||
#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /* Cycling: Speed Sensor. */
|
||||
#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /* Cycling: Cadence Sensor. */
|
||||
#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /* Cycling: Power Sensor. */
|
||||
#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /* Cycling: Speed and Cadence Sensor. */
|
||||
#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /* Generic Pulse Oximeter. */
|
||||
#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /* Fingertip (Pulse Oximeter subtype). */
|
||||
#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /* Wrist Worn(Pulse Oximeter subtype). */
|
||||
#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /* Generic Weight Scale. */
|
||||
#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /* Generic Outdoor Sports Activity. */
|
||||
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /* Location Display Device (Outdoor Sports Activity subtype). */
|
||||
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /* Location and Navigation Display Device (Outdoor Sports Activity subtype). */
|
||||
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /* Location Pod (Outdoor Sports Activity subtype). */
|
||||
#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /* Location and Navigation Pod (Outdoor Sports Activity subtype). */
|
||||
|
||||
extern void le_l2cap_register_packet_handler(void (*handler)(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size));
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
|
||||
#ifndef _LE_USER_H_
|
||||
#define _LE_USER_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "btstack/btstack_typedef.h"
|
||||
#include "ble_api.h"
|
||||
|
||||
#if defined __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#define BT_NAME_LEN_MAX 29
|
||||
#define ADV_RSP_PACKET_MAX 31
|
||||
|
||||
// hci con handles (12 bit): 0x0000..0x0fff
|
||||
#define HCI_CON_HANDLE_INVALID 0xffff
|
||||
|
||||
#define BTSTACK_EVENT_STATE 0x60
|
||||
#define L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE 0x77
|
||||
|
||||
#define SM_EVENT_NUMERIC_COMPARISON_REQUEST 0xD6
|
||||
|
||||
#define SM_EVENT_JUST_WORKS_REQUEST 0xD0
|
||||
#define SM_EVENT_JUST_WORKS_CANCEL 0xD1
|
||||
#define SM_EVENT_PASSKEY_DISPLAY_NUMBER 0xD2
|
||||
#define SM_EVENT_PASSKEY_DISPLAY_CANCEL 0xD3
|
||||
#define SM_EVENT_PASSKEY_INPUT_NUMBER 0xD4
|
||||
#define SM_EVENT_PASSKEY_INPUT_CANCEL 0xD5
|
||||
#define SM_EVENT_PAIR_PROCESS 0xDF
|
||||
//0xdf 's sub
|
||||
#define SM_EVENT_PAIR_SUB_RECONNECT_START 0x01
|
||||
#define SM_EVENT_PAIR_SUB_PIN_KEY_MISS 0x02
|
||||
#define SM_EVENT_PAIR_SUB_PAIR_FAIL 0x03
|
||||
#define SM_EVENT_PAIR_SUB_PAIR_TIMEOUT 0x04
|
||||
#define SM_EVENT_PAIR_SUB_ENCRYPTION_FAIL 0x05
|
||||
#define SM_EVENT_PAIR_SUB_SEND_DISCONN 0x0f
|
||||
#define SM_EVENT_PAIR_SUB_ADD_LIST_SUCCESS 0x10
|
||||
#define SM_EVENT_PAIR_SUB_ADD_LIST_FAILED 0x11
|
||||
|
||||
|
||||
#define GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NONE 0
|
||||
#define GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NOTIFICATION 1
|
||||
#define GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_INDICATION 2
|
||||
|
||||
|
||||
#define GATT_EVENT_NOTIFICATION 0xA7
|
||||
#define GATT_EVENT_INDICATION 0xA8
|
||||
#define GATT_EVENT_CHARACTERISTIC_VALUE_QUERY_RESULT 0xA5
|
||||
#define GATT_EVENT_LONG_CHARACTERISTIC_VALUE_QUERY_RESULT 0xA6
|
||||
// #define GATT_EVENT_SERVICE_QUERY_RESULT 0xA1
|
||||
// #define GATT_EVENT_CHARACTERISTIC_QUERY_RESULT 0xA2
|
||||
#define GATT_EVENT_QUERY_COMPLETE 0xA0
|
||||
#define GAP_EVENT_ADVERTISING_REPORT 0xE2
|
||||
|
||||
// Authentication requirement flags
|
||||
#define SM_AUTHREQ_NO_BONDING 0x00
|
||||
#define SM_AUTHREQ_BONDING 0x01
|
||||
#define SM_AUTHREQ_MITM_PROTECTION 0x04
|
||||
#define SM_AUTHREQ_SECURE_CONNECTION 0x08
|
||||
#define SM_AUTHREQ_KEYPRESS 0x10
|
||||
#define SM_AUTHREQ_CT2 0x20
|
||||
|
||||
|
||||
#define L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE 0x77
|
||||
|
||||
|
||||
#define BT_OP_SUCCESS 0x00
|
||||
#define BT_ERR_ADVERTISING_TIMEOUT 0x3C
|
||||
|
||||
|
||||
//--------------------------------------------
|
||||
|
||||
struct ble_server_operation_t {
|
||||
int(*adv_enable)(void *priv, u32 enable);
|
||||
int(*disconnect)(void *priv);
|
||||
int(*get_buffer_vaild)(void *priv);
|
||||
int(*send_data)(void *priv, void *buf, u16 len);
|
||||
int(*regist_wakeup_send)(void *priv, void *cbk);
|
||||
int(*regist_recieve_cbk)(void *priv, void *cbk);
|
||||
int(*regist_state_cbk)(void *priv, void *cbk);
|
||||
int(*latency_enable)(void *priv, u32 enable);
|
||||
};
|
||||
|
||||
void ble_get_server_operation_table(struct ble_server_operation_t **interface_pt);
|
||||
|
||||
//--------------------------------------------
|
||||
|
||||
struct ble_client_operation_t {
|
||||
int(*scan_enable)(void *priv, u32 enable);
|
||||
int(*disconnect)(void *priv);
|
||||
int(*get_buffer_vaild)(void *priv);
|
||||
int(*write_data)(void *priv, void *buf, u16 len);
|
||||
int(*read_do)(void *priv);
|
||||
int(*regist_wakeup_send)(void *priv, void *cbk);
|
||||
int(*regist_recieve_cbk)(void *priv, void *cbk);
|
||||
int(*regist_state_cbk)(void *priv, void *cbk);
|
||||
int (*init_config)(void *priv, void *cfg);
|
||||
int (*opt_comm_send)(u16 handle, u8 *data, u16 len, u8 att_op_type);
|
||||
int (*set_force_search)(u8 onoff, s8 rssi);
|
||||
int (*create_connect)(u8 *addr, u8 addr_type, u8 mode);
|
||||
int (*create_connect_cannel)(void);
|
||||
int (*get_work_state)(void);
|
||||
int (*opt_comm_send_ext)(u16 conn_handle, u16 handle, u8 *data, u16 len, u8 att_op_type);
|
||||
};
|
||||
|
||||
struct ble_client_operation_t *ble_get_client_operation_table(void);
|
||||
|
||||
|
||||
static inline uint32_t ble_min(uint32_t a, uint32_t b)
|
||||
{
|
||||
return a < b ? a : b;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
//----------------------------------------
|
||||
//----------------------------------------
|
||||
|
||||
|
||||
|
||||
extern int get_ble_btstack_state(void);
|
||||
extern int get_indicate_state(void);
|
||||
|
||||
|
||||
extern u8 get_ble_local_name(u8 *name_buf);
|
||||
extern u8 get_ble_local_name_len();
|
||||
|
||||
|
||||
|
||||
|
||||
extern void hci_event_callback_set(void(*cbk_ph)(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size));
|
||||
extern void ll_hci_connection_updata(u8 *data);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : sm.h
|
||||
|
||||
* Description :
|
||||
|
||||
* Author : Minxian
|
||||
|
||||
* Email : liminxian@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2020-07-01 16:36
|
||||
|
||||
* Copyright:(c)JIELI 2011-2020 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#ifndef _BT_SM_H_
|
||||
#define _BT_SM_H_
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
// IO Capability Values
|
||||
typedef enum {
|
||||
IO_CAPABILITY_DISPLAY_ONLY = 0,
|
||||
IO_CAPABILITY_DISPLAY_YES_NO,
|
||||
IO_CAPABILITY_KEYBOARD_ONLY,
|
||||
IO_CAPABILITY_NO_INPUT_NO_OUTPUT,
|
||||
IO_CAPABILITY_KEYBOARD_DISPLAY, // not used by secure simple pairing
|
||||
} io_capability_t;
|
||||
|
||||
void ble_sm_setup_init(io_capability_t io_type, u8 auth_req, uint8_t min_key_size, u8 security_en);
|
||||
|
||||
void ble_cbk_handler_register(btstack_packet_handler_t packet_cbk, sm_stack_packet_handler_t sm_cbk);
|
||||
|
||||
void sm_just_works_confirm(hci_con_handle_t con_handle);
|
||||
|
||||
void sm_init(void);
|
||||
|
||||
/*接口同时设置master 和 slave的配置*/
|
||||
void sm_set_io_capabilities(io_capability_t io_capability);
|
||||
|
||||
/*接口只设置master配置*/
|
||||
void sm_set_master_io_capabilities(io_capability_t io_capability);
|
||||
|
||||
/*接口同时设置master 和 slave的配置*/
|
||||
void sm_set_authentication_requirements(uint8_t auth_req);
|
||||
|
||||
/*接口只设置master配置*/
|
||||
void sm_set_master_authentication_requirements(uint8_t auth_req);
|
||||
|
||||
void sm_set_encryption_key_size_range(uint8_t min_size, uint8_t max_size);
|
||||
|
||||
void sm_set_request_security(int enable);
|
||||
|
||||
void sm_event_callback_set(void(*cbk_sm_ph)(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size));
|
||||
|
||||
//配从机默认发请求加密命令
|
||||
void sm_set_request_security(int enable);
|
||||
|
||||
//配主机默认发加密请求命令
|
||||
void sm_set_master_request_pair(int enable);
|
||||
|
||||
//指定链接发加密请求命令
|
||||
bool sm_api_request_pairing(hci_con_handle_t con_handle);
|
||||
|
||||
//设置回连出现key missing后,流程重新发起加密
|
||||
void sm_set_master_pair_redo(int enable);
|
||||
|
||||
//设置回连时,延时发起加密流程的时间,可用于兼容一些设备连接
|
||||
void sm_set_master_reconnect_enc_delay(u16 delay_ms);
|
||||
void sm_passkey_input(hci_con_handle_t con_handle, uint32_t passkey);
|
||||
#endif
|
||||
@@ -0,0 +1,239 @@
|
||||
|
||||
|
||||
#ifndef _3TH_PROTOCOL_EVENT_H
|
||||
#define _3TH_PROTOCOL_EVENT_H
|
||||
|
||||
//该文件只定义库里面和库外面都需要用得的第三方APP协议的消息和状态
|
||||
#include<string.h>
|
||||
#include <stdint.h>
|
||||
#include "typedef.h"
|
||||
|
||||
#define DEMO_HANDLER_ID 0x300 /*作为一个使用的例子,同时也可作为客户自己添加协议的ID*/
|
||||
#define GMA_HANDLER_ID 0x400 /*阿里天猫协议接口ID*/
|
||||
#define MMA_HANDLER_ID 0x500 /*小米MMA协议接口ID*/
|
||||
#define DMA_HANDLER_ID 0x600 /*百度DMA协议接口ID*/
|
||||
#define TME_HANDLER_ID 0x700 /*腾讯酷狗TME协议接口ID*/
|
||||
#define AMA_HANDLER_ID 0x800 /*亚马逊的AMA协议接口ID*/
|
||||
#define REALME_HANDLER_ID 0x900 /*oppo真我的协议接口ID*/
|
||||
#define GFPS_HANDLER_ID 0xA00 /*谷歌快对的协议接口ID*/
|
||||
//app protocol公共消息
|
||||
enum {
|
||||
APP_PROTOCOL_COMMON_NOTICE = 0,
|
||||
APP_PROTOCOL_CONNECTING, /*保留,暂未使用*/
|
||||
APP_PROTOCOL_CONNECTED_BLE, /*APP通过BLE连接成功状态更新*/
|
||||
APP_PROTOCOL_CONNECTED_SPP, /*APP通过SPP连接成功状态更新*/
|
||||
APP_PROTOCOL_DISCONNECT, /*APP连接断开状态更新*/
|
||||
APP_PROTOCOL_AUTH_PASS, /*连接认证通过标识更新*/
|
||||
APP_PROTOCOL_SPEECH_ENCODER_TYPE,
|
||||
APP_PROTOCOL_SPEECH_START, /*语音识别功能启动状态*/
|
||||
APP_PROTOCOL_SPEECH_STOP, /*语音识别功能停止状态*/
|
||||
APP_PROTOCOL_SET_VOLUME, /*app配置音量*/
|
||||
APP_PROTOCOL_GET_VOLUME, /*app读取音量*/
|
||||
APP_PROTOCOL_GET_AUX_STATUS, /*保留,暂未使用*/
|
||||
APP_PROTOCOL_LIB_TWS_DATA_SYNC, /*需要更新给另一端tws数据*/
|
||||
APP_PROTOCOL_GET_TWS_CHANNEL, /*库里面获取是左声道还是右声道*/
|
||||
APP_PROTOCOL_COMMON_NOTICE_END = 0x14F,
|
||||
};
|
||||
//OTA消息
|
||||
enum {
|
||||
APP_PROTOCOL_OTA_COMMON_NOTICE = APP_PROTOCOL_COMMON_NOTICE_END + 1,
|
||||
APP_PROTOCOL_OTA_CHECK,
|
||||
APP_PROTOCOL_OTA_GET_APP_VERSION,
|
||||
APP_PROTOCOL_OTA_CHECK_CRC,
|
||||
APP_PROTOCOL_OTA_BEGIN,
|
||||
APP_PROTOCOL_OTA_TRANS_DATA,
|
||||
APP_PROTOCOL_OTA_PERCENT,
|
||||
APP_PROTOCOL_OTA_END,
|
||||
APP_PROTOCOL_OTA_SUCCESS,
|
||||
APP_PROTOCOL_OTA_FAIL,
|
||||
APP_PROTOCOL_OTA_CANCLE,
|
||||
APP_PROTOCOL_OTA_REBOOT,
|
||||
APP_PROTOCOL_OTA_COMMON_NOTICE_END = 0x1FF,
|
||||
};
|
||||
//GMA私有消息
|
||||
enum {
|
||||
APP_PROTOCOL_GMA_NOTICE_BEGIN = GMA_HANDLER_ID,
|
||||
APP_PROTOCOL_GMA_FMTX_SETFRE, /*样机支持FM功能的APP配置fm参数*/
|
||||
APP_PROTOCOL_GMA_FMTX_GETFRE, /*app获取当前的fm配置参数*/
|
||||
APP_PROTOCOL_GMA_NOTICE_END = GMA_HANDLER_ID + 0xFF,
|
||||
};
|
||||
//MMA私有消息
|
||||
enum {
|
||||
APP_PROTOCOL_MMA_NOTICE = MMA_HANDLER_ID,
|
||||
APP_PROTOCOL_MMA_SAVE_INFO, //库里面不直接访问VM接口,有些信息保存外面做
|
||||
APP_PROTOCOL_MMA_READ_INFO,
|
||||
APP_PROTOCOL_MMA_SAVE_ADV_COUNTER,
|
||||
APP_PROTOCOL_MMA_READ_ADV_COUNTER,
|
||||
APP_PROTOCOL_MMA_MANUFACTURER_DATA, //小米广播包的数据,
|
||||
APP_PROTOCOL_MMA_FD2D_SERVICE_DATA, //小米广播包的数据,
|
||||
APP_PROTOCOL_MMA_SAVE_ACCOUNT_KEY,
|
||||
APP_PROTOCOL_MMA_READ_ACCOUNT_KEY,
|
||||
APP_PROTOCOL_MMA_NOTICE_END = MMA_HANDLER_ID + 0xFF,
|
||||
};
|
||||
|
||||
//DMA私有消息
|
||||
enum {
|
||||
APP_PROTOCOL_DMA_NOTICE = DMA_HANDLER_ID,
|
||||
APP_PROTOCOL_DMA_SAVE_RAND, //库里面不直接访问VM接口,有些信息保存外面做
|
||||
APP_PROTOCOL_DMA_READ_RAND,
|
||||
APP_PROTOCOL_DMA_TWS_SNED_RAND,
|
||||
APP_PROTOCOL_DMA_TTS_TYPE,
|
||||
APP_PROTOCOL_DMA_SAVE_OTA_INFO, //库里面不直接访问VM接口,有些信息保存外面做
|
||||
APP_PROTOCOL_DMA_READ_OTA_INFO,
|
||||
APP_PROTOCOL_DMA_NOTICE_END = DMA_HANDLER_ID + 0xFF,
|
||||
};
|
||||
|
||||
//REALME私有消息
|
||||
enum {
|
||||
APP_PROTOCOL_REALME_FEATURE_SWITCH = REALME_HANDLER_ID,
|
||||
APP_PROTOCOL_REALME_FIND_MODE_SET,
|
||||
APP_PROTOCOL_REALME_KEY_FUNC_SET,
|
||||
APP_PROTOCOL_REALME_FREE_MUSIC_SET,
|
||||
APP_PROTOCOL_REALME_NOISE_INFO,
|
||||
APP_PROTOCOL_REALME_COMPACTNESS_DETECT,
|
||||
APP_PROTOCOL_REALME_EQ_SET,
|
||||
APP_PROTOCOL_REALME_HIGH_VOL_GAIN_SET,
|
||||
APP_PROTOCOL_REALME_RELATE_DEVICE_INFO,
|
||||
APP_PROTOCOL_REALME_UTC_TIME_SYNC,
|
||||
APP_PROTOCOL_REALME_POWER_OFF_TIME_SET,
|
||||
APP_PROTOCOL_REALME_MULTI_CONN_INFO,
|
||||
APP_PROTOCOL_REALME_BASS_ENGINE_VALUE_SET,
|
||||
APP_PROTOCOL_REALME_RESTORE_FACTORY,
|
||||
APP_PROTOCOL_REALME_UPGRADE_OFFSET_SAVE,
|
||||
APP_PROTOCOL_REALME_UPGRADE_OFFSET_READ,
|
||||
APP_PROTOCOL_REALME_UPGRADE_OFFSET_CLEAR,
|
||||
APP_PROTOCOL_REALME_UPGRADE_FIRMWARE_ID,
|
||||
APP_PROTOCOL_REALME_UPGRADE_START,
|
||||
APP_PROTOCOL_REALME_UPGRADE_END,
|
||||
APP_PROTOCOL_REALME_UPGRADE_REBOOT,
|
||||
APP_PROTOCOL_REALME_UPGRADE_SYNC,
|
||||
APP_PROTOCOL_REALME_UPGRADE_ABORT,
|
||||
APP_PROTOCOL_REALME_DEBUG_START,
|
||||
APP_PROTOCOL_REALME_DEBUG_GET,
|
||||
APP_PROTOCOL_REALME_DEBUG_STOP,
|
||||
APP_PROTOCOL_REALME_DEBUG_DIAGNOSTIC,
|
||||
APP_PROTOCOL_REALME_DEBUG_SET_PARAM,
|
||||
};
|
||||
|
||||
#define REALME_MAX_KEY_NUM 10
|
||||
|
||||
struct __realme_special_id {
|
||||
char product_id[4];
|
||||
char *protocol_version;
|
||||
uint8_t protocol_version_len;
|
||||
char *version;
|
||||
uint8_t version_len;
|
||||
};
|
||||
struct __realme_key_func {
|
||||
uint8_t key_info[REALME_MAX_KEY_NUM][4];
|
||||
uint8_t key_num;
|
||||
};
|
||||
|
||||
struct __realme_nofity_flag {
|
||||
bool battery_notify_flag;
|
||||
bool earbuds_notify_flag;
|
||||
bool noise_notify_flag;
|
||||
bool compactness_notify_flag;
|
||||
bool game_mode_notify_flag;
|
||||
bool multi_conn_notify_flag;
|
||||
bool user_ui_notify_flag;
|
||||
bool conn_dev_notify_flag;
|
||||
bool exception_info_notify_flag;
|
||||
bool buried_point_notify_flag;
|
||||
};
|
||||
|
||||
|
||||
#define REALME_FEATURE_MAX_NUM (40)
|
||||
|
||||
struct __realme_info {
|
||||
// vm
|
||||
uint8_t feature_state[REALME_FEATURE_MAX_NUM];
|
||||
uint8_t auto_power_off_time;
|
||||
|
||||
uint8_t eq_id;
|
||||
uint8_t high_vol_gain_level;
|
||||
uint8_t noise_info[2]; //
|
||||
char min_bass_engine;
|
||||
char max_bass_engine;
|
||||
char cur_bass_engine;
|
||||
|
||||
struct __realme_key_func key_func;
|
||||
struct __realme_nofity_flag notify_flag;
|
||||
|
||||
// const
|
||||
// uint32_t realme_capabilities;
|
||||
// uint16_t vid;
|
||||
// uint8_t realme_color_id;
|
||||
// uint8_t device_id_type; // 0:非 TWS 设备 1:TWS 设备
|
||||
// struct __realme_special_id special_id;
|
||||
|
||||
|
||||
// update
|
||||
// uint8_t left_ear_status;
|
||||
// uint8_t right_ear_status;
|
||||
// uint8_t box_status;
|
||||
// uint8_t left_ear_compactness;
|
||||
// uint8_t right_ear_compactness;
|
||||
// uint8_t left_ear_vol;
|
||||
// uint8_t right_ear_vol;
|
||||
// uint8_t audio_code;
|
||||
// uint32_t time_stamp;
|
||||
};
|
||||
|
||||
|
||||
|
||||
// GFPS私有消息
|
||||
enum {
|
||||
APP_PROTOCOL_GFPS_RING_STOP_ALL = GFPS_HANDLER_ID,
|
||||
APP_PROTOCOL_GFPS_RING_RIGHT,
|
||||
APP_PROTOCOL_GFPS_RING_LEFT,
|
||||
APP_PROTOCOL_GFPS_RING_ALL,
|
||||
APP_PROTOCOL_GFPS_HEARABLE_CONTROLS,
|
||||
};
|
||||
|
||||
//APP_PROTOCOL获取电量的类型
|
||||
#define APP_PROTOCOL_BAT_T_CHARGE_FLAG 0
|
||||
#define APP_PROTOCOL_BAT_T_MAIN 1
|
||||
#define APP_PROTOCOL_BAT_T_BOX 2
|
||||
#define APP_PROTOCOL_BAT_T_TWS_LEFT 3
|
||||
#define APP_PROTOCOL_BAT_T_TWS_RIGHT 4
|
||||
#define APP_PROTOCOL_BAT_T_TWS_SIBLING 5
|
||||
#define APP_PROTOCOL_BAT_T_LOW_POWER 6
|
||||
#define APP_PROTOCOL_BAT_T_MAX 8
|
||||
|
||||
typedef struct _ota_frame_info_t {
|
||||
u16 max_pkt_len;
|
||||
u16 frame_crc;
|
||||
u32 frame_size;
|
||||
} ota_frame_info;
|
||||
|
||||
//*****//
|
||||
typedef enum {
|
||||
USER_NOTIFY_STATE_CONNECTED = 0, /**< 手机APP与设备建立连接 */
|
||||
USER_NOTIFY_STATE_DISCONNECTED, /**< 手机APP与设备的连接断开 */
|
||||
USER_NOTIFY_STATE_MOBILE_CONNECTED, /**< 手机与设备建立BT连接(A2DP、HFP、AVRCP) */
|
||||
USER_NOTIFY_STATE_MOBILE_DISCONNECTED, /**< 手机与设备BT连接(A2DP、HFP、AVRCP)断开 */
|
||||
USER_NOTIFY_STATE_SEND_PREPARE_DONE, /**< 设备端进入可向手机发送数据的状态 */
|
||||
USER_NOTIFY_STATE_TWS_CONNECT, /**< TWS类设备两端连接成功 */
|
||||
USER_NOTIFY_STATE_TWS_DISCONNECT, /**< TWS类设备两端断开连接 */
|
||||
USER_NOTIFY_STATE_BOX_OPEN, /**< 盒仓开启 */
|
||||
USER_NOTIFY_STATE_BOX_CLOSE, /**< 盒仓关闭 */
|
||||
USER_NOTIFY_STATE_ROLE_SWITCH_START, /**< TWS类设备开始进入主从切换流程 */
|
||||
USER_NOTIFY_STATE_ROLE_SWITCH_FINISH, /**< TWS类设备主从切换完成 */
|
||||
USER_NOTIFY_STATE_ROLE_SWITCH_REQUEST, /**< TWS类设备向APP发起主从切换请求 */
|
||||
USER_NOTIFY_STATE_DOUBLE_CLICK, /**< 设备双击按键 */
|
||||
USER_NOTIFY_STATE_KEYWORD_DETECTED, /**< 设备语音唤醒 */
|
||||
USER_NOTIFY_STATE_BATTERY_LEVEL_UPDATE, /**< 通知耳机电量更新 */
|
||||
USER_NOTIFY_STATE_ONE_CLICK, /**< 设备单击按键 */
|
||||
} USER_NOTIFY_STATE;
|
||||
|
||||
typedef enum {
|
||||
/*尽量返回简单的1或者0*/
|
||||
CHECK_STATUS_TWS_MASTER,
|
||||
CHECK_STATUS_TWS_SLAVE,
|
||||
CHECK_STATUS_TWS_PAIR_STA, /*1是tws已经配对了,0是未配对*/
|
||||
CHECK_STATUS_TWS_SIDE, /*0是单耳,1是左耳,2是右耳*/
|
||||
CHECK_STATUS_TWS_REV,
|
||||
CHECK_STATUS_TWS_REV1,
|
||||
} CHECK_STATUS;
|
||||
#endif
|
||||
@@ -0,0 +1,146 @@
|
||||
|
||||
#ifndef __APP_PRO_LIBS_API_H__
|
||||
#define __APP_PRO_LIBS_API_H__
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
|
||||
///***************************************///
|
||||
//GMA的函数接口汇集,begin
|
||||
int gma_prev_init(void);
|
||||
int gma_opus_voice_mic_send(uint8_t *voice_buf, uint16_t voice_len);
|
||||
/*gma的总初始化函数**/
|
||||
int gma_all_init(void);
|
||||
/*gma的总的释放函数**/
|
||||
int gma_all_exit(void);
|
||||
int gma_connect_success(void);
|
||||
void gma_set_active_ali_para(void *addr);
|
||||
/*TWS的公共地址配置*/
|
||||
void gma_set_sibling_mac_para(void *mac);
|
||||
int gma_ble_adv_enable(u8 enable);
|
||||
int gma_ble_ibeacon_adv(u8 enable);
|
||||
//gma接收的数据处理函数
|
||||
int gma_rx_loop(void);
|
||||
/*gma命令和数据发送处理*/
|
||||
int tm_data_send_process_thread(void);
|
||||
int gma_start_voice_recognition(int flag);
|
||||
|
||||
|
||||
int gma_disconnect(void *addr);
|
||||
|
||||
void gma_message_callback_register(int (*handler)(int id, int opcode, u8 *data, u32 len));
|
||||
void gma_is_tws_master_callback_register(bool (*handler)(void));
|
||||
void gma_tx_resume_register(void (*handler)(void));
|
||||
void gma_rx_resume_register(void (*handler)(void));
|
||||
/*注册电量的获取回调函数*/
|
||||
void gma_get_battery_callback_register(bool (*handler)(u8 battery_type, u8 *value));
|
||||
|
||||
//ota interface
|
||||
int gma_ota_requset_next_packet(void *priv, u32 offset, u16 len);
|
||||
void gma_replay_ota_result(u8 result);
|
||||
|
||||
int tws_ota_get_data_from_sibling(u8 opcode, u8 *data, u8 len);
|
||||
u8 tws_ota_control(int type, ...);
|
||||
void tws_ota_app_event_deal(u8 evevt);
|
||||
//gma apis ends
|
||||
|
||||
///***************************************///
|
||||
//DMA apis begin
|
||||
extern int dueros_process();
|
||||
extern int dma_all_init(void);
|
||||
extern int dma_all_exit(void);
|
||||
extern void dma_message_callback_register(int (*handler)(int id, int opcode, u8 *data, u32 len));
|
||||
extern void dma_check_status_callback_register(int (*handler)(int state_flag));
|
||||
extern void dma_tx_resume_register(void (*handler)(void));
|
||||
extern void dma_rx_resume_register(void (*handler)(void));
|
||||
extern int dma_ble_adv_enable(u8 enable);
|
||||
extern int dma_speech_data_send(u8 *buf, u16 len);
|
||||
extern int dueros_send_process(void);
|
||||
extern void dma_set_product_id_key(void *data);
|
||||
extern int dma_pair_state();
|
||||
extern int dma_start_voice_recognition(int en);
|
||||
extern void dueros_dma_manufacturer_info_init();
|
||||
extern int dma_disconnect(void *addr);
|
||||
extern int dma_update_tws_state_to_lib(int state);
|
||||
extern void dma_get_battery_callback_register(bool (*handler)(u8 battery_type, u8 *value));
|
||||
extern void dma_set_pid(u32 pid);
|
||||
extern int dma_tws_data_deal(u8 *data, int len);
|
||||
|
||||
|
||||
//DMA apis ends
|
||||
|
||||
///***************************************///
|
||||
//TME apis begins
|
||||
extern void tme_get_battery_callback_register(bool (*handler)(u8 battery_type, u8 *value));
|
||||
extern void tme_message_callback_register(int (*handler)(int id, int opcode, u8 *data, u32 len));
|
||||
extern void tme_is_tws_master_callback_register(bool (*handler)(void));
|
||||
extern void tme_tx_resume_register(void (*handler)(void));
|
||||
extern void tme_rx_resume_register(void (*handler)(void));
|
||||
extern int TME_protocol_process();
|
||||
extern int tme_all_init(void);
|
||||
extern int tme_all_exit(void);
|
||||
/* extern u16 tme_speech_data_send(buf, len); */
|
||||
extern int tme_ble_adv_enable(u8 enable);
|
||||
extern int TME_send_packet_process(void);
|
||||
extern void TME_recieve_packet_parse_process(void);
|
||||
extern int tme_connect_success(void);
|
||||
extern int tme_send_voice_data(u8 *buf, u16 len);
|
||||
extern int tme_start_voice_recognition(int flag);
|
||||
extern void tme_set_configuration_info(void *addr);
|
||||
extern int tme_protocol_disconnect(void *priv);
|
||||
extern void tme_set_pid(u32 pid);
|
||||
extern void tme_set_bid(u32 bid);
|
||||
extern u32 TME_request_ota_data(void *priv, u32 offset, u16 len);
|
||||
extern void TME_notify_file_size(u32 file_size);
|
||||
|
||||
//TME api ends
|
||||
|
||||
///***************************************///
|
||||
//MMA api begins
|
||||
extern void mma_all_init(void);
|
||||
extern void mma_all_exit(void);
|
||||
extern void mma_ble_adv_enable(u8 enable);
|
||||
extern int XM_speech_data_send(u8 *buf, u16 len);
|
||||
extern bool XM_protocal_auth_pass(void);
|
||||
extern int mma_start_voice_recognition(int ctrl);
|
||||
extern void mma_message_callback_register(int (*handler)(int id, int opcode, u8 *data, u32 len));
|
||||
extern void mma_is_tws_master_callback_register(bool (*handler)(void));
|
||||
extern void mma_tx_resume_register(void (*handler)(void));
|
||||
extern void mma_rx_resume_register(void (*handler)(void));
|
||||
extern void mma_set_verdor_id(u16 pid);
|
||||
extern void mma_set_product_id(u16 pid);
|
||||
extern void mma_set_local_version(u16 version);
|
||||
extern int mma_protocol_loop_process();
|
||||
extern u32 mma_request_ota_data(void *priv, u32 offset, u16 len);
|
||||
extern int mma_notify_file_size(u32 size);
|
||||
extern u32 mma_report_ota_status(u8 state);
|
||||
extern int mma_disconnect(void *addr);
|
||||
extern void mma_tws_data_deal(u8 *data, int len);
|
||||
extern void mma_get_battery_callback_register(bool (*handler)(u8 battery_type, u8 *value));
|
||||
|
||||
//MMA API END
|
||||
|
||||
///***************************************///
|
||||
//GFPS apis begins
|
||||
extern int gfps_all_init();
|
||||
extern int gfps_all_exit();
|
||||
extern int gfps_disconnect(void *addr);
|
||||
extern int gfps_ble_adv_enable(u8 enable);
|
||||
extern void gfps_set_model_id(uint8_t *model_id);
|
||||
extern void gfps_set_anti_spoofing_public_key(char *public_key);
|
||||
extern void gfps_set_anti_spoofing_private_key(char *private_key);
|
||||
extern void gfps_get_battery_callback_register(bool (*handler)(u8 battery_type, u8 *value));
|
||||
extern void gfps_message_callback_register(int (*handler)(int id, int opcode, u8 *data, u32 len));
|
||||
extern void gfps_set_pair_mode(void *priv);
|
||||
extern void gfps_battery_update(void);
|
||||
extern void gfps_personalized_name_set(u8 *data, u8 len);
|
||||
extern void gfps_is_tws_master_callback_register(bool (*handler)(void));
|
||||
extern int gfps_tws_data_deal(u8 *data, int len);
|
||||
extern int gfps_update_tws_state_to_lib(int state);
|
||||
extern void gfps_factory_reset(void);
|
||||
extern void gfps_set_battery_ui_enable(uint8_t enable);
|
||||
extern void update_channel_map_do_in_irq_flag_set(uint8_t en);
|
||||
//GFPS API END
|
||||
#endif /* __APP_PRO_LIBS_API_H__ */
|
||||
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
#ifndef _APP_BLE_SPP_API_H_
|
||||
#define _APP_BLE_SPP_API_H_
|
||||
|
||||
#include "system/includes.h"
|
||||
#include "btstack/bluetooth.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "list.h"
|
||||
#include "timer.h"
|
||||
#include "spp_user.h"
|
||||
#include "btstack/le/le_common_define.h"
|
||||
#include "btcontroller_modules.h"
|
||||
#include "btstack/btstack_typedef.h"
|
||||
|
||||
/**********************************************
|
||||
adv_type
|
||||
**********************************************/
|
||||
|
||||
#define APP_ADV_IND (0) /*Connectable and scannable undirected advertising*/
|
||||
#define APP_ADV_DIRECT_IND (1) /*Connectable high duty cycle directed advertising */
|
||||
#define APP_ADV_SCAN_IND (2) /*Scannable undirected advertising*/
|
||||
#define APP_ADV_NONCONN_IND (3) /*Non connectable undirected advertising*/
|
||||
#define APP_ADV_DIRECT_IND_LOW (4) /*Connectable low duty cycle directed advertising*/
|
||||
|
||||
|
||||
/**********************************************
|
||||
adv_channel
|
||||
**********************************************/
|
||||
#define APP_ADV_CHANNEL_37 (BIT(0))
|
||||
#define APP_ADV_CHANNEL_38 (BIT(1))
|
||||
#define APP_ADV_CHANNEL_39 (BIT(2))
|
||||
#define APP_ADV_CHANNEL_ALL (BIT(0)|BIT(1)|BIT(2))
|
||||
|
||||
|
||||
extern int app_ble_set_adv_param(void *_hdl, u32 adv_interval, u8 adv_type, u8 adv_channel);
|
||||
/**********************************************
|
||||
ble adv
|
||||
**********************************************/
|
||||
extern int app_ble_adv_data_set(void *_hdl, u8 *data, u8 length);
|
||||
extern int app_ble_rsp_data_set(void *_hdl, u8 *data, u8 length);
|
||||
extern int app_ble_adv_enable(void *_hdl, u8 en);
|
||||
|
||||
// ble adv 5.0
|
||||
extern int app_ble_adv_data_set_5_0(void *_hdl, le_set_ext_adv_data_t *param);
|
||||
extern int app_ble_rsp_data_set_5_0(void *_hdl, le_set_ext_adv_data_t *param);
|
||||
extern int app_ble_set_adv_param_5_0(void *_hdl, le_set_ext_adv_param_t *param);
|
||||
extern int app_ble_adv_enable_5_0(void *_hdl, le_set_ext_adv_en_t *param);
|
||||
|
||||
|
||||
extern int app_ble_set_mac_addr(void *_hdl, void *addr);
|
||||
extern int app_ble_adv_address_type_set(void *_hdl, u8 address_type);
|
||||
extern int app_ble_adv_skip(void *_hdl, u8 skip_cnt);
|
||||
extern int app_ble_adv_state_get(void *_hdl);
|
||||
|
||||
|
||||
/**********************************************
|
||||
ble callback
|
||||
**********************************************/
|
||||
typedef void (*app_ble_packet_handler_t)(void *_hdl, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size);
|
||||
typedef uint16_t (*app_ble_att_read_callback_t)(void *_hdl, uint16_t con_handle, uint16_t attribute_handle, uint16_t offset, uint8_t *buffer, uint16_t buffer_size);
|
||||
typedef int (*app_ble_att_write_callback_t)(void *_hdl, uint16_t con_handle, uint16_t attribute_handle, uint16_t transaction_mode, uint16_t offset, uint8_t *buffer, uint16_t buffer_size);
|
||||
typedef void (*app_ble_sm_event_callback_t)(void *_hdl, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size);
|
||||
|
||||
|
||||
extern int app_ble_att_read_callback_register(void *_hdl, app_ble_att_read_callback_t read_callback);
|
||||
extern int app_ble_att_write_callback_register(void *_hdl, app_ble_att_write_callback_t write_callback);
|
||||
extern int app_ble_att_server_packet_handler_register(void *_hdl, app_ble_packet_handler_t handler);
|
||||
extern int app_ble_hci_event_callback_register(void *_hdl, app_ble_packet_handler_t handler);
|
||||
extern int app_ble_l2cap_packet_handler_register(void *_hdl, app_ble_packet_handler_t handler);
|
||||
extern int app_ble_sm_event_callback_register(void *_hdl, app_ble_sm_event_callback_t callback);
|
||||
extern int app_ble_att_client_status(void *_hdl, u8 *addr);
|
||||
|
||||
|
||||
|
||||
/**********************************************
|
||||
ble module
|
||||
**********************************************/
|
||||
extern int app_ble_init(void);
|
||||
extern int app_ble_exit(void);
|
||||
extern void *app_ble_hdl_alloc(void);
|
||||
extern int app_ble_hdl_free(void *_hdl);
|
||||
extern int app_ble_sm_init(io_capability_t io_type, u8 auth_req, uint8_t min_key_size, u8 security_en);
|
||||
extern int app_ble_profile_set(void *_hdl, const uint8_t *db);
|
||||
extern int app_ble_set_filter_con_handle(void *_hdl, u16 con_handle);
|
||||
extern int app_ble_disconnect(void *_hdl);
|
||||
extern ble_cmd_ret_e app_ble_att_send_data(void *_hdl, u16 att_handle, u8 *data, u16 len, att_op_type_e att_op_type);
|
||||
extern int app_ble_check_hdl_vaild(void *_hdl);
|
||||
extern u16 app_ble_get_hdl_con_handle(void *_hdl);
|
||||
extern int app_ble_att_vaild_len_get(void *_hdl);
|
||||
extern int app_ble_no_profile_flag_set(void *_hdl, u8 flag);
|
||||
extern int app_ble_set_ancs_connection_flag(void *_hdl, u8 flag);
|
||||
|
||||
extern u8 *app_ble_adv_addr_get(void *_hdl);
|
||||
extern u8 *app_ble_local_mac_addr_get(void *_hdl);
|
||||
extern u8 *app_ble_remote_mac_addr_get(void *_hdl);
|
||||
extern int app_ble_common_core_data_size(void);
|
||||
extern int app_ble_common_core_data_get(u8 *data);
|
||||
extern int app_ble_common_core_data_set(u8 *data);
|
||||
extern int app_ble_hdl_core_data_size(void);
|
||||
extern int app_ble_hdl_core_data_get(void *_hdl, u8 *data);
|
||||
extern int app_ble_hdl_core_data_set(void *_hdl, u8 *data);
|
||||
extern int app_ble_adv_handle_get(void *_hdl);
|
||||
// 如果BLE句柄设置了UUID,可以直接一次性同步所有设置了UUID的BLE句柄
|
||||
extern int app_ble_hdl_uuid_set(void *_hdl, u32 uuid);
|
||||
extern int app_ble_all_sync_data_size(void);
|
||||
extern int app_ble_all_sync_data_get(u8 *sync_buf);
|
||||
extern int app_ble_all_sync_data_set(u8 *sync_buf, int buf_len);
|
||||
|
||||
|
||||
/**********************************************
|
||||
spp module
|
||||
**********************************************/
|
||||
extern int app_spp_init(void);
|
||||
extern int app_spp_exit(void);
|
||||
extern void *app_spp_hdl_alloc(u8 local_id);
|
||||
extern int app_spp_hdl_free(void *_hdl);
|
||||
extern int app_spp_data_send(void *_hdl, u8 *buf, u16 len);
|
||||
extern int app_spp_set_filter_remote_addr(void *_hdl, u8 *remote_addr);
|
||||
extern int app_spp_clean_filter_remote_addr(void *_hdl);
|
||||
extern int app_spp_disconnect(void *_hdl);
|
||||
extern int app_spp_check_hdl_vaild(void *_hdl);
|
||||
extern u8 *app_spp_get_hdl_remote_addr(void *_hdl);
|
||||
extern int app_spp_hdl_core_data_size(void);
|
||||
extern int app_spp_hdl_core_data_get(void *_hdl, u8 *data);
|
||||
extern int app_spp_hdl_core_data_set(void *_hdl, u8 *data);
|
||||
|
||||
// 如果SPP句柄设置了UUID,可以直接一次性同步所有设置了UUID的BLE句柄
|
||||
extern int app_spp_hdl_uuid_set(void *_hdl, u32 uuid);
|
||||
extern int app_spp_all_sync_data_size(void);
|
||||
extern int app_spp_all_sync_data_get(u8 *sync_buf);
|
||||
extern int app_spp_all_sync_data_set(u8 *sync_buf, int buf_len);
|
||||
|
||||
|
||||
/**********************************************
|
||||
spp callback
|
||||
**********************************************/
|
||||
typedef void (*app_spp_recieve_callback_t)(void *hdl, void *remote_addr, u8 *buf, u16 len);
|
||||
typedef void (*app_spp_state_callback_t)(void *hdl, void *remote_addr, u8 state);
|
||||
typedef void (*app_spp_send_wakeup_callback_t)(void *hdl);
|
||||
|
||||
extern int app_spp_recieve_callback_register(void *_hdl, app_spp_recieve_callback_t callback);
|
||||
extern int app_spp_state_callback_register(void *_hdl, app_spp_state_callback_t callback);
|
||||
extern int app_spp_wakeup_callback_register(void *_hdl, app_spp_send_wakeup_callback_t callback);
|
||||
|
||||
extern int app_ble_att_handle_enable(void *_hdl, uint16_t start_handle, uint16_t end_handle, uint8_t enable);
|
||||
extern int app_ble_att_handle_clear(void *_hdl);
|
||||
|
||||
|
||||
/**********************************************
|
||||
common
|
||||
**********************************************/
|
||||
#define APP_BLE_CONNECTION_COMPLETE (0x01)
|
||||
#define APP_BLE_DISCONNECTION_COMPLETE (0x02)
|
||||
#define APP_SPP_CONNECTION_COMPLETE (0x81)
|
||||
#define APP_SPP_DISCONNECTION_COMPLETE (0x82)
|
||||
typedef void (*app_state_update_callback_t)(void *_hdl, uint8_t state, uint8_t *packet, uint16_t size);
|
||||
extern int app_ble_state_update_callback_regitster(app_state_update_callback_t callback);
|
||||
extern int app_spp_state_update_callback_regitster(app_state_update_callback_t callback);
|
||||
|
||||
#endif // _APP_BLE_SPP_API_H_
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
#ifndef __BLE_USER_H__
|
||||
#define __BLE_USER_H__
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
typedef enum {
|
||||
BLE_ST_NULL = 0,
|
||||
BLE_ST_INIT_OK, //协议栈初始化ok
|
||||
BLE_ST_IDLE, //关闭广播或扫描状态
|
||||
BLE_ST_CONNECT, //链路刚连上
|
||||
BLE_ST_SEND_DISCONN, //发送断开命令,等待链路断开
|
||||
BLE_ST_DISCONN, //链路断开状态
|
||||
BLE_ST_CONNECT_FAIL, //连接失败
|
||||
BLE_ST_CONNECTION_UPDATE_OK,//更新连接参数完成
|
||||
|
||||
BLE_ST_ADV = 0x20, //设备处于广播状态
|
||||
BLE_ST_NOTIFY_IDICATE, //设备已连上,允许发数(已被主机使能通知)
|
||||
|
||||
BLE_ST_SCAN = 0x40, //设备处于搜索状态
|
||||
BLE_ST_CREATE_CONN, //发起设备连接
|
||||
BLE_ST_SEND_CREATE_CONN_CANNEL, //取消发起设备连接
|
||||
BLE_ST_SEARCH_COMPLETE, //链路连上,已搜索完profile,可以发送数据操作
|
||||
|
||||
BLE_ST_SEND_STACK_EXIT = 0x60, //发送退出协议栈命令,等待完成
|
||||
BLE_ST_STACK_EXIT_COMPLETE, //协议栈退出成功
|
||||
|
||||
} ble_state_e;
|
||||
|
||||
enum {
|
||||
APP_BLE_NO_ERROR = 0,
|
||||
APP_BLE_BUFF_FULL, //buffer 满,会丢弃当前发送的数据包
|
||||
APP_BLE_BUFF_ERROR, //
|
||||
APP_BLE_OPERATION_ERROR, //操作错误
|
||||
APP_BLE_IS_DISCONN, //链路已断开
|
||||
APP_BLE_NO_WRITE_CCC, //主机没有 write Client Characteristic Configuration
|
||||
};
|
||||
|
||||
struct BLE_CONFIG_VAR {
|
||||
ble_state_e JL_ble_status;
|
||||
struct ble_server_operation_t *rcsp_ble;
|
||||
};
|
||||
|
||||
#endif//__BLE_USER_H__
|
||||
@@ -0,0 +1,14 @@
|
||||
#ifndef __SPP_CONFIG_H__
|
||||
#define __SPP_CONFIG_H__
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
bool bt_3th_spp_fw_ready(void *priv);
|
||||
s32 bt_3th_spp_send(void *priv, void *data, u16 len);
|
||||
void bt_3th_spp_callback_set(void (*resume)(void), void (*recieve)(void *, void *, u16), void (*status)(u8));
|
||||
u8 bt_3th_get_jl_spp_status(void);
|
||||
int bt_3th_spp_data_send(void *priv, u8 *buf, u16 len);
|
||||
void bt_3th_spp_init(void);
|
||||
void bt_3th_spp_get_operation_table(void);
|
||||
|
||||
#endif//__SPP_CONFIG_H__
|
||||
@@ -0,0 +1,37 @@
|
||||
#ifndef __SPP_USER_H__
|
||||
#define __SPP_USER_H__
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
extern void (*spp_state_cbk)(u8 state);
|
||||
extern void (*spp_recieve_cbk)(void *priv, u8 *buf, u16 len);
|
||||
extern void user_spp_data_handler_in_lib(u8 packet_type, u16 ch, u8 *packet, u16 size);
|
||||
|
||||
struct spp_operation_t {
|
||||
int(*disconnect)(void *priv);
|
||||
int(*send_data)(void *priv, void *buf, u16 len);
|
||||
int(*regist_wakeup_send)(void *priv, void *cbk);
|
||||
int(*regist_recieve_cbk)(void *priv, void *cbk);
|
||||
int(*regist_state_cbk)(void *priv, void *cbk);
|
||||
int(*busy_state)(void);
|
||||
};
|
||||
|
||||
enum {
|
||||
SPP_USER_ERR_NONE = 0x0,
|
||||
SPP_USER_ERR_SEND_BUFF_BUSY,
|
||||
SPP_USER_ERR_SEND_OVER_LIMIT,
|
||||
SPP_USER_ERR_SEND_FAIL,
|
||||
};
|
||||
|
||||
enum {
|
||||
SPP_USER_ST_NULL = 0x0,
|
||||
SPP_USER_ST_CONNECT,
|
||||
SPP_USER_ST_DISCONN,
|
||||
SPP_USER_ST_WAIT_DISC,
|
||||
SPP_USER_ST_CONNECT_OTA,
|
||||
SPP_USER_ST_DISCONN_OTA,
|
||||
};
|
||||
|
||||
void spp_get_operation_table(struct spp_operation_t **interface_pt);
|
||||
|
||||
#endif//__SPP_USER_H__
|
||||
+261
@@ -0,0 +1,261 @@
|
||||
// binary representation
|
||||
// attribute size in bytes (16), flags(16), handle (16), uuid (16/128), value(...)
|
||||
|
||||
#ifndef _FMNA_API_H
|
||||
#define _FMNA_API_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "btstack/bluetooth.h"
|
||||
|
||||
#define ret_code_t int
|
||||
#define fmna_ret_code_t int
|
||||
|
||||
//ret_code & fmna_ret_code_t return,list result
|
||||
#define FMY_SUCCESS 0 ///< Successful command
|
||||
#define FMY_ERROR_INTERNAL 1 ///< Internal Error
|
||||
#define FMY_ERROR_INVALID_STATE 2 ///< Invalid state, operation disallowed in this state
|
||||
#define FMY_ERROR_INVALID_LENGTH 3 ///< Invalid Length
|
||||
#define FMY_ERROR_INVALID_DATA 4 ///< Invalid Data
|
||||
#define FMY_ERROR_NULL 5 ///< Null Pointer
|
||||
#define FMY_ERROR_NO_MEM 6 ///< No memory
|
||||
#define FMY_ERROR_WRITE_FLASH 7 ///<
|
||||
|
||||
typedef enum {
|
||||
FMNA_SM_BOOT = 0,
|
||||
FMNA_SM_PAIR,
|
||||
FMNA_SM_SEPARATED,
|
||||
FMNA_SM_NEARBY,
|
||||
FMNA_SM_CONNECTING,
|
||||
FMNA_SM_FMNA_PAIR,
|
||||
FMNA_SM_FMNA_PAIR_COMPLETE,
|
||||
FMNA_SM_CONNECTED,
|
||||
FMNA_SM_DISCONNECTING,
|
||||
FMNA_SM_NOCHANGE,
|
||||
FMNA_SM_UNPAIR,
|
||||
} FMNA_SM_State_t;
|
||||
|
||||
typedef enum {
|
||||
FMNA_SM_EVENT_BOOT = 0,
|
||||
FMNA_SM_EVENT_NEARBY_SEPARATED_TIMEOUT,
|
||||
FMNA_SM_EVENT_KEY_ROTATE,
|
||||
FMNA_SM_EVENT_BONDED,
|
||||
FMNA_SM_EVENT_UNBONDED,
|
||||
FMNA_SM_EVENT_CONNECTED,
|
||||
FMNA_SM_EVENT_DISCONNECTED,
|
||||
FMNA_SM_EVENT_NEARBY,
|
||||
FMNA_SM_EVENT_SEPARATED,
|
||||
FMNA_SM_EVENT_PAIR,
|
||||
FMNA_SM_EVENT_SOUND_START,
|
||||
FMNA_SM_EVENT_SOUND_STOP,
|
||||
FMNA_SM_EVENT_SOUND_COMPLETE,
|
||||
FMNA_SM_EVENT_LOST_UT_SPEAKER_START,
|
||||
FMNA_SM_EVENT_FMNA_PAIRING_INITIATE,
|
||||
FMNA_SM_EVENT_FMNA_PAIRING_FINALIZE,
|
||||
FMNA_SM_EVENT_FMNA_PAIRING_COMPLETE,
|
||||
FMNA_SM_EVENT_FMNA_PAIRING_MFITOKEN,
|
||||
FMNA_SM_EVENT_MOTION_DETECTED,
|
||||
FMNA_SM_EVENT_DEBUG_RESET_INTO_SEPARATED,
|
||||
|
||||
FMNA_SM_EVENT_CALL_FUNC_HANDLER = 0x80,
|
||||
} FMNA_SM_Event_t;
|
||||
|
||||
typedef enum {
|
||||
BAT_STATE_FULL = 0,
|
||||
BAT_STATE_MEDIUM,
|
||||
BAT_STATE_LOW,
|
||||
BAT_STATE_CRITICALLY_LOW,//5.1.4,stop advertising
|
||||
} fmna_bat_state_level_t;
|
||||
|
||||
typedef enum {
|
||||
FMNA_ADV_MODE_FAST = 0,
|
||||
FMNA_ADV_MODE_SLOW,
|
||||
} FMNA_ADV_Mode_t;
|
||||
|
||||
typedef enum {
|
||||
FMNA_SOUND_INIT = 0,
|
||||
FMNA_SOUND_START,
|
||||
FMNA_SOUND_STOP,
|
||||
} FMNA_SOUND_OP_t;
|
||||
|
||||
|
||||
enum {
|
||||
FMNA_OTA_OP_SUCC = 0,
|
||||
FMNA_OTA_OP_NO_SPACE,
|
||||
FMNA_OTA_OP_INIT_FAIL,
|
||||
FMNA_OTA_OP_WRITE_FAIL,
|
||||
FMNA_OTA_OP_CRC_FAIL,
|
||||
FMNA_OTA_OP_MALLOC_FAIL,
|
||||
FMNA_OTA_OP_PKT_NUM_ERR,
|
||||
FMNA_OTA_OP_LEN_ERR,
|
||||
FMNA_OTA_OP_OTHER_ERR,
|
||||
};
|
||||
|
||||
|
||||
typedef enum {
|
||||
FMNA_UARP_OTA_REQ = 1,
|
||||
FMNA_UARP_OTA_FILE_INFO,
|
||||
FMNA_UARP_OTA_DATA,
|
||||
FMNA_UARP_OTA_END,
|
||||
FMNA_UARP_OTA_DISCONNECT,
|
||||
} uarp_cmd_type_t;
|
||||
|
||||
/*
|
||||
0 = Powered
|
||||
1 = Non-rechargeable battery
|
||||
2 = Rechargeable battery
|
||||
*/
|
||||
typedef enum {
|
||||
FMNA_BAT_POWERED = 0,
|
||||
FMNA_BAT_NON_RECHARGEABLE,
|
||||
FMNA_BAT_RECHARGEABLE,
|
||||
} FMNA_battery_level_t;
|
||||
|
||||
struct fmna_event {
|
||||
u8 event;
|
||||
u8 args[3];
|
||||
u32 value;
|
||||
void *event_data;
|
||||
void *handler;
|
||||
};
|
||||
|
||||
//Accessory category
|
||||
#define FMY_CATEGORY_Finder 1
|
||||
#define FMY_CATEGORY_Other 128
|
||||
#define FMY_CATEGORY_Luggage 129
|
||||
#define FMY_CATEGORY_Backpack 130
|
||||
#define FMY_CATEGORY_Jacket 131
|
||||
#define FMY_CATEGORY_Coat 132
|
||||
#define FMY_CATEGORY_Shoes 133
|
||||
#define FMY_CATEGORY_Bike 134
|
||||
#define FMY_CATEGORY_Scooter 135
|
||||
#define FMY_CATEGORY_Stroller 136
|
||||
#define FMY_CATEGORY_Wheelchair 137
|
||||
#define FMY_CATEGORY_Boat 138
|
||||
#define FMY_CATEGORY_Helmet 139
|
||||
#define FMY_CATEGORY_Skateboard 140
|
||||
#define FMY_CATEGORY_Skis 141
|
||||
#define FMY_CATEGORY_Snowboard 142
|
||||
#define FMY_CATEGORY_Surfboard 143
|
||||
#define FMY_CATEGORY_Camera 144
|
||||
#define FMY_CATEGORY_Laptop 145
|
||||
#define FMY_CATEGORY_Watch 146
|
||||
#define FMY_CATEGORY_Flash_drive 147
|
||||
#define FMY_CATEGORY_Drone 148
|
||||
#define FMY_CATEGORY_Headphones 149
|
||||
#define FMY_CATEGORY_Earphones 150
|
||||
#define FMY_CATEGORY_Inhaler 151
|
||||
#define FMY_CATEGORY_Sunglasses 152
|
||||
#define FMY_CATEGORY_Handbag 153
|
||||
#define FMY_CATEGORY_Wallet 154
|
||||
#define FMY_CATEGORY_Umbrella 155
|
||||
#define FMY_CATEGORY_Water_bottle 156
|
||||
#define FMY_CATEGORY_Tools_or_tool_box 157
|
||||
#define FMY_CATEGORY_Keys 158
|
||||
#define FMY_CATEGORY_Smart_case 159
|
||||
#define FMY_CATEGORY_Remote 160
|
||||
#define FMY_CATEGORY_Hat 161
|
||||
#define FMY_CATEGORY_Motorbike 162
|
||||
#define FMY_CATEGORY_Consumer_electronic_device 163
|
||||
#define FMY_CATEGORY_Apparel 164
|
||||
#define FMY_CATEGORY_Transportation_device 165
|
||||
#define FMY_CATEGORY_Sports_equipment 166
|
||||
#define FMY_CATEGORY_Personal_item 167
|
||||
|
||||
//Accessory capability
|
||||
#define FMY_CAPABILITY_SUPPORTS_PLAY_SOUND BIT(0) //Supports play sound
|
||||
#define FMY_CAPABILITY_SUPPORTS_MOTION_DETECTOR_UT BIT(1) //Supports motion detector UT
|
||||
#define FMY_CAPABILITY_SUPPORTS_SN_LOOKUP_BY_NFC BIT(2) //Supports serial number lookup by NFC
|
||||
#define FMY_CAPABILITY_SUPPORTS_SN_LOOKUP_BY_BLE BIT(3) //Supports serial number lookup by BLE
|
||||
#define FMY_CAPABILITY_SUPPORTS_FW_UPDATE_SERVICE BIT(4) //Supports firmware update service
|
||||
|
||||
//uuid,mac type
|
||||
#define STATIC_ADV_ADDR_TYPE_MASK (0x03 << 6)
|
||||
#define FMY_UUID_SERVICE 0xFD44
|
||||
#define APPLE_VENDOR_ID 0x004C
|
||||
|
||||
typedef struct {
|
||||
uint16_t pairing_control_point_handle;
|
||||
uint16_t owner_cfg_control_point_handle;
|
||||
uint16_t non_owner_control_point_handle;
|
||||
uint16_t owner_info_porint_handle;
|
||||
uint16_t debug_control_point_handle;
|
||||
uint16_t firmware_update_handle;
|
||||
} fmna_att_handle_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
int (*evnet_post_msg)(u8 priv_event, void *evt_data, u32 value, void *handler);
|
||||
int (*set_adv_data)(uint8_t fmna_state, uint8_t *fmna_payload, uint8_t size);
|
||||
int (*set_adv_mode)(uint8_t mode);
|
||||
int (*set_adv_enable)(uint8_t enable);
|
||||
int (*get_mac)(uint8_t *mac);
|
||||
int (*set_mac)(uint8_t *mac);
|
||||
int (*att_send_data)(uint16_t conn_handle, uint16_t att_handle, uint8_t *data, uint16_t len, att_op_type_e op_type);
|
||||
int (*get_battery_level)(void);
|
||||
int (*call_disconnect)(uint16_t conn_handle, uint8_t reason);
|
||||
int (*sound_control)(FMNA_SOUND_OP_t op);
|
||||
int (*uarp_ota_process)(uarp_cmd_type_t cmd_type, uint8_t *recv_data, uint32_t recv_len);
|
||||
int (*sensor_init)(void);
|
||||
int (*sensor_deinit)(void);
|
||||
bool (*motion_deteted)(void);
|
||||
uint16_t (*state_callback)(FMNA_SM_State_t fmy_state, const char *state_string);
|
||||
bool (*check_capability)(u8 cap);
|
||||
} fmna_app_api_t;
|
||||
|
||||
typedef struct {
|
||||
//读取信息时,指针为0则不获取对应项信息
|
||||
uint8_t *serial_number;//16byte
|
||||
uint8_t *uuid;//16byte
|
||||
uint8_t *token;//1024byte
|
||||
} fmna_input_cfg_t;
|
||||
//--------------------------------------------------------------------------------
|
||||
void fmna_gatt_set_att_handle_table(const fmna_att_handle_t *att_table);
|
||||
void fmna_gatt_platform_connect(uint16_t conn_handle);
|
||||
void fmna_state_machine_event_handle(void *event);
|
||||
fmna_ret_code_t fmna_gatt_config_char_write_handler(uint16_t conn_handle, uint16_t uuid, uint16_t length, uint8_t const *data);
|
||||
fmna_ret_code_t fmna_gatt_pairing_char_authorized_write_handler(uint16_t conn_handle, uint16_t uuid, uint16_t length, uint8_t const *data);
|
||||
fmna_ret_code_t fmna_gatt_nonown_char_write_handler(uint16_t conn_handle, uint16_t uuid, uint16_t length, uint8_t const *data);
|
||||
fmna_ret_code_t fmna_gatt_paired_owner_char_write_handler(uint16_t conn_handle, uint16_t uuid, uint16_t length, uint8_t const *data);
|
||||
fmna_ret_code_t fmna_gatt_debug_char_write_handler(uint16_t conn_handle, uint16_t uuid, uint16_t length, uint8_t const *data);
|
||||
fmna_ret_code_t fmna_gatt_uarp_char_write_handler(uint16_t conn_handle, uint16_t uuid, uint16_t length, uint8_t const *data);
|
||||
void fmna_debug_control_point_rx_handler(uint16_t conn_handle, uint8_t const *data, uint16_t length) ;
|
||||
void fmna_save_mac_vm_id(uint16_t vm_id);
|
||||
void fmna_set_app_api(fmna_app_api_t *api_table);
|
||||
bool fmna_connection_is_fmna_paired(void);
|
||||
uint8_t fmna_get_current_state(void);
|
||||
void fmna_gatt_set_mtu_size(uint16_t conn_handle, uint16_t mtu_size);
|
||||
const uint8_t *fmna_get_product_data(void);
|
||||
uint32_t fmna_version_get_fw_version(void);
|
||||
uint8_t *fmna_version_get_network_version(void);
|
||||
void fmna_set_accessory_category(const uint8_t *accessory_category);
|
||||
const uint8_t *fmna_get_accessory_category(void);
|
||||
uint32_t fmna_pm_peer_count(void);
|
||||
void fmna_version_init(uint16_t major_number, uint8_t minor_number, uint8_t revision_number);
|
||||
void fmna_paired_serialnumber_lookup_enable(uint8_t enable);
|
||||
int fmna_get_paired_serialnumber_lookup_state(void);
|
||||
|
||||
void fmna_connection_connected_handler(uint16_t conn_handle, uint16_t conn_interval);
|
||||
void fmna_connection_conn_param_update_handler(uint16_t conn_handle, uint16_t conn_interval);
|
||||
void fmna_connection_disconnected_handler(uint16_t conn_handle, uint8_t disconnect_reason);
|
||||
void fmna_connection_encryption_change_complete(uint16_t conn_handle, bool is_sucess);
|
||||
int fmna_connection_pair_request_check(uint16_t conn_handle);
|
||||
void fmna_connection_set_sys_max_connections(uint8_t max_connections);
|
||||
void fmna_config_user_vm_rang(uint16_t vm_start_id, uint16_t vm_end_id);
|
||||
void fmna_connection_disconnect_all(void);
|
||||
void fmna_gatt_platform_recieve_indication_response(uint16_t conn_handle, uint16_t att_handle);
|
||||
void fmna_plaform_reset_config(void);
|
||||
void fmna_set_product_data(const uint8_t *data);
|
||||
|
||||
int fmna_Base64Decode(char *inStr, char *outHex, int outBufLen);
|
||||
int uuid_str_to_hex(const char *uuid_str, uint8_t *out_buf);
|
||||
|
||||
void fmna_user_cfg_set_patch(const char *path);
|
||||
ret_code_t fmna_user_cfg_open(void);
|
||||
ret_code_t fmna_user_cfg_close(void);
|
||||
ret_code_t fmna_user_cfg_write(fmna_input_cfg_t *input_cfg);
|
||||
ret_code_t fmna_user_cfg_read(fmna_input_cfg_t *cfg);
|
||||
ret_code_t fmna_set_crypto_enc_key_config(const char *server_enc_key, const char *signature_vf_key);
|
||||
bool fmna_user_cfg_is_exist(void);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
|
||||
#ifndef _JL_RCSP_LIB_API_H_
|
||||
#define _JL_RCSP_LIB_API_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "uart.h"
|
||||
|
||||
#define USE_LITTLE_ENDIAN 0
|
||||
#define USE_BIG_ENDIAN 1
|
||||
|
||||
#define USE_ENDIAN_TYPE USE_LITTLE_ENDIAN
|
||||
|
||||
|
||||
#define AI_LICENCE_LEN 16
|
||||
|
||||
enum {
|
||||
TULING = 0,
|
||||
DEEPBRAIN,
|
||||
};
|
||||
|
||||
#pragma pack(1)
|
||||
struct _AI_platform {
|
||||
u8 platform;
|
||||
u8 license[AI_LICENCE_LEN];
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct _rcsp_auth_hdl {
|
||||
u16 ble_con_handle;
|
||||
u8 spp_remote_addr[6];
|
||||
bool rcsp_auth_flag; // 是否认证成功
|
||||
} JL_rcsp_auth_hdl;
|
||||
#pragma pack()
|
||||
|
||||
u16 app_htons(u16 n);
|
||||
u16 app_ntohs(u16 n);
|
||||
|
||||
u32 app_htonl(u32 n);
|
||||
u32 app_ntohl(u32 n);
|
||||
|
||||
void JL_rcsp_auth_init(int (*send)(u16, u8 *, u8 *, u16, uint16_t, u8), u8 *link_key, u8 *addr);
|
||||
void JL_rcsp_auth_reset(void);
|
||||
|
||||
/**
|
||||
* @brief 判断buf是否是rcsp协议头
|
||||
*
|
||||
* @param buf
|
||||
* @param len
|
||||
*/
|
||||
bool rcsp_protocol_head_check(u8 *buf, u16 len);
|
||||
|
||||
/**
|
||||
* @brief 设备断开ble/spp时调用,重置重置认证情况
|
||||
*
|
||||
* @param ble_con_handle ble的con_handle句柄
|
||||
* @param spp_remote_addr spp:mac_addr
|
||||
*/
|
||||
void JL_rcsp_reset_bthdl_auth(u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
|
||||
/**
|
||||
* @brief 获取设备是否rcsp验证
|
||||
*
|
||||
* @param ble_con_handle ble的con_handle句柄
|
||||
* @param spp_remote_addr spp:mac_addr
|
||||
*/
|
||||
bool JL_rcsp_get_auth_flag_with_bthdl(u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
|
||||
u8 JL_rcsp_get_auth_flag(void);
|
||||
void JL_rcsp_set_auth_flag(u8 auth_flag);
|
||||
|
||||
/**
|
||||
* @brief rcsp验证函数
|
||||
*
|
||||
* @param ble_con_handle ble的con_handle句柄
|
||||
* @param spp_remote_addr spp:mac_addr
|
||||
* @param buffer 手机发过来的验证数据
|
||||
* @param len buffer 's length
|
||||
*/
|
||||
void JL_rcsp_auth_recieve(u16 ble_con_handle, u8 *spp_remote_addr, u8 *buffer, u16 len);
|
||||
|
||||
u8 get_rcsp_version(void);
|
||||
|
||||
/**
|
||||
* @brief 设置设备rcsp验证情况
|
||||
*
|
||||
* @param hdl 第一个连接设备的认证情况
|
||||
* @param hdl1 第二个连接设备的认证情况
|
||||
*/
|
||||
void JL_rcsp_set_auth_hdl(JL_rcsp_auth_hdl *hdl, JL_rcsp_auth_hdl *hdl1);
|
||||
|
||||
/**
|
||||
* @brief 获取设备是否rcsp验证
|
||||
*
|
||||
* @param hdl 第一个连接设备的认证情况
|
||||
* @param hdl1 第二个连接设备的认证情况
|
||||
*/
|
||||
void JL_rcsp_get_auth_hdl(JL_rcsp_auth_hdl *hdl, JL_rcsp_auth_hdl *hdl1);
|
||||
|
||||
/**
|
||||
* @brief 设备连接认证/断开连接后lib会调用这个函数,
|
||||
* 应用层需要调用JL_rcsp_get_auth_hdl获取手机的认证状态,
|
||||
* 并把手机的认证情况同步到tws对端
|
||||
*/
|
||||
void JL_rcsp_auth_flag_tws_sync(void);
|
||||
|
||||
#endif //_JL_RCSP_LIB_H_
|
||||
@@ -0,0 +1,15 @@
|
||||
#ifndef __JL_RCSP_ATTR_H__
|
||||
#define __JL_RCSP_ATTR_H__
|
||||
#include "typedef.h"
|
||||
|
||||
typedef u32(*attr_get_func)(void *priv, u8 attr, u8 *buf, u16 buf_size, u32 offset);
|
||||
typedef void (*attr_set_func)(void *priv, u8 attr, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
|
||||
u16 add_one_attr_huge(u8 *buf, u16 max_len, u8 offset, u8 type, u8 *data, u16 size);
|
||||
u8 add_one_attr(u8 *buf, u16 max_len, u8 offset, u8 type, u8 *data, u8 size);
|
||||
u8 add_one_attr_ex(u8 *buf, u16 max_len, u8 offset, u8 type, u8 *data, u8 size, u8 att_size);
|
||||
u8 add_one_attr_continue(u8 *buf, u16 max_len, u8 offset, u8 type, u8 *data, u8 size);
|
||||
u32 attr_get(void *priv, u8 *buf, u16 buf_size, const attr_get_func *func_tab, u8 attr_max, u32 mask);
|
||||
void attr_set(void *priv, u8 *data, u16 len, const attr_set_func *func_tab, u8 attr_max, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
|
||||
#endif//__JL_RCSP_ATTR_H__
|
||||
@@ -0,0 +1,122 @@
|
||||
#ifndef __JL_PACKET_H__
|
||||
#define __JL_PACKET_H__
|
||||
|
||||
#include "typedef.h"
|
||||
#include "generic/list.h"
|
||||
|
||||
#define READ_BIG_U16(a) ((*((u8*)(a)) <<8) + *((u8*)(a)+1))
|
||||
#define READ_BIG_U32(a) ((*((u8*)(a)) <<24) + (*((u8*)(a)+1)<<16) + (*((u8*)(a)+2)<<8) + *((u8*)(a)+3))
|
||||
|
||||
#define READ_LIT_U16(a) (*((u8*)(a)) + (*((u8*)(a)+1)<<8))
|
||||
#define READ_LIT_U32(a) (*((u8*)(a)) + (*((u8*)(a)+1)<<8) + (*((u8*)(a)+2)<<16) + (*((u8*)(a)+3)<<24))
|
||||
|
||||
|
||||
#define WRITE_BIG_U16(a,src) {*((u8*)(a)+0) = (u8)(src>>8); *((u8*)(a)+1) = (u8)(src&0xff); }
|
||||
#define WRITE_BIG_U32(a,src) {*((u8*)(a)+0) = (u8)((src)>>24); *((u8*)(a)+1) = (u8)(((src)>>16)&0xff);*((u8*)(a)+2) = (u8)(((src)>>8)&0xff);*((u8*)(a)+3) = (u8)((src)&0xff);}
|
||||
|
||||
#define WRITE_LIT_U16(a,src) {*((u8*)(a)+1) = (u8)(src>>8); *((u8*)(a)+0) = (u8)(src&0xff); }
|
||||
#define WRITE_LIT_U32(a,src) {*((u8*)(a)+3) = (u8)((src)>>24); *((u8*)(a)+2) = (u8)(((src)>>16)&0xff);*((u8*)(a)+1) = (u8)(((src)>>8)&0xff);*((u8*)(a)+0) = (u8)((src)&0xff);}
|
||||
|
||||
|
||||
#pragma pack(1)
|
||||
typedef union __HEAD_BIT {
|
||||
struct {
|
||||
u16 _OpCode: 8; //OpCode val
|
||||
u16 _app_type : 3; //app_type
|
||||
u16 _unsed : 3; //unsed
|
||||
u16 _resp : 1; //request for response
|
||||
u16 _type : 1; //command or response
|
||||
} _i;
|
||||
u16 _t;
|
||||
} HEAD_BIT;
|
||||
|
||||
struct __JL_PACKET {
|
||||
u8 tag[3];
|
||||
HEAD_BIT head;
|
||||
u16 length;
|
||||
u8 data[0];
|
||||
};
|
||||
#pragma pack()
|
||||
typedef struct __JL_PACKET JL_PACKET;
|
||||
|
||||
typedef struct __JL_QUEUE {
|
||||
struct list_head head;
|
||||
u32 total_size;
|
||||
u32 max_size;
|
||||
} JL_QUEUE;
|
||||
|
||||
typedef struct __JL_PACKET_ENTRY {
|
||||
struct list_head entry;
|
||||
u16 packet_size;
|
||||
u8 packet[0];
|
||||
} JL_PACKET_ENTRY;
|
||||
|
||||
struct __JL_PACKET_CONTROL {
|
||||
JL_PACKET packet;
|
||||
JL_QUEUE queue;
|
||||
u8 *packet_buf;
|
||||
u32 packet_offset;
|
||||
u32 packet_remain;
|
||||
};
|
||||
typedef struct __JL_PACKET_CONTROL JL_PACKET_CONTROL;
|
||||
|
||||
#define JL_PACK_START_TAG0 (0xfe)
|
||||
#define JL_PACK_START_TAG1 (0xdc)
|
||||
#define JL_PACK_START_TAG2 (0xba)
|
||||
#define JL_PACK_END_TAG (0xef)
|
||||
#define JL_ONE_PACKET_LEN(n) (sizeof(JL_PACKET) + n + 1)
|
||||
|
||||
#ifdef JL_RCSP_UBOOT_LIB
|
||||
#define JL_MTU_RESV (540L)
|
||||
#define JL_MTU_SEND (128L)
|
||||
#define JL_RECIEVE_BUF_SIZE ((JL_MTU_RESV + sizeof(JL_PACKET))*2)
|
||||
#define JL_CMD_POOL_SIZE (JL_MTU_SEND)
|
||||
#define JL_RESP_POOL_SIZE (JL_MTU_SEND*2)
|
||||
#define JL_WAIT_RESP_POOL_SIZE (JL_MTU_SEND)
|
||||
#else
|
||||
#define JL_MTU_RESV (540L)
|
||||
#define JL_MTU_SEND (128L)
|
||||
#define JL_RECIEVE_BUF_SIZE (JL_MTU_RESV + sizeof(JL_PACKET) + 128)
|
||||
#define JL_CMD_POOL_SIZE (JL_MTU_SEND*4)
|
||||
#define JL_RESP_POOL_SIZE (JL_MTU_SEND*2)
|
||||
#define JL_WAIT_RESP_POOL_SIZE (JL_MTU_SEND*2)
|
||||
#endif
|
||||
|
||||
void set_jl_rcsp_recieve_buf_size(u16 size);
|
||||
u16 rcsp_packet_write_alloc_len(void);
|
||||
|
||||
u32 rcsp_packet_need_buf_size(void);
|
||||
u32 rcsp_packet_buf_init(u8 *buf, u32 len, u8 *buf1, u32 len1);
|
||||
|
||||
u16 JL_packet_get_rx_max_mtu(void);
|
||||
u16 JL_packet_get_tx_max_mtu(void);
|
||||
u16 JL_packet_set_mtu(u16 mtu);
|
||||
void JL_packet_recieve(void *buf, u16 len, u8 buf_index);
|
||||
void JL_packet_clear_all_data(void);
|
||||
bool JL_packet_find(u8 **r_buf, JL_PACKET **packet, u8 buf_index);
|
||||
void JL_packet_init(void);
|
||||
void JL_packet_clear(void);
|
||||
|
||||
void JL_packet_packing(
|
||||
JL_PACKET *packet,
|
||||
u8 OpCode,
|
||||
u8 type,
|
||||
u8 request_rsp,
|
||||
u8 *extra_param,
|
||||
u16 extra_len,
|
||||
u8 *data,
|
||||
u16 len);
|
||||
|
||||
void set_jl_mtu_resv(u16 jl_mtu_resv_var);
|
||||
void set_jl_mtu_send(u16 jl_mtu_send_var);
|
||||
|
||||
extern u16 jl_mtu_resv;
|
||||
extern u16 jl_mtu_send;
|
||||
extern u16 jl_recieve_buf_size;
|
||||
extern u16 jl_cmd_pool_size;
|
||||
extern u16 jl_rcsp_pool_size;
|
||||
extern u16 jl_wait_rcsp_pool_size;
|
||||
|
||||
#endif//__JL_PACKET_H__
|
||||
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
#ifndef __JL_PROTOCOL_H__
|
||||
#define __JL_PROTOCOL_H__
|
||||
|
||||
#include "typedef.h"
|
||||
#include "JL_rcsp_packet.h"
|
||||
|
||||
enum {
|
||||
JL_NOT_NEED_RESPOND = 0,
|
||||
JL_NEED_RESPOND,
|
||||
};
|
||||
|
||||
typedef enum __JL_ERR {
|
||||
JL_ERR_NONE = 0x0,
|
||||
JL_ERR_SEND_DATA_OVER_LIMIT,
|
||||
JL_ERR_SEND_BUSY,
|
||||
JL_ERR_SEND_NOT_READY,
|
||||
JL_ERR_EXIT,
|
||||
JL_ERR_SLAVE_SEND,
|
||||
JL_ERR_MAX,
|
||||
} JL_ERR;
|
||||
|
||||
typedef enum __JL_PRO_STATUS {
|
||||
JL_PRO_STATUS_SUCCESS = 0x0,
|
||||
JL_PRO_STATUS_FAIL,
|
||||
JL_PRO_STATUS_UNKOWN_CMD,
|
||||
JL_PRO_STATUS_BUSY,
|
||||
JL_PRO_STATUS_NO_RESPONSE,
|
||||
JL_PRO_STATUS_CRC_ERR,
|
||||
JL_PRO_STATUS_ALL_DATA_CRC_ERR,
|
||||
JL_PRO_STATUS_PARAM_ERR,
|
||||
JL_PRO_STATUS_RESP_DATA_OVER_LIMIT,
|
||||
|
||||
} JL_PRO_STATUS;
|
||||
|
||||
///*< JL_CMD、JL_CMD_response、JL_DATA、JL_DATA_response packet send functions>*/
|
||||
JL_ERR JL_CMD_send(u8 OpCode, u8 *data, u16 len, u8 request_rsp, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
JL_ERR JL_CMD_response_send(u8 OpCode, u8 status, u8 sn, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
JL_ERR JL_DATA_send(u8 OpCode, u8 CMD_OpCode, u8 *data, u16 len, u8 request_rsp, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
JL_ERR JL_DATA_response_send(u8 OpCode, u8 status, u8 sn, u8 CMD_OpCode, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
|
||||
///*<JL_CMD、JL_CMD_response、JL_DATA、JL_DATA_response recieve>*/
|
||||
typedef struct __JL_PRO_CB {
|
||||
/*send function callback, SPP or ble*/
|
||||
void *priv;
|
||||
// bool (*fw_ready)(void *priv);
|
||||
// s32(*fw_send)(void *priv, void *buf, u16 len);
|
||||
|
||||
/*JL_CMD、JL_CMD_response、JL_DATA、JL_DATA_response packet recieve callback*/
|
||||
void (*CMD_resp)(void *priv, u8 OpCode, u8 OpCode_SN, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
void (*DATA_resp)(void *priv, u8 OpCode_SN, u8 CMD_OpCode, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
void (*CMD_no_resp)(void *priv, u8 OpCode, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
void (*DATA_no_resp)(void *priv, u8 CMD_OpCode, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
void (*CMD_recieve_resp)(void *priv, u8 OpCode, u8 status, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
void (*DATA_recieve_resp)(void *priv, u8 status, u8 CMD_OpCode, u8 *data, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
u8(*wait_resp_timeout)(void *priv, u8 OpCode, u8 counter);
|
||||
// void (*auth_pass_callback)(void *priv);
|
||||
} JL_PRO_CB;
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct _rcsp_bound_hdl {
|
||||
u16 ble_con_handle;
|
||||
u8 spp_remote_addr[6];
|
||||
} JL_rcsp_bound_hdl;
|
||||
#pragma pack()
|
||||
|
||||
// 一拖二设备标识与底层buf的绑定
|
||||
void rcsp_protocol_bound(u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
// 一拖二设备标识与底层buf的解除绑定
|
||||
void rcsp_protocol_reset_bound(u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
|
||||
/**
|
||||
* @brief 设置协议绑定信息
|
||||
*
|
||||
* @param hdl 第一个连接设备的协议绑定信息
|
||||
* @param hdl1 第二个连接设备的协议绑定信息
|
||||
*/
|
||||
void rcsp_protocol_set_bound_hdl(JL_rcsp_bound_hdl *hdl, JL_rcsp_bound_hdl *hdl1);
|
||||
|
||||
/**
|
||||
* @brief 获取协议绑定信息
|
||||
*
|
||||
* @param hdl 第一个连接设备的协议绑定信息
|
||||
* @param hdl1 第二个连接设备的协议绑定信息
|
||||
*/
|
||||
void rcsp_protocol_get_bound_hdl(JL_rcsp_bound_hdl *hdl, JL_rcsp_bound_hdl *hdl1);
|
||||
|
||||
extern u32 rcsp_protocol_need_buf_size(void);
|
||||
|
||||
extern void JL_protocol_init(u8 *buf, u32 len);
|
||||
extern void JL_protocol_exit(void);
|
||||
|
||||
extern void JL_protocol_dev_switch(const JL_PRO_CB *cb);
|
||||
|
||||
extern void JL_protocol_data_recieve(void *priv, void *buf, u16 len, u16 ble_con_handle, u8 *spp_remote_addr);
|
||||
extern void JL_protocol_resume(void);
|
||||
|
||||
extern bool rcsp_send_list_is_empty(void);
|
||||
|
||||
extern void JL_send_packet_process(void);
|
||||
extern void JL_recieve_packet_parse_process(void);
|
||||
|
||||
|
||||
#endif//__JL_PROTOCOL_H__
|
||||
|
||||
|
||||
@@ -0,0 +1,167 @@
|
||||
|
||||
#ifndef _BTSTACK_RCSP_USER_H_
|
||||
#define _BTSTACK_RCSP_USER_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "JL_rcsp_api.h"
|
||||
#include "JL_rcsp_packet.h"
|
||||
#include "JL_rcsp_protocol.h"
|
||||
#include "btstack/le/att.h"
|
||||
|
||||
extern void *rcsp_server_ble_hdl; // ble连接handle
|
||||
extern void *rcsp_server_ble_hdl1; // ble连接handle,rcsp双连的时候有效
|
||||
|
||||
/**
|
||||
* @brief rcsp ble/spp handle初始化
|
||||
*/
|
||||
void bt_rcsp_interface_init(const uint8_t *rcsp_profile_data);
|
||||
|
||||
/**
|
||||
* @brief rcsp ble/spp handle退出并销毁
|
||||
*/
|
||||
void bt_rcsp_interface_exit(void);
|
||||
|
||||
/**
|
||||
* @brief 获取rcsp已连接设备数目
|
||||
*
|
||||
* @result 返回连接的手机设备数
|
||||
*/
|
||||
u8 bt_rcsp_device_conn_num(void);
|
||||
/**
|
||||
* @brief 获取当前已连接ble数目
|
||||
*
|
||||
* @result 返回连接的ble手机设备数
|
||||
*/
|
||||
u8 bt_rcsp_ble_conn_num(void);
|
||||
/**
|
||||
* @brief 获取当前已连接spp数目
|
||||
*
|
||||
* @result 返回连接的spp手机设备数
|
||||
*/
|
||||
u8 bt_rcsp_spp_conn_num(void);
|
||||
|
||||
/**
|
||||
* @brief 在连接或断开的时候,设置rcsp蓝牙连接信息
|
||||
*
|
||||
* @param con_handle ble连接或断开时输入
|
||||
* @param remote_addr spp连接或断开时输入
|
||||
* @param isconn true:连接;false:断开
|
||||
*/
|
||||
void bt_rcsp_set_conn_info(u16 con_handle, void *remote_addr, bool isconn);
|
||||
|
||||
/**
|
||||
* @brief 用于tws同步,从机接收到主机的tws数据后同步到本地
|
||||
*
|
||||
* @param bt handle数据
|
||||
* @param bt handle数据长度
|
||||
*/
|
||||
void rcsp_interface_set_bt_hdl_with_tws_data(u8 *recieve_buf, u16 recieve_len);
|
||||
|
||||
|
||||
/**
|
||||
* @brief rcsp用户自定义ble广播名字
|
||||
*/
|
||||
// _WEAK_ const char *rcsp_ble_name()
|
||||
|
||||
/**
|
||||
* @brief 用于外部接收ble/spp自定义数据使用
|
||||
*
|
||||
* @param ble_con_hdl ble发送句柄
|
||||
* @param remote_addr spp发送地址
|
||||
* @param buf 接收数据
|
||||
* @param len 接收数据的长度
|
||||
* @param att_handle ble_con_hdl有值时,ble的特征值,一般是用户自定义的特征
|
||||
*/
|
||||
// _WEAK_ void bt_rcsp_custom_recieve_callback(u16 ble_con_hdl, void *remote_addr, u8 *buf, u16 len, uint16_t att_handle)
|
||||
|
||||
/**
|
||||
* @brief 用于发送ble/spp自定义数据使用
|
||||
*
|
||||
* @param ble_con_hdl ble发送句柄
|
||||
* @param remote_addr spp发送地址 注:当ble_con_hdl与remote_addr都不填时,给所有的设备都发数据
|
||||
* @param buf 发送的数据
|
||||
* @param len 发送的数据长度
|
||||
* @param att_handle ble_con_hdl有值时,可填用户自定义的特征, 为0是rcsp的特征值
|
||||
* @param att_op_type 参考att_op_type_e枚举的排序
|
||||
*/
|
||||
void bt_rcsp_custom_data_send(u16 ble_con_hdl, u8 *remote_addr, u8 *buf, u16 len, uint16_t att_handle, att_op_type_e att_op_type);
|
||||
|
||||
/**
|
||||
* @brief 用于rcsp接收ble/spp数据使用
|
||||
*
|
||||
* @param hdl ble/spp发送句柄
|
||||
* @param remote_addr spp发送地址
|
||||
* @param buf 接收数据
|
||||
* @param len 接收数据的长度
|
||||
*/
|
||||
void bt_rcsp_recieve_callback(void *hdl, void *remote_addr, u8 *buf, u16 len);
|
||||
|
||||
/**
|
||||
* @brief 设置rcsp的ble的默认发送特征
|
||||
*
|
||||
* @param att_handle ble_con_hdl有值时,可填用户自定义的特征, 为0是rcsp的特征值
|
||||
* @param att_op_type 参考att_op_type_e枚举的排序,为0是rcsp的特征值
|
||||
*/
|
||||
void bt_rcsp_set_default_send_att_msg(uint16_t att_handle, att_op_type_e att_op_type);
|
||||
|
||||
/**
|
||||
* @brief 用于发送rcsp的数据使用
|
||||
*
|
||||
* @param ble_con_hdl ble发送句柄
|
||||
* @param remote_addr spp发送地址 注:当ble_con_hdl与remote_addr都不填时,给所有的设备都发数据
|
||||
* @param buf 发送的数据
|
||||
* @param len 发送的数据长度
|
||||
* @param att_handle ble_con_hdl有值时,可填用户自定义的特征, 为0是rcsp的特征值,或者是bt_rcsp_set_default_send_att_msg设置的
|
||||
* @param att_op_type 参考att_op_type_e枚举的排序,为0是rcsp默认配置,或者是bt_rcsp_set_default_send_att_msg设置的
|
||||
*/
|
||||
int bt_rcsp_data_send(u16 ble_con_hdl, u8 *remote_addr, u8 *buf, u16 len, uint16_t att_handle, u8 att_op_type);
|
||||
|
||||
/**
|
||||
* @brief 获取当前ble连接设备的mac地址
|
||||
*/
|
||||
u8 *rcsp_get_ble_hdl_remote_mac_addr(u16 ble_con_handle);
|
||||
|
||||
/**
|
||||
* @brief 获取tws同步的bt handle的总buf大小
|
||||
*/
|
||||
u16 rcsp_interface_tws_sync_buf_size();
|
||||
|
||||
/**
|
||||
* @brief rcsp主机同步bt handle数据给从机
|
||||
*
|
||||
* @param send_buf 外部malloc的一个指针,size根据rcsp_interface_tws_sync_buf_size获取
|
||||
*/
|
||||
void rcsp_interface_tws_sync_buf_content(u8 *send_buf);
|
||||
|
||||
/**
|
||||
* @brief tws同步rcsp bt_handle信息,用于tws同步ble句柄信息
|
||||
* 已实现于rcsp_bt_manage.c
|
||||
*/
|
||||
// _WEAK_ void rcsp_interface_bt_handle_tws_sync(void)
|
||||
|
||||
/**
|
||||
* @brief 用于外部自定义att_read_callback的使用
|
||||
*
|
||||
* @param hdl ble的结构体句柄
|
||||
* @param connection_handle ble的连接句柄
|
||||
* @param att_handle ble特征值
|
||||
* @param offset
|
||||
* @param buffer 读特征的数据
|
||||
* @param buffer_size 读特征的数据长度
|
||||
*/
|
||||
// _WEAK_ uint16_t bt_rcsp_custom_att_read_callback(void *hdl, hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t offset, uint8_t *buffer, uint16_t buffer_size)
|
||||
|
||||
/**
|
||||
* @brief 用于外部自定义att_write_callback的使用
|
||||
*
|
||||
* @param hdl ble的结构体句柄
|
||||
* @param connection_handle ble的连接句柄
|
||||
* @param att_handle ble特征值
|
||||
* @param transaction_mode
|
||||
* @param offset
|
||||
* @param buffer 写特征的数据
|
||||
* @param buffer_size 写特征的数据长度
|
||||
*/
|
||||
// _WEAK_ void bt_rcsp_custom_att_write_callback(void *hdl, hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t transaction_mode, uint16_t offset, uint8_t *buffer, uint16_t buffer_size)
|
||||
|
||||
#endif // _BTSTACK_RCSP_USER_H_
|
||||
@@ -0,0 +1,50 @@
|
||||
#ifndef __SCREEN_EAR_INTERFACE_H__
|
||||
#define __SCREEN_EAR_INTERFACE_H__
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
/*-------------------CMD start----------------------*/
|
||||
#define CUSTOM_ALL_INFO_CMD 0xff // 所有信息
|
||||
#define CUSTOM_BT_CONNECT_STATE_CMD 0x1 // bt连接状态
|
||||
#define CUSTOM_BLE_CONNECT_STATE_CMD 0x2 // ble连接状态
|
||||
#define CUSTOM_BLE_BATTERY_STATE_CMD 0x3 // 电量信息
|
||||
#define CUSTOM_BLE_VOLUMEN_CMD 0x4 // 音量信息
|
||||
#define CUSTOM_BLE_TIME_DATE_CMD 0x5 // 时间信息
|
||||
#define CUSTOM_EQ_DATE_CMD 0x6 // EQ信息
|
||||
#define CUSTOM_ANC_DATE_CMD 0x7 // ANC信息
|
||||
#define CUSTOM_CALL_STATE_CMD 0x8 // 通话状态获取
|
||||
#define CUSTOM_PHONE_CALL_INFO_CMD 0x9 // 通话号码信息
|
||||
|
||||
#define CUSTOM_BLE_VOL_CONTROL_CMD 0x32 // 音量控制
|
||||
#define CUSTOM_BLE_MUSIC_STATE_CONTROL_CMD 0x33 // 音乐状态控制
|
||||
#define CUSTOM_BLE_ANC_MODE_CONTROL_CMD 0x34 // ANC 模式控制
|
||||
#define CUSTOM_BLE_EQ_MODE_CONTROL_CMD 0x35 // EQ 模式控制
|
||||
#define CUSTOM_BLE_PLAY_MODE_CONTROL_CMD 0x36 // 设置播放模式
|
||||
#define CUSTOM_BLE_ALARM_CLOCK_CONTROL_CMD 0x37 // 播放闹钟
|
||||
#define CUSTOM_BLE_FINE_EARPHONE_CMD 0x38 // 查找手机
|
||||
#define CUSTOM_BLE_FLASHLIGHT_CONTROL_CMD 0x39 // 手电筒
|
||||
#define CUSTOM_BLE_SWITCH_LANGUAGE 0x40 //切换语言 1中文,2英文
|
||||
#define CUSTOM_BLE_CONTRAL_CALL 0x41 //控制接听挂断 1接听 2挂断
|
||||
#define CUSTOM_BLE_USER_ADD_CMD 0X42 //用户自定义命令
|
||||
#define CUSTOM_BLE_CONTRAL_DOUYIN 0X43 //控制抖音操作
|
||||
#define CUSTOM_BLE_CONTRAL_PHOTO 0X44 //控制拍照操作
|
||||
|
||||
#define CUSTOM_EDR_CONTRAL_CONN 0X45 // 控制edr连接
|
||||
#define CUSTOM_EDR_SYNC_INFO 0X46 // 同步经典蓝牙信息
|
||||
#define CUSTOM_EDR_SIRI_CTRL 0X47 // 语音助手设置
|
||||
#define CUSTOM_BLE_CONTRAL_PHONEOUT 0X48 // 拨出电话
|
||||
#define CUSTOM_BLE_CONTRAL_KEY 0X49 // 按键同步设置
|
||||
#define CUSTOM_SLEEP_CTRL_CMD 0x4A // 屏幕亮灭状态
|
||||
#define CUSTOM_EDR_CLEAR_COMP 0x4B // br等待仓连接
|
||||
/*-------------------CMD end----------------------*/
|
||||
|
||||
|
||||
typedef void (*screen_app_receive_handle)(u8 cmd, u8 *data, u8 len);
|
||||
typedef int (*screen_app_operation_send_handle)(u8 *data, u16 len);
|
||||
|
||||
void register_receive_handle(screen_app_receive_handle callback);
|
||||
void register_send_handle(screen_app_operation_send_handle callback);
|
||||
void custom_ble_client_write_no_respond(u8 cmd, u8 *data, u8 len);
|
||||
int ble_notify_recv_data_handler(uint8_t *buffer, uint16_t buffer_size);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,203 @@
|
||||
#ifndef __CLOCK_H__
|
||||
#define __CLOCK_H__
|
||||
|
||||
#include "asm/clock_hal.h"
|
||||
#include "gpcnt_trim.h"
|
||||
|
||||
#define KHz_UNIT (1000L)
|
||||
#define MHz (1000000L)
|
||||
|
||||
|
||||
|
||||
|
||||
enum pll_ref_source : u8 {
|
||||
PLL_REF_XOSC, //外部晶振,单端模式
|
||||
PLL_REF_XOSC_DIFF, //外部晶振,差分模式
|
||||
PLL_REF_LRC,
|
||||
PLL_REF_HRC,
|
||||
PLL_REF_RTC_OSC,
|
||||
PLL_REF_XCLK,
|
||||
PLL_REF_STD24M,
|
||||
};
|
||||
|
||||
extern const int clock_sys_src_use_lrc_hw;
|
||||
///VAD时钟源
|
||||
#define VAD_CLOCK_USE_CLOSE 0 //VAD关闭
|
||||
#define VAD_CLOCK_USE_BTOSC 1 //DVAD、ANALOG使用BTOSC
|
||||
#define VAD_CLOCK_USE_RC_AND_BTOSC 2 //DVAD使用RC、BTOSC直连ANALOG
|
||||
#define VAD_CLOCK_USE_PMU_STD12M 3 //DVAD使用BTOSC通过PMU配置的STD12M
|
||||
#define VAD_CLOCK_USE_LRC 4 //DVAD使用LRC
|
||||
|
||||
//ANC时钟源
|
||||
#define ANC_CLOCK_USE_CLOSE 0 //ANC关闭,无需保持相关时钟
|
||||
#define ANC_CLOCK_USE_BTOSC 1 //ANC使用BTOSCX2时钟
|
||||
#define ANC_CLOCK_USE_PLL 2 //ANC使用PLL时钟
|
||||
|
||||
|
||||
|
||||
#define SYS_24M (24 * MHz)
|
||||
#define SYS_48M (48 * MHz)
|
||||
#define SYS_60M (60 * MHz)
|
||||
#define SYS_64M (64 * MHz)
|
||||
#define SYS_96M (96 * MHz)
|
||||
#define SYS_128M (128 * MHz)
|
||||
#define SYS_160M (160 * MHz)
|
||||
|
||||
#define SPI0_MAX_CLK (12 * MHz)
|
||||
|
||||
void clock_dump(void);
|
||||
void clock_core_voltage_dump();
|
||||
|
||||
//返回芯片支持的最高时钟频率
|
||||
u32 clk_get_max_frequency();
|
||||
int clk_early_init(enum pll_ref_source pll_ref, u32 ref_frequency, u32 pll_frequency);
|
||||
|
||||
/**
|
||||
* @brief clk_set 设置对应name时钟节点的时钟频率,实际频率会大于等于配置频率
|
||||
*
|
||||
* @param name
|
||||
* @param frequency 单位为Hz
|
||||
*
|
||||
* @return 小于0,标识对应时钟节点频率设置失败,整数为实际频率,
|
||||
*/
|
||||
int clk_set_api(const char *name, u32 frequency);
|
||||
|
||||
/**
|
||||
* @brief clk_get 获取对应name的时钟节点时钟频率
|
||||
*
|
||||
* @param name
|
||||
*
|
||||
* @return 返回频率,单位为Hz
|
||||
*/
|
||||
u32 clk_get(const char *name);
|
||||
|
||||
|
||||
/**
|
||||
* @brief clock_set_sfc_max_freq
|
||||
* 使用前需要保证所使用的flash支持4bit 100Mhz 模式
|
||||
*
|
||||
* @param dual_max_freq for cmd 3BH BBH
|
||||
* @param quad_max_freq for cmd 6BH EBH
|
||||
*/
|
||||
void clk_set_sfc_max_freq(u32 dual_max_freq, u32 quad_max_freq);
|
||||
|
||||
|
||||
enum clk_mode {
|
||||
CLOCK_MODE_ADAPTIVE = 0,
|
||||
CLOCK_MODE_USR,
|
||||
};
|
||||
/* ***************************************************************************/
|
||||
/**
|
||||
* \Brief : 频率电压适配模式接口,支持动态配置频率电压为自适应或用户设置
|
||||
*
|
||||
* \Param : mode : CLOCK_MODE_ADAPTIVE 频率电压自适应使能 / CLOCK_MODE_USR 频率电压用户控制
|
||||
* \Param : sys_dvdd: 用户设置值
|
||||
*/
|
||||
/* *****************************************************************************/
|
||||
void clk_voltage_init(u8 mode, u8 sys_dvdd);
|
||||
void clk_voltage_mode(u8 mode, u8 sys_dvdd);
|
||||
|
||||
|
||||
/**
|
||||
* @brief clk_set_lowest_voltage 设置dvdd工作的最低 工作电压
|
||||
*
|
||||
* @param dvdd_lev mic 工作时候 建议 SYSVDD_VOL_SEL_105V,关闭的时候设置为 SYSVDD_VOL_SEL_084V
|
||||
*/
|
||||
void clk_set_lowest_voltage(u32 dvdd_lev);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* system enter critical and exit critical handle
|
||||
* */
|
||||
struct clock_critical_handler {
|
||||
void (*enter)();
|
||||
void (*exit)();
|
||||
};
|
||||
|
||||
#define CLOCK_CRITICAL_HANDLE_REG(name, enter, exit) \
|
||||
const struct clock_critical_handler clock_##name \
|
||||
SEC_USED(.clock_critical_txt) = {enter, exit};
|
||||
|
||||
extern struct clock_critical_handler clock_critical_handler_begin[];
|
||||
extern struct clock_critical_handler clock_critical_handler_end[];
|
||||
|
||||
#define list_for_each_loop_clock_critical(h) \
|
||||
for (h=clock_critical_handler_begin; h<clock_critical_handler_end; h++)
|
||||
|
||||
|
||||
#ifdef CLK_TREE_MODE
|
||||
extern struct clock_critical_handler hsb_critical_handler_begin[];
|
||||
extern struct clock_critical_handler hsb_critical_handler_end[];
|
||||
|
||||
#define HSB_CRITICAL_HANDLE_REG(name, enter, exit) \
|
||||
const struct clock_critical_handler hsb_##name \
|
||||
SEC_USED(.hsb_critical_txt) = {enter, exit};
|
||||
|
||||
extern struct clock_critical_handler hsb_critical_handler_begin[];
|
||||
extern struct clock_critical_handler hsb_critical_handler_end[];
|
||||
|
||||
#define list_for_each_loop_hsb_critical(h) \
|
||||
for (h=hsb_critical_handler_begin; h<hsb_critical_handler_end; h++)
|
||||
|
||||
#define LSB_CRITICAL_HANDLE_REG(name, enter, exit) \
|
||||
const struct clock_critical_handler lsb_##name \
|
||||
SEC_USED(.lsb_critical_txt) = {enter, exit};
|
||||
|
||||
extern struct clock_critical_handler lsb_critical_handler_begin[];
|
||||
extern struct clock_critical_handler lsb_critical_handler_end[];
|
||||
|
||||
#define list_for_each_loop_lsb_critical(h) \
|
||||
for (h=lsb_critical_handler_begin; h<lsb_critical_handler_end; h++)
|
||||
|
||||
|
||||
#else
|
||||
|
||||
#define HSB_CRITICAL_HANDLE_REG CLOCK_CRITICAL_HANDLE_REG
|
||||
#define list_for_each_loop_hsb_critical list_for_each_loop_clock_critical
|
||||
|
||||
#define LSB_CRITICAL_HANDLE_REG CLOCK_CRITICAL_HANDLE_REG
|
||||
#define list_for_each_loop_lsb_critical list_for_each_loop_clock_critical
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 阻塞式延时
|
||||
void delay_nops(u32 nops);
|
||||
//delay function does not guarantee accuracy. The application may sleep longer than msecs under heavy load conditions.
|
||||
void udelay(u32 us);
|
||||
void mdelay(u32 ms);
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief 不需要输出时钟时需调clk_out_close关闭,否则一直占用och
|
||||
* @param gpio:参见枚举,固定io带入固定io; 有chx的可以选择任意io; 都有选择任意io
|
||||
* @param clk_src:详见枚举,备注多通道的可同时输出多路clk
|
||||
* @param div:详见枚举各通道div注释
|
||||
* return: 0:error(通道被占用,无法输出)
|
||||
*/
|
||||
int clk_out(u32 gpio, enum CLK_OUT_SOURCE clk_src, u32 div);
|
||||
/**
|
||||
* @brief clk_out_close将关闭所有正在输出的clk_src时钟
|
||||
* @param gpio:不检查gpio,当clk_src正确直接配置高祖
|
||||
* @param clk_src:详见枚举,关闭该时钟输出
|
||||
*return: 0:error(时钟未曾输出)*/
|
||||
int clk_out_close(u32 gpio, enum CLK_OUT_SOURCE clk_src);
|
||||
|
||||
/**
|
||||
* @brief 设置电压频率电压表最大挡位
|
||||
*/
|
||||
void clock_voltage_rising_step_max();
|
||||
/**
|
||||
* @brief 设置电压频率电压表最小挡位
|
||||
*/
|
||||
void clock_voltage_falling_step_min();
|
||||
|
||||
void update_vdd_table(u8 val);
|
||||
#endif /*CLOCK_H*/
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,41 @@
|
||||
#ifndef __Q32DSP_CACHE__
|
||||
#define __Q32DSP_CACHE__
|
||||
|
||||
#include "icache.h"
|
||||
#include "dcache.h"
|
||||
|
||||
//#include "generic/typedef.h"
|
||||
|
||||
typedef struct __cache_info {
|
||||
unsigned int cache_type; // 0:icache; 1:dcache
|
||||
unsigned int cpu_id;
|
||||
unsigned int efficiency;
|
||||
} CACHE_INFO;
|
||||
|
||||
#if 0 // 供外界使用的接口,已经在 icache.h 和 rocache.h 中定义
|
||||
// void flush_dcache(void *ptr, int len);
|
||||
// void flushinv_dcache(void *ptr, int len);
|
||||
void IcuEnable(void);
|
||||
void DcuEnable(void);
|
||||
void IcuWaitIdle(void);
|
||||
void DcuWaitIdle(void);
|
||||
void IcuDisable(void);
|
||||
void DcuDisable(void);
|
||||
void IcuFlushinvAll(void);
|
||||
void IcuUnlockAll(void);
|
||||
void IcuFlushinvRegion(int *beg, int len);
|
||||
void IcuUnlockRegion(int *beg, int len);
|
||||
void IcuLockRegion(int *beg, int len);
|
||||
void IcuPfetchRegion(int *beg, int len);
|
||||
void DcuFlushinvAll(void);
|
||||
void DcuFlushinvRegion(int *beg, int len);
|
||||
void DcuPfetchRegion(int *beg, int len);
|
||||
void IcuInitial(void);
|
||||
void DcuInitial(void);
|
||||
#endif
|
||||
|
||||
#define WAIT_DCACHE_IDLE do {DcuWaitIdle();} while(0);
|
||||
#define WAIT_ICACHE_IDLE do {IcuWaitIdle();} while(0);
|
||||
//#define WAIT_DCACHE_IDLE do{asm volatile("csync"); while(!(JL_DCU->CON & BIT(31)));} while(0);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,169 @@
|
||||
#ifndef _CHARGE_H_
|
||||
#define _CHARGE_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "device.h"
|
||||
|
||||
/*------充满电电压选择 4.044V-4.634V-------*/
|
||||
//4.2V电池配置0~15
|
||||
#define CHARGE_FULL_V_4040_4P2V 0
|
||||
#define CHARGE_FULL_V_4060_4P2V 1
|
||||
#define CHARGE_FULL_V_4080_4P2V 2
|
||||
#define CHARGE_FULL_V_4100_4P2V 3
|
||||
#define CHARGE_FULL_V_4120_4P2V 4
|
||||
#define CHARGE_FULL_V_4140_4P2V 5
|
||||
#define CHARGE_FULL_V_4160_4P2V 6
|
||||
#define CHARGE_FULL_V_4180_4P2V 7
|
||||
#define CHARGE_FULL_V_4200_4P2V 8
|
||||
#define CHARGE_FULL_V_4220_4P2V 9
|
||||
#define CHARGE_FULL_V_4240_4P2V 10
|
||||
#define CHARGE_FULL_V_4260_4P2V 11
|
||||
#define CHARGE_FULL_V_4280_4P2V 12
|
||||
#define CHARGE_FULL_V_4300_4P2V 13
|
||||
#define CHARGE_FULL_V_4320_4P2V 14
|
||||
#define CHARGE_FULL_V_4340_4P2V 15
|
||||
//4.4V电池配置16~31
|
||||
#define CHARGE_FULL_V_4240_4P4V 16
|
||||
#define CHARGE_FULL_V_4260_4P4V 17
|
||||
#define CHARGE_FULL_V_4280_4P4V 18
|
||||
#define CHARGE_FULL_V_4300_4P4V 19
|
||||
#define CHARGE_FULL_V_4320_4P4V 20
|
||||
#define CHARGE_FULL_V_4340_4P4V 21
|
||||
#define CHARGE_FULL_V_4360_4P4V 22
|
||||
#define CHARGE_FULL_V_4380_4P4V 23
|
||||
#define CHARGE_FULL_V_4400_4P4V 24
|
||||
#define CHARGE_FULL_V_4420_4P4V 25
|
||||
#define CHARGE_FULL_V_4440_4P4V 26
|
||||
#define CHARGE_FULL_V_4460_4P4V 27
|
||||
#define CHARGE_FULL_V_4480_4P4V 28
|
||||
#define CHARGE_FULL_V_4500_4P4V 29
|
||||
#define CHARGE_FULL_V_4520_4P4V 30
|
||||
#define CHARGE_FULL_V_4540_4P4V 31
|
||||
//4.5V电池配置32-47
|
||||
#define CHARGE_FULL_V_4340_4P5V 32
|
||||
#define CHARGE_FULL_V_4360_4P5V 33
|
||||
#define CHARGE_FULL_V_4380_4P5V 34
|
||||
#define CHARGE_FULL_V_4400_4P5V 35
|
||||
#define CHARGE_FULL_V_4420_4P5V 36
|
||||
#define CHARGE_FULL_V_4440_4P5V 37
|
||||
#define CHARGE_FULL_V_4460_4P5V 38
|
||||
#define CHARGE_FULL_V_4480_4P5V 39
|
||||
#define CHARGE_FULL_V_4500_4P5V 40
|
||||
#define CHARGE_FULL_V_4520_4P5V 41
|
||||
#define CHARGE_FULL_V_4540_4P5V 42
|
||||
#define CHARGE_FULL_V_4560_4P5V 43
|
||||
#define CHARGE_FULL_V_4580_4P5V 44
|
||||
#define CHARGE_FULL_V_4600_4P5V 45
|
||||
#define CHARGE_FULL_V_4620_4P5V 46
|
||||
#define CHARGE_FULL_V_4640_4P5V 47
|
||||
#define CHARGE_FULL_V_MAX 48
|
||||
|
||||
/*
|
||||
充电电流选择
|
||||
恒流:40-300mA
|
||||
*/
|
||||
#define CHARGE_mA_40 0
|
||||
#define CHARGE_mA_50 1
|
||||
#define CHARGE_mA_60 2
|
||||
#define CHARGE_mA_70 3
|
||||
#define CHARGE_mA_80 4
|
||||
#define CHARGE_mA_100 5
|
||||
#define CHARGE_mA_120 6
|
||||
#define CHARGE_mA_140 7
|
||||
#define CHARGE_mA_160 8
|
||||
#define CHARGE_mA_180 9
|
||||
#define CHARGE_mA_200 10
|
||||
#define CHARGE_mA_220 11
|
||||
#define CHARGE_mA_240 12
|
||||
#define CHARGE_mA_260 13
|
||||
#define CHARGE_mA_280 14
|
||||
#define CHARGE_mA_300 15
|
||||
#define CHARGE_mA_4 (BIT(4)|CHARGE_mA_40)
|
||||
#define CHARGE_mA_5 (BIT(4)|CHARGE_mA_50)
|
||||
#define CHARGE_mA_6 (BIT(4)|CHARGE_mA_60)
|
||||
#define CHARGE_mA_7 (BIT(4)|CHARGE_mA_70)
|
||||
#define CHARGE_mA_8 (BIT(4)|CHARGE_mA_80)
|
||||
#define CHARGE_mA_10 (BIT(4)|CHARGE_mA_100)
|
||||
#define CHARGE_mA_12 (BIT(4)|CHARGE_mA_120)
|
||||
#define CHARGE_mA_14 (BIT(4)|CHARGE_mA_140)
|
||||
#define CHARGE_mA_16 (BIT(4)|CHARGE_mA_160)
|
||||
#define CHARGE_mA_18 (BIT(4)|CHARGE_mA_180)
|
||||
#define CHARGE_mA_20 (BIT(4)|CHARGE_mA_200)
|
||||
#define CHARGE_mA_22 (BIT(4)|CHARGE_mA_220)
|
||||
#define CHARGE_mA_24 (BIT(4)|CHARGE_mA_240)
|
||||
#define CHARGE_mA_26 (BIT(4)|CHARGE_mA_260)
|
||||
#define CHARGE_mA_28 (BIT(4)|CHARGE_mA_280)
|
||||
#define CHARGE_mA_30 (BIT(4)|CHARGE_mA_300)
|
||||
/* 充电口下拉电阻 50k ~ 200k */
|
||||
#define CHARGE_PULLDOWN_50K 0
|
||||
#define CHARGE_PULLDOWN_100K 1
|
||||
#define CHARGE_PULLDOWN_150K 2
|
||||
#define CHARGE_PULLDOWN_200K 3
|
||||
|
||||
#define CHARGE_CCVOL_V 300 //涓流充电向恒流充电的转换点
|
||||
|
||||
#define DEVICE_EVENT_FROM_CHARGE (('C' << 24) | ('H' << 16) | ('G' << 8) | '\0')
|
||||
|
||||
struct charge_platform_data {
|
||||
u8 charge_en; //内置充电使能
|
||||
u8 charge_poweron_en; //开机充电使能
|
||||
u8 charge_full_V; //充满电电压大小
|
||||
u8 charge_full_mA; //充满电电流大小
|
||||
u16 charge_mA; //恒流充电电流大小
|
||||
u16 charge_trickle_mA; //涓流充电电流大小
|
||||
u8 ldo5v_pulldown_en; //下拉使能位
|
||||
u8 ldo5v_pulldown_lvl; //ldo5v的下拉电阻配置项,若充电舱需要更大的负载才能检测到插入时,请将该变量置为对应阻值
|
||||
u8 ldo5v_pulldown_keep; //下拉电阻在softoff时是否保持,ldo5v_pulldown_en=1时有效
|
||||
u16 ldo5v_off_filter; //ldo5v拔出过滤值,过滤时间 = (filter*2 + 20)ms,ldoin<0.6V且时间大于过滤时间才认为拔出,对于充满直接从5V掉到0V的充电仓,该值必须设置成0,对于充满由5V先掉到0V之后再升压到xV的充电仓,需要根据实际情况设置该值大小
|
||||
u16 ldo5v_on_filter; //ldo5v>vbat插入过滤值,电压的过滤时间 = (filter*2)ms
|
||||
u16 ldo5v_keep_filter; //1V<ldo5v<vbat维持电压过滤值,过滤时间= (filter*2)ms
|
||||
u16 charge_full_filter; //充满过滤值,连续检测充满信号恒为1才认为充满,过滤时间 = (filter*2)ms
|
||||
};
|
||||
|
||||
#define CHARGE_PLATFORM_DATA_BEGIN(data) \
|
||||
struct charge_platform_data data = {
|
||||
|
||||
#define CHARGE_PLATFORM_DATA_END() \
|
||||
};
|
||||
|
||||
|
||||
enum {
|
||||
CHARGE_EVENT_CHARGE_START,
|
||||
CHARGE_EVENT_CHARGE_CLOSE,
|
||||
CHARGE_EVENT_CHARGE_FULL,
|
||||
CHARGE_EVENT_LDO5V_KEEP,
|
||||
CHARGE_EVENT_LDO5V_IN,
|
||||
CHARGE_EVENT_LDO5V_OFF,
|
||||
};
|
||||
|
||||
//使用的电池类型
|
||||
enum {
|
||||
BAT_4P2, //4.2V的电池
|
||||
BAT_4P4,
|
||||
BAT_4P5,
|
||||
};
|
||||
|
||||
void set_charge_event_flag(u8 flag);
|
||||
void set_charge_online_flag(u8 flag);
|
||||
void set_charge_event_flag(u8 flag);
|
||||
u8 get_charge_online_flag(void);
|
||||
u8 get_charge_poweron_en(void);
|
||||
void set_charge_poweron_en(u32 onOff);
|
||||
void charge_start(void);
|
||||
void charge_close(void);
|
||||
u8 get_charge_mA_config(void);
|
||||
void set_charge_mA(u8 charge_mA);
|
||||
u8 get_ldo5v_pulldown_en(void);
|
||||
u8 get_ldo5v_pulldown_res(void);
|
||||
u8 get_ldo5v_online_hw(void);
|
||||
u8 get_lvcmp_det(void);
|
||||
void charge_check_and_set_pinr(u8 mode);
|
||||
u16 get_charge_full_value(void);
|
||||
void charge_module_stop(void);
|
||||
void charge_module_restart(void);
|
||||
void ldoin_wakeup_isr(void);
|
||||
int charge_init(const struct charge_platform_data *data);
|
||||
void charge_set_ldo5v_detect_stop(u8 stop);
|
||||
u8 check_pinr_shutdown_enable(void);
|
||||
|
||||
#endif //_CHARGE_H_
|
||||
@@ -0,0 +1,83 @@
|
||||
#ifndef __BR28_CHARGESTORE_H__
|
||||
#define __BR28_CHARGESTORE_H__
|
||||
#include "generic/typedef.h"
|
||||
|
||||
enum {
|
||||
CMD_COMPLETE,
|
||||
CMD_RECVDATA,
|
||||
};
|
||||
|
||||
enum {
|
||||
MODE_RECVDATA,
|
||||
MODE_SENDDATA,
|
||||
};
|
||||
|
||||
enum {
|
||||
TYPE_NORMAL,
|
||||
TYPE_F95,
|
||||
};
|
||||
|
||||
#define PROTOCAL_DEFAULT 0
|
||||
#define PROTOCAL_LOADER 1
|
||||
|
||||
#define LDOIN_BIND_IO IO_PORTP_00
|
||||
|
||||
struct chargestore_platform_data {
|
||||
u32 baudrate;
|
||||
u32 io_port;
|
||||
u8 uart_irq;
|
||||
void (*init)(const struct chargestore_platform_data *);
|
||||
void (*open)(u8 mode);
|
||||
void (*close)(void);
|
||||
void (*write)(u8 *, u8);
|
||||
};
|
||||
|
||||
struct chargestore_data_handler {
|
||||
int (*data_cb)(u8 *buf, u8 len);
|
||||
};
|
||||
|
||||
#define CHARGESTORE_HANDLE_REG(name, data_callback) \
|
||||
const struct chargestore_data_handler chargestore_##name \
|
||||
SEC_USED(.chargestore_callback_txt) = {data_callback};
|
||||
|
||||
extern struct chargestore_data_handler chargestore_handler_begin[];
|
||||
extern struct chargestore_data_handler chargestore_handler_end[];
|
||||
|
||||
#define list_for_each_loop_chargestore(h) \
|
||||
for (h=chargestore_handler_begin; h<chargestore_handler_end; h++)
|
||||
|
||||
|
||||
#define CHARGESTORE_PLATFORM_DATA_BEGIN(data) \
|
||||
static const struct chargestore_platform_data data = {
|
||||
|
||||
#define CHARGESTORE_PLATFORM_DATA_END() \
|
||||
.baudrate = 9600, \
|
||||
.init = chargestore_init, \
|
||||
.open = chargestore_open, \
|
||||
.close = chargestore_close, \
|
||||
.write = chargestore_write, \
|
||||
};
|
||||
|
||||
void chargestore_open(u8 mode);
|
||||
void chargestore_close(void);
|
||||
void chargestore_write(u8 *data, u8 len);
|
||||
void chargestore_init(const struct chargestore_platform_data *);
|
||||
void chargestore_set_update_ram(void);
|
||||
u8 chargestore_get_det_level(u8 chip_type);
|
||||
|
||||
//app层使用的接口
|
||||
void chargestore_api_close(void);
|
||||
int chargestore_api_write(u8 *buf, u8 len);
|
||||
void chargestore_api_init(const struct chargestore_platform_data *arg);
|
||||
void chargestore_api_wait_complete(void);
|
||||
void chargestore_api_set_timeout(u16 timeout);
|
||||
void chargestore_api_stop(void);
|
||||
void chargestore_api_restart(void);
|
||||
u8 chargestore_api_crc8(u8 *ptr, u8 len);
|
||||
|
||||
int loader_uart_write(u8 *buf, u8 len);
|
||||
void chargestore_set_protocal(u8 protocal);
|
||||
void chargestore_set_loader_update_callback(void (*loader_callback)(void *p, void *buf, u32 len));
|
||||
void chargestore_ldo5v_fall_deal(void);
|
||||
void chargestore_set_baudrate(u32 baudrate);
|
||||
#endif
|
||||
@@ -0,0 +1,124 @@
|
||||
#ifndef __CLOCK_HAL_H__
|
||||
#define __CLOCK_HAL_H__
|
||||
|
||||
#include "typedef.h"
|
||||
enum CLK_OUT_SOURCE0 {
|
||||
CLK_OUT_SRC0_NULL = 0,
|
||||
CLK_OUT_SRC0_LRC_CLK,
|
||||
CLK_OUT_SRC0_STD_12M,
|
||||
CLK_OUT_SRC0_STD_24M,
|
||||
CLK_OUT_SRC0_STD_48M,
|
||||
CLK_OUT_SRC0_BTOSC_24M,
|
||||
CLK_OUT_SRC0_BTOSC_48M,
|
||||
CLK_OUT_SRC0_HSB_CLK,
|
||||
CLK_OUT_SRC0_LSB_CLK,
|
||||
CLK_OUT_SRC0_PLL_96M,
|
||||
CLK_OUT_SRC0_RC_250K,
|
||||
CLK_OUT_SRC0_RC_16M,
|
||||
CLK_OUT_SRC0_LRC_24M,
|
||||
CLK_OUT_SRC0_ALNK0_CLK,
|
||||
CLK_OUT_SRC0_RF_CKO_CLK,
|
||||
CLK_OUT_SRC0_USB_CLK,
|
||||
};
|
||||
|
||||
enum CLK_OUT_SOURCE1 {
|
||||
CLK_OUT_SRC2_NULL = 0,
|
||||
CLK_OUT_SRC2_SYS_PLL_D3P5 = 4,
|
||||
CLK_OUT_SRC2_SYS_PLL_D2P5,
|
||||
CLK_OUT_SRC2_SYS_PLL_D2P0,
|
||||
CLK_OUT_SRC2_SYS_PLL_D1P5,
|
||||
CLK_OUT_SRC2_SYS_PLL_D1P0,
|
||||
};
|
||||
void clk_out0(u8 gpio, enum CLK_OUT_SOURCE0 clk);
|
||||
void clk_out2(u8 gpio, enum CLK_OUT_SOURCE1 clk, u8 div);
|
||||
//无 clk_out1
|
||||
|
||||
void clk_out0_close(u8 gpio);
|
||||
void clk_out2_close(u8 gpio);
|
||||
|
||||
|
||||
|
||||
enum CLK_OUT_SOURCE {
|
||||
//ch0,ch1. no div
|
||||
CLK_OUT_NULL = 0x0100,
|
||||
CLK_OUT_LRC_CLK,
|
||||
CLK_OUT_STD_12M,
|
||||
CLK_OUT_STD_24M,
|
||||
CLK_OUT_STD_48M,
|
||||
CLK_OUT_BTOSC_24M,
|
||||
CLK_OUT_BTOSC_48M,
|
||||
CLK_OUT_HSB_CLK,
|
||||
CLK_OUT_LSB_CLK,
|
||||
CLK_OUT_PLL_96M,
|
||||
CLK_OUT_RC_250K,
|
||||
CLK_OUT_RC_16M,
|
||||
CLK_OUT_LRC_24M,
|
||||
CLK_OUT_ALNK0_CLK,
|
||||
CLK_OUT_RF_CKO_CLK,
|
||||
CLK_OUT_USB_CLK,
|
||||
|
||||
//ch2. div:0~63(div1~div64)
|
||||
CLK_OUT_NULL_DIV = 0x0400,
|
||||
CLK_OUT_SYS_PLL_D3P5_DIV = 0x0404,
|
||||
CLK_OUT_SYS_PLL_D2P5_DIV,
|
||||
CLK_OUT_SYS_PLL_D2P0_DIV,
|
||||
CLK_OUT_SYS_PLL_D1P5_DIV,
|
||||
CLK_OUT_SYS_PLL_D1P0_DIV,
|
||||
};
|
||||
|
||||
#define CLK_OUT_CH_MASK 0b111
|
||||
#define CLK_OUT_CH0_SEL(clk) SFR(JL_LSBCLK->STD_CON1,0,5,clk)
|
||||
#define CLK_OUT_CH0_GET_CLK() ((JL_LSBCLK->STD_CON1>>0)&0x01f)
|
||||
#define CLK_OUT_CH0_DIV(div) //no div
|
||||
#define CLK_OUT_CH0_EN(en) //no en
|
||||
#define CLK_OUT0_FIXED_IO_EN(en) //no en
|
||||
#define IS_CLK_OUT0_FIXED_IO() (0)//no fix
|
||||
|
||||
#define CLK_OUT_CH1_SEL(clk) SFR(JL_LSBCLK->STD_CON1,5,5,clk)
|
||||
#define CLK_OUT_CH1_GET_CLK() ((JL_LSBCLK->STD_CON1>>5)&0x01f)
|
||||
#define CLK_OUT_CH1_DIV(div) //no div
|
||||
#define CLK_OUT_CH1_EN(en) //no en
|
||||
#define CLK_OUT1_FIXED_IO_EN(en) //no en
|
||||
#define IS_CLK_OUT1_FIXED_IO() (0)//no fix
|
||||
|
||||
#define CLK_OUT_CH2_SEL(clk) SFR(JL_LSBCLK->STD_CON1,10,4,clk)
|
||||
#define CLK_OUT_CH2_GET_CLK() ((JL_LSBCLK->STD_CON1>>10)&0x0f)
|
||||
#define CLK_OUT_CH2_DIV(div) SFR(JL_LSBCLK->STD_CON1,14,6,div)
|
||||
#define CLK_OUT_CH2_EN(en) //no en
|
||||
#define CLK_OUT2_FIXED_IO_EN(en) //no en
|
||||
#define IS_CLK_OUT2_FIXED_IO() (0)//no fix
|
||||
|
||||
#define CLK_OUT_CH3_SEL(clk) //no ch3
|
||||
#define CLK_OUT_CH3_GET_CLK() (0)//no ch3
|
||||
#define CLK_OUT_CH3_DIV(div) //no div
|
||||
#define CLK_OUT_CH3_EN(en) //no en
|
||||
#define CLK_OUT3_FIXED_IO_EN(en) //no en
|
||||
#define IS_CLK_OUT3_FIXED_IO() (0)//no fix
|
||||
|
||||
#define CLK_OUT_CH4_SEL(clk) //no ch4
|
||||
#define CLK_OUT_CH4_GET_CLK() (0)//no ch4
|
||||
#define CLK_OUT_CH4_DIV(div) //no div
|
||||
#define CLK_OUT_CH4_EN(en) //no en
|
||||
#define CLK_OUT4_FIXED_IO_EN(en) //no en
|
||||
#define IS_CLK_OUT4_FIXED_IO() (0)//no fix
|
||||
u32 clk_out_fixed_io_check(u32 gpio);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//for bt
|
||||
void clk_set_osc_cap(u8 sel_l, u8 sel_r);
|
||||
u32 clk_get_osc_cap();
|
||||
|
||||
#define BT_CLOCK_IN(x) //SFR(JL_CLOCK->CLK_CON1, 14, 2, x)
|
||||
//for MACRO - BT_CLOCK_IN
|
||||
enum {
|
||||
BT_CLOCK_IN_PLL48M = 0,
|
||||
BT_CLOCK_IN_HSB,
|
||||
BT_CLOCK_IN_LSB,
|
||||
BT_CLOCK_IN_DISABLE,
|
||||
};
|
||||
|
||||
|
||||
#endif /*CLOCK_HAL_H*/
|
||||
@@ -0,0 +1,278 @@
|
||||
|
||||
#ifndef ASM_CPU_H
|
||||
#define ASM_CPU_H
|
||||
|
||||
|
||||
#include "br35.h"
|
||||
#include "csfr.h"
|
||||
#include "cache.h"
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#if ((!defined __cplusplus) && (!defined BOOL_DEFINE_CONFLICT))
|
||||
typedef unsigned char bool;
|
||||
#endif
|
||||
typedef unsigned char u8, BOOL;
|
||||
typedef char s8;
|
||||
typedef unsigned short u16;
|
||||
typedef signed short s16;
|
||||
typedef unsigned int u32;
|
||||
typedef signed int s32;
|
||||
typedef unsigned long long u64;
|
||||
typedef u32 FOURCC;
|
||||
typedef long long s64;
|
||||
typedef unsigned long long u64;
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#define ___trig __asm__ volatile ("trigger")
|
||||
|
||||
|
||||
#ifndef BIG_ENDIAN
|
||||
#define BIG_ENDIAN 0x3021
|
||||
#endif
|
||||
#ifndef LITTLE_ENDIAN
|
||||
#define LITTLE_ENDIAN 0x4576
|
||||
#endif
|
||||
#define CPU_ENDIAN LITTLE_ENDIAN
|
||||
|
||||
|
||||
#define CPU_CORE_NUM 1
|
||||
|
||||
#define CONFIG_SPINLOCK_ENABLE 0
|
||||
|
||||
#define OS_CORE_AFFINITY_ENABLE CONFIG_OS_AFFINITY_ENABLE //app_cfg.mk中定义, Modify Me: 0: 自由分配, 1: 固定核
|
||||
|
||||
extern const int CONFIG_CPU_UNMASK_IRQ_ENABLE;
|
||||
///屏蔽的优先级, < N的优先级不可以响应
|
||||
#define CPU_IRQ_IPMASK_LEVEL 6
|
||||
|
||||
#define CPU_TASK_CLR(a)
|
||||
#define CPU_TASK_SW(a) \
|
||||
do { \
|
||||
q32DSP(a)->ILAT_SET |= BIT(3-a); \
|
||||
} while (0)
|
||||
|
||||
|
||||
#define CPU_INT_NESTING 2
|
||||
|
||||
#define CORE_IDLE_TICK_TIMER_PERIOD 4000 //10 ~ 16000 ms
|
||||
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#if CPU_CORE_NUM > 1
|
||||
__attribute__((always_inline))
|
||||
static int current_cpu_id()
|
||||
{
|
||||
unsigned id;
|
||||
asm volatile("%0 = cnum" : "=r"(id) ::);
|
||||
return id ;
|
||||
}
|
||||
|
||||
__attribute__((always_inline))
|
||||
static int core_num(void)
|
||||
{
|
||||
u32 num;
|
||||
asm volatile("%0 = cnum" : "=r"(num) :);
|
||||
return num;
|
||||
}
|
||||
|
||||
#else
|
||||
static inline int current_cpu_id()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int core_num(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline int cpu_in_irq()
|
||||
{
|
||||
int flag;
|
||||
__asm__ volatile("%0 = icfg" : "=r"(flag));
|
||||
return flag & 0xff;
|
||||
}
|
||||
|
||||
extern int __cpu_irq_disabled();
|
||||
static inline int cpu_irq_disabled()
|
||||
{
|
||||
int flag;
|
||||
int ret;
|
||||
|
||||
if (CONFIG_CPU_UNMASK_IRQ_ENABLE) {
|
||||
return __cpu_irq_disabled();
|
||||
} else {
|
||||
__asm__ volatile("%0 = icfg" : "=r"(flag));
|
||||
ret = ((flag & 0x300) != 0x300);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static inline int data_sat_s16(int ind)
|
||||
{
|
||||
if (ind > 32767) {
|
||||
ind = 32767;
|
||||
} else if (ind < -32768) {
|
||||
ind = -32768;
|
||||
}
|
||||
return ind;
|
||||
}
|
||||
|
||||
#else
|
||||
static inline int data_sat_s16(int ind)
|
||||
{
|
||||
__asm__ volatile(
|
||||
" %0 = sat16(%0)(s) \t\n"
|
||||
: "=&r"(ind)
|
||||
: "0"(ind)
|
||||
:);
|
||||
return ind;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static inline u32 reverse_u32(u32 data32)
|
||||
{
|
||||
#if 0
|
||||
u8 *dataptr = (u8 *)(&data32);
|
||||
data32 = (((u32)dataptr[0] << 24) | ((u32)dataptr[1] << 16) | ((u32)dataptr[2] << 8) | (u32)dataptr[3]);
|
||||
#else
|
||||
__asm__ volatile("%0 = rev8(%0) \t\n" : "=&r"(data32) : "0"(data32) :);
|
||||
#endif
|
||||
return data32;
|
||||
}
|
||||
|
||||
static inline u32 reverse_u16(u16 data16)
|
||||
{
|
||||
u32 retv;
|
||||
#if 0
|
||||
u8 *dataptr = (u8 *)(&data16);
|
||||
retv = (((u32)dataptr[0] << 8) | ((u32)dataptr[1]));
|
||||
#else
|
||||
retv = ((u32)data16) << 16;
|
||||
__asm__ volatile("%0 = rev8(%0) \t\n" : "=&r"(retv) : "0"(retv) :);
|
||||
#endif
|
||||
return retv;
|
||||
}
|
||||
|
||||
static inline u32 rand32()
|
||||
{
|
||||
return JL_RAND->R64L;
|
||||
}
|
||||
|
||||
#define __asm_sine(s64, precision) \
|
||||
({ \
|
||||
u64 ret; \
|
||||
u8 sel = 0; \
|
||||
__asm__ volatile ("%0 = copex(%1) (%2)" : "=r"(ret) : "r"(s64), "i"(sel)); \
|
||||
ret = ret>>32; \
|
||||
ret;\
|
||||
})
|
||||
|
||||
void p33_soft_reset(void);
|
||||
static inline void cpu_reset(void)
|
||||
{
|
||||
// JL_CLOCK->PWR_CON |= (1 << 4);
|
||||
p33_soft_reset();
|
||||
}
|
||||
|
||||
#define __asm_csync() \
|
||||
do { \
|
||||
asm volatile("csync;"); \
|
||||
} while (0)
|
||||
|
||||
#include "asm/irq.h"
|
||||
#include "generic/printf.h"
|
||||
#include "generic/log.h"
|
||||
|
||||
|
||||
#define arch_atomic_read(v) \
|
||||
({ \
|
||||
__asm_csync(); \
|
||||
(*(volatile int *)&(v)->counter); \
|
||||
})
|
||||
|
||||
static inline void q32DSP_testset(u8 volatile *ptr)
|
||||
{
|
||||
asm volatile(
|
||||
" 1: \n\t "
|
||||
" testset b[%0] \n\t "
|
||||
" ifeq goto 1b \n\t "
|
||||
:
|
||||
: "p"(ptr)
|
||||
: "memory"
|
||||
);
|
||||
}
|
||||
|
||||
static inline void q32DSP_testclr(u8 volatile *ptr)
|
||||
{
|
||||
asm volatile(
|
||||
" b[%0] = %1 \n\t "
|
||||
:
|
||||
: "p"(ptr), "r"(0)
|
||||
: "memory"
|
||||
);
|
||||
}
|
||||
|
||||
#define arch_spin_lock(lock) \
|
||||
do { \
|
||||
q32DSP_testset(&lock->rwlock);\
|
||||
}while(0)
|
||||
|
||||
#define arch_spin_unlock(lock) \
|
||||
do{ \
|
||||
q32DSP_testclr(&lock->rwlock) ;\
|
||||
}while(0)
|
||||
|
||||
|
||||
|
||||
extern void local_irq_disable();
|
||||
extern void local_irq_enable();
|
||||
|
||||
#define CPU_SR_ALLOC() \
|
||||
// int flags
|
||||
|
||||
#define CPU_CRITICAL_ENTER() \
|
||||
do { \
|
||||
local_irq_disable(); \
|
||||
}while(0)
|
||||
|
||||
|
||||
#define CPU_CRITICAL_EXIT() \
|
||||
do { \
|
||||
local_irq_enable(); \
|
||||
}while(0)
|
||||
|
||||
|
||||
|
||||
extern void cpu_assert_debug();
|
||||
extern const int config_asser;
|
||||
#define ASSERT(a,...) \
|
||||
do { \
|
||||
if(config_asser){\
|
||||
if(!(a)){ \
|
||||
printf("cpu %d file:%s, line:%d",current_cpu_id(), __FILE__, __LINE__); \
|
||||
printf("ASSERT-FAILD: "#a" "__VA_ARGS__); \
|
||||
cpu_assert_debug(); \
|
||||
} \
|
||||
}else {\
|
||||
if(!(a)){ \
|
||||
cpu_reset(); \
|
||||
}\
|
||||
}\
|
||||
}while(0);
|
||||
|
||||
|
||||
|
||||
#endif //__ASSEMBLY__
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
#ifndef __CPU_CRC16_H__
|
||||
#define __CPU_CRC16_H__
|
||||
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
|
||||
|
||||
u16 CRC16(const void *ptr, u32 len);
|
||||
|
||||
/* i_val: CRC校验初值 */
|
||||
u16 CRC16_with_initval(const void *ptr, u32 len, u16 i_val);
|
||||
|
||||
u16 CRC16_with_code(const void *ptr, u32 len, u16 code);
|
||||
|
||||
void spi_crc16_set(u16 crc);
|
||||
u16 spi_crc16_get(void);
|
||||
|
||||
void CrcDecode(void *buf, u16 len);
|
||||
|
||||
u16 get_page_efuse(u32 page, u32 delay_cnt);
|
||||
void init_enc_key(u8 cmd);
|
||||
u32 get_sfc_enc_key(void);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,425 @@
|
||||
//*********************************************************************************//
|
||||
// Module name : csfr.h //
|
||||
// Description : q32DSP core sfr define //
|
||||
// By Designer : zequan_liu //
|
||||
// Dat changed : //
|
||||
//*********************************************************************************//
|
||||
|
||||
#ifndef __Q32DSP_CSFR__
|
||||
#define __Q32DSP_CSFR__
|
||||
|
||||
#define __RW volatile // read write
|
||||
#define __RO volatile const // only read
|
||||
#define __WO volatile // only write
|
||||
|
||||
#define __u8 unsigned int // u8 to u32 special for struct
|
||||
#define __u16 unsigned int // u16 to u32 special for struct
|
||||
#define __u32 unsigned int
|
||||
|
||||
#define csfr_base 0xff0000
|
||||
|
||||
//*********************************************************************************
|
||||
//
|
||||
// hcore_sfr
|
||||
//
|
||||
//*********************************************************************************
|
||||
|
||||
//............. 0x0000 - 0x00ff............
|
||||
typedef struct {
|
||||
__RW __u32 CON0;
|
||||
__RW __u32 FTMAX;
|
||||
} JL_CMNG_TypeDef;
|
||||
|
||||
#define JL_CMNG_BASE (csfr_base + map_adr(0x00, 0x00))
|
||||
#define JL_CMNG ((JL_CMNG_TypeDef *)JL_CMNG_BASE)
|
||||
|
||||
//............. 0x0100 - 0x01ff............
|
||||
//typedef struct {
|
||||
// __RW __u32 CON;
|
||||
// __RW __u32 KEY;
|
||||
//} JL_SDTAP_TypeDef;
|
||||
|
||||
//#define JL_SDTAP_BASE (csfr_base + map_adr(0x01, 0x00))
|
||||
//#define JL_SDTAP ((JL_SDTAP_TypeDef *)JL_SDTAP_BASE)
|
||||
|
||||
//............. 0x0200 - 0x02ff............
|
||||
typedef struct {
|
||||
__RW __u32 WREN;
|
||||
__RW __u32 CON0;
|
||||
__RW __u32 CON1;
|
||||
__RW __u32 CON2;
|
||||
__RW __u32 CON3;
|
||||
__RW __u32 MSG0;
|
||||
__RW __u32 MSG1;
|
||||
__RW __u32 MSG2;
|
||||
__RW __u32 MSG3;
|
||||
__RO __u32 ID;
|
||||
} JL_CEMU_TypeDef;
|
||||
|
||||
#define JL_CEMU_BASE (csfr_base + map_adr(0x02, 0x00))
|
||||
#define JL_CEMU ((JL_CEMU_TypeDef *)JL_CEMU_BASE)
|
||||
|
||||
//............. 0x0300 - 0x03ff............
|
||||
|
||||
#define MPU_INV (1<<31)
|
||||
#define MPU_PWEN (1<<16)
|
||||
#define MPU_PREN (1<<8)
|
||||
#define MPU_PEN (MPU_PWEN | MPU_PREN)
|
||||
#define MPU_XEN (1<<2)
|
||||
#define MPU_WEN (1<<1)
|
||||
#define MPU_REN (1<<0)
|
||||
|
||||
#define MPU_IDx_cfg(n, id) (id<<(n*8))
|
||||
#define MPU_IDx_pen(n, pr, pw) ((pr<<(9+n)) | (pw<<(17+n)))
|
||||
|
||||
typedef struct {
|
||||
__RW __u32 CON[15]; // 0-1 used in br35
|
||||
__RO __u32 REV0;
|
||||
__RW __u32 CID[15]; // 0-1 used in br35
|
||||
__RO __u32 REV1;
|
||||
__RW __u32 BEG[15]; // 0-1 used in br35
|
||||
__RO __u32 REV2;
|
||||
__RW __u32 END[15]; // 0-1 used in br35
|
||||
__RW __u32 WREN;
|
||||
} JL_MPU_TypeDef;
|
||||
|
||||
#define JL_MPU_BASE (csfr_base + map_adr(0x03, 0x00))
|
||||
#define JL_MPU ((JL_MPU_TypeDef *)JL_MPU_BASE)
|
||||
|
||||
//............. 0x0400 - 0x04ff............
|
||||
|
||||
typedef struct {
|
||||
__RW __u32 CON;
|
||||
__RW __u32 TLB1_BEG;
|
||||
__RW __u32 TLB1_END;
|
||||
} JL_MMU_TypeDef;
|
||||
|
||||
#define JL_MMU_BASE (csfr_base + map_adr(0x04, 0x00))
|
||||
#define JL_MMU ((JL_MMU_TypeDef *)JL_MMU_BASE)
|
||||
|
||||
typedef struct {
|
||||
short page: 14;
|
||||
short vld: 1;
|
||||
} JL_MMU_TLB1_TypeDef;
|
||||
|
||||
#define JL_MMU_TLB1 ((JL_MMU_TLB1_TypeDef *)(JL_MMU->TLB1_BEG))
|
||||
|
||||
//............. 0x0500 - 0x05ff............
|
||||
//#define JL_TypeDef_L1P JL_TypeDef_q32DSP_ICU
|
||||
#define JL_TypeDef_L1P JL_TypeDef_q32DSP_DCU
|
||||
#define JL_L1P_BASE (csfr_base + map_adr(0x05, 0x00))
|
||||
#define JL_L1P ((JL_TypeDef_L1P *)JL_L1P_BASE)
|
||||
|
||||
//............. 0x0600 - 0x06ff............
|
||||
#define JL_TypeDef_L2I JL_TypeDef_q32DSP_ICU
|
||||
#define JL_L2I_BASE (csfr_base + map_adr(0x06, 0x00))
|
||||
#define JL_L2I ((JL_TypeDef_L2I *)JL_L2I_BASE)
|
||||
|
||||
//............. 0x0700 - 0x07ff............
|
||||
#define JL_TypeDef_L2D JL_TypeDef_q32DSP_DCU
|
||||
#define JL_L2D_BASE (csfr_base + map_adr(0x07, 0x00))
|
||||
#define JL_L2D ((JL_TypeDef_L2D *)JL_L2D_BASE)
|
||||
|
||||
//............. 0x0800 - 0x08ff............
|
||||
typedef struct {
|
||||
__RO __u32 CHIP_ID;
|
||||
__RO __u32 CHIP_VER;
|
||||
} JL_SYSTEM_TypeDef;
|
||||
|
||||
#define JL_SYSTEM_BASE (csfr_base + map_adr(0x08, 0x00))
|
||||
#define JL_SYSTEM ((JL_SYSTEM_TypeDef *)JL_SYSTEM_BASE)
|
||||
|
||||
//............. 0x0900 - 0x09ff............
|
||||
typedef struct {
|
||||
__RW __u32 CON;
|
||||
__RW __u32 BEG;
|
||||
__RW __u32 END;
|
||||
__RW __u32 DAT_VLD0;
|
||||
__RW __u32 DAT_VLD1;
|
||||
__RW __u32 DAT_VLD2;
|
||||
__RW __u32 DAT_VLD3;
|
||||
__RO __u32 ROM_CRC;
|
||||
__RW __u32 MCFG0_SEL;
|
||||
__RW __u32 MCFG1_SEL;
|
||||
__RW __u32 MCFG0_RF1P;
|
||||
__RW __u32 MCFG0_RF2P;
|
||||
__RW __u32 MCFG0_RM1P;
|
||||
__RW __u32 MCFG0_RM2P;
|
||||
__RW __u32 MCFG0_VROM;
|
||||
__RW __u32 MCFG1_RM1P;
|
||||
__RW __u32 MCFG0_CON[2];
|
||||
__RW __u32 MCFG1_CON[2];
|
||||
} JL_MBIST_TypeDef;
|
||||
|
||||
#define JL_MBIST_BASE (csfr_base + map_adr(0x09, 0x00))
|
||||
#define JL_MBIST ((JL_MBIST_TypeDef *)JL_MBIST_BASE)
|
||||
|
||||
//............. 0x0a00 - 0x0aff............
|
||||
//typedef struct {
|
||||
// __RW __u32 CON;
|
||||
// __RW __u32 CADR;
|
||||
// __RW __u32 ACC0L;
|
||||
// __RW __u32 ACC0H;
|
||||
// __RW __u32 ACC1L;
|
||||
// __RW __u32 ACC1H;
|
||||
// __RW __u32 CONST;
|
||||
// __RW __u32 TEST1;
|
||||
//} JL_FFT_TypeDef;
|
||||
//
|
||||
//#define JL_FFT_BASE (csfr_base + map_adr(0x0a, 0x00))
|
||||
//#define JL_FFT ((JL_FFT_TypeDef *)JL_FFT_BASE)
|
||||
|
||||
//............. 0x0b00 - 0x0bff............
|
||||
//typedef struct {
|
||||
///* 00 */ __RW __u32 CON0;
|
||||
///* 01 */ __RW __u32 LPEN_CON;
|
||||
///* 02 */ __RW __u32 LSEN_CON;
|
||||
///* 03 */ __RO __u32 LS_PND;
|
||||
///* 04 */ __RO __u32 CE_PND;
|
||||
///* 05 */ __RW __u32 LS_PRD_32K;
|
||||
///* 06 */ __RW __u32 CE_PRD_32K;
|
||||
///* 07 */ __RW __u32 LS_PRD_64K;
|
||||
///* 08 */ __RW __u32 CE_PRD_64K;
|
||||
///* 09 */ __RW __u32 LS_PRD_ROM;
|
||||
///* 0a */ __RW __u32 CE_PRD_ROM;
|
||||
//} JL_ATOLP_TypeDef;
|
||||
|
||||
//#define JL_ATOLP_BASE (csfr_base + map_adr(0x0b, 0x00))
|
||||
//#define JL_ATOLP ((JL_ATOLP_TypeDef *)JL_ATOLP_BASE)
|
||||
|
||||
//*********************************************************************************
|
||||
//
|
||||
// q32DSP_sfr
|
||||
//
|
||||
//*********************************************************************************
|
||||
|
||||
//---------------------------------------------//
|
||||
// q32DSP define
|
||||
//---------------------------------------------//
|
||||
|
||||
#define q32DSP_sfr_offset 0x000800
|
||||
#define q32DSP_sfr_base (csfr_base + 0xe000)
|
||||
|
||||
#define q32DSP_cpu_base (q32DSP_sfr_base + 0x0000)
|
||||
#define q32DSP_icu_base (q32DSP_sfr_base + 0x0400)
|
||||
|
||||
#define q32DSP(n) ((JL_TypeDef_q32DSP *)(q32DSP_sfr_base + q32DSP_sfr_offset*n))
|
||||
#define q32DSP_icu(n) ((JL_TypeDef_q32DSP_ICU *)(q32DSP_icu_base + q32DSP_sfr_offset*n))
|
||||
|
||||
//---------------------------------------------//
|
||||
// q32DSP core sfr
|
||||
//---------------------------------------------//
|
||||
|
||||
typedef struct {
|
||||
/* 00 */ __RO __u32 DR00;
|
||||
/* 01 */ __RO __u32 DR01;
|
||||
/* 02 */ __RO __u32 DR02;
|
||||
/* 03 */ __RO __u32 DR03;
|
||||
/* 04 */ __RO __u32 DR04;
|
||||
/* 05 */ __RO __u32 DR05;
|
||||
/* 06 */ __RO __u32 DR06;
|
||||
/* 07 */ __RO __u32 DR07;
|
||||
/* 08 */ __RO __u32 DR08;
|
||||
/* 09 */ __RO __u32 DR09;
|
||||
/* 0a */ __RO __u32 DR10;
|
||||
/* 0b */ __RO __u32 DR11;
|
||||
/* 0c */ __RO __u32 DR12;
|
||||
/* 0d */ __RO __u32 DR13;
|
||||
/* 0e */ __RO __u32 DR14;
|
||||
/* 0f */ __RO __u32 DR15;
|
||||
|
||||
/* 10 */ __RO __u32 RETI;
|
||||
/* 11 */ __RO __u32 RETE;
|
||||
/* 12 */ __RO __u32 RETX;
|
||||
/* 13 */ __RO __u32 RETS;
|
||||
/* 14 */ __RO __u32 SR04;
|
||||
/* 15 */ __RO __u32 PSR;
|
||||
/* 16 */ __RO __u32 CNUM;
|
||||
/* 17 */ __RO __u32 SR07;
|
||||
/* 18 */ __RO __u32 SR08;
|
||||
/* 19 */ __RO __u32 SR09;
|
||||
/* 1a */ __RO __u32 SR10;
|
||||
/* 1b */ __RO __u32 ICFG;
|
||||
/* 1c */ __RO __u32 USP;
|
||||
/* 1d */ __RO __u32 SSP;
|
||||
/* 1e */ __RO __u32 SP;
|
||||
/* 1f */ __RO __u32 PCRS;
|
||||
|
||||
/* 20 */ __RW __u32 BPCON;
|
||||
/* 21 */ __RW __u32 BSP;
|
||||
/* 22 */ __RW __u32 BP0;
|
||||
/* 23 */ __RW __u32 BP1;
|
||||
/* 24 */ __RW __u32 BP2;
|
||||
/* 25 */ __RW __u32 BP3;
|
||||
/* 26 */ __WO __u32 CMD_PAUSE;
|
||||
/* 27 */ __RW __u32 BP4;
|
||||
/* 28 */ __RW __u32 BP5;
|
||||
/* 29 */ __RW __u32 BP6;
|
||||
/* 2a */ __RW __u32 BP7;
|
||||
/* */ __RO __u32 REV2a[0x30 - 0x2a - 1];
|
||||
|
||||
/* 30 */ __RW __u32 PMU_CON0;
|
||||
/* 31 */ __RW __u32 PMU_CON1;
|
||||
/* 32 */ __RO __u32 RST_ADDR;
|
||||
/* */ __RO __u32 REV32[0x3b - 0x32 - 1];
|
||||
/* 3b */ __RW __u8 TTMR_CON;
|
||||
/* 3c */ __RW __u32 TTMR_CNT;
|
||||
/* 3d */ __RW __u32 TTMR_PRD;
|
||||
/* */ __RO __u32 REV3d[0x40 - 0x3d - 1];
|
||||
|
||||
/* 40 */ __RW __u32 ICFG00;
|
||||
/* 41 */ __RW __u32 ICFG01;
|
||||
/* 42 */ __RW __u32 ICFG02;
|
||||
/* 43 */ __RW __u32 ICFG03;
|
||||
/* 44 */ __RW __u32 ICFG04;
|
||||
/* 45 */ __RW __u32 ICFG05;
|
||||
/* 46 */ __RW __u32 ICFG06;
|
||||
/* 47 */ __RW __u32 ICFG07;
|
||||
/* 48 */ __RW __u32 ICFG08;
|
||||
/* 49 */ __RW __u32 ICFG09;
|
||||
/* 4a */ __RW __u32 ICFG10;
|
||||
/* 4b */ __RW __u32 ICFG11;
|
||||
/* 4c */ __RW __u32 ICFG12;
|
||||
/* 4d */ __RW __u32 ICFG13;
|
||||
/* 4e */ __RW __u32 ICFG14;
|
||||
/* 4f */ __RW __u32 ICFG15;
|
||||
|
||||
/* 50 */ __RW __u32 ICFG16;
|
||||
/* 51 */ __RW __u32 ICFG17;
|
||||
/* 52 */ __RW __u32 ICFG18;
|
||||
/* 53 */ __RW __u32 ICFG19;
|
||||
/* 54 */ __RW __u32 ICFG20;
|
||||
/* 55 */ __RW __u32 ICFG21;
|
||||
/* 56 */ __RW __u32 ICFG22;
|
||||
/* 57 */ __RW __u32 ICFG23;
|
||||
/* 58 */ __RW __u32 ICFG24;
|
||||
/* 59 */ __RW __u32 ICFG25;
|
||||
/* 5a */ __RW __u32 ICFG26;
|
||||
/* 5b */ __RW __u32 ICFG27;
|
||||
/* 5c */ __RW __u32 ICFG28;
|
||||
/* 5d */ __RW __u32 ICFG29;
|
||||
/* 5e */ __RW __u32 ICFG30;
|
||||
/* 5f */ __RW __u32 ICFG31;
|
||||
|
||||
/* 60 */ __RO __u32 IPND0;
|
||||
/* 61 */ __RO __u32 IPND1;
|
||||
/* 62 */ __RO __u32 IPND2;
|
||||
/* 63 */ __RO __u32 IPND3;
|
||||
/* 64 */ __RO __u32 IPND4;
|
||||
/* 65 */ __RO __u32 IPND5;
|
||||
/* 66 */ __RO __u32 IPND6;
|
||||
/* 67 */ __RO __u32 IPND7;
|
||||
/* 68 */ __WO __u32 ILAT_SET;
|
||||
/* 69 */ __WO __u32 ILAT_CLR;
|
||||
/* 6a */ __RW __u32 IPMASK;
|
||||
/* 6b */ __RW __u32 GIEMASK;
|
||||
/* 6c */ __RW __u32 IWKUP_NUM;
|
||||
/* */ __RO __u32 REV6c[0x70 - 0x6c - 1];
|
||||
|
||||
/* 70 */ __RW __u32 ETM_CON;
|
||||
/* 71 */ __RO __u32 ETM_PC0;
|
||||
/* 72 */ __RO __u32 ETM_PC1;
|
||||
/* 73 */ __RO __u32 ETM_PC2;
|
||||
/* 74 */ __RO __u32 ETM_PC3;
|
||||
/* 75 */ __RW __u32 WP0_ADRH;
|
||||
/* 76 */ __RW __u32 WP0_ADRL;
|
||||
/* 77 */ __RW __u32 WP0_DATH;
|
||||
/* 78 */ __RW __u32 WP0_DATL;
|
||||
/* 79 */ __RO __u32 WP0_PC;
|
||||
/* 7a */ __RO __u32 WP0_AMSG;
|
||||
/* */ __RO __u32 REV7b[0x80 - 0x7a - 1];
|
||||
|
||||
/* 80 */ __RW __u32 EMU_CON;
|
||||
/* 81 */ __RW __u32 EMU_MSG;
|
||||
/* 82 */ __RW __u32 EMU_SSP_H;
|
||||
/* 83 */ __RW __u32 EMU_SSP_L;
|
||||
/* 84 */ __RW __u32 EMU_USP_H;
|
||||
/* 85 */ __RW __u32 EMU_USP_L;
|
||||
/* 86 */ __RW __u32 LIM_PC0_H;
|
||||
/* 87 */ __RW __u32 LIM_PC0_L;
|
||||
/* 88 */ __RW __u32 LIM_PC1_H;
|
||||
/* 89 */ __RW __u32 LIM_PC1_L;
|
||||
/* 8a */ __RW __u32 LIM_PC2_H;
|
||||
/* 8b */ __RW __u32 LIM_PC2_L;
|
||||
/* */ __RO __u32 REV8b[0x90 - 0x8b - 1];
|
||||
|
||||
/* 90 */ __RW __u32 ESU_CON;
|
||||
/* 91 */ __RO __u32 CNT_CHIT;
|
||||
/* 92 */ __RO __u32 CNT_CMIS;
|
||||
/* 93 */ __RO __u32 CNT_FILL;
|
||||
/* 94 */ __RO __u32 CNT_IHIT;
|
||||
/* 95 */ __RO __u32 CNT_IMIS;
|
||||
/* 96 */ __RO __u32 CNT_RHIT;
|
||||
/* 97 */ __RO __u32 CNT_RMIS;
|
||||
/* 98 */ __RO __u32 CNT_WHIT;
|
||||
/* 99 */ __RO __u32 CNT_WMIS;
|
||||
} JL_TypeDef_q32DSP;
|
||||
|
||||
//---------------------------------------------//
|
||||
// q32DSP icache sfr
|
||||
//---------------------------------------------//
|
||||
|
||||
typedef struct {
|
||||
__RW __u32 CON;
|
||||
__RW __u32 EMU_CON;
|
||||
__RW __u32 EMU_MSG;
|
||||
__RW __u32 EMU_ID;
|
||||
__RW __u32 CMD_CON;
|
||||
__RW __u32 CMD_BEG;
|
||||
__RW __u32 CMD_END;
|
||||
__RW __u32 CNT_RACK;
|
||||
__RW __u32 CNT_RNAK;
|
||||
__RW __u32 MBIST_SEL;
|
||||
__RW __u32 MCFG0_CON[2];
|
||||
} JL_TypeDef_q32DSP_ICU;
|
||||
|
||||
|
||||
//---------------------------------------------//
|
||||
// q32DSP dcache sfr
|
||||
//---------------------------------------------//
|
||||
|
||||
typedef struct {
|
||||
__RW __u32 CON;
|
||||
__RW __u32 EMU_CON;
|
||||
__RW __u32 EMU_MSG;
|
||||
__RW __u32 EMU_ID;
|
||||
__RW __u32 CNT_WACK;
|
||||
__RW __u32 CNT_WNAK;
|
||||
__RW __u32 CNT_RACK;
|
||||
__RW __u32 CNT_RNAK;
|
||||
__RW __u32 CMD_CON[4];
|
||||
__RW __u32 CMD_BEG[4];
|
||||
__RW __u32 CMD_END[4];
|
||||
__RW __u32 MBIST_SEL;
|
||||
__RW __u32 MCFG0_CON[2];
|
||||
__RO __u32 REV1[0x20 - 0x16 - 1];
|
||||
__WO __u32 CMO[32];
|
||||
} JL_TypeDef_q32DSP_DCU;
|
||||
|
||||
|
||||
//*********************************************************************************//
|
||||
|
||||
#define TICK_CON (q32DSP(0)->TTMR_CON)
|
||||
#define TICK_PRD (q32DSP(0)->TTMR_PRD)
|
||||
#define TICK_CNT (q32DSP(0)->TTMR_CNT)
|
||||
|
||||
#define SOFT_CLEAR_PENDING (q32DSP(0)->ILAT_CLR)
|
||||
|
||||
#define CPU_MSG (q32DSP(0)->EMU_MSG)
|
||||
#define CPU_CON (q32DSP(0)->EMU_CON)
|
||||
|
||||
#undef __RW
|
||||
#undef __RO
|
||||
#undef __WO
|
||||
|
||||
#undef __u8
|
||||
#undef __u16
|
||||
#undef __u32
|
||||
|
||||
//*********************************************************************************//
|
||||
// //
|
||||
// end of this module //
|
||||
// //
|
||||
//*********************************************************************************//
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
#ifndef _CTMU_DRV_H_
|
||||
#define _CTMU_DRV_H_
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
#define CTMU_KEY_CH_MAX 3
|
||||
|
||||
typedef struct _CTMU_KEY_VAR {
|
||||
s32 touch_release_buf[CTMU_KEY_CH_MAX]; //按键释放值滤波器buffer
|
||||
u16 touch_cnt_buf[CTMU_KEY_CH_MAX]; //按键计数值滤波器buffer
|
||||
s16 FLT1CFG1; //滤波器1配置参数1
|
||||
s16 FLT1CFG2; //滤波器1配置参数2, 等于(-RELEASECFG0)<<FLT1CFG0
|
||||
s16 PRESSCFG; //按下判决门限
|
||||
s16 RELEASECFG0; //释放判决门限0
|
||||
s16 RELEASECFG1; //释放判决门限1
|
||||
s8 FLT0CFG; //滤波器0配置参数(0/1/2/3)
|
||||
s8 FLT1CFG0; //滤波器1配置参数0
|
||||
u16 touch_key_state; //按键状态标志,随时可能被中断改写,按键处理程序需要将此标志复制出来再行处理
|
||||
u8 touch_init_cnt[CTMU_KEY_CH_MAX]; //初始化计数器,非0时进行初始化
|
||||
} sCTMU_KEY_VAR;
|
||||
|
||||
|
||||
struct ctmu_key_port {
|
||||
u8 port; //触摸按键IO
|
||||
u8 key_value; //按键返回值
|
||||
};
|
||||
|
||||
struct ctmu_touch_key_platform_data {
|
||||
u8 num; //触摸按键个数
|
||||
s16 press_cfg; //按下判决门限
|
||||
s16 release_cfg0; //释放判决门限0
|
||||
s16 release_cfg1; //释放判决门限1
|
||||
const struct ctmu_key_port *port_list;
|
||||
};
|
||||
|
||||
/* =========== ctmu API ============= */
|
||||
//ctmu 初始化
|
||||
int ctmu_init(void *_data);
|
||||
|
||||
//获取plcnt按键状态
|
||||
u8 get_ctmu_value(void);
|
||||
|
||||
|
||||
#endif /* #ifndef _CTMU_DRV_H_ */
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
#ifndef __Q32DSP_DCACHE__
|
||||
#define __Q32DSP_DCACHE__
|
||||
|
||||
//*********************************************************************************//
|
||||
// Module name : dcache.h //
|
||||
// Description : q32DSP dcache control head file //
|
||||
// By Designer : zequan_liu //
|
||||
// Dat changed : //
|
||||
//*********************************************************************************//
|
||||
|
||||
#define INCLUDE_DCU_RPT 0
|
||||
#define INCLUDE_DCU_EMU 0
|
||||
#define INCLUDE_L1D 0
|
||||
#define INCLUDE_L2D 0
|
||||
|
||||
//------------------------------------------------------//
|
||||
// peripheral level 1 function
|
||||
//------------------------------------------------------//
|
||||
|
||||
#if (INCLUDE_L1D)
|
||||
|
||||
void L1pEnable(void);
|
||||
void L1pDisable(void);
|
||||
void L1pInitial(void);
|
||||
void L1pSetWayNum(unsigned int way);
|
||||
|
||||
void L1pInvalidAll(void);
|
||||
void L1pInvalidRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
void L1pFlushAll(void);
|
||||
void L1pFlushRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
void L1pFlushinvAll(void);
|
||||
void L1pFlushinvRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
void L1pPfetchRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
|
||||
void L1pReportEnable(void);
|
||||
void L1pReportDisable(void);
|
||||
void L1pReportClear(void);
|
||||
void L1pReportPrintf(void);
|
||||
|
||||
void L1pEmuEnable(void);
|
||||
void L1pEmuDisable(void);
|
||||
void L1pEmuMessage(void);
|
||||
|
||||
void L1pWrThroughRegion(unsigned int num, unsigned int *beg, unsigned int len);
|
||||
void L1pRwThroughRegion(unsigned int num, unsigned int *beg, unsigned int len);
|
||||
void L1pPrivateRegion(unsigned int num, unsigned int *beg, unsigned int len);
|
||||
|
||||
#else
|
||||
|
||||
#define L1pEnable DcuEnable
|
||||
#define L1pDisable DcuDisable
|
||||
#define L1pInitial DcuInitial
|
||||
#define L1pWaitIdle DcuWaitIdle
|
||||
#define L1pSetWayNum DcuSetWayNum
|
||||
|
||||
#define L1pInvalidAll DcuInvalidAll
|
||||
#define L1pInvalidRegion DcuInvalidRegion
|
||||
#define L1pFlushAll DcuFlushAll
|
||||
#define L1pFlushRegion DcuFlushRegion
|
||||
#define L1pFlushinvAll DcuFlushinvAll
|
||||
#define L1pFlushinvRegion DcuFlushinvRegion
|
||||
#define L1pPfetchRegion DcuPfetchRegion
|
||||
|
||||
#define L1pReportEnable DcuReportEnable
|
||||
#define L1pReportDisable DcuReportDisable
|
||||
#define L1pReportClear DcuReportClear
|
||||
#define L1pReportPrintf DcuReportPrintf
|
||||
|
||||
#define L1pEmuEnable DcuEmuEnable
|
||||
#define L1pEmuDisable DcuEmuDisable
|
||||
#define L1pEmuMessage DcuEmuMessage
|
||||
|
||||
#define L1pWrThroughRegion DcuWrThroughRegion
|
||||
#define L1pRwThroughRegion DcuRwThroughRegion
|
||||
#define L1pPrivateRegion DcuPrivateRegion
|
||||
|
||||
#endif
|
||||
|
||||
//------------------------------------------------------//
|
||||
// dcache level 1 function
|
||||
//------------------------------------------------------//
|
||||
|
||||
void DcuEnable(void);
|
||||
void DcuDisable(void);
|
||||
void DcuInitial(void);
|
||||
void DcuWaitIdle(void);
|
||||
void DcuSetWayNum(unsigned int way);
|
||||
|
||||
void DcuInvalidAll(void);
|
||||
void DcuInvalidRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
void DcuFlushAll(void);
|
||||
void DcuFlushRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
void DcuFlushinvAll(void);
|
||||
void DcuFlushinvRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
void DcuPfetchRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
|
||||
void DcuReportEnable(void);
|
||||
void DcuReportDisable(void);
|
||||
void DcuReportClear(void);
|
||||
void DcuReportPrintf(void);
|
||||
|
||||
void DcuEmuEnable(void);
|
||||
void DcuEmuDisable(void);
|
||||
void DcuEmuMessage(void);
|
||||
|
||||
void DcuWrThroughRegion(unsigned int num, unsigned int *beg, unsigned int len);
|
||||
void DcuRwThroughRegion(unsigned int num, unsigned int *beg, unsigned int len);
|
||||
void DcuPrivateRegion(unsigned int num, unsigned int *beg, unsigned int len);
|
||||
|
||||
//------------------------------------------------------//
|
||||
// dcache level 2 function
|
||||
//------------------------------------------------------//
|
||||
|
||||
#if (INCLUDE_L2D)
|
||||
|
||||
void L2dEnable(void);
|
||||
void L2dDisable(void);
|
||||
void L2dInitial(void);
|
||||
void L2dSetWayNum(unsigned int way);
|
||||
|
||||
void L2dInvalidAll(void);
|
||||
void L2dInvalidRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
void L2dFlushAll(void);
|
||||
void L2dFlushRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
void L2dFlushinvAll(void);
|
||||
void L2dFlushinvRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
void L2dPfetchRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
|
||||
void L2dReportEnable(void);
|
||||
void L2dReportDisable(void);
|
||||
void L2dReportClear(void);
|
||||
void L2dReportPrintf(void);
|
||||
|
||||
void L2dEmuEnable(void);
|
||||
void L2dEmuDisable(void);
|
||||
void L2dEmuMessage(void);
|
||||
|
||||
void L2dWrThroughRegion(unsigned int num, unsigned int *beg, unsigned int len);
|
||||
void L2dRwThroughRegion(unsigned int num, unsigned int *beg, unsigned int len);
|
||||
void L2dPrivateRegion(unsigned int num, unsigned int *beg, unsigned int len);
|
||||
|
||||
#endif
|
||||
|
||||
//*********************************************************************************//
|
||||
// //
|
||||
// end of this module //
|
||||
// //
|
||||
//*********************************************************************************//
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
#ifndef __DEBUG_H__
|
||||
#define __DEBUG_H__
|
||||
|
||||
|
||||
typedef enum etm_detect_mode {
|
||||
CPU_SFR_DETECT_MODE = 1,
|
||||
CPU_RD_BUS_DETECT_MODE,
|
||||
CPU_WR_BUS_DETECT_MODE,
|
||||
CPU_RD_WR_BUS_DETECT_MODE,
|
||||
} ETM_DETECT_MODE;
|
||||
|
||||
|
||||
#define CDBG_IDx(n, id) ((1<<(n+4)) | (id<<(n*8+8)))
|
||||
#define CDBG_INV (1<<7)
|
||||
#define CDBG_PEN (1<<3)
|
||||
#define CDBG_XEN (1<<2)
|
||||
#define CDBG_WEN (1<<1)
|
||||
#define CDBG_REN (1<<0)
|
||||
|
||||
void debug_init();
|
||||
void exception_analyze();
|
||||
|
||||
/********************************** DUBUG SFR *****************************************/
|
||||
|
||||
u32 get_dev_id(char *name);
|
||||
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
/**
|
||||
* @brief Memory权限保护设置
|
||||
*
|
||||
* @param idx: 保护框索引, 范围: 0 ~ 3, 目前系统默认使用0和3, 用户可用1和2
|
||||
* @param begin: Memory开始地址
|
||||
* @param end: Memory结束地址
|
||||
* @param inv: 0: 保护框内, 1: 保护框外
|
||||
* @param format: "Cxwr0rw1rw2rw3rw", CPU:外设0:外设1:外设2:外设3,
|
||||
* @param ...: 外设ID号索引, 如: DBG_EQ, 见debug.h
|
||||
*/
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
void mpu_set(int idx, u32 begin, u32 end, u32 inv, const char *format, ...);
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
/**
|
||||
* @brief 取消指定框的mpu保护
|
||||
*
|
||||
* @param idx: 保护框索引号
|
||||
*/
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
void mpu_disable_by_index(u8 idx);
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
/**
|
||||
* @brief :取消所有保护框mpu保护
|
||||
*/
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
void mpu_diasble(void);
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
/**
|
||||
* @brief flash PC范围设置为Flash外区域, 调用该接口后调用flash里的函数将触发异常
|
||||
*/
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
void flash_pc_limit_disable();
|
||||
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
/**
|
||||
* @brief flash PC范围限制恢复为flash代码区域, 调用该接口后可调用flash里的函数
|
||||
*/
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
void flash_pc_limit_enable();
|
||||
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
/**
|
||||
* @brief CPU内存监测点设置
|
||||
*
|
||||
* @param low_addr: 监测区域起始地址
|
||||
* @param high_addr: 监测区域结束地址
|
||||
* @param low_limit_value: 监测内存下限值
|
||||
* @param high_limit_value: 监测内存上限值
|
||||
* @param mode: 监测模式(ETM_DETECT_MODE)
|
||||
* @param limit_range_out: 0(框内触发中断) 1(框外触发中断)
|
||||
* @param trigger_exception: 0(触发普通中断) 1(触发异常中断)
|
||||
*/
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
void cpu_etm_range_value_limit_detect(void *low_addr, void *high_addr, u32 low_limit_value, u32 high_limit_value, int mode, int limit_range_out, int trigger_exception);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
#ifndef _DMA_COPY_H_
|
||||
#define _DMA_COPY_H_
|
||||
|
||||
//=============================================================//
|
||||
//使用硬件dma模块搬运数据, 注意:
|
||||
// 1) 注意:本接口是异步接口,不适用dma读
|
||||
// 2) dest和src地址需要4byte对齐
|
||||
// 3)目前支持单模块使用;
|
||||
// 4)典型应用: IMB 乒乓buf搬数到psram;
|
||||
//=============================================================//
|
||||
void dma_memcpy_async(void *dest, void *src, u32 len);
|
||||
|
||||
|
||||
//=============================================================//
|
||||
// 等待dma_copy完成, 用于同步操作
|
||||
//=============================================================//
|
||||
void dma_memcpy_wait_idle(void);
|
||||
|
||||
|
||||
//=============================================================//
|
||||
// 注意:本接口是异步接口,用户可以注册完成信息的回调,priv 用户自行定义用户信息,例如信号量激活等
|
||||
//=============================================================//
|
||||
void dma_memcpy_async_with_callback(void *dest, void *src, u32 len, void (*callback)(void *priv), void *priv);
|
||||
|
||||
|
||||
//=============================================================//
|
||||
// 注意:本接口是同步接口
|
||||
// dest和src地址需要4byte对齐
|
||||
//=============================================================//
|
||||
void dma_memcpy_sync(void *dest, void *src, u32 len);
|
||||
|
||||
|
||||
//=============================================================//
|
||||
// 中断使用
|
||||
//=============================================================//
|
||||
void dma_memcpy_async_inirq(void *dest, void *src, u32 len);
|
||||
|
||||
|
||||
//=============================================================//
|
||||
// 注意:sync_wait 配置dma 是否等结束,1:等待dma结束 0:不等结束
|
||||
// 1) dest和src地址需要4byte对齐
|
||||
// 2) 按int的格式进行memset,len = n byte
|
||||
//=============================================================//
|
||||
void dma_memset_int32(void *dest, u32 data, u32 len, int sync_wait);
|
||||
|
||||
|
||||
//=============================================================//
|
||||
// 注意:sync_wait 配置dma 是否等结束,1:等待dma结束 0:不等结束
|
||||
// 1) dest和src地址需要4byte对齐
|
||||
// 2) 按short的格式进行memset,len = n byte
|
||||
//=============================================================//
|
||||
void dma_memset_short(void *dest, u16 data, u32 len, int sync_wait);
|
||||
|
||||
|
||||
//=============================================================//
|
||||
// 注意:sync_wait 配置dma 是否等结束,1:等待dma结束 0:不等结束
|
||||
// 1) dest和src地址需要4byte对齐
|
||||
// 2) 按u8的格式进行memset,len = n byte
|
||||
//=============================================================//
|
||||
void dma_memset_byte(void *dest, u8 data, u32 len, int sync_wait);
|
||||
|
||||
|
||||
|
||||
//dma_memcpy 锁,杰理内部使用
|
||||
void dma_memcpy_lock();
|
||||
|
||||
void dma_memcpy_unlock();
|
||||
|
||||
#endif /* #ifndef _DMA_COPY_H_ */
|
||||
@@ -0,0 +1,50 @@
|
||||
#ifndef __EFUSE_H__
|
||||
#define __EFUSE_H__
|
||||
|
||||
#define CHIP_VERSION_A 0x00
|
||||
#define CHIP_VERSION_B 0x01
|
||||
#define CHIP_VERSION_C 0x02
|
||||
|
||||
|
||||
u32 get_chip_version();
|
||||
u32 efuse_get_chip_id();
|
||||
u16 get_chip_id();
|
||||
u32 efuse_get_gpadc_vbg_trim();
|
||||
void efuse_init();
|
||||
|
||||
u8 get_en_act();
|
||||
u8 get_vddio_lvd_en();
|
||||
u8 efuse_get_lvd_act();
|
||||
u8 efuse_get_vddio_lvd_lev();
|
||||
u8 efuse_get_vio_act();
|
||||
u8 efuse_get_vddio_lev();
|
||||
u8 efuse_get_mclr_en_dis();
|
||||
u8 efuse_get_xosc_pin_auto();
|
||||
u8 efuse_get_xosc_pin_mode();
|
||||
u8 efuse_get_sfc_fast_boot_dis();
|
||||
u8 efuse_get_pin_reset_en();
|
||||
u8 efuse_get_fast_up();
|
||||
u8 efuse_get_flash_io_select();
|
||||
u8 efuse_get_vbg_act();
|
||||
u8 efuse_get_lvd_bg_trim();
|
||||
u8 efuse_get_mvbg_lev();
|
||||
u8 efuse_get_en_wvbg_lev();
|
||||
|
||||
u8 efuse_get_cp_pass();
|
||||
u8 efuse_get_ft_pass();
|
||||
u8 efuse_get_wvdd_level_trim();
|
||||
u8 efuse_get_vbat_trim_4p2(void);
|
||||
u8 efuse_get_vbat_trim_4p4(void);
|
||||
u8 efuse_get_vbat_trim_4p5(void);
|
||||
u8 efuse_get_charge_cur_trim(void);
|
||||
u8 efuse_get_io_pu_100k(void);
|
||||
u8 efuse_get_sys_pll_ldo(void);
|
||||
u8 efuse_get_flash_type_select(void);//1: NOR 0:NAND
|
||||
|
||||
u8 efuse_get_apa_vb17_vbg();
|
||||
u8 efuse_get_xosc_ldo();
|
||||
u8 efuse_get_xosc_ext_init();
|
||||
u8 efuse_get_lrc24m_caps();
|
||||
u8 efuse_get_lrc24m_rs();
|
||||
|
||||
#endif /*EFUSE_H*/
|
||||
@@ -0,0 +1,101 @@
|
||||
#ifndef __ESPI_H__
|
||||
#define __ESPI_H__
|
||||
|
||||
#include "typedef.h"
|
||||
#include "generic/ioctl.h"
|
||||
|
||||
#define ESPI_PORTA_CS IO_PORTC_06 //pd0
|
||||
#define ESPI_PORTA_CLK IO_PORTC_05 //pd4
|
||||
#define ESPI_PORTA_D0 IO_PORTC_09
|
||||
#define ESPI_PORTA_D1 IO_PORTC_07
|
||||
#define ESPI_PORTA_D2 IO_PORTC_08
|
||||
#define ESPI_PORTA_D3 IO_PORTC_04
|
||||
|
||||
|
||||
#define ESPI_STAGE_DIS 0
|
||||
#define ESPI_1_LINE 1
|
||||
#define ESPI_2_LINE 2
|
||||
#define ESPI_4_LINE 3
|
||||
#define ESPI_8_LINE 4
|
||||
|
||||
#define ESPI_INST_8_BIT 0
|
||||
#define ESPI_INST_16_BIT 1
|
||||
#define ESPI_INST_24_BIT 2
|
||||
#define ESPI_INST_32_BIT 3
|
||||
|
||||
#define ESPI_STR 0
|
||||
#define ESPI_DTR 1
|
||||
|
||||
#define ESPI_WRITE_MODE 0
|
||||
#define ESPI_READ_MODE 1
|
||||
#define ESPI_MMP_MODE 2
|
||||
|
||||
#define ESPI_MMP_CACHE_ADDR2FLASH_ADDR(x) ((x)&0x7ffffff)//64Mb
|
||||
#define ESPI_FLASH_ADDR2MMP_CACHE_ADDR(x) ((x)+0x8000000)//64Mb
|
||||
|
||||
struct espi_io_t {
|
||||
u32 data;
|
||||
u16 len: 4;
|
||||
u16 dtr: 1;
|
||||
u16 line: 3;
|
||||
};
|
||||
|
||||
struct espi_data_t {
|
||||
u16 len: 4;
|
||||
u16 dtr: 1;
|
||||
u16 line: 3;
|
||||
u8 data[8];
|
||||
};
|
||||
|
||||
struct espi_control {
|
||||
u8 width[4];
|
||||
u8 cmd;
|
||||
u8 dummy;
|
||||
};
|
||||
|
||||
struct psram_trim_cfg {
|
||||
u16 adapt;
|
||||
u8 phase;
|
||||
};
|
||||
|
||||
void hw_open_espi_power(u8 power_io, u8 power_level, u16 wait_us, u8 espi_width);
|
||||
void hw_close_espi_power(u8 power_io, u8 power_level, u16 wait_us);
|
||||
|
||||
void espi_cpu_mode_resume(void);
|
||||
void espi_cpu_mode_suspend(void);
|
||||
u8 espi_get_cpu_mode(void);
|
||||
u32 clock_espi_switching(u32 espi_io_freq);
|
||||
void espi_hw_init(u32 espi_io_freq, u8 tshsl, u8 page_size, u8 width);
|
||||
void espi_hw_clk_change(u8 read, u32 clk);
|
||||
void espi_hw_manual_cs_out(u8 sta);
|
||||
void espi_hw_cs_io_cfg(u8 en);
|
||||
void espi_hw_clk_io_cfg(u8 en);
|
||||
void espi_hw_resume_cfg(void);
|
||||
void espi_hw_suspend_cfg(void);
|
||||
void espi_wait_pnd(void);
|
||||
void update_psram_trim_cfg(const struct psram_trim_cfg *cfg);
|
||||
|
||||
void espi_hw_ioctrl(const struct espi_io_t *const instruction,
|
||||
const struct espi_io_t *const address,
|
||||
const struct espi_io_t *const alby,
|
||||
const struct espi_data_t *const tx_data,
|
||||
struct espi_data_t *const rx_data,
|
||||
u32 dummy_cycle);
|
||||
void espi_hw_ioctrl_read(const struct espi_io_t *const inst,
|
||||
const struct espi_io_t *const address,
|
||||
struct espi_data_t *const rx_data,
|
||||
u32 dummy_cycle);
|
||||
void espi_hw_ioctrl_write(const struct espi_io_t *const inst,
|
||||
const struct espi_io_t *const address,
|
||||
const struct espi_data_t *const tx_data,
|
||||
u32 dummy_cycle);
|
||||
|
||||
void espi_hw_send_cmd(const struct espi_io_t *const inst);
|
||||
|
||||
void espi_hw_transfer_data_cfg(struct espi_data_t *const data, u8 dir);//dir:0:tx; 1:rx
|
||||
void espi_hw_transfer_data(u32 *data, u8 len, u8 dir);//dir:0:tx; 1:rx
|
||||
|
||||
void espi_mmp_mode_xn_init(const struct espi_control *r_cmd, const struct espi_control *w_cmd, u8 is4byte_mode);//no continue no write
|
||||
void espi_hw_info_dump();
|
||||
#endif /*ESPI_H*/
|
||||
|
||||
@@ -0,0 +1,186 @@
|
||||
#ifndef __GPADC_HW_H__
|
||||
#define __GPADC_HW_H__
|
||||
//br35
|
||||
#include "gpadc_hw_v4.h"
|
||||
#include "generic/typedef.h"
|
||||
#include "gpio.h"
|
||||
#include "clock.h"
|
||||
|
||||
#define ADC_CH_MASK_TYPE_SEL 0xffff0000
|
||||
#define ADC_CH_MASK_CH_SEL 0x000000ff
|
||||
#define ADC_CH_MASK_PMU_VBG_CH_SEL 0x0000ff00
|
||||
|
||||
#define ADC_CH_TYPE_BT (0x0<<16)
|
||||
#define ADC_CH_TYPE_AUDIO (0x1<<16)
|
||||
#define ADC_CH_TYPE_PMU (0x2<<16)
|
||||
#define ADC_CH_TYPE_LRC200K (0x3<<16)
|
||||
#define ADC_CH_TYPE_LRC24M (0x4<<16)
|
||||
#define ADC_CH_TYPE_SYSPLL (0x5<<16)
|
||||
#define ADC_CH_TYPE_LPCTM (0x6<<16)
|
||||
#define ADC_CH_TYPE_CALSSD (0x7<<16)
|
||||
#define ADC_CH_TYPE_WAT (0x8<<16)
|
||||
#define ADC_CH_TYPE_IO (0x10<<16)
|
||||
#define ADC_CH_TYPE_DIFF (0x11<<16)
|
||||
|
||||
#define ADC_CH_BT_ (ADC_CH_TYPE_BT | 0x0)
|
||||
#define ADC_CH_AUDIO_IREF (ADC_CH_TYPE_AUDIO | 0x0)
|
||||
#define ADC_CH_AUDIO_VCM (ADC_CH_TYPE_AUDIO | 0x1)
|
||||
#define ADC_CH_AUDIO_MICBIAS (ADC_CH_TYPE_AUDIO | 0x2)
|
||||
#define ADC_CH_AUDIO_MICLDO (ADC_CH_TYPE_AUDIO | 0x3)
|
||||
#define ADC_CH_AUDIO_ADCVDD (ADC_CH_TYPE_AUDIO | 0x4)
|
||||
#define ADC_CH_AUDIO_QTLDO (ADC_CH_TYPE_AUDIO | 0x5)
|
||||
#define ADC_CH_AUDIO_QTREF (ADC_CH_TYPE_AUDIO | 0x6)
|
||||
#define ADC_CH_AUDIO_BUFOUT (ADC_CH_TYPE_AUDIO | 0x7)
|
||||
#define ADC_CH_PMU_VBG_WBG04 (ADC_CH_TYPE_PMU | (0x0<<8) | 0x0)//WBG04
|
||||
#define ADC_CH_PMU_VBG_MBG08 (ADC_CH_TYPE_PMU | (0x1<<8) | 0x0)//MBG08
|
||||
#define ADC_CH_PMU_VBG_LVDVBG (ADC_CH_TYPE_PMU | (0x2<<8) | 0x0)//LVDVBG
|
||||
#define ADC_CH_PMU_VBG_MVBG (ADC_CH_TYPE_PMU | (0x3<<8) | 0x0)//MVBG
|
||||
#define ADC_CH_PMU_VSW (ADC_CH_TYPE_PMU | 0x1)
|
||||
#define ADC_CH_PMU_PROGI (ADC_CH_TYPE_PMU | 0x2)
|
||||
#define ADC_CH_PMU_OCP_OUT (ADC_CH_TYPE_PMU | 0x3)
|
||||
#define ADC_CH_PMU_VTEMP (ADC_CH_TYPE_PMU | 0x4)
|
||||
#define ADC_CH_PMU_VPWR_4 (ADC_CH_TYPE_PMU | 0x5) //1/4vpwr
|
||||
#define ADC_CH_PMU_VBAT_4 (ADC_CH_TYPE_PMU | 0x6) //1/4vbat
|
||||
#define ADC_CH_PMU_VBAT_2 (ADC_CH_TYPE_PMU | 0x7)
|
||||
#define ADC_CH_PMU_VP17_DCDC (ADC_CH_TYPE_PMU | 0x8)
|
||||
#define ADC_CH_PMU_PVDD (ADC_CH_TYPE_PMU | 0x9)
|
||||
#define ADC_CH_PMU_DCVDD (ADC_CH_TYPE_PMU | 0xa)
|
||||
#define ADC_CH_PMU_DVDD (ADC_CH_TYPE_PMU | 0xb)
|
||||
#define ADC_CH_PMU_WVDD (ADC_CH_TYPE_PMU | 0xc)
|
||||
#define ADC_CH_PMU_PADC0 (ADC_CH_TYPE_PMU | 0xd)
|
||||
#define ADC_CH_PMU_PVD_PORB_11V (ADC_CH_TYPE_PMU | 0xe)
|
||||
#define ADC_CH_PMU_VIN_4 (ADC_CH_TYPE_PMU | 0xf) //1/4VIN
|
||||
|
||||
#define ADC_CH_LRC200K_ (ADC_CH_TYPE_LRC200K | 0x0)
|
||||
#define ADC_CH_LRC24M_ (ADC_CH_TYPE_LRC24M | 0x0)
|
||||
#define ADC_CH_SYSPLL_ (ADC_CH_TYPE_SYSPLL | 0x0)
|
||||
#define ADC_CH_LPCTM_ (ADC_CH_TYPE_LPCTM | 0x0)
|
||||
#define ADC_CH_CALSSD_ (ADC_CH_TYPE_CALSSD | 0x0)
|
||||
#define ADC_CH_WAT_ (ADC_CH_TYPE_WAT | 0x0)
|
||||
|
||||
#define ADC_CH_IO_PA0 (ADC_CH_TYPE_IO | 0x0)
|
||||
#define ADC_CH_IO_PA1 (ADC_CH_TYPE_IO | 0x1)
|
||||
#define ADC_CH_IO_PA5 (ADC_CH_TYPE_IO | 0x2)
|
||||
#define ADC_CH_IO_PA6 (ADC_CH_TYPE_IO | 0x3)
|
||||
#define ADC_CH_IO_PA10 (ADC_CH_TYPE_IO | 0x4)
|
||||
#define ADC_CH_IO_PA11 (ADC_CH_TYPE_IO | 0x5)
|
||||
#define ADC_CH_IO_PA13 (ADC_CH_TYPE_IO | 0x6)
|
||||
#define ADC_CH_IO_PB0 (ADC_CH_TYPE_IO | 0x7)
|
||||
#define ADC_CH_IO_PB1 (ADC_CH_TYPE_IO | 0x8)
|
||||
#define ADC_CH_IO_PC2 (ADC_CH_TYPE_IO | 0x9)
|
||||
#define ADC_CH_IO_PC3 (ADC_CH_TYPE_IO | 0xa)
|
||||
#define ADC_CH_IO_PC10 (ADC_CH_TYPE_IO | 0xb)
|
||||
#define ADC_CH_IO_PC11 (ADC_CH_TYPE_IO | 0xc)
|
||||
#define ADC_CH_IO_DP (ADC_CH_TYPE_IO | 0xd)
|
||||
#define ADC_CH_IO_DM (ADC_CH_TYPE_IO | 0xe)
|
||||
#define ADC_CH_IO_FSPG (ADC_CH_TYPE_IO | 0xf)
|
||||
|
||||
#define ADC_CH_DIFF_ (ADC_CH_TYPE_DIFF | 0x0)
|
||||
|
||||
enum AD_CH {
|
||||
AD_CH_BT = ADC_CH_BT_,
|
||||
|
||||
AD_CH_AUDIO_IREF = ADC_CH_AUDIO_IREF,
|
||||
AD_CH_AUDIO_VCM = ADC_CH_AUDIO_VCM,
|
||||
AD_CH_AUDIO_MICBIAS = ADC_CH_AUDIO_MICBIAS,
|
||||
AD_CH_AUDIO_MICLDO = ADC_CH_AUDIO_MICLDO,
|
||||
AD_CH_AUDIO_ADCVDD = ADC_CH_AUDIO_ADCVDD,
|
||||
AD_CH_AUDIO_QTLDO = ADC_CH_AUDIO_QTLDO,
|
||||
AD_CH_AUDIO_QTREF = ADC_CH_AUDIO_QTREF,
|
||||
AD_CH_AUDIO_BUFOUT = ADC_CH_AUDIO_BUFOUT,
|
||||
|
||||
AD_CH_PMU_VBG_WBG04 = ADC_CH_PMU_VBG_WBG04, //WBG04
|
||||
AD_CH_PMU_VBG_MBG08 = ADC_CH_PMU_VBG_MBG08, //MBG08
|
||||
AD_CH_PMU_VBG_LVDVBG = ADC_CH_PMU_VBG_LVDVBG, //LVDVBG
|
||||
AD_CH_PMU_VBG_MVBG = ADC_CH_PMU_VBG_MVBG, //MVBG
|
||||
|
||||
AD_CH_PMU_VSW,
|
||||
AD_CH_PMU_PROGI,
|
||||
AD_CH_PMU_OCP_OUT,
|
||||
AD_CH_PMU_VTEMP,
|
||||
AD_CH_PMU_VPWR_4, //1/4vpwr
|
||||
AD_CH_PMU_VBAT_4, //1/4vbat
|
||||
AD_CH_PMU_VBAT_2,
|
||||
AD_CH_PMU_VP17_DCDC,
|
||||
AD_CH_PMU_PVDD,
|
||||
AD_CH_PMU_DCVDD,
|
||||
AD_CH_PMU_DVDD,
|
||||
AD_CH_PMU_WVDD,
|
||||
AD_CH_PMU_PADC0,
|
||||
AD_CH_PMU_PVD_PORB_11V,
|
||||
AD_CH_PMU_VIN_4, //1/4VIN
|
||||
|
||||
AD_CH_LRC200K = ADC_CH_LRC200K_,
|
||||
|
||||
AD_CH_LRC24M = ADC_CH_LRC24M_,
|
||||
|
||||
AD_CH_SYSPLL = ADC_CH_SYSPLL_,
|
||||
|
||||
AD_CH_LPCTM = ADC_CH_LPCTM_,
|
||||
|
||||
AD_CH_CALSSD_ = ADC_CH_CALSSD_,
|
||||
|
||||
AD_CH_WAT = ADC_CH_WAT_,
|
||||
|
||||
AD_CH_IO_PA0 = ADC_CH_IO_PA0,
|
||||
AD_CH_IO_PA1,
|
||||
AD_CH_IO_PA5,
|
||||
AD_CH_IO_PA6,
|
||||
AD_CH_IO_PA10,
|
||||
AD_CH_IO_PA11,
|
||||
AD_CH_IO_PA13,
|
||||
AD_CH_IO_PB0,
|
||||
AD_CH_IO_PB1,
|
||||
AD_CH_IO_PC2,
|
||||
AD_CH_IO_PC3,
|
||||
AD_CH_IO_PC10,
|
||||
AD_CH_IO_PC11,
|
||||
AD_CH_IO_DP,
|
||||
AD_CH_IO_DM,
|
||||
AD_CH_IO_FSPG,
|
||||
|
||||
AD_CH_DIFF = ADC_CH_DIFF_,
|
||||
|
||||
AD_CH_IOVDD = 0xffffffff,
|
||||
};
|
||||
|
||||
#define ADC_VBG_CENTER 800
|
||||
#define ADC_VBG_TRIM_STEP 3
|
||||
#define ADC_VBG_DATA_WIDTH 0
|
||||
|
||||
//防编译报错
|
||||
#define AD_CH_PMU_VBG AD_CH_PMU_VBG_MVBG
|
||||
#define AD_CH_LDOREF AD_CH_PMU_VBG
|
||||
#define AD_CH_PMU_VBAT AD_CH_PMU_VBAT_2
|
||||
#define AD_CH_LPCTMU AD_CH_LPCTM
|
||||
#define AD_CH_PMU_VBAT_DIV 2
|
||||
|
||||
#define AD_CH_IO_PB7 AD_CH_PMU_PADC0
|
||||
|
||||
//gpadc_hw.c 实现
|
||||
void adc_pmu_vbg_enable();
|
||||
void adc_pmu_vbg_disable();
|
||||
void adc_pmu_ch_select(u32 ch);
|
||||
void adc_audio_ch_select(u32 ch_sel);
|
||||
void adc_adjust_div(void);
|
||||
_INLINE_ u8 adc_get_clk_div();
|
||||
|
||||
|
||||
//gpadc_hw_v4.c 实现
|
||||
void adc_close();
|
||||
void adc_sample(enum AD_CH ch, u32 ie, u32 calibrate_en);
|
||||
void adc_wait_enter_idle();
|
||||
u32 adc_wait_pnd();
|
||||
void adc_set_enter_idle();
|
||||
u32 adc_get_res();
|
||||
_INLINE_ u32 adc_idle_query();
|
||||
_INLINE_ void adc_register_clear();
|
||||
void adc_data_res_check();
|
||||
void adc_suspend();
|
||||
void adc_resume();
|
||||
void adc_internal_signal_to_io(enum AD_CH analog_ch, u16 gpio);
|
||||
void adc_delay_init();
|
||||
void adc_delay_set(enum AD_CH ch, u32 trig_delay_us, u32 sample_delay);
|
||||
|
||||
#endif /*GPADC_HW_H*/
|
||||
|
||||
@@ -0,0 +1,594 @@
|
||||
#ifndef __GPIO_HW_H__
|
||||
#define __GPIO_HW_H__
|
||||
|
||||
#include "typedef.h"
|
||||
#include "asm/power_interface.h"
|
||||
|
||||
|
||||
#define IO_GROUP_NUM 16
|
||||
#define IO_PORTA_00 (IO_GROUP_NUM * 0 + 0)
|
||||
#define IO_PORTA_01 (IO_GROUP_NUM * 0 + 1)
|
||||
#define IO_PORTA_02 (IO_GROUP_NUM * 0 + 2)
|
||||
#define IO_PORTA_03 (IO_GROUP_NUM * 0 + 3)
|
||||
#define IO_PORTA_04 (IO_GROUP_NUM * 0 + 4)
|
||||
#define IO_PORTA_05 (IO_GROUP_NUM * 0 + 5)
|
||||
#define IO_PORTA_06 (IO_GROUP_NUM * 0 + 6)
|
||||
#define IO_PORTA_07 (IO_GROUP_NUM * 0 + 7)
|
||||
#define IO_PORTA_08 (IO_GROUP_NUM * 0 + 8)
|
||||
#define IO_PORTA_09 (IO_GROUP_NUM * 0 + 9)
|
||||
#define IO_PORTA_10 (IO_GROUP_NUM * 0 + 10)
|
||||
#define IO_PORTA_11 (IO_GROUP_NUM * 0 + 11)
|
||||
#define IO_PORTA_12 (IO_GROUP_NUM * 0 + 12)
|
||||
#define IO_PORTA_13 (IO_GROUP_NUM * 0 + 13)
|
||||
#define IO_PORT_PA_MASK 0x3fff
|
||||
|
||||
#define IO_PORTB_00 (IO_GROUP_NUM * 1 + 0)
|
||||
#define IO_PORTB_01 (IO_GROUP_NUM * 1 + 1)
|
||||
#define IO_PORTB_02 (IO_GROUP_NUM * 1 + 2)
|
||||
#define IO_PORTB_03 (IO_GROUP_NUM * 1 + 3)
|
||||
#define IO_PORTB_04 (IO_GROUP_NUM * 1 + 4)
|
||||
#define IO_PORTB_05 (IO_GROUP_NUM * 1 + 5)
|
||||
#define IO_PORTB_06 (IO_GROUP_NUM * 1 + 6)
|
||||
#define IO_PORTB_07 (IO_GROUP_NUM * 1 + 7)
|
||||
#define IO_PORTB_08 (IO_GROUP_NUM * 1 + 8)
|
||||
#define IO_PORT_PB_MASK 0x01ff
|
||||
|
||||
#define IO_PORTC_00 (IO_GROUP_NUM * 2 + 0)
|
||||
#define IO_PORTC_01 (IO_GROUP_NUM * 2 + 1)
|
||||
#define IO_PORTC_02 (IO_GROUP_NUM * 2 + 2)
|
||||
#define IO_PORTC_03 (IO_GROUP_NUM * 2 + 3)
|
||||
#define IO_PORTC_04 (IO_GROUP_NUM * 2 + 4)
|
||||
#define IO_PORTC_05 (IO_GROUP_NUM * 2 + 5)
|
||||
#define IO_PORTC_06 (IO_GROUP_NUM * 2 + 6)
|
||||
#define IO_PORTC_07 (IO_GROUP_NUM * 2 + 7)
|
||||
#define IO_PORTC_08 (IO_GROUP_NUM * 2 + 8)
|
||||
#define IO_PORTC_09 (IO_GROUP_NUM * 2 + 9)
|
||||
#define IO_PORTC_10 (IO_GROUP_NUM * 2 + 10)
|
||||
#define IO_PORTC_11 (IO_GROUP_NUM * 2 + 11)
|
||||
#define IO_PORT_PC_MASK 0x0fff
|
||||
|
||||
#define IO_PORTD_00 (IO_GROUP_NUM * 3 + 0)
|
||||
#define IO_PORTD_01 (IO_GROUP_NUM * 3 + 1)
|
||||
#define IO_PORTD_02 (IO_GROUP_NUM * 3 + 2)
|
||||
#define IO_PORTD_03 (IO_GROUP_NUM * 3 + 3)
|
||||
// #define IO_PORTD_04 (IO_GROUP_NUM * 3 + 4)
|
||||
// #define IO_PORTD_05 (IO_GROUP_NUM * 3 + 5)
|
||||
// #define IO_PORTD_06 (IO_GROUP_NUM * 3 + 6)
|
||||
// #define IO_PORTD_07 (IO_GROUP_NUM * 3 + 7)
|
||||
// #define IO_PORTD_08 (IO_GROUP_NUM * 3 + 8)
|
||||
#define IO_PORTD_09 (IO_GROUP_NUM * 3 + 9)
|
||||
#define IO_PORT_PD_MASK 0x0000
|
||||
|
||||
#define IO_PORTF_00 (IO_GROUP_NUM * 5 + 0)
|
||||
#define IO_PORTF_01 (IO_GROUP_NUM * 5 + 1)
|
||||
#define IO_PORTF_02 (IO_GROUP_NUM * 5 + 2)
|
||||
#define IO_PORTF_03 (IO_GROUP_NUM * 5 + 3)
|
||||
#define IO_PORTF_04 (IO_GROUP_NUM * 5 + 4)
|
||||
#define IO_PORTF_05 (IO_GROUP_NUM * 5 + 5)
|
||||
#define IO_PORT_PF_MASK 0x003f
|
||||
|
||||
#define IO_PORTP_00 (IO_GROUP_NUM * 13 + 0)
|
||||
#define IO_PORT_PP_MASK 0x0001
|
||||
|
||||
#define IO_PORT_LDOIN IO_PORTP_00
|
||||
|
||||
#define IO_MAX_NUM (IO_PORTP_00 + 1)
|
||||
|
||||
#define IO_PORT_DP (IO_GROUP_NUM * 14 + 0)
|
||||
#define IO_PORT_DM (IO_GROUP_NUM * 14 + 1)
|
||||
#define IO_PORT_USB_MASK 0x03
|
||||
#define IS_PORT_USB(x) (x <= IO_PORT_DM)//无usb赋0
|
||||
|
||||
//br35无pr
|
||||
// #define IO_PORT_PR_00 (IO_GROUP_NUM * 15 + 0)//pr固定15
|
||||
// #define IO_PORT_PR_01 (IO_GROUP_NUM * 15 + 1)
|
||||
// #define IO_PORT_PR_MASK 0x03
|
||||
|
||||
#define IO_PORT_MAX (IO_PORT_DM + 1)
|
||||
|
||||
#define P33_IO_OFFSET 0
|
||||
#define IO_CHGFL_DET (IO_PORT_MAX + P33_IO_OFFSET + 0)
|
||||
#define IO_VBGOK_DET (IO_PORT_MAX + P33_IO_OFFSET + 1)
|
||||
#define IO_VBTCH_DET (IO_PORT_MAX + P33_IO_OFFSET + 2)
|
||||
#define IO_LDOIN_DET (IO_PORT_MAX + P33_IO_OFFSET + 3)
|
||||
#define IO_VBATDT_DET (IO_PORT_MAX + P33_IO_OFFSET + 4)
|
||||
|
||||
#define PG_IO_OFFSET 5
|
||||
#define IO_LCD_PG (IO_PORT_MAX + PG_IO_OFFSET + 0)
|
||||
#define IO_MT_PG (IO_PORT_MAX + PG_IO_OFFSET + 1)
|
||||
#define IO_FS_PG2 (IO_PORT_MAX + PG_IO_OFFSET + 2)
|
||||
|
||||
|
||||
|
||||
#define GPIOA (IO_GROUP_NUM * 0)
|
||||
#define GPIOB (IO_GROUP_NUM * 1)
|
||||
#define GPIOC (IO_GROUP_NUM * 2)
|
||||
// #define GPIOD (IO_GROUP_NUM * 3)//br35无PDx_OUT/IN
|
||||
// #define GPIOE (IO_GROUP_NUM * 4)//无
|
||||
#define GPIOF (IO_GROUP_NUM * 5)
|
||||
#define GPIOP (IO_GROUP_NUM * 13)
|
||||
#define GPIOUSB (IO_GROUP_NUM * 14)
|
||||
// #define GPIOR (IO_GROUP_NUM * 15) //br35 no pr
|
||||
#define GPIOP33 (IO_PORT_MAX + P33_IO_OFFSET)
|
||||
|
||||
enum gpio_port {
|
||||
PORTA = 0,
|
||||
PORTB = 1,
|
||||
PORTC = 2,
|
||||
PORTF = 5,
|
||||
PORTP = 13,
|
||||
PORTUSB = 14,
|
||||
// PORTR = 15, //br35 无pr
|
||||
};
|
||||
#define IS_PORT_ALL_PERIPH(PORT) (((PORT) == PORTA) || \
|
||||
((PORT) == PORTB) || \
|
||||
((PORT) == PORTC) || \
|
||||
((PORT) == PORTF) || \
|
||||
((PORT) == PORTP) || \
|
||||
((PORT) == PORTUSB))
|
||||
|
||||
enum port_op_mode {
|
||||
PORT_SET = 1,
|
||||
PORT_AND,
|
||||
PORT_OR,
|
||||
PORT_XOR,
|
||||
};
|
||||
|
||||
struct port_reg {
|
||||
volatile unsigned int in;
|
||||
volatile unsigned int out;
|
||||
volatile unsigned int dir;
|
||||
volatile unsigned int die;
|
||||
volatile unsigned int dieh;
|
||||
volatile unsigned int pu0;
|
||||
volatile unsigned int pu1;
|
||||
volatile unsigned int pd0;
|
||||
volatile unsigned int pd1;
|
||||
volatile unsigned int hd0;
|
||||
volatile unsigned int hd1;
|
||||
volatile unsigned int spl;
|
||||
volatile unsigned int con;
|
||||
volatile unsigned int out_bsr;
|
||||
volatile unsigned int dir_bsr;
|
||||
volatile unsigned int die_bsr;
|
||||
volatile unsigned int dieh_bsr;
|
||||
volatile unsigned int pu0_bsr;
|
||||
volatile unsigned int pu1_bsr;
|
||||
volatile unsigned int pd0_bsr;
|
||||
volatile unsigned int pd1_bsr;
|
||||
volatile unsigned int hd0_bsr;
|
||||
volatile unsigned int hd1_bsr;
|
||||
volatile unsigned int spl_bsr;
|
||||
volatile unsigned int con_bsr;
|
||||
};
|
||||
#define GPIO_PX_PU_REG_NUM 2
|
||||
#define GPIO_PX_PD_REG_NUM 2
|
||||
#define GPIO_PX_HD_REG_NUM 2
|
||||
#define GPIO_PX_DIEH_REG_NUM 1
|
||||
#define GPIO_PX_SPL_REG_NUM 1
|
||||
#define GPIO_PX_BSR_REG_NUM 1
|
||||
#define usb_reg port_reg
|
||||
#define GPIO_USB_PU_REG_NUM 1
|
||||
#define GPIO_USB_PD_REG_NUM 1
|
||||
#define GPIO_USB_HD_REG_NUM 0
|
||||
#define GPIO_USB_DIEH_REG_NUM 1
|
||||
#define GPIO_USB_SPL_REG_NUM 1
|
||||
#define GPIO_USB_BSR_REG_NUM 1
|
||||
//无PR
|
||||
// struct port_pr_reg {
|
||||
// volatile unsigned int in;
|
||||
// volatile unsigned int out;
|
||||
// volatile unsigned int dir;
|
||||
// volatile unsigned int die;
|
||||
// volatile unsigned int pu0;
|
||||
// // volatile unsigned int pu1;
|
||||
// volatile unsigned int pd0;
|
||||
// // volatile unsigned int pd1;
|
||||
// volatile unsigned int hd0;
|
||||
// // volatile unsigned int hd1;
|
||||
// };
|
||||
// #define GPIO_PR_PU_REG_NUM 0
|
||||
// #define GPIO_PR_PD_REG_NUM 0
|
||||
// #define GPIO_PR_HD_REG_NUM 0
|
||||
// #define GPIO_PR_DIEH_REG_NUM 0
|
||||
// #define GPIO_PR_SPL_REG_NUM 0
|
||||
|
||||
#define GPIO_PU_REG_NUM 2 //max_num
|
||||
#define GPIO_PD_REG_NUM 2 //max_num
|
||||
#define GPIO_HD_REG_NUM 2 //max_num
|
||||
|
||||
|
||||
//===================================================//
|
||||
// BR35 Crossbar API
|
||||
//===================================================//
|
||||
enum PFI_TABLE {
|
||||
PFI_GP_ICH0 = ((u32)(&(JL_IMAP->FI_GP_ICH0))),
|
||||
PFI_GP_ICH1 = ((u32)(&(JL_IMAP->FI_GP_ICH1))),
|
||||
PFI_GP_ICH2 = ((u32)(&(JL_IMAP->FI_GP_ICH2))),
|
||||
PFI_GP_ICH3 = ((u32)(&(JL_IMAP->FI_GP_ICH3))),
|
||||
PFI_GP_ICH4 = ((u32)(&(JL_IMAP->FI_GP_ICH4))),
|
||||
PFI_GP_ICH5 = ((u32)(&(JL_IMAP->FI_GP_ICH5))),
|
||||
|
||||
// PFI_SPI0_CLK = ((u32)(&(JL_IMAP->FI_SPI0_CLK))),
|
||||
// PFI_SPI0_DA0 = ((u32)(&(JL_IMAP->FI_SPI0_DA0))),
|
||||
// PFI_SPI0_DA1 = ((u32)(&(JL_IMAP->FI_SPI0_DA1))),
|
||||
// PFI_SPI0_DA2 = ((u32)(&(JL_IMAP->FI_SPI0_DA2))),
|
||||
// PFI_SPI0_DA3 = ((u32)(&(JL_IMAP->FI_SPI0_DA3))),
|
||||
PFI_SPI1_CLK = ((u32)(&(JL_IMAP->FI_SPI1_CLK))),
|
||||
PFI_SPI1_DA0 = ((u32)(&(JL_IMAP->FI_SPI1_DA0))),
|
||||
PFI_SPI1_DA1 = ((u32)(&(JL_IMAP->FI_SPI1_DA1))),
|
||||
PFI_SPI1_DA2 = ((u32)(&(JL_IMAP->FI_SPI1_DA2))),
|
||||
PFI_SPI1_DA3 = ((u32)(&(JL_IMAP->FI_SPI1_DA3))),
|
||||
PFI_SPI2_CLK = ((u32)(&(JL_IMAP->FI_SPI2_CLK))),
|
||||
PFI_SPI2_DA0 = ((u32)(&(JL_IMAP->FI_SPI2_DA0))),
|
||||
PFI_SPI2_DA1 = ((u32)(&(JL_IMAP->FI_SPI2_DA1))),
|
||||
PFI_SPI2_DA2 = ((u32)(&(JL_IMAP->FI_SPI2_DA2))),
|
||||
PFI_SPI2_DA3 = ((u32)(&(JL_IMAP->FI_SPI2_DA3))),
|
||||
|
||||
PFI_SD0_CMD = ((u32)(&(JL_IMAP->FI_SD0_CMD))),
|
||||
PFI_SD0_DA0 = ((u32)(&(JL_IMAP->FI_SD0_DA0))),
|
||||
PFI_SD0_DA1 = ((u32)(&(JL_IMAP->FI_SD0_DA1))),
|
||||
PFI_SD0_DA2 = ((u32)(&(JL_IMAP->FI_SD0_DA2))),
|
||||
PFI_SD0_DA3 = ((u32)(&(JL_IMAP->FI_SD0_DA3))),
|
||||
|
||||
PFI_IIC0_SCL = ((u32)(&(JL_IMAP->FI_IIC0_SCL))),
|
||||
PFI_IIC0_SDA = ((u32)(&(JL_IMAP->FI_IIC0_SDA))),
|
||||
PFI_UART0_RX = ((u32)(&(JL_IMAP->FI_UART0_RX))),
|
||||
PFI_UART1_RX = ((u32)(&(JL_IMAP->FI_UART1_RX))),
|
||||
// PFI_UART1_CTS = ((u32)(&(JL_IMAP->FI_UART1_CTS))),
|
||||
PFI_UART2_RX = ((u32)(&(JL_IMAP->FI_UART2_RX))),
|
||||
|
||||
// PFI_TDM_S_WCK = ((u32)(&(JL_IMAP->FI_TDM_S_WCK))),
|
||||
// PFI_TDM_S_BCK = ((u32)(&(JL_IMAP->FI_TDM_S_BCK))),
|
||||
// PFI_TDM_M_DA = ((u32)(&(JL_IMAP->FI_TDM_M_DA))),
|
||||
// PFI_RDEC0_DAT0 = ((u32)(&(JL_IMAP->FI_RDEC0_DAT0))),
|
||||
// PFI_RDEC0_DAT1 = ((u32)(&(JL_IMAP->FI_RDEC0_DAT1))),
|
||||
// PFI_RDEC1_DAT0 = ((u32)(&(JL_IMAP->FI_RDEC1_DAT0))),
|
||||
// PFI_RDEC1_DAT1 = ((u32)(&(JL_IMAP->FI_RDEC1_DAT1))),
|
||||
// PFI_RDEC2_DAT0 = ((u32)(&(JL_IMAP->FI_RDEC2_DAT0))),
|
||||
// PFI_RDEC2_DAT1 = ((u32)(&(JL_IMAP->FI_RDEC2_DAT1))),
|
||||
// PFI_ALNK0_MCLK = ((u32)(&(JL_IMAP->FI_ALNK0_MCLK))),
|
||||
// PFI_ALNK0_LRCK = ((u32)(&(JL_IMAP->FI_ALNK0_LRCK))),
|
||||
// PFI_ALNK0_SCLK = ((u32)(&(JL_IMAP->FI_ALNK0_SCLK))),
|
||||
// PFI_ALNK0_DAT0 = ((u32)(&(JL_IMAP->FI_ALNK0_DAT0))),
|
||||
// PFI_ALNK0_DAT1 = ((u32)(&(JL_IMAP->FI_ALNK0_DAT1))),
|
||||
// PFI_ALNK0_DAT2 = ((u32)(&(JL_IMAP->FI_ALNK0_DAT2))),
|
||||
// PFI_ALNK0_DAT3 = ((u32)(&(JL_IMAP->FI_ALNK0_DAT3))),
|
||||
// PFI_PLNK_DAT0 = ((u32)(&(JL_IMAP->FI_PLNK_DAT0))),
|
||||
// PFI_PLNK_DAT1 = ((u32)(&(JL_IMAP->FI_PLNK_DAT1))),
|
||||
// PFI_SPDIF_DIA = ((u32)(&(JL_IMAP->FI_SPDIF_DIA))),
|
||||
// PFI_SPDIF_DIB = ((u32)(&(JL_IMAP->FI_SPDIF_DIB))),
|
||||
// PFI_SPDIF_DIC = ((u32)(&(JL_IMAP->FI_SPDIF_DIC))),
|
||||
// PFI_SPDIF_DID = ((u32)(&(JL_IMAP->FI_SPDIF_DID))),
|
||||
// PFI_CAN_RX = ((u32)(&(JL_IMAP->FI_CAN_RX))),
|
||||
PFI_QDEC0_A = ((u32)(&(JL_IMAP->FI_QDEC0_A))),
|
||||
PFI_QDEC0_B = ((u32)(&(JL_IMAP->FI_QDEC0_B))),
|
||||
PFI_CHAIN_IN0 = ((u32)(&(JL_IMAP->FI_CHAIN_IN0))),
|
||||
PFI_CHAIN_IN1 = ((u32)(&(JL_IMAP->FI_CHAIN_IN1))),
|
||||
PFI_CHAIN_IN2 = ((u32)(&(JL_IMAP->FI_CHAIN_IN2))),
|
||||
PFI_CHAIN_IN3 = ((u32)(&(JL_IMAP->FI_CHAIN_IN3))),
|
||||
PFI_CHAIN_RST = ((u32)(&(JL_IMAP->FI_CHAIN_RST))),
|
||||
PFI_TOTAl = ((u32)(&(JL_IMAP->FI_TOTAL))),
|
||||
};
|
||||
|
||||
#define INPUT_GP_ICH_MAX 6
|
||||
#define OUTPUT_GP_OCH_MAX 8
|
||||
|
||||
enum OUTPUT_CH_SIGNAL {
|
||||
OUTPUT_CH_SIGNAL_TIMER0_PWM,//8
|
||||
OUTPUT_CH_SIGNAL_TIMER1_PWM,
|
||||
OUTPUT_CH_SIGNAL_TIMER2_PWM,
|
||||
OUTPUT_CH_SIGNAL_TIMER3_PWM,
|
||||
// OUTPUT_CH_SIGNAL_TIMER4_PWM,
|
||||
// OUTPUT_CH_SIGNAL_TIMER5_PWM,
|
||||
OUTPUT_CH_SIGNAL_GP_ICH0,
|
||||
OUTPUT_CH_SIGNAL_GP_ICH1,
|
||||
OUTPUT_CH_SIGNAL_UART1_RTS,
|
||||
OUTPUT_CH_SIGNAL_PLNK_CLK,
|
||||
OUTPUT_CH_SIGNAL_WL_AMPE,
|
||||
OUTPUT_CH_SIGNAL_WL_LNAE,
|
||||
OUTPUT_CH_SIGNAL_WLC_INT_ACTIVE,
|
||||
OUTPUT_CH_SIGNAL_WLC_INT_STATUS,
|
||||
OUTPUT_CH_SIGNAL_WLC_INT_FREQ,
|
||||
OUTPUT_CH_SIGNAL_AUD_DBG_CLKO,
|
||||
OUTPUT_CH_SIGNAL_AUD_DBG_DATO0,
|
||||
OUTPUT_CH_SIGNAL_AUD_DBG_DATO1,
|
||||
OUTPUT_CH_SIGNAL_AUD_DBG_DATO2,
|
||||
OUTPUT_CH_SIGNAL_AUD_DBG_DATO3,
|
||||
OUTPUT_CH_SIGNAL_AUD_DBG_DATO4,
|
||||
OUTPUT_CH_SIGNAL_CLOCK_OUT0,
|
||||
OUTPUT_CH_SIGNAL_CLOCK_OUT1,
|
||||
OUTPUT_CH_SIGNAL_CLOCK_OUT2,
|
||||
OUTPUT_CH_SIGNAL_P33_CLK_DBG,
|
||||
OUTPUT_CH_SIGNAL_P33_SIG_DBG0,
|
||||
OUTPUT_CH_SIGNAL_P33_SIG_DBG1,
|
||||
OUTPUT_CH_SIGNAL_USB_DBG_OUT,
|
||||
OUTPUT_CH_SIGNAL_P11_DBG_OUT,
|
||||
OUTPUT_CH_SIGNAL_WL_DBG_PORTx,//fix wl0~7对应och0~7
|
||||
|
||||
// OUTPUT_CH_SIGNAL_MCPWM0_H,
|
||||
// OUTPUT_CH_SIGNAL_MCPWM0_L,
|
||||
// OUTPUT_CH_SIGNAL_MCPWM1_H,
|
||||
// OUTPUT_CH_SIGNAL_MCPWM1_L,
|
||||
// OUTPUT_CH_SIGNAL_LEDC0_OUT,
|
||||
// OUTPUT_CH_SIGNAL_LEDC1_OUT,
|
||||
};
|
||||
|
||||
enum INPUT_CH_TYPE {
|
||||
INPUT_CH_TYPE_GP_ICH = 0,
|
||||
INPUT_CH_TYPE_TIME2_PWM = 6,
|
||||
INPUT_CH_TYPE_TIME3_PWM,
|
||||
INPUT_CH_TYPE_WL_AMPE,
|
||||
INPUT_CH_TYPE_WL_LNAE,
|
||||
INPUT_CH_TYPE_MAX,
|
||||
};
|
||||
|
||||
enum INPUT_CH_SIGNAL {
|
||||
//ICH_CON0
|
||||
INPUT_CH_SIGNAL_TIMER0_CIN = 0,//5
|
||||
INPUT_CH_SIGNAL_TIMER1_CIN,
|
||||
INPUT_CH_SIGNAL_TIMER2_CIN,
|
||||
INPUT_CH_SIGNAL_TIMER3_CIN,
|
||||
// INPUT_CH_SIGNAL_TIMER4_CIN,
|
||||
// INPUT_CH_SIGNAL_TIMER5_CIN,
|
||||
INPUT_CH_SIGNAL_TIMER0_CAPTURE,
|
||||
INPUT_CH_SIGNAL_TIMER1_CAPTURE,
|
||||
//ICH_CON1
|
||||
INPUT_CH_SIGNAL_TIMER2_CAPTURE,
|
||||
INPUT_CH_SIGNAL_TIMER3_CAPTURE,
|
||||
// INPUT_CH_SIGNAL_TIMER4_CAPTURE,
|
||||
// INPUT_CH_SIGNAL_TIMER5_CAPTURE,
|
||||
INPUT_CH_SIGNAL_MCPWM0_CK,
|
||||
INPUT_CH_SIGNAL_MCPWM1_CK,
|
||||
INPUT_CH_SIGNAL_MCPWM0_FP,
|
||||
INPUT_CH_SIGNAL_MCPWM1_FP,
|
||||
//ICH_CON2
|
||||
INPUT_CH_SIGNAL_UART1_CTS,
|
||||
INPUT_CH_SIGNAL_PLNK_IDAT0,
|
||||
INPUT_CH_SIGNAL_PLNK_IDAT1,
|
||||
INPUT_CH_SIGNAL_CAP,//CAP_MUX_OUT
|
||||
INPUT_CH_SIGNAL_CLK_PIN, //CLK_MUX_IN
|
||||
INPUT_CH_SIGNAL_EXT_CLK, //EXT_CLK_P
|
||||
// INPUT_CH_SIGNAL_IRFLT,
|
||||
//ICH_CON3
|
||||
INPUT_CH_SIGNAL_IMD_TE,
|
||||
INPUT_CH_SIGNAL_WLC_EXT_ACT,
|
||||
INPUT_CH_SIGNAL_AUD_DBG_DATI,
|
||||
INPUT_CH_SIGNAL_SPI1_CS,
|
||||
INPUT_CH_SIGNAL_SPI2_CS,
|
||||
INPUT_CH_SIGNAL_RESERVE0,
|
||||
//ICH_CON4
|
||||
// INPUT_CH_SIGNAL_QDEC_SIN0,
|
||||
// INPUT_CH_SIGNAL_QDEC_SIN1,
|
||||
};
|
||||
enum gpio_function {
|
||||
PORT_FUNC_NULL, //null
|
||||
//uart
|
||||
PORT_FUNC_UART0_TX, //out
|
||||
PORT_FUNC_UART0_RX,//in
|
||||
PORT_FUNC_UART1_TX, //out
|
||||
PORT_FUNC_UART1_RX,//in
|
||||
PORT_FUNC_UART2_TX, //out
|
||||
PORT_FUNC_UART2_RX,//in
|
||||
PORT_FUNC_UART1_RTS,//out
|
||||
PORT_FUNC_UART1_CTS,//in
|
||||
|
||||
//spi
|
||||
// PORT_FUNC_SPI0_CLK,
|
||||
// PORT_FUNC_SPI0_DA0,
|
||||
// PORT_FUNC_SPI0_DA1,
|
||||
// PORT_FUNC_SPI0_DA2,
|
||||
// PORT_FUNC_SPI0_DA3,
|
||||
PORT_FUNC_SPI1_CS,//ich slave
|
||||
PORT_FUNC_SPI1_CLK,
|
||||
PORT_FUNC_SPI1_DA0,
|
||||
PORT_FUNC_SPI1_DA1,
|
||||
PORT_FUNC_SPI1_DA2,
|
||||
PORT_FUNC_SPI1_DA3,
|
||||
PORT_FUNC_SPI2_CS,//ich slave
|
||||
PORT_FUNC_SPI2_CLK,
|
||||
PORT_FUNC_SPI2_DA0,
|
||||
PORT_FUNC_SPI2_DA1,
|
||||
PORT_FUNC_SPI2_DA2,
|
||||
PORT_FUNC_SPI2_DA3,
|
||||
|
||||
//iic
|
||||
PORT_FUNC_IIC_SCL,
|
||||
PORT_FUNC_IIC_SDA,
|
||||
|
||||
//sd
|
||||
PORT_FUNC_SD0_CLK,//out
|
||||
PORT_FUNC_SD0_CMD,
|
||||
PORT_FUNC_SD0_DA0,
|
||||
PORT_FUNC_SD0_DA1,
|
||||
PORT_FUNC_SD0_DA2,
|
||||
PORT_FUNC_SD0_DA3,
|
||||
|
||||
//timer
|
||||
PORT_FUNC_TIMER0_PWM,
|
||||
PORT_FUNC_TIMER1_PWM,
|
||||
PORT_FUNC_TIMER2_PWM,
|
||||
PORT_FUNC_TIMER3_PWM,
|
||||
// PORT_FUNC_TIMER4_PWM,
|
||||
// PORT_FUNC_TIMER5_PWM,
|
||||
PORT_FUNC_TIMER0_CAPTURE,
|
||||
PORT_FUNC_TIMER1_CAPTURE,
|
||||
PORT_FUNC_TIMER2_CAPTURE,
|
||||
PORT_FUNC_TIMER3_CAPTURE,
|
||||
// PORT_FUNC_TIMER4_CAPTURE,
|
||||
// PORT_FUNC_TIMER5_CAPTURE,
|
||||
PORT_FUNC_TIMER0_CIN,
|
||||
PORT_FUNC_TIMER1_CIN,
|
||||
PORT_FUNC_TIMER2_CIN,
|
||||
PORT_FUNC_TIMER3_CIN,
|
||||
|
||||
//mcpwm
|
||||
PORT_FUNC_MCPWM0_H,
|
||||
PORT_FUNC_MCPWM0_L,
|
||||
PORT_FUNC_MCPWM1_H,
|
||||
PORT_FUNC_MCPWM1_L,
|
||||
PORT_FUNC_MCPWM0_FP,
|
||||
PORT_FUNC_MCPWM1_FP,
|
||||
PORT_FUNC_MCPWM0_CK,
|
||||
PORT_FUNC_MCPWM1_CK,
|
||||
|
||||
//clk_out
|
||||
PORT_FUNC_OCH_CLOCK_OUT0,
|
||||
PORT_FUNC_OCH_CLOCK_OUT1,//PORT_FUNC_OCH_RESERVED0,//不连续
|
||||
PORT_FUNC_OCH_CLOCK_OUT2,
|
||||
// PORT_FUNC_OCH_CLOCK_OUT3,
|
||||
|
||||
//other
|
||||
PORT_FUNC_IRFLT_0, //实际只有1个IRFLT
|
||||
PORT_FUNC_IRFLT_1,
|
||||
PORT_FUNC_IRFLT_2,
|
||||
PORT_FUNC_IRFLT_3,
|
||||
|
||||
PORT_FUNC_CLK_PIN,//CLK_MUX_IN
|
||||
// PORT_FUNC_PORT_WKUP,
|
||||
PORT_FUNC_GPADC, //in
|
||||
PORT_FUNC_PWM_LED,
|
||||
|
||||
//plnk
|
||||
// PORT_FUNC_PLNK_SCLK,//out
|
||||
// PORT_FUNC_PLNK_DAT0,//in
|
||||
// PORT_FUNC_PLNK_DAT1,//in
|
||||
|
||||
//ledc
|
||||
// PORT_FUNC_LEDC0_OUT,
|
||||
// PORT_FUNC_LEDC1_OUT,
|
||||
|
||||
//rdec
|
||||
// PORT_FUNC_RDEC0_PORT0,
|
||||
// PORT_FUNC_RDEC0_PORT1,
|
||||
|
||||
//qdec
|
||||
PORT_FUNC_RDEC0_PORTA,
|
||||
PORT_FUNC_RDEC0_PORTB,
|
||||
//chain
|
||||
};
|
||||
/**************************************************/
|
||||
#define __struct(x) (struct x##_reg *)
|
||||
#define _struct(x) __struct(x)
|
||||
#ifdef GPIOA
|
||||
#define __PORTPA ((struct port_reg *)JL_PORTA)
|
||||
#endif
|
||||
#ifdef GPIOB
|
||||
#define __PORTPB ((struct port_reg *)JL_PORTB)
|
||||
#endif
|
||||
#ifdef GPIOC
|
||||
#define __PORTPC ((struct port_reg *)JL_PORTC)
|
||||
#endif
|
||||
#ifdef GPIOD
|
||||
#define __PORTPD ((struct port_reg *)JL_PORTD)
|
||||
#endif
|
||||
#ifdef GPIOE
|
||||
#define __PORTPE ((struct port_reg *)JL_PORTE)
|
||||
#endif
|
||||
#ifdef GPIOF
|
||||
#define __PORTPF ((struct port_reg *)JL_PORTF)
|
||||
#endif
|
||||
#ifdef GPIOG
|
||||
#define __PORTPG ((struct port_reg *)JL_PORTG)
|
||||
#endif
|
||||
#ifdef GPIOH
|
||||
#define __PORTPH ((struct port_reg *)JL_PORTH)
|
||||
#endif
|
||||
#ifdef GPIOP
|
||||
#define __PORTPP ((struct port_reg *)JL_PORTP)
|
||||
#endif
|
||||
#ifdef GPIOR
|
||||
#define __PORTPR ((struct port_pr_reg *)R3_PR_IO_P)
|
||||
#endif
|
||||
#ifdef GPIOUSB
|
||||
#define __PORTPU ((struct usb_reg *)JL_PORTUSB)
|
||||
#endif
|
||||
#define __portx(x,y) __PORT##x->y
|
||||
#define _portx(x,y) __portx(x,y)
|
||||
#define __toggle_port(x,y) __PORT##x->out ^= y;
|
||||
#define _toggle_port(port,pin) __toggle_port(port,pin)
|
||||
|
||||
//log:
|
||||
#define GPIO_LOG_FORMAT "0x%04x 0x%04x 0x%04x 0x%04x 0x%04x,0x%04x 0x%04x,0x%04x 0x%04x,0x%04x 0x%04x"
|
||||
#define GPIO_NO_SUPPORT_FUN "------"
|
||||
#define GPIO_LOG_PORT(x,y) JL_PORT##x->OUT&y,JL_PORT##x->DIR&y,JL_PORT##x->DIE&y,JL_PORT##x->DIEH&y,JL_PORT##x->PU0&y,JL_PORT##x->PU1&y,JL_PORT##x->PD0&y,JL_PORT##x->PD1&y,JL_PORT##x->HD0&y,JL_PORT##x->HD1&y,JL_PORT##x->SPL&y
|
||||
#ifdef GPIOP //no use
|
||||
#define GPIO_LOG_PORTP JL_PORTP->OUT,JL_PORTP->DIR,JL_PORTP->DIE,JL_PORTP->DIEH,JL_PORTP->PU0,JL_PORTP->PU1,JL_PORTP->PD0,JL_PORTP->PD1,JL_PORTP->HD0,JL_PORTP->HD1
|
||||
#endif
|
||||
#ifdef GPIOR
|
||||
#define GPIO_LOG_FORMAT_R "0x%04x 0x%04x 0x%04x %s 0x%04x,0x%04x 0x%04x,0x%04x 0x%04x,0x%04x %s"
|
||||
#define GPIO_LOG_PORTR R3_PR_OUT,R3_PR_DIR,R3_PR_DIE,GPIO_NO_SUPPORT_FUN,R3_PR_PU0,R3_PR_PU1,R3_PR_PD0,R3_PR_PD1,R3_PR_HD0,R3_PR_HD1,GPIO_NO_SUPPORT_FUN
|
||||
#endif
|
||||
#ifdef GPIOUSB
|
||||
#define GPIO_LOG_FORMAT_U "0x%04x 0x%04x 0x%04x 0x%04x 0x%04x,%s 0x%04x,%s %s,%s 0x%04x"
|
||||
#define GPIO_LOG_PORTU _portx(PU,out),_portx(PU,dir),_portx(PU,die),_portx(PU,dieh),_portx(PU,pu0),GPIO_NO_SUPPORT_FUN,_portx(PU,pd0),GPIO_NO_SUPPORT_FUN,GPIO_NO_SUPPORT_FUN,GPIO_NO_SUPPORT_FUN,_portx(PU,spl)
|
||||
#endif
|
||||
/*************************function*************************/
|
||||
struct port_reg *gpio2reg(u32 gpio);
|
||||
void usb_iomode(const u32 enable);
|
||||
|
||||
int gpio_hw_write(const u32 gpio, const u32 value);//return <0:error
|
||||
int gpio_hw_read(const u32 gpio);//return <0:error
|
||||
int get_gpio(const char *p);//return <0:error
|
||||
|
||||
/**************************************************************/
|
||||
/*********************multi pin interface***************************/
|
||||
//多io同一模式
|
||||
int gpio_hw_port_pin_judge(const enum gpio_port port, u32 pin);
|
||||
int gpio_hw_set_direction(const enum gpio_port port, u32 pin, const u32 value);
|
||||
int gpio_hw_direction_input(const enum gpio_port port, u32 pin);
|
||||
int gpio_hw_direction_output(const enum gpio_port port, u32 pin, const int value);/////////
|
||||
int gpio_hw_write_port(const enum gpio_port port, u32 pin, const u32 value);
|
||||
int gpio_hw_set_output_value(const enum gpio_port port, u32 pin, const u32 value);
|
||||
int gpio_hw_set_pull_up(const enum gpio_port port, u32 pin, const enum gpio_pullup_mode value);
|
||||
int gpio_hw_set_pull_down(const enum gpio_port port, u32 pin, const enum gpio_pulldown_mode value);//portabcdpr:pd0,pd1,usb:pd0
|
||||
int gpio_hw_set_drive_strength(const enum gpio_port port, u32 pin, const enum gpio_drive_strength value);
|
||||
int gpio_hw_set_die(const enum gpio_port port, u32 pin, const int value);
|
||||
int gpio_hw_set_dieh(const enum gpio_port port, u32 pin, const u32 value);
|
||||
int gpio_hw_set_spl(const enum gpio_port port, u32 pin, const u32 value);
|
||||
//read
|
||||
int gpio_hw_read_port(const enum gpio_port port, u32 pin);
|
||||
int gpio_hw_read_out_level(const enum gpio_port port, u32 pin);
|
||||
u32 gpio_hw_read_drive_strength(const enum gpio_port port, u32 pin);//return hd1:高16位, hd0:低16位
|
||||
|
||||
//多io不同模式
|
||||
int gpio_hw_op_dir(const enum gpio_port port, u32 pin, u32 value, const enum port_op_mode op);
|
||||
int gpio_hw_op_out(const enum gpio_port port, u32 pin, u32 value, const enum port_op_mode op);
|
||||
int gpio_hw_op_die(const enum gpio_port port, u32 pin, u32 value, const enum port_op_mode op);
|
||||
int gpio_hw_op_dieh(const enum gpio_port port, u32 pin, u32 value, const enum port_op_mode op);
|
||||
int gpio_hw_op_pu0(const enum gpio_port port, u32 pin, u32 value, const enum port_op_mode op);
|
||||
int gpio_hw_op_pu1(const enum gpio_port port, u32 pin, u32 value, const enum port_op_mode op);
|
||||
int gpio_hw_op_pd0(const enum gpio_port port, u32 pin, u32 value, const enum port_op_mode op);
|
||||
int gpio_hw_op_pd1(const enum gpio_port port, u32 pin, u32 value, const enum port_op_mode op);
|
||||
|
||||
//=================================================================================//
|
||||
//@brief: CrossBar 获取某IO的输出映射寄存器
|
||||
//=================================================================================//
|
||||
u32 *gpio2crossbar_outreg(u32 gpio);
|
||||
u32 gpio2crossbar_inport(u32 gpio);
|
||||
int gpio_set_fun_output_port(u32 gpio, u32 fun_index, u8 dir_ctl, u8 data_ctl);
|
||||
int gpio_disable_fun_output_port(u32 gpio);
|
||||
int gpio_set_fun_input_port(u32 gpio, enum PFI_TABLE pfun);
|
||||
int gpio_disable_fun_input_port(enum PFI_TABLE pfun);
|
||||
|
||||
//=================================================================================//
|
||||
//@brief: Output/input Channel输出设置 API, 将指定IO口设置为某个外设的输出
|
||||
//=================================================================================//
|
||||
int gpio_och_sel_output_signal(u32 gpio, enum OUTPUT_CH_SIGNAL signal);
|
||||
int gpio_och_disable_output_signal(u32 gpio, enum OUTPUT_CH_SIGNAL signal);
|
||||
int gpio_ich_sel_input_signal(u32 gpio, enum INPUT_CH_SIGNAL signal, enum INPUT_CH_TYPE type);
|
||||
int gpio_ich_disable_input_signal(u32 gpio, enum INPUT_CH_SIGNAL signal, enum INPUT_CH_TYPE type);
|
||||
|
||||
u32 gpio_get_ich_use_flag();
|
||||
//获取空闲的gp_ich
|
||||
//return: 0xff:error
|
||||
u8 gpio_get_unoccupied_gp_ich();
|
||||
//value:gp_ich号
|
||||
void gpio_release_gp_ich(u8 value);
|
||||
|
||||
u32 get_sfc_port(void);
|
||||
//打印指定组别指定pin的crossbar信息
|
||||
void gpio_crossbar_fo_dump(char px_name[], u8 max_px_out_num, u16 px_mask, u32 *omap_ptr);
|
||||
void gpio_crossbar_fi_dump(char px_name[], u8 max_px_in_num, u16 px_mask, u8 px_in);
|
||||
|
||||
#endif /*GPIO_H*/
|
||||
@@ -0,0 +1,100 @@
|
||||
#ifndef __GPTIMER_HW_H__
|
||||
#define __GPTIMER_HW_H__
|
||||
|
||||
//BR35
|
||||
#include "cpu.h"
|
||||
#include "gpio.h"
|
||||
#include "gptimer_hw_v5.h"
|
||||
|
||||
typedef JL_TIMER_TypeDef GPTIMER;
|
||||
#define GPTIMER0 JL_TIMER0
|
||||
#define GPTIMER1 JL_TIMER1
|
||||
#define GPTIMER2 JL_TIMER2
|
||||
#define GPTIMER3 JL_TIMER3
|
||||
#define TIMER_MAX_NUM 4
|
||||
#define TIMER_BASE_ADDR GPTIMER0
|
||||
#define TIMER_OFFSET (GPTIMER1 - GPTIMER0)
|
||||
|
||||
#define TIMER_CNT_SIZE 0xFFFF
|
||||
#define TIMER_PRD_SIZE 0xFFFF
|
||||
#define TIMER_PWM_SIZE 0xFFFF
|
||||
|
||||
#define IRQ_TIMEx_IDX_LIST IRQ_TIME0_IDX, \
|
||||
IRQ_TIME1_IDX, \
|
||||
IRQ_TIME2_IDX, \
|
||||
IRQ_TIME3_IDX, \
|
||||
|
||||
#define IRFLT_SRC_TABLE_LIST \
|
||||
0, /* lsb_clk */ \
|
||||
0, /* lsb_clk */ \
|
||||
12, /* std_12m */ \
|
||||
24, /* std_24m */ \
|
||||
|
||||
typedef enum gptimerx : u8 {
|
||||
TIMER0 = 0,
|
||||
TIMER1,
|
||||
TIMER2,
|
||||
TIMER3,
|
||||
TIMERx, //传入此参数时,内部自动分配一个空闲TIMER
|
||||
} timer_dev;
|
||||
|
||||
|
||||
//以下宏定义给系统 timer 驱动使用
|
||||
#define GPTIMER_PND_CLR (0b1<<14)
|
||||
|
||||
#define GPTIMER_CLK_SRC_LSB (0b0001<<10)
|
||||
#define GPTIMER_CLK_SRC_RC250K (0b0010<<10)
|
||||
#define GPTIMER_CLK_SRC_RC16M (0b0011<<10)
|
||||
#define GPTIMER_CLK_SRC_LRC (0b0100<<10)
|
||||
#define GPTIMER_CLK_SRC_STD12M (0b0101<<10)
|
||||
#define GPTIMER_CLK_SRC_STD24M (0b0110<<10)
|
||||
#define GPTIMER_CLK_SRC_STD48M (0b0111<<10)
|
||||
#define GPTIMER_CLK_SRC_CLKOUT2 (0b1000<<10)
|
||||
#define GPTIMER_CLK_SRC_PATCLK (0b1001<<10)
|
||||
#define GPTIMER_CLK_SRC_HSB (0b1010<<10)
|
||||
#define GPTIMER_CLK_SRC_WATCLK (0b1011<<10)
|
||||
|
||||
#define GPTIMER_CLK_DIV_1 (0b0000<<4)
|
||||
#define GPTIMER_CLK_DIV_4 (0b0001<<4)
|
||||
#define GPTIMER_CLK_DIV_16 (0b0010<<4)
|
||||
#define GPTIMER_CLK_DIV_64 (0b0011<<4)
|
||||
#define GPTIMER_CLK_DIV_2 (0b0100<<4)
|
||||
#define GPTIMER_CLK_DIV_8 (0b0101<<4)
|
||||
#define GPTIMER_CLK_DIV_32 (0b0110<<4)
|
||||
#define GPTIMER_CLK_DIV_128 (0b0111<<4)
|
||||
#define GPTIMER_CLK_DIV_256 (0b1000<<4)
|
||||
#define GPTIMER_CLK_DIV_1024 (0b1001<<4)
|
||||
#define GPTIMER_CLK_DIV_4096 (0b1010<<4)
|
||||
#define GPTIMER_CLK_DIV_16384 (0b1011<<4)
|
||||
#define GPTIMER_CLK_DIV_512 (0b1100<<4)
|
||||
#define GPTIMER_CLK_DIV_2048 (0b1101<<4)
|
||||
#define GPTIMER_CLK_DIV_8192 (0b1110<<4)
|
||||
#define GPTIMER_CLK_DIV_32768 (0b1111<<4)
|
||||
|
||||
#define GPTIMER_TIMER_MODE (0b1<<0)
|
||||
|
||||
//延时
|
||||
#define GPTIMER_DLY GPTIMER2
|
||||
#define GPTIMER_DLY_IRQ_INDEX IRQ_TIME2_IDX
|
||||
|
||||
//sys_hi_timer
|
||||
#define GPTIMER_SYS GPTIMER3
|
||||
#define GPTIMER_SYS_IRQ_INDEX IRQ_TIME3_IDX
|
||||
#define GPTIMER_SYS_START() GPTIMER_SYS->CON |= GPTIMER_TIMER_MODE
|
||||
#define GPTIMER_SYS_PAUSE() GPTIMER_SYS->CON &= ~GPTIMER_TIMER_MODE
|
||||
#define GPTIMER_SYS_EN_CHECK() GPTIMER_SYS->CON & GPTIMER_TIMER_MODE
|
||||
#define GPTIMER_SYS_CLR_PND() GPTIMER_SYS->CON |= GPTIMER_PND_CLR
|
||||
|
||||
#define GPTIMER_SYS_INIT() do{GPTIMER_SYS->CON = GPTIMER_PND_CLR|GPTIMER_CLK_SRC_STD12M|GPTIMER_CLK_DIV_4; \
|
||||
GPTIMER_SYS->PRD = 0; \
|
||||
GPTIMER_SYS->CNT = 0;}while(0) \
|
||||
|
||||
#define GPTIMER_SYS_GET_CNT GPTIMER_SYS->CNT
|
||||
#define GPTIMER_SYS_SET_CNT(x) GPTIMER_SYS->CNT = (x)
|
||||
#define GPTIMER_SYS_GET_PRD GPTIMER_SYS->PRD
|
||||
#define GPTIMER_SYS_SET_PRD(x) GPTIMER_SYS->PRD = (x)-1
|
||||
#define GPTIMER_SYS_CLK_SRC 12 //MHz单位
|
||||
#define GPTIMER_SYS_CLK_DIV 2 // 右移两位 等效于 除以4
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,199 @@
|
||||
#ifndef __HWI_H__
|
||||
#define __HWI_H__
|
||||
|
||||
|
||||
//=================================================
|
||||
#define IRQ_EMUEXCPT_IDX 0
|
||||
#define IRQ_EXCEPTION_IDX 1
|
||||
#define IRQ_SYSCALL_IDX 2
|
||||
#define IRQ_TICK_TMR_IDX 3
|
||||
#define IRQ_TIME0_IDX 4
|
||||
#define IRQ_TIME1_IDX 5
|
||||
#define IRQ_TIME2_IDX 6
|
||||
#define IRQ_UART0_IDX 7
|
||||
#define IRQ_UART1_IDX 8
|
||||
|
||||
#define IRQ_SPI1_IDX 10
|
||||
#define IRQ_IIC0_IDX 11
|
||||
#define IRQ_PORT_IDX 12
|
||||
#define IRQ_GPADC_IDX 13
|
||||
#define IRQ_UART2_IDX 14
|
||||
#define IRQ_LRCT_IDX 15
|
||||
|
||||
#define IRQ_GPCNT0_IDX 16
|
||||
#define IRQ_QDEC0_IDX 17
|
||||
#define IRQ_SD0_IDX 18
|
||||
#define IRQ_USB_SOF_IDX 19
|
||||
#define IRQ_USB_CTRL_IDX 20
|
||||
|
||||
#define IRQ_TIME3_IDX 22
|
||||
#define IRQ_LED_IDX 23
|
||||
#define IRQ_SD0_BRK_IDX 24
|
||||
#define IRQ_MCPWM_TMR_IDX 25
|
||||
#define IRQ_MCPWM_CHX_IDX 26
|
||||
#define IRQ_PMU_TMR0_IDX 27
|
||||
#define IRQ_PMU_TMR1_IDX 28
|
||||
|
||||
#define IRQ_SPI2_IDX 31
|
||||
|
||||
#define IRQ_P33_IDX 33
|
||||
#define IRQ_PINR_IDX 34
|
||||
#define IRQ_PMU_SOFT0_IDX 35
|
||||
#define IRQ_PMU_SOFT1_IDX 36
|
||||
#define IRQ_PMU_SOFT2_IDX 37
|
||||
#define IRQ_PMU_SOFT3_IDX 38
|
||||
|
||||
#define IRQ_PMU_TMR2_IDX 40
|
||||
#define IRQ_PMU_TMR3_IDX 41
|
||||
|
||||
#define IRQ_SRC0_IDX 66
|
||||
#define IRQ_SPI0_IDX 68
|
||||
|
||||
#define IRQ_DCP_IDX 70
|
||||
|
||||
#define IRQ_DBI_IDX 72
|
||||
#define IRQ_JPG_IDX 73
|
||||
#define IRQ_GPU_IDX 74
|
||||
|
||||
#define IRQ_ADC_IDX 88
|
||||
#define IRQ_AUDIO_IDX 89
|
||||
|
||||
#define IRQ_BT_TIMEBASE_IDX 100
|
||||
#define IRQ_BLE_RX_IDX 101
|
||||
#define IRQ_BLE_EVENT_IDX 102
|
||||
#define IRQ_BT_CLKN_IDX 103
|
||||
#define IRQ_BREDR_IDX 104
|
||||
#define IRQ_BT_RXMCH 105
|
||||
#define IRQ_SYNC_IDX 106
|
||||
|
||||
#define IRQ_SOFT0_IDX 120
|
||||
#define IRQ_SOFT1_IDX 121
|
||||
#define IRQ_SOFT2_IDX 122
|
||||
#define IRQ_SOFT3_IDX 123
|
||||
#define IRQ_SOFT4_IDX 124
|
||||
#define IRQ_SOFT5_IDX 125
|
||||
#define IRQ_SOFT6_IDX 126
|
||||
#define IRQ_SOFT7_IDX 127
|
||||
|
||||
#define MAX_IRQ_ENTRY_NUM 128
|
||||
|
||||
//=================================================
|
||||
|
||||
//=================================================
|
||||
void interrupt_init();
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief 中断注册函数
|
||||
*
|
||||
* @param index 中断号
|
||||
* @param priority 优先级,范围0-6可用
|
||||
* @param handler 中断服务函数
|
||||
* @param cpu_id 相应中断服务函数的CPU
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
void request_irq(u8 index, u8 priority, void (*handler)(void), u8 cpu_id);
|
||||
|
||||
void unrequest_irq(u8 index);
|
||||
|
||||
void reg_set_ip(unsigned char index, unsigned char priority, u8 cpu_id);
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief 设置不可屏蔽中断(不可屏蔽中断不区分优先级)
|
||||
* cpu多核同步默认使用0,其他使用1。
|
||||
*
|
||||
* @param index 中断号
|
||||
* @param priority 不可屏蔽优先级,范围 0、1 (CPU_IRQ_IPMASK_LEVEL == 6)
|
||||
* @param cpu_id 相应中断服务函数的CPU
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
void irq_unmask_set(u8 index, u8 priority, u8 cpu_id);
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief 取消不可屏蔽中断
|
||||
* cpu多核同步默认使用0,其他使用1。
|
||||
*
|
||||
* @param index 中断号
|
||||
* @param priority 不可屏蔽优先级,范围 0、1、2、3、4、5
|
||||
* @param cpu_id 相应中断服务函数的CPU
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
void irq_unmask_unset(u8 index, u8 priority, u8 cpu_id);
|
||||
|
||||
void bit_clr_ie(unsigned char index);
|
||||
void bit_set_ie(unsigned char index);
|
||||
bool irq_read(u32 index);
|
||||
|
||||
#define irq_disable(x) bit_clr_ie(x)
|
||||
#define irq_enable(x) bit_set_ie(x)
|
||||
|
||||
void unmask_enter_critical(void);
|
||||
void unmask_exit_critical(void);
|
||||
|
||||
//---------------------------------------------//
|
||||
// low power waiting
|
||||
//---------------------------------------------//
|
||||
__attribute__((always_inline))
|
||||
static inline void lp_waiting(int *ptr, int pnd, int cpd, char inum)
|
||||
{
|
||||
#if 0
|
||||
q32DSP(core_num())->IWKUP_NUM = inum;
|
||||
while (!(*ptr & pnd)) {
|
||||
asm volatile("idle");
|
||||
}
|
||||
*ptr |= cpd;
|
||||
#else
|
||||
int con;
|
||||
q32DSP(core_num())->IWKUP_NUM = inum;
|
||||
asm volatile(
|
||||
" goto 2f \n\t"
|
||||
" 1: \n\t"
|
||||
" idle \n\t"
|
||||
" 2: \n\t"
|
||||
" %0 = [%1] \n\t"
|
||||
" rep 1 { \n\t" // disable_bpu
|
||||
" if((%0 & %2)==0) goto 1b \n\t"
|
||||
" } \n\t"
|
||||
:"=&r"(con)
|
||||
:"r"(ptr), "r"(pnd), "0"(con)
|
||||
:
|
||||
);
|
||||
*ptr = con | cpd;
|
||||
#endif
|
||||
}
|
||||
|
||||
//---------------------------------------------//
|
||||
// interrupt cli/sti
|
||||
//---------------------------------------------//
|
||||
|
||||
static inline int int_cli(void)
|
||||
{
|
||||
int msg;
|
||||
asm volatile("cli %0" : "=r"(msg) :);
|
||||
return msg;
|
||||
}
|
||||
|
||||
static inline void int_sti(int msg)
|
||||
{
|
||||
asm volatile("sti %0" :: "r"(msg));
|
||||
}
|
||||
|
||||
#ifdef IRQ_TIME_COUNT_EN
|
||||
void irq_handler_enter(int irq);
|
||||
|
||||
void irq_handler_exit(int irq);
|
||||
|
||||
void irq_handler_times_dump();
|
||||
#else
|
||||
|
||||
#define irq_handler_enter(irq) do { }while(0)
|
||||
#define irq_handler_exit(irq) do { }while(0)
|
||||
#define irq_handler_times_dump() do { }while(0)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
#ifndef __Q32DSP_ICACHE__
|
||||
#define __Q32DSP_ICACHE__
|
||||
|
||||
//*********************************************************************************//
|
||||
// Module name : icache.h //
|
||||
// Description : q32DSP icache control head file //
|
||||
// By Designer : zequan_liu //
|
||||
// Dat changed : //
|
||||
//*********************************************************************************//
|
||||
|
||||
// ------ ------ ------ ------ ------ ------
|
||||
// | c0 | | c1 | | c0 | | c1 | | c0 | | c1 |
|
||||
// ------ ------ ------ ------ ------ ------
|
||||
// | | | | | |
|
||||
// ------ ------ ------ ------ ------ ------
|
||||
// | L1 | | L1 | | L1 | | L1 | | L1 | | L1 |
|
||||
// ------ ------ ------ ------ ------ ------
|
||||
// |_______| |_______| |_______|
|
||||
// | | |
|
||||
// --------- --------- ---------
|
||||
// | flash | | L2i | | L2c |
|
||||
// --------- --------- ---------
|
||||
// | |
|
||||
// --------- ---------
|
||||
// | flash | | flash |
|
||||
// --------- ---------
|
||||
//
|
||||
// INCLUDE_L2I==0 INCLUDE_L2I==1 INCLUDE_L2I==0
|
||||
// INCLUDE_L2C==0 INCLUDE_L2C==0 INCLUDE_L2C==1
|
||||
|
||||
#define INCLUDE_ICU_RPT 0
|
||||
#define INCLUDE_ICU_EMU 0
|
||||
#define INCLUDE_L2I 0 // L2i & L2d separate
|
||||
#define INCLUDE_L2C 0 // L2i & L2d together
|
||||
|
||||
//------------------------------------------------------//
|
||||
// icache level 1 function
|
||||
//------------------------------------------------------//
|
||||
|
||||
void IcuEnable(void);
|
||||
void IcuDisable(void);
|
||||
void IcuInitial(void);
|
||||
void IcuWaitIdle(void);
|
||||
void IcuSetWayNum(unsigned int way);
|
||||
|
||||
void IcuFlushinvAll(void);
|
||||
void IcuFlushinvRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
void IcuUnlockAll(void);
|
||||
void IcuUnlockRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
void IcuLockRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
void IcuPfetchRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
|
||||
void IcuReportEnable(void);
|
||||
void IcuReportDisable(void);
|
||||
void IcuReportPrintf(void);
|
||||
void IcuReportClear(void);
|
||||
|
||||
void IcuEmuEnable(void);
|
||||
void IcuEmuDisable(void);
|
||||
void IcuEmuMessage(void);
|
||||
|
||||
//------------------------------------------------------//
|
||||
// icache level 2 function
|
||||
//------------------------------------------------------//
|
||||
|
||||
#if (INCLUDE_L2I)
|
||||
|
||||
void L2iEnable(void);
|
||||
void L2iDisable(void);
|
||||
void L2iInitial(void);
|
||||
void L2iSetWayNum(unsigned int way);
|
||||
|
||||
void L2iFlushinvAll(void);
|
||||
void L2iFlushinvRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
void L2iUnlockAll(void);
|
||||
void L2iUnlockRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
void L2iLockRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
void L2iPfetchRegion(unsigned int *beg, unsigned int len); // note len!=0
|
||||
|
||||
void L2iReportEnable(void);
|
||||
void L2iReportDisable(void);
|
||||
void L2iReportPrintf(void);
|
||||
void L2iReportClear(void);
|
||||
|
||||
void L2iEmuEnable(void);
|
||||
void L2iEmuDisable(void);
|
||||
void L2iEmuMessage(void);
|
||||
|
||||
#endif
|
||||
|
||||
//*********************************************************************************//
|
||||
// //
|
||||
// end of this module //
|
||||
// //
|
||||
//*********************************************************************************//
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
#ifndef __IIC_HW_H__
|
||||
#define __IIC_HW_H__
|
||||
|
||||
#define MAX_HW_IIC_NUM 2
|
||||
#define P11_HW_IIC_NUM 1 //p11 iic使能,及锁使能
|
||||
// typedef enum {
|
||||
// HW_IIC_0,
|
||||
// // HW_IIC_1,
|
||||
// } hw_iic_dev;
|
||||
|
||||
enum {
|
||||
HW_IIC_0,
|
||||
// HW_IIC_1,
|
||||
#if defined(P11_HW_IIC_NUM)&&P11_HW_IIC_NUM
|
||||
HW_P11_IIC_0,//p11 init,pb
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
#ifndef ASM_INCLUDES_H
|
||||
#define ASM_INCLUDES_H
|
||||
|
||||
#include "asm/cpu.h"
|
||||
#include "asm/crc16.h"
|
||||
#include "clock.h"
|
||||
#include "uart.h"
|
||||
#include "gpio.h"
|
||||
#include "asm/spiflash.h"
|
||||
#include "asm/csfr.h"
|
||||
#include "asm/power_interface.h"
|
||||
#include "asm/efuse.h"
|
||||
#include "asm/debug.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,89 @@
|
||||
|
||||
//===============================================================================//
|
||||
//
|
||||
// input IO define
|
||||
//
|
||||
//===============================================================================//
|
||||
#define PA0_IN 1
|
||||
#define PA1_IN 2
|
||||
#define PA2_IN 3
|
||||
#define PA3_IN 4
|
||||
#define PA4_IN 5
|
||||
#define PA5_IN 6
|
||||
#define PA6_IN 7
|
||||
#define PA7_IN 8
|
||||
#define PA8_IN 9
|
||||
#define PA9_IN 10
|
||||
#define PA10_IN 11
|
||||
#define PA11_IN 12
|
||||
#define PA12_IN 13
|
||||
#define PA13_IN 14
|
||||
#define PB0_IN 15
|
||||
#define PB1_IN 16
|
||||
#define PB2_IN 17
|
||||
#define PB3_IN 18
|
||||
#define PB4_IN 19
|
||||
#define PB5_IN 20
|
||||
#define PB6_IN 21
|
||||
#define PB7_IN 22
|
||||
#define PB8_IN 23
|
||||
#define PC0_IN 24
|
||||
#define PC1_IN 25
|
||||
#define PC2_IN 26
|
||||
#define PC3_IN 27
|
||||
#define PC4_IN 28
|
||||
#define PC5_IN 29
|
||||
#define PC6_IN 30
|
||||
#define PC7_IN 31
|
||||
#define PC8_IN 32
|
||||
#define PC9_IN 33
|
||||
#define PC10_IN 34
|
||||
#define PC11_IN 35
|
||||
#define USBDP_IN 36
|
||||
#define USBDM_IN 37
|
||||
#define PP0_IN 38
|
||||
|
||||
//===============================================================================//
|
||||
//
|
||||
// function input select sfr
|
||||
//
|
||||
//===============================================================================//
|
||||
typedef struct {
|
||||
__RW __u8 FI_GP_ICH0;
|
||||
__RW __u8 FI_GP_ICH1;
|
||||
__RW __u8 FI_GP_ICH2;
|
||||
__RW __u8 FI_GP_ICH3;
|
||||
__RW __u8 FI_GP_ICH4;
|
||||
__RW __u8 FI_GP_ICH5;
|
||||
__RW __u8 FI_SD0_CMD;
|
||||
__RW __u8 FI_SD0_DA0;
|
||||
__RW __u8 FI_SD0_DA1;
|
||||
__RW __u8 FI_SD0_DA2;
|
||||
__RW __u8 FI_SD0_DA3;
|
||||
__RW __u8 FI_SPI1_CLK;
|
||||
__RW __u8 FI_SPI1_DA0;
|
||||
__RW __u8 FI_SPI1_DA1;
|
||||
__RW __u8 FI_SPI1_DA2;
|
||||
__RW __u8 FI_SPI1_DA3;
|
||||
__RW __u8 FI_SPI2_CLK;
|
||||
__RW __u8 FI_SPI2_DA0;
|
||||
__RW __u8 FI_SPI2_DA1;
|
||||
__RW __u8 FI_SPI2_DA2;
|
||||
__RW __u8 FI_SPI2_DA3;
|
||||
__RW __u8 FI_IIC0_SCL;
|
||||
__RW __u8 FI_IIC0_SDA;
|
||||
__RW __u8 FI_UART0_RX;
|
||||
__RW __u8 FI_UART1_RX;
|
||||
__RW __u8 FI_UART2_RX;
|
||||
__RW __u8 FI_QDEC0_A;
|
||||
__RW __u8 FI_QDEC0_B;
|
||||
__RW __u8 FI_CHAIN_IN0;
|
||||
__RW __u8 FI_CHAIN_IN1;
|
||||
__RW __u8 FI_CHAIN_IN2;
|
||||
__RW __u8 FI_CHAIN_IN3;
|
||||
__RW __u8 FI_CHAIN_RST;
|
||||
__RW __u8 FI_TOTAL;
|
||||
} JL_IMAP_TypeDef;
|
||||
|
||||
#define JL_IMAP_BASE (ls_base + map_adr(0x3a, 0x00))
|
||||
#define JL_IMAP ((JL_IMAP_TypeDef *)JL_IMAP_BASE)
|
||||
@@ -0,0 +1,92 @@
|
||||
|
||||
//===============================================================================//
|
||||
//
|
||||
// output function define
|
||||
//
|
||||
//===============================================================================//
|
||||
#define FO_GP_OCH0 ((0 << 2)|BIT(1))
|
||||
#define FO_GP_OCH1 ((1 << 2)|BIT(1))
|
||||
#define FO_GP_OCH2 ((2 << 2)|BIT(1))
|
||||
#define FO_GP_OCH3 ((3 << 2)|BIT(1))
|
||||
#define FO_GP_OCH4 ((4 << 2)|BIT(1))
|
||||
#define FO_GP_OCH5 ((5 << 2)|BIT(1))
|
||||
#define FO_GP_OCH6 ((6 << 2)|BIT(1))
|
||||
#define FO_GP_OCH7 ((7 << 2)|BIT(1))
|
||||
#define FO_SD0_CLK ((8 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_SD0_CMD ((9 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_SD0_DA0 ((10 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_SD0_DA1 ((11 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_SD0_DA2 ((12 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_SD0_DA3 ((13 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_SPI1_CLK ((14 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_SPI1_DA0 ((15 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_SPI1_DA1 ((16 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_SPI1_DA2 ((17 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_SPI1_DA3 ((18 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_SPI2_CLK ((19 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_SPI2_DA0 ((20 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_SPI2_DA1 ((21 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_SPI2_DA2 ((22 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_SPI2_DA3 ((23 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_IIC0_SCL ((24 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_IIC0_SDA ((25 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_UART0_TX ((26 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_UART1_TX ((27 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_UART2_TX ((28 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_MCPWM0_H ((29 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_MCPWM1_H ((30 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_MCPWM0_L ((31 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_MCPWM1_L ((32 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_CHAIN_OUT0 ((33 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_CHAIN_OUT1 ((34 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_CHAIN_OUT2 ((35 << 2)|BIT(1)|BIT(0))
|
||||
#define FO_CHAIN_OUT3 ((36 << 2)|BIT(1)|BIT(0))
|
||||
|
||||
//===============================================================================//
|
||||
//
|
||||
// IO output select sfr
|
||||
//
|
||||
//===============================================================================//
|
||||
typedef struct {
|
||||
__RW __u8 PA0_OUT;
|
||||
__RW __u8 PA1_OUT;
|
||||
__RW __u8 PA2_OUT;
|
||||
__RW __u8 PA3_OUT;
|
||||
__RW __u8 PA4_OUT;
|
||||
__RW __u8 PA5_OUT;
|
||||
__RW __u8 PA6_OUT;
|
||||
__RW __u8 PA7_OUT;
|
||||
__RW __u8 PA8_OUT;
|
||||
__RW __u8 PA9_OUT;
|
||||
__RW __u8 PA10_OUT;
|
||||
__RW __u8 PA11_OUT;
|
||||
__RW __u8 PA12_OUT;
|
||||
__RW __u8 PA13_OUT;
|
||||
__RW __u8 PB0_OUT;
|
||||
__RW __u8 PB1_OUT;
|
||||
__RW __u8 PB2_OUT;
|
||||
__RW __u8 PB3_OUT;
|
||||
__RW __u8 PB4_OUT;
|
||||
__RW __u8 PB5_OUT;
|
||||
__RW __u8 PB6_OUT;
|
||||
__RW __u8 PB7_OUT;
|
||||
__RW __u8 PB8_OUT;
|
||||
__RW __u8 PC0_OUT;
|
||||
__RW __u8 PC1_OUT;
|
||||
__RW __u8 PC2_OUT;
|
||||
__RW __u8 PC3_OUT;
|
||||
__RW __u8 PC4_OUT;
|
||||
__RW __u8 PC5_OUT;
|
||||
__RW __u8 PC6_OUT;
|
||||
__RW __u8 PC7_OUT;
|
||||
__RW __u8 PC8_OUT;
|
||||
__RW __u8 PC9_OUT;
|
||||
__RW __u8 PC10_OUT;
|
||||
__RW __u8 PC11_OUT;
|
||||
__RW __u8 USBDP_OUT;
|
||||
__RW __u8 USBDM_OUT;
|
||||
__RW __u8 PP0_OUT;
|
||||
} JL_OMAP_TypeDef;
|
||||
|
||||
#define JL_OMAP_BASE (ls_base + map_adr(0x36, 0x00))
|
||||
#define JL_OMAP ((JL_OMAP_TypeDef *)JL_OMAP_BASE)
|
||||
@@ -0,0 +1,231 @@
|
||||
#ifndef __KEY_DRV_IR_H__
|
||||
#define __KEY_DRV_IR_H__
|
||||
|
||||
#define IR_PORTA(x) (0x00 + x)
|
||||
#define IR_PORTB(x) (0x10 + x)
|
||||
#define IR_PORTC(x) (0x20 + x)
|
||||
#define IR_PORTD(x) (0x30 + x)
|
||||
#define IR_USBDP (0x3d)
|
||||
#define IR_USBDM (0x3e)
|
||||
|
||||
#define IR_IO IR_PORTA(9)
|
||||
|
||||
/*ir key define*/
|
||||
#define IR_00 0
|
||||
#define IR_01 1
|
||||
#define IR_02 2
|
||||
#define IR_03 3
|
||||
#define IR_04 4
|
||||
#define IR_05 5
|
||||
#define IR_06 6
|
||||
#define IR_07 7
|
||||
#define IR_08 8
|
||||
#define IR_09 9
|
||||
#define IR_10 10
|
||||
#define IR_11 11
|
||||
#define IR_12 12
|
||||
#define IR_13 13
|
||||
#define IR_14 14
|
||||
#define IR_15 15
|
||||
#define IR_16 16
|
||||
#define IR_17 17
|
||||
#define IR_18 18
|
||||
#define IR_19 19
|
||||
#define IR_20 20
|
||||
#define IR_21 21
|
||||
#define IR_22 22
|
||||
|
||||
//////////////////////////////////
|
||||
#define NKEY_00 0xff
|
||||
#define NKEY_01 0xff
|
||||
#define NKEY_02 0xff
|
||||
#define NKEY_03 0xff
|
||||
#define NKEY_04 0xff
|
||||
#define NKEY_05 0xff
|
||||
#define NKEY_06 0xff
|
||||
#define NKEY_07 0xff
|
||||
#define NKEY_08 0xff
|
||||
#define NKEY_09 0xff
|
||||
#define NKEY_0A 0xff
|
||||
#define NKEY_0B 0xff
|
||||
#define NKEY_0C 0xff
|
||||
#define NKEY_0D 0xff
|
||||
#define NKEY_0E 0xff
|
||||
#define NKEY_0F 0xff
|
||||
#define NKEY_10 0xff
|
||||
#define NKEY_11 0xff
|
||||
#define NKEY_12 0xff
|
||||
#define NKEY_13 0xff
|
||||
#define NKEY_14 0xff
|
||||
#define NKEY_15 0xff
|
||||
#define NKEY_16 0xff
|
||||
#define NKEY_17 0xff
|
||||
#define NKEY_18 0xff
|
||||
#define NKEY_19 0xff
|
||||
#define NKEY_1A 0xff
|
||||
#define NKEY_1B 0xff
|
||||
#define NKEY_1C 0xff
|
||||
#define NKEY_1D 0xff
|
||||
#define NKEY_1E 0xff
|
||||
#define NKEY_1F 0xff
|
||||
#define NKEY_20 0xff
|
||||
#define NKEY_21 0xff
|
||||
#define NKEY_22 0xff
|
||||
#define NKEY_23 0xff
|
||||
#define NKEY_24 0xff
|
||||
#define NKEY_25 0xff
|
||||
#define NKEY_26 0xff
|
||||
#define NKEY_27 0xff
|
||||
#define NKEY_28 0xff
|
||||
#define NKEY_29 0xff
|
||||
#define NKEY_2A 0xff
|
||||
#define NKEY_2B 0xff
|
||||
#define NKEY_2C 0xff
|
||||
#define NKEY_2D 0xff
|
||||
#define NKEY_2E 0xff
|
||||
#define NKEY_2F 0xff
|
||||
#define NKEY_30 0xff
|
||||
#define NKEY_31 0xff
|
||||
#define NKEY_32 0xff
|
||||
#define NKEY_33 0xff
|
||||
#define NKEY_34 0xff
|
||||
#define NKEY_35 0xff
|
||||
#define NKEY_36 0xff
|
||||
#define NKEY_37 0xff
|
||||
#define NKEY_38 0xff
|
||||
#define NKEY_39 0xff
|
||||
#define NKEY_3A 0xff
|
||||
#define NKEY_3B 0xff
|
||||
#define NKEY_3C 0xff
|
||||
#define NKEY_3D 0xff
|
||||
#define NKEY_3E 0xff
|
||||
#define NKEY_3F 0xff
|
||||
#define NKEY_40 0xff
|
||||
#define NKEY_41 0xff
|
||||
#define NKEY_42 0xff
|
||||
#define NKEY_43 0xff
|
||||
#define NKEY_44 0xff
|
||||
#define NKEY_45 0xff
|
||||
#define NKEY_46 0xff
|
||||
#define NKEY_47 0xff
|
||||
#define NKEY_48 0xff
|
||||
#define NKEY_49 0xff
|
||||
#define NKEY_4A 0xff
|
||||
#define NKEY_4B 0xff
|
||||
#define NKEY_4C 0xff
|
||||
#define NKEY_4D 0xff
|
||||
#define NKEY_4E 0xff
|
||||
#define NKEY_4F 0xff
|
||||
#define NKEY_50 0xff
|
||||
#define NKEY_51 0xff
|
||||
#define NKEY_52 0xff
|
||||
#define NKEY_53 0xff
|
||||
#define NKEY_54 0xff
|
||||
#define NKEY_55 0xff
|
||||
#define NKEY_56 0xff
|
||||
#define NKEY_57 0xff
|
||||
#define NKEY_58 0xff
|
||||
#define NKEY_59 0xff
|
||||
#define NKEY_5A 0xff
|
||||
#define NKEY_5B 0xff
|
||||
#define NKEY_5C 0xff
|
||||
#define NKEY_5D 0xff
|
||||
#define NKEY_5E 0xff
|
||||
#define NKEY_5F 0xff
|
||||
#define NKEY_60 0xff
|
||||
#define NKEY_61 0xff
|
||||
#define NKEY_62 0xff
|
||||
#define NKEY_63 0xff
|
||||
#define NKEY_64 0xff
|
||||
#define NKEY_65 0xff
|
||||
#define NKEY_66 0xff
|
||||
#define NKEY_67 0xff
|
||||
#define NKEY_68 0xff
|
||||
#define NKEY_69 0xff
|
||||
#define NKEY_6A 0xff
|
||||
#define NKEY_6B 0xff
|
||||
#define NKEY_6C 0xff
|
||||
#define NKEY_6D 0xff
|
||||
#define NKEY_6E 0xff
|
||||
#define NKEY_6F 0xff
|
||||
#define NKEY_70 0xff
|
||||
#define NKEY_71 0xff
|
||||
#define NKEY_72 0xff
|
||||
#define NKEY_73 0xff
|
||||
#define NKEY_74 0xff
|
||||
#define NKEY_75 0xff
|
||||
#define NKEY_76 0xff
|
||||
#define NKEY_77 0xff
|
||||
#define NKEY_78 0xff
|
||||
#define NKEY_79 0xff
|
||||
#define NKEY_7A 0xff
|
||||
#define NKEY_7B 0xff
|
||||
#define NKEY_7C 0xff
|
||||
#define NKEY_7D 0xff
|
||||
#define NKEY_7E 0xff
|
||||
#define NKEY_7F 0xff
|
||||
#define NKEY_80 0xff
|
||||
#define NKEY_81 0xff
|
||||
#define NKEY_82 0xff
|
||||
#define NKEY_83 0xff
|
||||
#define NKEY_84 0xff
|
||||
#define NKEY_85 0xff
|
||||
#define NKEY_86 0xff
|
||||
#define NKEY_87 0xff
|
||||
#define NKEY_88 0xff
|
||||
#define NKEY_89 0xff
|
||||
#define NKEY_8A 0xff
|
||||
#define NKEY_8B 0xff
|
||||
#define NKEY_8C 0xff
|
||||
#define NKEY_8D 0xff
|
||||
#define NKEY_8E 0xff
|
||||
#define NKEY_8F 0xff
|
||||
#define NKEY_90 0xff
|
||||
#define NKEY_91 0xff
|
||||
#define NKEY_92 0xff
|
||||
#define NKEY_93 0xff
|
||||
#define NKEY_94 0xff
|
||||
#define NKEY_95 0xff
|
||||
|
||||
|
||||
typedef struct _IR_CODE {
|
||||
u16 wData; //<键值
|
||||
u16 wUserCode; //<用户码
|
||||
u16 timer_pad;
|
||||
u8 bState; //<接收状态
|
||||
u8 boverflow; //<红外信号超时
|
||||
} IR_CODE;
|
||||
|
||||
enum timer_sel {
|
||||
TIMER0,
|
||||
TIMER1,
|
||||
TIMER2,
|
||||
TIMER3,
|
||||
TIMER4,
|
||||
TIMER5,
|
||||
};
|
||||
|
||||
struct irflt_platform_data {
|
||||
u8 irflt_io;
|
||||
u8 timer;
|
||||
};
|
||||
|
||||
#define IRFLT_PLATFORM_DATA_BEGIN(data) \
|
||||
static const struct irflt_platform_data data = {
|
||||
|
||||
#define IRFLT_PLATFORM_DATA_END() \
|
||||
};
|
||||
|
||||
|
||||
extern const struct device_operations irflt_dev_ops;
|
||||
|
||||
void set_ir_clk(void);
|
||||
void ir_input_io_sel(u8 port);
|
||||
void ir_output_timer_sel();
|
||||
void ir_timeout_set(void);
|
||||
void irflt_config();
|
||||
void log_irflt_info();
|
||||
u8 get_irflt_value(void);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
#ifndef CPU_IRQ_H
|
||||
#define CPU_IRQ_H
|
||||
|
||||
|
||||
#include "asm/hwi.h"
|
||||
|
||||
#define ___interrupt __attribute__((interrupt("")))
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
#ifndef _LPCTMU_HW_H_
|
||||
#define _LPCTMU_HW_H_
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
|
||||
#define LPCTMU_CHANNEL_SIZE 5
|
||||
|
||||
#define LPCTMU_ANA_CFG_ADAPTIVE 1
|
||||
|
||||
|
||||
enum {
|
||||
LPCTMU_VH_065V,
|
||||
LPCTMU_VH_070V,
|
||||
LPCTMU_VH_075V,
|
||||
LPCTMU_VH_080V,
|
||||
};
|
||||
|
||||
enum {
|
||||
LPCTMU_VL_020V,
|
||||
LPCTMU_VL_025V,
|
||||
LPCTMU_VL_030V,
|
||||
LPCTMU_VL_035V,
|
||||
};
|
||||
|
||||
enum {
|
||||
LPCTMU_ISEL_036UA,
|
||||
LPCTMU_ISEL_072UA,
|
||||
LPCTMU_ISEL_108UA,
|
||||
LPCTMU_ISEL_144UA,
|
||||
LPCTMU_ISEL_180UA,
|
||||
LPCTMU_ISEL_216UA,
|
||||
LPCTMU_ISEL_252UA,
|
||||
LPCTMU_ISEL_288UA
|
||||
};
|
||||
|
||||
enum {
|
||||
LPCTMU_CH0_PB0,
|
||||
LPCTMU_CH1_PB1,
|
||||
LPCTMU_CH2_PB2,
|
||||
LPCTMU_CH3_PB3,
|
||||
LPCTMU_CH4_PB4,
|
||||
};
|
||||
|
||||
enum CTMU_M2P_CMD {
|
||||
REQUEST_LPCTMU_IRQ = 0x50,
|
||||
REQUEST_LPCTMU_TIMER_ADD,
|
||||
REQUEST_LPCTMU_TIMER_DEL,
|
||||
};
|
||||
|
||||
enum bt_arb_wl2ext_act {
|
||||
RF_PLL_EN = 1,
|
||||
RF_PLL_RN,
|
||||
RF_RX_LDO,
|
||||
RF_RX_EN,
|
||||
RF_TX_LDO,
|
||||
RF_TX_EN,
|
||||
EF_RX_TX_EN_XOR,
|
||||
};
|
||||
|
||||
enum lpctmu_ext_stop_sel {
|
||||
BT_SIG_ACT0,
|
||||
BT_SIG_ACT1,
|
||||
BT_SIG_ACT0_ACT1_XOR,
|
||||
BT_SIG_ACT0_ACT1_AND,
|
||||
};
|
||||
|
||||
enum lpctmu_wakeup_cfg {
|
||||
LPCTMU_WAKEUP_DISABLE,
|
||||
LPCTMU_WAKEUP_EN_WITHOUT_CHARGE_ONLINE,
|
||||
LPCTMU_WAKEUP_EN_ALWAYS,
|
||||
};
|
||||
|
||||
|
||||
struct lpctmu_platform_data {
|
||||
u8 ext_stop_ch_en;
|
||||
u8 ext_stop_sel;
|
||||
u8 sample_window_time; //采样窗口时间 ms
|
||||
u8 sample_scan_time; //多久采样一次 ms
|
||||
u8 lowpower_sample_scan_time; //软关机下多久采样一次 ms
|
||||
u16 aim_vol_delta;
|
||||
u16 aim_charge_khz;
|
||||
};
|
||||
|
||||
struct lpctmu_config_data {
|
||||
u8 ch_num;
|
||||
u8 ch_list[LPCTMU_CHANNEL_SIZE];
|
||||
u8 ch_en;
|
||||
u8 ch_wkp_en;
|
||||
u8 softoff_wakeup_cfg;
|
||||
const struct lpctmu_platform_data *pdata;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#define LPCTMU_PLATFORM_DATA_BEGIN(data) \
|
||||
const struct lpctmu_platform_data data = {
|
||||
|
||||
#define LPCTMU_PLATFORM_DATA_END() \
|
||||
.ext_stop_ch_en = 0, \
|
||||
.ext_stop_sel = 0,\
|
||||
.sample_window_time = 2, \
|
||||
.sample_scan_time = 20, \
|
||||
.lowpower_sample_scan_time = 100, \
|
||||
}
|
||||
|
||||
#define LPCTMU_CFG_DATA_BEGIN(data) \
|
||||
static struct lpctmu_config_data data = {
|
||||
|
||||
#define LPCTMU_CFG_DATA_END() \
|
||||
}
|
||||
|
||||
|
||||
|
||||
void lpctmu_send_m2p_cmd(enum CTMU_M2P_CMD cmd);
|
||||
|
||||
u32 lpctmu_get_cur_ch_by_idx(u32 ch_idx);
|
||||
|
||||
u32 lpctmu_get_idx_by_cur_ch(u32 cur_ch);
|
||||
|
||||
u32 lpctmu_get_cur_ch_res(u32 cur_ch);
|
||||
|
||||
void lpctmu_set_ana_hv_level(u32 level);
|
||||
|
||||
u32 lpctmu_get_ana_hv_level(void);
|
||||
|
||||
void lpctmu_set_ana_cur_level(u32 ch, u32 cur_level);
|
||||
|
||||
u32 lpctmu_get_ana_cur_level(u32 ch);
|
||||
|
||||
void lpctmu_init(struct lpctmu_config_data *cfg_data);
|
||||
|
||||
void lpctmu_disable(void);
|
||||
|
||||
void lpctmu_enable(void);
|
||||
|
||||
u32 lpctmu_is_sf_keep(void);
|
||||
|
||||
void lpctmu_test(void);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
#ifndef _MCPWM_H_
|
||||
#define _MCPWM_H_
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
#define MCPWM_NUM_MAX 8
|
||||
#define MCPWM_CH_MAX 2
|
||||
#define MCPWM_TMR_BASE_ADDR (&JL_MCPWM->TMR0_CON)
|
||||
#define MCPWM_TMR_OFFSET (&JL_MCPWM->TMR1_CON - &JL_MCPWM->TMR0_CON)
|
||||
#define MCPWM_CH_BASE_ADDR (&JL_MCPWM->CH0_CON0)
|
||||
#define MCPWM_CH_OFFSET (&JL_MCPWM->CH1_CON0 - &JL_MCPWM->CH0_CON0)
|
||||
|
||||
//TMRx_CON reg
|
||||
#define MCPWM_TMR_INCF 15
|
||||
// #define MCPWM_TMR_RESERVE 14
|
||||
#define MCPWM_TMR_UFPND 13
|
||||
#define MCPWM_TMR_OFPN 12
|
||||
#define MCPWM_TMR_UFCLR 11
|
||||
#define MCPWM_TMR_OFCLR 10
|
||||
#define MCPWM_TMR_UFIE 9
|
||||
#define MCPWM_TMR_OFTE 8
|
||||
#define MCPWM_TMR_CKSRC 7
|
||||
#define MCPWM_TMR_CKPS 3 //4bit
|
||||
// #define MCPWM_TMR_RESERVE 2
|
||||
#define MCPWM_TMR_MODE 0 //2bit
|
||||
|
||||
//CHx_CON0 reg
|
||||
#define MCPWM_CH_DTCKPS 12 //4bit
|
||||
#define MCPWM_CH_DTPR 7 //5bit
|
||||
#define MCPWM_CH_DTEN 6
|
||||
#define MCPWM_CH_L_INV 5
|
||||
#define MCPWM_CH_H_INV 4
|
||||
#define MCPWM_CH_L_EN 3
|
||||
#define MCPWM_CH_H_EN 2
|
||||
#define MCPWM_CH_CMP_LD 0 //2bit
|
||||
|
||||
//CHx_CON1 reg
|
||||
#define MCPWM_CH_FPND 15
|
||||
#define MCPWM_CH_FCLR 14
|
||||
// #define MCPWM_CH_RESERVE 12 //2bit
|
||||
#define MCPWM_CH_INTEN 11
|
||||
#define MCPWM_CH_TMRSEL 8 //3bit
|
||||
// #define MCPWM_CH_reserve 5 //3bit
|
||||
#define MCPWM_CH_FPINEN 4
|
||||
#define MCPWM_CH_FPINAUTO 3
|
||||
#define MCPWM_CH_FPINSEL 0 //3bit
|
||||
|
||||
//FPIN_CON reg
|
||||
#define MCPWM_FPIN_EDGE 16 //8bit
|
||||
#define MCPWM_FPIN_FLT_EN 8 //8bit
|
||||
// #define MCPWM_CH_reserve 6 //2bit
|
||||
#define MCPWM_FPIN_FLT_PR 8 //5bit
|
||||
|
||||
//MCPWM_CON reg
|
||||
#define MCPWM_CON_CLK_EN 16
|
||||
#define MCPWM_CON_TMR_EN 8 //8bit
|
||||
#define MCPWM_CON_PWM_EN 0 //8bit2
|
||||
|
||||
|
||||
/* pwm通道选择 */
|
||||
typedef enum {
|
||||
MCPWM_CH0 = 0,
|
||||
MCPWM_CH1,
|
||||
} mcpwm_ch_type;
|
||||
|
||||
/* 对齐方式选择 */
|
||||
typedef enum {
|
||||
MCPWM_EDGE_ALIGNED, ///< 边沿对齐模式
|
||||
MCPWM_CENTER_ALIGNED, ///< 中心对齐模式
|
||||
} mcpwm_aligned_mode_type;
|
||||
|
||||
/* 故障保护触发边沿 */
|
||||
typedef enum {
|
||||
MCPWM_EDGE_FAILL = 0, //下降沿触发
|
||||
MCPWM_EDGE_RISE, //上升沿触发
|
||||
MCPWM_EDGE_DEFAULT = 0xff, //默认会忽略
|
||||
} mcpwm_edge;
|
||||
|
||||
/* MCPWM通道寄存器 */
|
||||
typedef struct _mcpwm_ch_reg {
|
||||
volatile u32 ch_con0;
|
||||
volatile u32 ch_con1;
|
||||
volatile u32 ch_cmph;
|
||||
volatile u32 ch_cmpl;
|
||||
} MCPWM_CHx_REG;
|
||||
|
||||
/* MCPWM TIMER寄存器 */
|
||||
typedef struct _mcpwm_timer_reg {
|
||||
volatile u32 tmr_con;
|
||||
volatile u32 tmr_cnt;
|
||||
volatile u32 tmr_pr;
|
||||
} MCPWM_TIMERx_REG;
|
||||
|
||||
|
||||
/* 初始化要用的参数结构体 */
|
||||
typedef void (*mcpwm_detect_irq_callback)(u32 ch); //回调函数
|
||||
struct mcpwm_config {
|
||||
mcpwm_ch_type ch; ///< 选择pwm通道号
|
||||
mcpwm_aligned_mode_type aligned_mode; ///< PWM对齐方式选择
|
||||
u32 frequency; ///< 初始共同频率,CH0, CH, CH2,,,,,,
|
||||
u16 duty; ///< 初始占空比,0~10000 对应 0%~100% 。每个通道可以有不同的占空比。互补模式的占空比体现在高引脚的波形上。
|
||||
u16 h_pin; ///< 一个通道的H引脚。
|
||||
u16 l_pin; ///< 一个通道的L引脚,不需要则填-1
|
||||
u8 complementary_en; ///< 该通道的两个引脚输出的波形。0: 同步, 1: 互补,互补波形的占空比体现在H引脚上
|
||||
u16 detect_port;
|
||||
mcpwm_edge edge;
|
||||
mcpwm_detect_irq_callback irq_cb;
|
||||
u16 irq_priority; //默认值优先级1
|
||||
};
|
||||
|
||||
struct mcpwm_info_t {
|
||||
MCPWM_CHx_REG *ch_reg;
|
||||
MCPWM_TIMERx_REG *timer_reg;
|
||||
struct mcpwm_config cfg;
|
||||
};
|
||||
|
||||
|
||||
int mcpwm_init(struct mcpwm_config *mcpwm_cfg);
|
||||
void mcpwm_deinit(int mcpwm_cfg_id);
|
||||
void mcpwm_start(int mcpwm_cfg_id);
|
||||
void mcpwm_pause(int mcpwm_cfg_id);
|
||||
void mcpwm_resume(int mcpwm_cfg_id);
|
||||
void mcpwm_set_frequency(int mcpwm_cfg_id, mcpwm_aligned_mode_type align, u32 frequency);
|
||||
void mcpwm_set_duty(int mcpwm_cfg_id, u16 duty);
|
||||
void mcpwm_fpnd_clr(u32 ch);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
#ifndef _PLCNT_DRV_H_
|
||||
#define _PLCNT_DRV_H_
|
||||
|
||||
|
||||
#define PLCNT_KEY_CH_MAX 3
|
||||
|
||||
struct touch_key_port {
|
||||
u16 press_delta; //按下判决的阈值
|
||||
u8 port; //触摸按键IO
|
||||
u8 key_value; //按键返回值
|
||||
};
|
||||
|
||||
struct touch_key_platform_data {
|
||||
u8 num; //触摸按键个数
|
||||
const struct touch_key_port *port_list;
|
||||
};
|
||||
|
||||
|
||||
/* =========== pclcnt API ============= */
|
||||
//plcnt 初始化
|
||||
int plcnt_init(void *_data);
|
||||
|
||||
//获取plcnt按键状态
|
||||
u8 get_plcnt_value(void);
|
||||
|
||||
|
||||
#endif /* _PLCNT_DRV_H_ */
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
#ifndef _IPC_SPIN_LOCK_H_
|
||||
#define _IPC_SPIN_LOCK_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "gpio.h"
|
||||
|
||||
enum ipc_spin_lock_event {
|
||||
IPC_SPIN_LOCK_EVENT_USER0 = 0,//自定义事件名
|
||||
IPC_SPIN_LOCK_EVENT_USER1,
|
||||
IPC_SPIN_LOCK_EVENT_USER2,
|
||||
IPC_SPIN_LOCK_EVENT_USER3,
|
||||
IPC_SPIN_LOCK_EVENT_USER4,
|
||||
IPC_SPIN_LOCK_EVENT_USER5,
|
||||
IPC_SPIN_LOCK_EVENT_USER6,
|
||||
IPC_SPIN_LOCK_EVENT_USER7,
|
||||
IPC_SPIN_LOCK_EVENT_USER8,
|
||||
IPC_SPIN_LOCK_EVENT_P11_GPIO,
|
||||
IPC_SPIN_LOCK_EVENT_RTC,
|
||||
IPC_SPIN_LOCK_EVENT_UART, //11
|
||||
IPC_SPIN_LOCK_EVENT_P11_IIC,//12
|
||||
IPC_SPIN_LOCK_EVENT_CBUF, //13
|
||||
IPC_SPIN_LOCK_EVENT_PMU, //14
|
||||
IPC_SPIN_LOCK_EVENT_SFR, //15
|
||||
IPC_SPIN_LOCK_EVENT_MAX,
|
||||
|
||||
|
||||
};
|
||||
|
||||
void ipc_spin_lock_init();
|
||||
|
||||
void ipc_spin_lock(enum ipc_spin_lock_event event);//0~15
|
||||
void ipc_spin_unlock(enum ipc_spin_lock_event event);//0~15
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,162 @@
|
||||
#ifndef __LP_IPC_H__
|
||||
#define __LP_IPC_H__
|
||||
|
||||
//===========================================================================//
|
||||
// P2M MESSAGE TABLE //
|
||||
//===========================================================================//
|
||||
//==================power=============================
|
||||
#define P2M_WKUP_SRC P2M_MESSAGE_ACCESS(0)
|
||||
#define P2M_WKUP_P_PND P2M_MESSAGE_ACCESS(1)
|
||||
#define P2M_WKUP_N_PND P2M_MESSAGE_ACCESS(2)
|
||||
#define P2M_AWKUP_P_PND P2M_MESSAGE_ACCESS(3)
|
||||
#define P2M_AWKUP_N_PND P2M_MESSAGE_ACCESS(4)
|
||||
#define P2M_WKUP_RTC P2M_MESSAGE_ACCESS(5)
|
||||
#define P2M_WKUP_CNT0 P2M_MESSAGE_ACCESS(6)
|
||||
#define P2M_WKUP_CNT1 P2M_MESSAGE_ACCESS(7)
|
||||
#define P2M_WKUP_CNT2 P2M_MESSAGE_ACCESS(8)
|
||||
#define P2M_WKUP_CNT3 P2M_MESSAGE_ACCESS(9)
|
||||
#define P2M_OSC_CNT0 P2M_MESSAGE_ACCESS(10)
|
||||
#define P2M_OSC_CNT1 P2M_MESSAGE_ACCESS(11)
|
||||
#define P2M_OSC_CNT2 P2M_MESSAGE_ACCESS(12)
|
||||
#define P2M_OSC_CNT3 P2M_MESSAGE_ACCESS(13)
|
||||
#define P2M_RESET_FLAG P2M_MESSAGE_ACCESS(14)
|
||||
|
||||
|
||||
|
||||
//==================system===========================
|
||||
#define P2M_MESSAGE_BANK_ADR_L P2M_MESSAGE_ACCESS(15)
|
||||
#define P2M_MESSAGE_BANK_ADR_H P2M_MESSAGE_ACCESS(16)
|
||||
#define P2M_MESSAGE_BANK_INDEX P2M_MESSAGE_ACCESS(17)
|
||||
#define P2M_MESSAGE_BANK_ACK P2M_MESSAGE_ACCESS(18)
|
||||
#define P2M_P11_HEAP_BEGIN_ADDR_L P2M_MESSAGE_ACCESS(19)
|
||||
#define P2M_P11_HEAP_BEGIN_ADDR_H P2M_MESSAGE_ACCESS(20)
|
||||
#define P2M_P11_HEAP_SIZE_L P2M_MESSAGE_ACCESS(21)
|
||||
#define P2M_P11_HEAP_SIZE_H P2M_MESSAGE_ACCESS(22)
|
||||
#define P2M_REPLY_SYNC_CMD P2M_MESSAGE_ACCESS(23)
|
||||
#define P2M_CBUF_ADDR0 P2M_MESSAGE_ACCESS(24)
|
||||
#define P2M_CBUF_ADDR1 P2M_MESSAGE_ACCESS(25)
|
||||
#define P2M_CBUF_ADDR2 P2M_MESSAGE_ACCESS(26)
|
||||
#define P2M_CBUF_ADDR3 P2M_MESSAGE_ACCESS(27)
|
||||
#define P2M_CBUF1_ADDR0 P2M_MESSAGE_ACCESS(28)
|
||||
#define P2M_CBUF1_ADDR1 P2M_MESSAGE_ACCESS(29)
|
||||
#define P2M_CBUF1_ADDR2 P2M_MESSAGE_ACCESS(30)
|
||||
#define P2M_CBUF1_ADDR3 P2M_MESSAGE_ACCESS(31)
|
||||
|
||||
//==================clock===========================
|
||||
#define P2M_BTOSC_OK P2M_MESSAGE_ACCESS(35)
|
||||
|
||||
//==================lpctmu===========================
|
||||
#define P2M_CTMU_CMD_ACK P2M_MESSAGE_ACCESS(39)
|
||||
|
||||
#define P2M_MASSAGE_CTMU_CH0_L_RES 40
|
||||
#define P2M_MASSAGE_CTMU_CH0_H_RES 41
|
||||
#define P2M_CTMU_CH0_L_RES P2M_MESSAGE_ACCESS(40)
|
||||
#define P2M_CTMU_CH0_H_RES P2M_MESSAGE_ACCESS(41)
|
||||
#define P2M_CTMU_CH1_L_RES P2M_MESSAGE_ACCESS(42)
|
||||
#define P2M_CTMU_CH1_H_RES P2M_MESSAGE_ACCESS(43)
|
||||
#define P2M_CTMU_CH2_L_RES P2M_MESSAGE_ACCESS(44)
|
||||
#define P2M_CTMU_CH2_H_RES P2M_MESSAGE_ACCESS(45)
|
||||
#define P2M_CTMU_CH3_L_RES P2M_MESSAGE_ACCESS(46)
|
||||
#define P2M_CTMU_CH3_H_RES P2M_MESSAGE_ACCESS(47)
|
||||
#define P2M_CTMU_CH4_L_RES P2M_MESSAGE_ACCESS(48)
|
||||
#define P2M_CTMU_CH4_H_RES P2M_MESSAGE_ACCESS(49)
|
||||
|
||||
|
||||
//===========================================================================//
|
||||
// M2P MESSAGE TABLE //
|
||||
//===========================================================================//
|
||||
//==================power=============================
|
||||
#define M2P_LRC_PRD M2P_MESSAGE_ACCESS(0)
|
||||
#define M2P_WDVDD M2P_MESSAGE_ACCESS(1)
|
||||
#define M2P_LRC_FEQ0 M2P_MESSAGE_ACCESS(2)
|
||||
#define M2P_LRC_FEQ1 M2P_MESSAGE_ACCESS(3)
|
||||
#define M2P_LRC_FEQ2 M2P_MESSAGE_ACCESS(4)
|
||||
#define M2P_LRC_FEQ3 M2P_MESSAGE_ACCESS(5)
|
||||
#define M2P_VDDIO_KEEP M2P_MESSAGE_ACCESS(6)
|
||||
#define M2P_LRC_KEEP M2P_MESSAGE_ACCESS(7)
|
||||
#define M2P_RCH_FEQ_L M2P_MESSAGE_ACCESS(8)
|
||||
#define M2P_RCH_FEQ_H M2P_MESSAGE_ACCESS(9)
|
||||
#define M2P_MEM_CONTROL M2P_MESSAGE_ACCESS(10)
|
||||
#define M2P_BTOSC_KEEP M2P_MESSAGE_ACCESS(11)
|
||||
#define M2P_CTMU_KEEP M2P_MESSAGE_ACCESS(12)
|
||||
#define M2P_RTC_KEEP M2P_MESSAGE_ACCESS(13)
|
||||
#define M2P_SF_MODE M2P_MESSAGE_ACCESS(14)
|
||||
#define M2P_DCV_MODE M2P_MESSAGE_ACCESS(15)
|
||||
#define M2P_LIGHT_PDOWN_DVDD_VOL M2P_MESSAGE_ACCESS(16)
|
||||
#define M2P_LRC24M_MODE M2P_MESSAGE_ACCESS(17)
|
||||
|
||||
//==================system===========================
|
||||
#define M2P_SYNC_CMD M2P_MESSAGE_ACCESS(25)
|
||||
#define M2P_WDT_SYNC M2P_MESSAGE_ACCESS(26)
|
||||
#define M2P_WAIT_RELEASE M2P_MESSAGE_ACCESS(27)
|
||||
|
||||
//==================clock===========================
|
||||
#define M2P_LRC24M_CFG0 M2P_MESSAGE_ACCESS(35)
|
||||
#define M2P_LRC24M_CFG1 M2P_MESSAGE_ACCESS(36)
|
||||
#define M2P_BTOSC_CFG0 M2P_MESSAGE_ACCESS(37)
|
||||
#define M2P_BTOSC_CFG1 M2P_MESSAGE_ACCESS(38)
|
||||
|
||||
#define M2P_LRC24M_FEQ0 M2P_MESSAGE_ACCESS(39)
|
||||
#define M2P_LRC24M_FEQ1 M2P_MESSAGE_ACCESS(40)
|
||||
#define M2P_LRC24M_FEQ2 M2P_MESSAGE_ACCESS(41)
|
||||
#define M2P_LRC24M_FEQ3 M2P_MESSAGE_ACCESS(42)
|
||||
|
||||
//==================lpctmu===========================
|
||||
/*触摸所有通道配置*/
|
||||
#define M2P_CTMU_CMD M2P_MESSAGE_ACCESS(50)
|
||||
#define M2P_CTMU_CH_ENABLE M2P_MESSAGE_ACCESS(51)
|
||||
#define M2P_CTMU_CH_WAKEUP_EN M2P_MESSAGE_ACCESS(52)
|
||||
#define M2P_CTMU_SCAN_TIME M2P_MESSAGE_ACCESS(53)
|
||||
#define M2P_CTMU_LOWPOER_SCAN_TIME M2P_MESSAGE_ACCESS(54)
|
||||
|
||||
/*
|
||||
* Must Sync to P11 code
|
||||
*/
|
||||
enum {
|
||||
M2P_LP_INDEX = 0,
|
||||
M2P_PF_INDEX,
|
||||
M2P_LLP_INDEX,
|
||||
M2P_P33_INDEX,
|
||||
M2P_SF_INDEX,
|
||||
M2P_CTMU_INDEX,
|
||||
M2P_CCMD_INDEX, //common cmd
|
||||
M2P_VAD_INDEX,
|
||||
M2P_USER_INDEX,
|
||||
M2P_WDT_INDEX,
|
||||
M2P_SYNC_INDEX,
|
||||
M2P_APP_INDEX,
|
||||
|
||||
};
|
||||
|
||||
enum {
|
||||
P2M_LP_INDEX = 0,
|
||||
P2M_PF_INDEX,
|
||||
P2M_LLP_INDEX,
|
||||
P2M_WK_INDEX,
|
||||
P2M_WDT_INDEX,
|
||||
P2M_LP_INDEX2,
|
||||
P2M_CTMU_INDEX,
|
||||
P2M_CTMU_POWUP,
|
||||
P2M_REPLY_CCMD_INDEX, //reply common cmd
|
||||
P2M_VAD_INDEX,
|
||||
P2M_USER_INDEX,
|
||||
P2M_BANK_INDEX,
|
||||
P2M_REPLY_SYNC_INDEX,
|
||||
P2M_APP_INDEX,
|
||||
P2M_OSC_INDEX,
|
||||
};
|
||||
|
||||
enum {
|
||||
CLOSE_P33_INTERRUPT = 1,
|
||||
OPEN_P33_INTERRUPT,
|
||||
LOWPOWER_PREPARE,
|
||||
M2P_SPIN_LOCK,
|
||||
M2P_SPIN_UNLOCK,
|
||||
P2M_SPIN_LOCK,
|
||||
P2M_SPIN_UNLOCK,
|
||||
|
||||
};
|
||||
|
||||
#include "power/lp_msg.h"
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,24 @@
|
||||
#ifndef __P11_API_H__
|
||||
#define __P11_API_H__
|
||||
|
||||
#define P11_P2M_INT_IE P11_SYSTEM->P2M_INT_IE
|
||||
#define P11_M2P_INT_IE P11_SYSTEM->M2P_INT_IE
|
||||
#define P11_M2P_INT_SET P11_SYSTEM->M2P_INT_SET
|
||||
#define P11_P2M_INT_SET P11_SYSTEM->P2M_INT_SET
|
||||
#define P11_P2M_INT_CLR P11_SYSTEM->P2M_INT_CLR
|
||||
#define P11_P2M_INT_PND P11_SYSTEM->P2M_INT_PND
|
||||
|
||||
enum P11_SYS_CLK_TABLE {
|
||||
P11_SYS_CLK_RC16M = 0,
|
||||
P11_SYS_CLK_RC250K,
|
||||
P11_SYS_CLK_LRC_OSC,
|
||||
P11_SYS_CLK_BTOSC_24M,
|
||||
P11_SYS_CLK_BTOSC_48M,
|
||||
P11_SYS_CLK_LRC24M,
|
||||
P11_SYS_CLK_CLK_X2,
|
||||
P11_SYS_CLK_TEST,
|
||||
};
|
||||
|
||||
void p11_sys_clk_sel(u32 sel);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,181 @@
|
||||
//*********************************************************************************//
|
||||
// Module name : csfr.h //
|
||||
// Description : q32small core sfr define //
|
||||
// By Designer : zequan_liu //
|
||||
// Dat changed : //
|
||||
//*********************************************************************************//
|
||||
|
||||
#ifndef __P11_Q32S_CSFR__
|
||||
#define __P11_Q32S_CSFR__
|
||||
|
||||
#define __RW volatile // read write
|
||||
#define __RO volatile const // only read
|
||||
#define __WO volatile // only write
|
||||
|
||||
#define __u8 unsigned int // u8 to u32 special for struct
|
||||
#define __u16 unsigned int // u16 to u32 special for struct
|
||||
#define __u32 unsigned int
|
||||
|
||||
#define CPU_CORE_NUM 1
|
||||
|
||||
//---------------------------------------------//
|
||||
// q32small define
|
||||
//---------------------------------------------//
|
||||
|
||||
//#ifdef PMU_SYSTEM
|
||||
#if 0
|
||||
#define p11_q32s_sfr_base 0x00a000
|
||||
#define p11_q32s_sfr_offset 0x000000 // multi_core used
|
||||
#else
|
||||
#define p11_q32s_sfr_base 0xf2a000
|
||||
#define p11_q32s_sfr_offset 0x000000 // multi_core used
|
||||
#endif
|
||||
|
||||
#define p11_q32s_cpu_base (p11_q32s_sfr_base + 0x00)
|
||||
#define p11_q32s_mpu_base (p11_q32s_sfr_base + 0x80)
|
||||
|
||||
#define p11_q32s(n) ((JL_TypeDef_p11_q32s *)(p11_q32s_sfr_base + p11_q32s_sfr_offset*n))
|
||||
#define p11_q32s_mpu(n) ((JL_TypeDef_p11_q32s_MPU *)(p11_q32s_mpu_base + p11_q32s_sfr_offset*n))
|
||||
|
||||
//---------------------------------------------//
|
||||
// q32small core sfr
|
||||
//---------------------------------------------//
|
||||
|
||||
typedef struct {
|
||||
/* 00 */ __RO __u32 DR00;
|
||||
/* 01 */ __RO __u32 DR01;
|
||||
/* 02 */ __RO __u32 DR02;
|
||||
/* 03 */ __RO __u32 DR03;
|
||||
/* 04 */ __RO __u32 DR04;
|
||||
/* 05 */ __RO __u32 DR05;
|
||||
/* 06 */ __RO __u32 DR06;
|
||||
/* 07 */ __RO __u32 DR07;
|
||||
/* 08 */ __RO __u32 DR08;
|
||||
/* 09 */ __RO __u32 DR09;
|
||||
/* 0a */ __RO __u32 DR10;
|
||||
/* 0b */ __RO __u32 DR11;
|
||||
/* 0c */ __RO __u32 DR12;
|
||||
/* 0d */ __RO __u32 DR13;
|
||||
/* 0e */ __RO __u32 DR14;
|
||||
/* 0f */ __RO __u32 DR15;
|
||||
|
||||
/* 10 */ __RO __u32 RETI;
|
||||
/* 11 */ __RO __u32 RETE;
|
||||
/* 12 */ __RO __u32 RETX;
|
||||
/* 13 */ __RO __u32 RETS;
|
||||
/* 14 */ __RO __u32 SR04;
|
||||
/* 15 */ __RO __u32 PSR;
|
||||
/* 16 */ __RO __u32 CNUM;
|
||||
/* 17 */ __RO __u32 SR07;
|
||||
/* 18 */ __RO __u32 SR08;
|
||||
/* 19 */ __RO __u32 SR09;
|
||||
/* 1a */ __RO __u32 SR10;
|
||||
/* 1b */ __RO __u32 ICFG;
|
||||
/* 1c */ __RO __u32 USP;
|
||||
/* 1d */ __RO __u32 SSP;
|
||||
/* 1e */ __RO __u32 SP;
|
||||
/* 1f */ __RO __u32 PCRS;
|
||||
|
||||
/* 20 */ __RW __u32 BPCON;
|
||||
/* 21 */ __RW __u32 BSP;
|
||||
/* 22 */ __RW __u32 BP0;
|
||||
/* 23 */ __RW __u32 BP1;
|
||||
/* 24 */ __RW __u32 BP2;
|
||||
/* 25 */ __RW __u32 BP3;
|
||||
/* 26 */ __WO __u32 CMD_PAUSE;
|
||||
/* */ __RO __u32 REV_30_26[0x30 - 0x26 - 1];
|
||||
|
||||
/* 30 */ __RW __u32 PMU_CON0;
|
||||
/* 31 */ __RW __u32 PMU_CON1;
|
||||
/* 32 */ __RW __u32 RST_ADDR;
|
||||
/* */ __RO __u32 REV_3b_30[0x3b - 0x32 - 1];
|
||||
/* 3b */ __RW __u8 TTMR_CON;
|
||||
/* 3c */ __RW __u32 TTMR_CNT;
|
||||
/* 3d */ __RW __u32 TTMR_PRD;
|
||||
/* 3e */ __RW __u32 BANK_CON;
|
||||
/* 3f */ __RW __u32 BANK_NUM;
|
||||
|
||||
/* 40 */ __RW __u32 ICFG00;
|
||||
/* 41 */ __RW __u32 ICFG01;
|
||||
/* 42 */ __RW __u32 ICFG02;
|
||||
/* 43 */ __RW __u32 ICFG03;
|
||||
/* 44 */ __RW __u32 ICFG04;
|
||||
/* 45 */ __RW __u32 ICFG05;
|
||||
/* 46 */ __RW __u32 ICFG06;
|
||||
/* 47 */ __RW __u32 ICFG07;
|
||||
/* 48 */ __RW __u32 ICFG08;
|
||||
/* 49 */ __RW __u32 ICFG09;
|
||||
/* 4a */ __RW __u32 ICFG10;
|
||||
/* 4b */ __RW __u32 ICFG11;
|
||||
/* 4c */ __RW __u32 ICFG12;
|
||||
/* 4d */ __RW __u32 ICFG13;
|
||||
/* 4e */ __RW __u32 ICFG14;
|
||||
/* 4f */ __RW __u32 ICFG15;
|
||||
|
||||
/* 50 */ __RW __u32 ICFG16;
|
||||
/* 51 */ __RW __u32 ICFG17;
|
||||
/* 52 */ __RW __u32 ICFG18;
|
||||
/* 53 */ __RW __u32 ICFG19;
|
||||
/* 54 */ __RW __u32 ICFG20;
|
||||
/* 55 */ __RW __u32 ICFG21;
|
||||
/* 56 */ __RW __u32 ICFG22;
|
||||
/* 57 */ __RW __u32 ICFG23;
|
||||
/* 58 */ __RW __u32 ICFG24;
|
||||
/* 59 */ __RW __u32 ICFG25;
|
||||
/* 5a */ __RW __u32 ICFG26;
|
||||
/* 5b */ __RW __u32 ICFG27;
|
||||
/* 5c */ __RW __u32 ICFG28;
|
||||
/* 5d */ __RW __u32 ICFG29;
|
||||
/* 5e */ __RW __u32 ICFG30;
|
||||
/* 5f */ __RW __u32 ICFG31;
|
||||
|
||||
/* 60 */ __RO __u32 IPND0;
|
||||
/* 61 */ __RO __u32 IPND1;
|
||||
/* 62 */ __RO __u32 IPND2;
|
||||
/* 63 */ __RO __u32 IPND3;
|
||||
/* 64 */ __RO __u32 IPND4;
|
||||
/* 65 */ __RO __u32 IPND5;
|
||||
/* 66 */ __RO __u32 IPND6;
|
||||
/* 67 */ __RO __u32 IPND7;
|
||||
/* 68 */ __WO __u32 ILAT_SET;
|
||||
/* 69 */ __WO __u32 ILAT_CLR;
|
||||
/* 6a */ __RW __u32 IPMASK;
|
||||
/* 6b */ __RW __u32 GIEMASK;
|
||||
/* 6c */ __RW __u32 IWKUP_NUM;
|
||||
/* */ __RO __u32 REV_70_6c[0x70 - 0x6c - 1];
|
||||
|
||||
/* 70 */ __RW __u32 ETM_CON;
|
||||
/* 71 */ __RO __u32 ETM_PC0;
|
||||
/* 72 */ __RO __u32 ETM_PC1;
|
||||
/* 73 */ __RO __u32 ETM_PC2;
|
||||
/* 74 */ __RO __u32 ETM_PC3;
|
||||
/* 75 */ __RW __u32 WP0_ADRH;
|
||||
/* 76 */ __RW __u32 WP0_ADRL;
|
||||
/* 77 */ __RW __u32 WP0_DATH;
|
||||
/* 78 */ __RW __u32 WP0_DATL;
|
||||
/* 79 */ __RW __u32 WP0_PC;
|
||||
|
||||
/* */ __RO __u32 REV_80_79[0x80 - 0x79 - 1];
|
||||
/* 80 */ __RW __u32 EMU_CON;
|
||||
/* 81 */ __RW __u32 EMU_MSG;
|
||||
/* 82 */ __RO __u32 EMU_SSP_H;
|
||||
/* 83 */ __RO __u32 EMU_SSP_L;
|
||||
/* 84 */ __RO __u32 EMU_USP_H;
|
||||
/* 85 */ __RO __u32 EMU_USP_L;
|
||||
} JL_TypeDef_p11_q32s;
|
||||
|
||||
#undef __RW
|
||||
#undef __RO
|
||||
#undef __WO
|
||||
|
||||
#undef __u8
|
||||
#undef __u16
|
||||
#undef __u32
|
||||
|
||||
#endif
|
||||
|
||||
//*********************************************************************************//
|
||||
// //
|
||||
// end of this module //
|
||||
// //
|
||||
//*********************************************************************************//
|
||||
@@ -0,0 +1,34 @@
|
||||
//===============================================================================//
|
||||
//
|
||||
// input IO define
|
||||
//
|
||||
//===============================================================================//
|
||||
#define P11_PB0_IN 1
|
||||
#define P11_PB1_IN 2
|
||||
#define P11_PB2_IN 3
|
||||
#define P11_PB3_IN 4
|
||||
#define P11_PB4_IN 5
|
||||
#define P11_PB5_IN 6
|
||||
#define P11_PB6_IN 7
|
||||
#define P11_PB7_IN 8
|
||||
#define P11_PB8_IN 9
|
||||
|
||||
//===============================================================================//
|
||||
//
|
||||
// function input select sfr
|
||||
//
|
||||
//===============================================================================//
|
||||
typedef struct {
|
||||
__RW __u8 P11_FI_GP_ICH0;
|
||||
__RW __u8 P11_FI_GP_ICH1;
|
||||
__RW __u8 P11_FI_GP_ICH2;
|
||||
__RW __u8 P11_FI_UART0_RX;
|
||||
__RW __u8 P11_FI_UART1_RX;
|
||||
__RW __u8 P11_FI_SPI_DI;
|
||||
__RW __u8 P11_FI_IIC_SCL;
|
||||
__RW __u8 P11_FI_IIC_SDA;
|
||||
} P11_IMAP_TypeDef;
|
||||
|
||||
#define P11_IMAP_BASE (p11_sfr_base + map_adr(0x17, 0x00))
|
||||
#define P11_IMAP ((P11_IMAP_TypeDef *)P11_IMAP_BASE)
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
//===============================================================================//
|
||||
//
|
||||
// output function define
|
||||
//
|
||||
//===============================================================================//
|
||||
#define P11_FO_GP_OCH0 ((0 << 2)|BIT(1))
|
||||
#define P11_FO_GP_OCH1 ((1 << 2)|BIT(1))
|
||||
#define P11_FO_GP_OCH2 ((2 << 2)|BIT(1))
|
||||
#define P11_FO_UART0_TX ((3 << 2)|BIT(1)|BIT(0))
|
||||
#define P11_FO_UART1_TX ((4 << 2)|BIT(1)|BIT(0))
|
||||
#define P11_FO_SPI_CLK ((5 << 2)|BIT(1)|BIT(0))
|
||||
#define P11_FO_SPI_DO ((6 << 2)|BIT(1)|BIT(0))
|
||||
#define P11_FO_IIC_SCL ((7 << 2)|BIT(1)|BIT(0))
|
||||
#define P11_FO_IIC_SDA ((8 << 2)|BIT(1)|BIT(0))
|
||||
|
||||
//===============================================================================//
|
||||
//
|
||||
// IO output select sfr
|
||||
//
|
||||
//===============================================================================//
|
||||
typedef struct {
|
||||
__RW __u8 P11_PB0_OUT;
|
||||
__RW __u8 P11_PB1_OUT;
|
||||
__RW __u8 P11_PB2_OUT;
|
||||
__RW __u8 P11_PB3_OUT;
|
||||
__RW __u8 P11_PB4_OUT;
|
||||
__RW __u8 P11_PB5_OUT;
|
||||
__RW __u8 P11_PB6_OUT;
|
||||
__RW __u8 P11_PB7_OUT;
|
||||
__RW __u8 P11_PB8_OUT;
|
||||
} P11_OMAP_TypeDef;
|
||||
|
||||
#define P11_OMAP_BASE (p11_sfr_base + map_adr(0x16, 0x00))
|
||||
#define P11_OMAP ((P11_OMAP_TypeDef *)P11_OMAP_BASE)
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
#ifndef __P11_MMAP_H__
|
||||
#define __P11_MMAP_H__
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
//#ifdef PMU_SYSTEM
|
||||
#if 0
|
||||
#define P11_RAM_BASE 0
|
||||
#else
|
||||
#define P11_RAM_BASE 0xF20000
|
||||
#endif
|
||||
#define P11_RAM_BEGIN (P11_RAM_BASE)
|
||||
#define P11_RAM_SIZE (0x8000)
|
||||
#define P11_RAM_END (P11_RAM_BASE+P11_RAM_SIZE)
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#define MSYS_POFF_RAM_END P11_RAM_END
|
||||
#define MSYS_POFF_RAM_SIZE 0x20
|
||||
#define MSYS_POFF_RAM_BEGIN (MSYS_POFF_RAM_END - MSYS_POFF_RAM_SIZE)
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#define M2P_MESSAGE_END MSYS_POFF_RAM_BEGIN
|
||||
#define M2P_MESSAGE_SIZE 0xe0
|
||||
#define M2P_MESSAGE_RAM_BEGIN (M2P_MESSAGE_END - M2P_MESSAGE_SIZE)
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#define P2M_MESSAGE_END M2P_MESSAGE_RAM_BEGIN
|
||||
#define P2M_MESSAGE_SIZE 0x40
|
||||
#define P2M_MESSAGE_RAM_BEGIN (P2M_MESSAGE_END - P2M_MESSAGE_SIZE)
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
#define P11_RAM0_END P2M_MESSAGE_RAM_BEGIN
|
||||
#define P11_RAM0_BEGIN (P11_RAM_BASE+P11_ISR_SIZE)
|
||||
#define P11_RAM0_SIZE (P11_RAM0_END - P11_RAM0_BEGIN)
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
#define P11_ISR_END P11_RAM0_BEGIN
|
||||
#define P11_ISR_SIZE 0x80
|
||||
#define P11_ISR_BEGIN P11_RAM_BASE
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
#define P11_RAM_ACCESS(x) (*(volatile u8 *)(x))
|
||||
#define M2P_MESSAGE_ACCESS(x) P11_RAM_ACCESS(M2P_MESSAGE_RAM_BEGIN + x)
|
||||
#define P2M_MESSAGE_ACCESS(x) P11_RAM_ACCESS(P2M_MESSAGE_RAM_BEGIN + x)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,332 @@
|
||||
#ifndef __P11_SFR_H__
|
||||
#define __P11_SFR_H__
|
||||
|
||||
//===============================================================================//
|
||||
//
|
||||
// sfr define
|
||||
//
|
||||
//===============================================================================//
|
||||
|
||||
//#ifdef PMU_SYSTEM
|
||||
#if 0
|
||||
#define p11_base 0x000000
|
||||
#define p11_ram_base p11_base
|
||||
#define p11_sfr_base 0x00a000
|
||||
#else
|
||||
#define p11_base 0xf20000
|
||||
#define p11_ram_base p11_base
|
||||
#define p11_sfr_base 0xf2a000
|
||||
#endif
|
||||
|
||||
#define __RW volatile // read write
|
||||
#define __RO volatile const // only read
|
||||
#define __WO volatile // only write
|
||||
|
||||
#define __u8 unsigned int // u8 to u32 special for struct
|
||||
#define __u16 unsigned int // u16 to u32 special for struct
|
||||
#define __u32 unsigned int
|
||||
|
||||
#define __s8(x) char(x); char(reserved_1_##x); char(reserved_2_##x); char(reserved_3_##x)
|
||||
#define __s16(x) short(x); short(reserved_1_##x)
|
||||
#define __s32(x) int(x)
|
||||
|
||||
#define map_adr(grp, adr) ((64 * grp + adr) * 4) // grp(0x0-0xff), adr(0x0-0x3f)
|
||||
#define P11_ACCESS(x) (*(volatile u32 *)(p11_base + x))
|
||||
#define P11_RAM(x) (*(volatile u32 *)(p11_ram_base + x))
|
||||
|
||||
//===============================================================================//
|
||||
//
|
||||
// sfr address define
|
||||
//
|
||||
//===============================================================================//
|
||||
|
||||
//............. 0x0000 - 0x03ff............ for cpu
|
||||
|
||||
// #include ../core/csfr.h
|
||||
|
||||
//............. 0x0400 - 0x04ff............ for clock
|
||||
typedef struct {
|
||||
__RW __u32 PWR_CON;
|
||||
__RW __u32 RST_SRC;
|
||||
__RW __u32 WKUP_EN;
|
||||
__RW __u32 WKUP_SRC;
|
||||
__RW __u32 SYS_DIV;
|
||||
__RW __u32 CLK_CON0;
|
||||
__RW __u32 CLK_CON1;
|
||||
__RW __u32 CLK_CON2;
|
||||
__RW __u32 XOSC_CFG0;
|
||||
__RW __u32 XOSC_CFG1;
|
||||
__RW __u32 LRC24M_CFG0;
|
||||
__RW __u32 CLKCFG_CFG0;
|
||||
} P11_CLOCK_TypeDef;
|
||||
|
||||
#define P11_CLOCK_BASE (p11_sfr_base + map_adr(0x04, 0x00))
|
||||
#define P11_CLOCK ((P11_CLOCK_TypeDef *)P11_CLOCK_BASE)
|
||||
|
||||
#define P11_PWR_CON P11_CLOCK->PWR_CON
|
||||
#define P11_CLK_CON0 P11_CLOCK->CLK_CON0
|
||||
|
||||
|
||||
//............. 0x0600 - 0x06ff............ for system
|
||||
typedef struct {
|
||||
__RW __u32 P2M_INT_IE;
|
||||
__RW __u32 P2M_INT_SET;
|
||||
__RW __u32 P2M_INT_CLR;
|
||||
__RO __u32 P2M_INT_PND;
|
||||
__RW __u32 P2M_CLK_CON0;
|
||||
__RW __u32 M2P_INT_IE;
|
||||
__RW __u32 M2P_INT_SET;
|
||||
__RW __u32 M2P_INT_CLR;
|
||||
__RO __u32 M2P_INT_PND;
|
||||
__RW __u32 P11_SYS_CON0;
|
||||
__RW __u32 P11_SYS_CON1;
|
||||
__RW __u32 PMU_KEY;
|
||||
} P11_SYSTEM_TypeDef;
|
||||
|
||||
#define P11_SYSTEM_BASE (p11_sfr_base + map_adr(0x06, 0x00))
|
||||
#define P11_SYSTEM ((P11_SYSTEM_TypeDef *)P11_SYSTEM_BASE)
|
||||
|
||||
//............. 0x0700 - 0x07ff............ for mbist
|
||||
typedef struct {
|
||||
__RW __u32 CON;
|
||||
__RW __u32 SEL;
|
||||
__RW __u32 BEG;
|
||||
__RW __u32 END;
|
||||
__RW __u32 DAT_VLD0;
|
||||
__RW __u32 DAT_VLD1;
|
||||
__RW __u32 DAT_VLD2;
|
||||
__RW __u32 DAT_VLD3;
|
||||
__RO __u32 ROM_CRC;
|
||||
__RW __u32 MCFG0_RF1P;
|
||||
__RW __u32 MCFG0_RF2P;
|
||||
__RW __u32 MCFG0_RM1P;
|
||||
__RW __u32 MCFG0_RM2P;
|
||||
__RW __u32 MCFG0_VROM;
|
||||
__RW __u32 MCFG0_CON[3];
|
||||
} P11_MBIST_TypeDef;
|
||||
|
||||
#define P11_MBIST_BASE (p11_sfr_base + map_adr(0x07, 0x00))
|
||||
#define P11_MBIST ((P11_MBIST_TypeDef *)P11_MBIST_BASE)
|
||||
|
||||
//............. 0x0800 - 0x08ff............ for watch dog
|
||||
typedef struct {
|
||||
__RW __u32 CON;
|
||||
__RW __u32 KEY;
|
||||
__RW __u32 DUMMY;
|
||||
} P11_WDT_TypeDef;
|
||||
|
||||
#define P11_WDT_BASE (p11_sfr_base + map_adr(0x08, 0x00))
|
||||
#define P11_WDT ((P11_WDT_TypeDef *)P11_WDT_BASE)
|
||||
|
||||
#define P11_SIM_END P11_WDT->DUMMY
|
||||
|
||||
//............. 0x0900 - 0x0cff............ for lp timer
|
||||
typedef struct {
|
||||
__RW __u32 CON0;
|
||||
__RW __u32 CON1;
|
||||
__RW __u32 CON2;
|
||||
__RW __u32 PRD;
|
||||
__RW __u32 RSC;
|
||||
__RO __u32 CNT;
|
||||
} P11_LPTMR_TypeDef;
|
||||
|
||||
#define P11_LPTMR0_BASE (p11_sfr_base + map_adr(0x09, 0x00))
|
||||
#define P11_LPTMR1_BASE (p11_sfr_base + map_adr(0x0a, 0x00))
|
||||
#define P11_LPTMR2_BASE (p11_sfr_base + map_adr(0x0b, 0x00))
|
||||
#define P11_LPTMR3_BASE (p11_sfr_base + map_adr(0x0c, 0x00))
|
||||
|
||||
#define P11_LPTMR0 ((P11_LPTMR_TypeDef *)P11_LPTMR0_BASE)
|
||||
#define P11_LPTMR1 ((P11_LPTMR_TypeDef *)P11_LPTMR1_BASE)
|
||||
#define P11_LPTMR2 ((P11_LPTMR_TypeDef *)P11_LPTMR2_BASE)
|
||||
#define P11_LPTMR3 ((P11_LPTMR_TypeDef *)P11_LPTMR3_BASE)
|
||||
|
||||
//............. 0x0d00 - 0x0dff............ for irflt
|
||||
typedef struct {
|
||||
__RW __u32 CON;
|
||||
} P11_IRFLT_TypeDef;
|
||||
|
||||
#define P11_IRFLT_BASE (p11_sfr_base + map_adr(0x0d, 0x00))
|
||||
#define P11_IRFLT ((P11_IRFLT_TypeDef *)P11_IRFLT_BASE)
|
||||
|
||||
//............. 0x0e00 - 0x0eff............ for spi
|
||||
typedef struct {
|
||||
__RW __u32 CON;
|
||||
__RW __u32 BAUD;
|
||||
__RW __u32 BUF;
|
||||
__WO __u32 ADR;
|
||||
__RW __u32 CNT;
|
||||
__RW __u32 CON1;
|
||||
} P11_SPI_TypeDef;
|
||||
|
||||
#define P11_SPI_BASE (p11_sfr_base + map_adr(0x0e, 0x00))
|
||||
#define P11_SPI ((P11_SPI_TypeDef *)P11_SPI_BASE)
|
||||
|
||||
//............. 0x0f00 - 0x10ff............ for uart
|
||||
typedef struct {
|
||||
__RW __u16 CON0;
|
||||
__RW __u16 CON1;
|
||||
__RW __u16 CON2;
|
||||
__RW __u16 BAUD;
|
||||
__RW __u8 BUF;
|
||||
__RW __u32 OTCNT;
|
||||
//__RW __u32 TXADR;
|
||||
//__WO __u16 TXCNT;
|
||||
//__RW __u32 RXSADR;
|
||||
//__RW __u32 RXEADR;
|
||||
//__RW __u32 RXCNT;
|
||||
//__RO __u16 HRXCNT;
|
||||
//__RO __u16 RX_ERR_CNT;
|
||||
} P11_UART_TypeDef;
|
||||
|
||||
#define P11_UART0_BASE (p11_sfr_base + map_adr(0x0f, 0x00))
|
||||
#define P11_UART1_BASE (p11_sfr_base + map_adr(0x10, 0x00))
|
||||
|
||||
#define P11_UART0 ((P11_UART_TypeDef *)P11_UART0_BASE)
|
||||
#define P11_UART1 ((P11_UART_TypeDef *)P11_UART1_BASE)
|
||||
|
||||
//............. 0x1100 - 0x11ff............ for iic
|
||||
typedef struct {
|
||||
__RW __u32 CON ;
|
||||
__RW __u32 PND ;
|
||||
__RW __u32 TX_BUF ;
|
||||
__RW __u32 TASK ;
|
||||
__RO __u32 RX_BUF ;
|
||||
__RW __u32 ADDR ;
|
||||
__RW __u32 BAUD ;
|
||||
__RW __u32 TSU ;
|
||||
__RW __u32 THD ;
|
||||
__RO __u32 DBG ;
|
||||
} P11_IIC_TypeDef;
|
||||
|
||||
#define P11_IIC_BASE (p11_sfr_base + map_adr(0x11, 0x00))
|
||||
#define P11_IIC ((P11_IIC_TypeDef *)P11_IIC_BASE)
|
||||
|
||||
//............. 0x1200 - 0x12ff............ for port
|
||||
typedef struct {
|
||||
__RW __u32 OCH_CON0 ;
|
||||
__RW __u32 ICH_CON0 ;
|
||||
__RW __u32 P33_PORT ;
|
||||
__RW __u32 PB_SEL ;
|
||||
__RO __u32 PB_IN ;
|
||||
__RW __u32 PB_OUT ;
|
||||
__RW __u32 PB_DIR ;
|
||||
__RW __u32 PB_DIE ;
|
||||
__RW __u32 PB_DIEH ;
|
||||
__RW __u32 PB_PU0 ;
|
||||
__RW __u32 PB_PU1 ;
|
||||
__RW __u32 PB_PD0 ;
|
||||
__RW __u32 PB_PD1 ;
|
||||
__RW __u32 PB_HD0 ;
|
||||
__RW __u32 PB_HD1 ;
|
||||
__RW __u32 PB_SPL ;
|
||||
} P11_PORT_TypeDef;
|
||||
|
||||
#define P11_PORT_BASE (p11_sfr_base + map_adr(0x12, 0x00))
|
||||
#define P11_PORT ((P11_PORT_TypeDef *)P11_PORT_BASE)
|
||||
|
||||
//............. 0x1300 - 0x14ff............ for lp ctmu
|
||||
typedef struct {
|
||||
__RW __u32 CON0 ;
|
||||
__RW __u32 CHEN ;
|
||||
__RW __u32 CNUM ;
|
||||
__RW __u32 PPRD ;
|
||||
__RW __u32 DPRD ;
|
||||
__RW __u32 ECON ;
|
||||
__RW __u32 EXEN ;
|
||||
__RW __u32 CHIS ;
|
||||
__RW __u32 CLKC ;
|
||||
__WO __u32 WCON ;
|
||||
__RW __u32 ANA0 ;
|
||||
__RW __u32 ANA1 ;
|
||||
__RO __u32 RES ;
|
||||
__RW __u32 DMA_START_ADR;
|
||||
__RW __u32 DMA_HALF_ADR;
|
||||
__RW __u32 DMA_END_ADR;
|
||||
__RW __u32 DMA_CON;
|
||||
__RW __u32 MSG_CON;
|
||||
__RO __u32 DMA_WADR;
|
||||
__RW __u32 SLEEP_CON;
|
||||
} P11_LPCTM_TypeDef;
|
||||
|
||||
#define P11_LPCTM0_BASE (p11_sfr_base + map_adr(0x13, 0x00))
|
||||
#define P11_LPCTM0 ((P11_LPCTM_TypeDef *)P11_LPCTM0_BASE)
|
||||
|
||||
// #define P11_LPCTM1_BASE (p11_sfr_base + map_adr(0x14, 0x00))
|
||||
// #define P11_LPCTM1 ((P11_LPCTM_TypeDef *)P11_LPCTM1_BASE)
|
||||
|
||||
|
||||
//............. 0x1500 - 0x15ff............ for lpvad
|
||||
typedef struct {
|
||||
__RW __u32 VAD_CON;
|
||||
__RW __u32 VAD_ACON0;
|
||||
__RW __u32 VAD_ACON1;
|
||||
__RW __u32 AVAD_CON;
|
||||
__RW __u32 AVAD_DATA;
|
||||
__RW __u32 DVAD_CON0;
|
||||
__RW __u32 DVAD_CON1;
|
||||
__RW __u32 DMA_BADR;
|
||||
__RW __u32 DMA_LEN;
|
||||
__RW __u32 DMA_HPTR;
|
||||
__RW __u32 DMA_SPTR;
|
||||
__RW __u32 DMA_SPN;
|
||||
__RW __u32 DMA_SHN;
|
||||
} P11_LPVAD_TypeDef;
|
||||
|
||||
#define P11_LPVAD_BASE (p11_sfr_base + map_adr(0x15, 0x00))
|
||||
#define P11_LPVAD ((P11_LPVAD_TypeDef *)P11_LPVAD_BASE)
|
||||
|
||||
//............. 0x1600 - 0x17ff............ for crossbar
|
||||
#include "p11_io_omap.h"
|
||||
#include "p11_io_imap.h"
|
||||
|
||||
//............. 0x1800 - 0x19ff............ for gp timer
|
||||
typedef struct {
|
||||
__RW __u32 CON;
|
||||
__RW __u32 CNT;
|
||||
__RW __u32 PRD;
|
||||
__RW __u32 PWM;
|
||||
__RW __u32 IRFLT;
|
||||
} P11_GPTMR_TypeDef;
|
||||
|
||||
#define P11_GPTMR0_BASE (p11_sfr_base + map_adr(0x18, 0x00))
|
||||
#define P11_GPTMR1_BASE (p11_sfr_base + map_adr(0x18, 0x05))
|
||||
|
||||
#define P11_GPTMR0 ((P11_GPTMR_TypeDef *)P11_GPTMR0_BASE)
|
||||
#define P11_GPTMR1 ((P11_GPTMR_TypeDef *)P11_GPTMR1_BASE)
|
||||
|
||||
//............. 0x1a00 - 0x1aff............ for NFC
|
||||
typedef struct {
|
||||
__RW __u32 CON0;
|
||||
__RW __u32 CON1;
|
||||
__RW __u32 CON2;
|
||||
__RW __u32 CON3;
|
||||
__RW __u32 BUF0;
|
||||
__RW __u32 BUF1;
|
||||
__RW __u32 BUF2;
|
||||
__RW __u32 BUF3;
|
||||
} P11_NFC_TypeDef;
|
||||
|
||||
#define P11_NFC_BASE (p11_sfr_base + map_adr(0x1a, 0x00))
|
||||
#define P11_NFC ((P11_NFC_TypeDef *)P11_NFC_BASE)
|
||||
|
||||
|
||||
//............. 0x1b00 - 0x1bff............ for RESLOCK
|
||||
typedef struct {
|
||||
__RW __u32 LOCK[16];
|
||||
} P11_RESLOCK_TypeDef;
|
||||
|
||||
#define P11_RESLOCK_BASE (p11_sfr_base + map_adr(0x1b,0x00))
|
||||
#define P11_RESLOCK ((P11_RESLOCK_TypeDef *)P11_RESLOCK_BASE)
|
||||
|
||||
|
||||
//............. 0x1c00 - 0x1cff............ for lp_gpcnt0
|
||||
typedef struct {
|
||||
__RW __u32 CON;
|
||||
__RO __u32 NUM;
|
||||
} P11_GPCNT_TypeDef;
|
||||
|
||||
#define P11_GPCNT0_BASE (p11_sfr_base + map_adr(0x1c, 0x00))
|
||||
#define P11_GPCNT0 ((P11_GPCNT_TypeDef *)P11_GPCNT0_BASE)
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,77 @@
|
||||
#ifndef __CHARGE_HW_H__
|
||||
#define __CHARGE_HW_H__
|
||||
/************************P3_ANA_MFIX*****************************/
|
||||
#define PMU_MFIXI_SET_1(en) p33_fast_access(P3_ANA_MFIX, BIT(1), en)
|
||||
|
||||
/************************P3_CHG_CON0*****************************/
|
||||
#define CHARGE_EN(en) p33_fast_access(P3_CHG_CON0, BIT(0), en)
|
||||
|
||||
#define CHGGO_EN(en) p33_fast_access(P3_CHG_CON0, BIT(1), en)
|
||||
|
||||
#define IS_CHARGE_EN() ((P33_CON_GET(P3_CHG_CON0) & BIT(0)) ? 1: 0 )
|
||||
|
||||
#define CHG_HV_MODE(mode) p33_fast_access(P3_CHG_CON0, BIT(2), mode)
|
||||
|
||||
#define CHG_TRICKLE_EN(en) p33_fast_access(P3_CHG_CON0, BIT(3), en)
|
||||
|
||||
#define CHG_CCLOOP_EN(en) p33_fast_access(P3_CHG_CON0, BIT(4), en)
|
||||
|
||||
#define CHG_VILOOP_EN(en) p33_fast_access(P3_CHG_CON0, BIT(5), en)
|
||||
|
||||
#define CHG_VILOOP2_EN(en) p33_fast_access(P3_CHG_CON0, BIT(6), en)
|
||||
|
||||
#define CHG_VINLOOP_SLT(sel) p33_fast_access(P3_CHG_CON0, BIT(7), sel)
|
||||
|
||||
/************************P3_CHG_CON1*****************************/
|
||||
#define CHARGE_mA_SEL(a) P33_CON_SET(P3_CHG_CON1, 0, 4, a)
|
||||
|
||||
/************************P3_CHG_CON2*****************************/
|
||||
#define CHARGE_FULL_V_SEL(a) P33_CON_SET(P3_CHG_CON2, 4, 4, a)
|
||||
|
||||
/************************P3_CHG_CON3*****************************/
|
||||
#define CHARGE_FOLLOWC_SLT(en) p33_fast_access(P3_CHG_CON3, BIT(3), en)
|
||||
|
||||
enum {
|
||||
CHARGE_DET_VOL_365V,
|
||||
CHARGE_DET_VOL_375V,
|
||||
CHARGE_DET_VOL_385V,
|
||||
CHARGE_DET_VOL_395V,
|
||||
};
|
||||
#define CHARGE_DET_VOL(a) P33_CON_SET(P3_CHG_CON3, 1, 2, a)
|
||||
|
||||
#define CHARGE_DET_EN(en) p33_fast_access(P3_CHG_CON3, BIT(0), en)
|
||||
|
||||
/************************P3_CHG_CON4*****************************/
|
||||
#define CHGI_TRIM_SEL(a) P33_CON_SET(P3_CHG_CON4, 0, 4, a)
|
||||
|
||||
/************************P3_VPWR_CON0*****************************/
|
||||
#define L5V_IO_MODE(a) p33_fast_access(P3_VPWR_CON0, BIT(2), a)
|
||||
|
||||
#define IS_L5V_LOAD_EN() ((P33_CON_GET(P3_VPWR_CON0) & BIT(0)) ? 1: 0)
|
||||
|
||||
#define L5V_LOAD_EN(a) p33_fast_access(P3_VPWR_CON0, BIT(0), a)
|
||||
|
||||
/************************P3_VPWR_CON1*****************************/
|
||||
#define L5V_RES_DET_S_SEL(a) P33_CON_SET(P3_VPWR_CON1, 0, 2, a)
|
||||
|
||||
#define GET_L5V_RES_DET_S_SEL() (P33_CON_GET(P3_VPWR_CON1) & 0x03)
|
||||
|
||||
/************************P3_ANA_FLOW2*****************************/
|
||||
#define PMU_NVDC_EN(a) p33_fast_access(P3_ANA_FLOW2, BIT(4), a)
|
||||
|
||||
/************************P3_AWKUP_LEVEL*****************************/
|
||||
#define VBAT_DET_FILTER_GET() ((P33_CON_GET(P3_AWKUP_LEVEL) & BIT(2)) ? 1: 0)
|
||||
|
||||
#define LVCMP_DET_FILTER_GET() ((P33_CON_GET(P3_AWKUP_LEVEL) & BIT(1)) ? 1: 0)
|
||||
|
||||
#define LDO5V_DET_FILTER_GET() ((P33_CON_GET(P3_AWKUP_LEVEL) & BIT(0)) ? 1: 0)
|
||||
|
||||
/************************P3_ANA_READ*****************************/
|
||||
#define VBAT_DET_GET() ((P33_CON_GET(P3_ANA_READ) & BIT(0)) ? 1: 0 )
|
||||
|
||||
#define LVCMP_DET_GET() ((P33_CON_GET(P3_ANA_READ) & BIT(1)) ? 1: 0 )
|
||||
|
||||
#define LDO5V_DET_GET() ((P33_CON_GET(P3_ANA_READ) & BIT(2)) ? 1: 0 )
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
#ifndef __P33_ACCESS_H__
|
||||
#define __P33_ACCESS_H__
|
||||
|
||||
//
|
||||
//
|
||||
// for p33 access
|
||||
//
|
||||
//
|
||||
//
|
||||
/**************************************************************/
|
||||
|
||||
//ROM
|
||||
u8 p33_buf(u8 buf);
|
||||
|
||||
#define p33_xor_1byte(addr, data0) (*((volatile u8 *)&addr + 0x300*4) = data0); asm volatile ("csync")
|
||||
//#define p33_xor_1byte(addr, data0) (*((volatile u8 *)&addr + 0x300*4) = data0)
|
||||
// #define p33_xor_1byte(addr, data0) addr ^= (data0)
|
||||
|
||||
#define p33_or_1byte(addr, data0) (*((volatile u8 *)&addr + 0x200*4) = data0); asm volatile ("csync")
|
||||
//#define p33_or_1byte(addr, data0) (*((volatile u8 *)&addr + 0x200*4) = data0)
|
||||
// #define p33_or_1byte(addr, data0) addr |= (data0)
|
||||
|
||||
#define p33_and_1byte(addr, data0) (*((volatile u8 *)&addr + 0x100*4) = (data0)); asm volatile ("csync")
|
||||
//#define p33_and_1byte(addr, data0) (*((volatile u8 *)&addr + 0x100*4) = (data0))
|
||||
//#define p33_and_1byte(addr, data0) addr &= (data0)
|
||||
|
||||
// void p33_tx_1byte(u16 addr, u8 data0);
|
||||
#define p33_tx_1byte(addr, data0) addr = data0
|
||||
|
||||
// u8 p33_rx_1byte(u16 addr);
|
||||
#define p33_rx_1byte(addr) addr
|
||||
|
||||
#define P33_CON_SET(sfr, start, len, data) (sfr = (sfr & ~((~(0xff << (len))) << (start))) | \
|
||||
(((data) & (~(0xff << (len)))) << (start)))
|
||||
|
||||
#define P33_CON_GET(sfr) (sfr)
|
||||
|
||||
#if 1
|
||||
|
||||
#define p33_fast_access(reg, data, en) \
|
||||
{ \
|
||||
if (en) { \
|
||||
p33_or_1byte(reg, (data)); \
|
||||
} else { \
|
||||
p33_and_1byte(reg, (u8)~(data)); \
|
||||
} \
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#define p33_fast_access(reg, data, en) \
|
||||
{ \
|
||||
if (en) { \
|
||||
reg |= (data); \
|
||||
} else { \
|
||||
reg &= ~(data); \
|
||||
} \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,249 @@
|
||||
#ifndef __P33_API_H__
|
||||
#define __P33_API_H__
|
||||
|
||||
|
||||
//
|
||||
//
|
||||
// vol
|
||||
//
|
||||
//
|
||||
//
|
||||
/****************************************************************/
|
||||
|
||||
enum DVDD_VOL {
|
||||
DVDD_VOL_0840MV = 0,
|
||||
DVDD_VOL_0870MV,
|
||||
DVDD_VOL_0900MV,
|
||||
DVDD_VOL_0930MV,
|
||||
DVDD_VOL_0960MV,
|
||||
DVDD_VOL_0990MV,
|
||||
DVDD_VOL_1020MV,
|
||||
DVDD_VOL_1050MV,
|
||||
DVDD_VOL_1080MV,
|
||||
DVDD_VOL_1110MV,
|
||||
DVDD_VOL_1140MV,
|
||||
DVDD_VOL_1170MV,
|
||||
DVDD_VOL_1200MV,
|
||||
DVDD_VOL_1230MV,
|
||||
DVDD_VOL_1260MV,
|
||||
DVDD_VOL_1290MV,
|
||||
};
|
||||
|
||||
/*enum DVDD2_VOL {*/
|
||||
/*};*/
|
||||
|
||||
/*enum RVDD_VOL {*/
|
||||
/*};*/
|
||||
|
||||
/*enum RVDD2_VOL {*/
|
||||
/*};*/
|
||||
|
||||
/*enum BTVDD_VOL {*/
|
||||
/*};*/
|
||||
|
||||
enum DCVDD_VOL {
|
||||
DCVDD_VOL_1000MV = 0,
|
||||
DCVDD_VOL_1050MV,
|
||||
DCVDD_VOL_1100MV,
|
||||
DCVDD_VOL_1150MV,
|
||||
DCVDD_VOL_1200MV,
|
||||
DCVDD_VOL_1250MV,
|
||||
DCVDD_VOL_1300MV,
|
||||
DCVDD_VOL_1350MV,
|
||||
DCVDD_VOL_1400MV,
|
||||
DCVDD_VOL_1450MV,
|
||||
DCVDD_VOL_1500MV,
|
||||
DCVDD_VOL_1550MV,
|
||||
DCVDD_VOL_1600MV,
|
||||
};
|
||||
|
||||
enum VDDIOM_VOL {
|
||||
VDDIOM_VOL_21V = 0,
|
||||
VDDIOM_VOL_22V,
|
||||
VDDIOM_VOL_23V,
|
||||
VDDIOM_VOL_24V,
|
||||
VDDIOM_VOL_25V,
|
||||
VDDIOM_VOL_26V,
|
||||
VDDIOM_VOL_27V,
|
||||
VDDIOM_VOL_28V,
|
||||
VDDIOM_VOL_29V,
|
||||
VDDIOM_VOL_30V,
|
||||
VDDIOM_VOL_31V,
|
||||
VDDIOM_VOL_32V,
|
||||
VDDIOM_VOL_33V,
|
||||
VDDIOM_VOL_34V,
|
||||
VDDIOM_VOL_35V,
|
||||
VDDIOM_VOL_36V,
|
||||
};
|
||||
|
||||
enum VDDIOW_VOL {
|
||||
VDDIOW_VOL_21V = 0,
|
||||
VDDIOW_VOL_22V,
|
||||
VDDIOW_VOL_23V,
|
||||
VDDIOW_VOL_24V,
|
||||
VDDIOW_VOL_25V,
|
||||
VDDIOW_VOL_26V,
|
||||
VDDIOW_VOL_27V,
|
||||
VDDIOW_VOL_28V,
|
||||
VDDIOW_VOL_29V,
|
||||
VDDIOW_VOL_30V,
|
||||
VDDIOW_VOL_31V,
|
||||
VDDIOW_VOL_32V,
|
||||
VDDIOW_VOL_33V,
|
||||
VDDIOW_VOL_34V,
|
||||
VDDIOW_VOL_35V,
|
||||
VDDIOW_VOL_36V,
|
||||
};
|
||||
|
||||
enum WVDD_VOL {
|
||||
WVDD_VOL_0500MV = 0,
|
||||
WVDD_VOL_0550MV,
|
||||
WVDD_VOL_0600MV,
|
||||
WVDD_VOL_0650MV,
|
||||
WVDD_VOL_0700MV,
|
||||
WVDD_VOL_0750MV,
|
||||
WVDD_VOL_0800MV,
|
||||
WVDD_VOL_0850MV,
|
||||
WVDD_VOL_0900MV,
|
||||
WVDD_VOL_0950MV,
|
||||
WVDD_VOL_1000MV,
|
||||
WVDD_VOL_1050MV,
|
||||
WVDD_VOL_1100MV,
|
||||
WVDD_VOL_1150MV,
|
||||
WVDD_VOL_1200MV,
|
||||
WVDD_VOL_1250MV,
|
||||
};
|
||||
|
||||
enum PVDD_VOL {
|
||||
PVDD_VOL_0500MV = 0,
|
||||
PVDD_VOL_0550MV,
|
||||
PVDD_VOL_0600MV,
|
||||
PVDD_VOL_0650MV,
|
||||
PVDD_VOL_0700MV,
|
||||
PVDD_VOL_0750MV,
|
||||
PVDD_VOL_0800MV,
|
||||
PVDD_VOL_0850MV,
|
||||
PVDD_VOL_0900MV,
|
||||
PVDD_VOL_0950MV,
|
||||
PVDD_VOL_1000MV,
|
||||
PVDD_VOL_1050MV,
|
||||
PVDD_VOL_1100MV,
|
||||
PVDD_VOL_1150MV,
|
||||
PVDD_VOL_1200MV,
|
||||
PVDD_VOL_1250MV,
|
||||
};
|
||||
|
||||
void dvdd_vol_sel(enum DVDD_VOL vol);
|
||||
enum DVDD_VOL get_dvdd_vol_sel();
|
||||
/*void dvdd2_vol_sel(enum DVDD2_VOL vol);*/
|
||||
/*enum DVDD2_VOL get_dvdd2_vol_sel();*/
|
||||
|
||||
/*void rvdd_vol_sel(enum RVDD_VOL vol);*/
|
||||
/*enum RVDD_VOL get_rvdd_vol_sel();*/
|
||||
/*void rvdd2_vol_sel(enum RVDD2_VOL vol);*/
|
||||
/*enum RVDD2_VOL get_rvdd2_vol_sel();*/
|
||||
|
||||
void dcvdd_vol_sel(enum DCVDD_VOL vol);
|
||||
enum DCVDD_VOL get_dcvdd_vol_sel();
|
||||
|
||||
/*void btvdd_vol_sel(enum BTVDD_VOL vol);*/
|
||||
/*enum BTVDD_VOL get_btvdd_vol_sel();*/
|
||||
|
||||
void pvdd_config(u32 lev, u32 low_lev, u32 output);
|
||||
void pvdd_output(u32 output);
|
||||
|
||||
void vddiom_vol_sel(enum VDDIOM_VOL vol);
|
||||
enum VDDIOM_VOL get_vddiom_vol_sel();
|
||||
void vddiow_vol_sel(enum VDDIOW_VOL vol);
|
||||
enum VDDIOW_VOL get_vddiow_vol_sel();
|
||||
u32 get_vddiom_vol();
|
||||
|
||||
//
|
||||
//
|
||||
// lvd
|
||||
//
|
||||
//
|
||||
//
|
||||
/****************************************************************/
|
||||
typedef enum {
|
||||
LVD_RESET_MODE, //复位模式
|
||||
LVD_EXCEPTION_MODE, //异常模式,进入异常中断
|
||||
LVD_WAKEUP_MODE, //唤醒模式,进入唤醒中断,callback参数为回调函数
|
||||
} LVD_MODE;
|
||||
|
||||
typedef enum {
|
||||
VLVD_SEL_166V = 0,
|
||||
VLVD_SEL_177V,
|
||||
VLVD_SEL_188V,
|
||||
VLVD_SEL_199V,
|
||||
VLVD_SEL_210V,
|
||||
VLVD_SEL_221V,
|
||||
VLVD_SEL_232V,
|
||||
VLVD_SEL_243V,
|
||||
VLVD_SEL_254V,
|
||||
VLVD_SEL_265V,
|
||||
VLVD_SEL_276V,
|
||||
VLVD_SEL_287V,
|
||||
VLVD_SEL_298V,
|
||||
VLVD_SEL_309V,
|
||||
VLVD_SEL_320V,
|
||||
VLVD_SEL_331V,
|
||||
} LVD_VOL;
|
||||
|
||||
void lvd_en(u8 en);
|
||||
void lvd_config(LVD_VOL vol, u8 expin_en, LVD_MODE mode, void (*callback));
|
||||
|
||||
//
|
||||
//
|
||||
// pinr
|
||||
//
|
||||
//
|
||||
//
|
||||
//******************************************************************
|
||||
void gpio_longpress_pin0_reset_config(u32 pin, u32 level, u32 time, u32 release, u32 pull_enable, u32 latch_en);
|
||||
void gpio_longpress_pin1_reset_config(u32 pin, u32 level, u32 time, u32 release);
|
||||
|
||||
|
||||
|
||||
//
|
||||
//
|
||||
// dcdc
|
||||
//
|
||||
//
|
||||
//
|
||||
//******************************************************************
|
||||
enum POWER_MODE {
|
||||
//LDO模式
|
||||
PWR_LDO15,
|
||||
//DCDC模式
|
||||
PWR_DCDC15,
|
||||
};
|
||||
|
||||
enum POWER_DCDC_TYPE {
|
||||
PWR_DCDC12 = 2,
|
||||
PWR_DCDC18_DCDC12 = 6,
|
||||
PWR_DCDC18_DCDC12_DCDC09 = 7,
|
||||
};
|
||||
|
||||
enum {
|
||||
DCDC09 = 1,
|
||||
DCDC12 = 2,
|
||||
DCDC18 = 4,
|
||||
};
|
||||
|
||||
void power_set_dcdc_type(enum POWER_DCDC_TYPE type);
|
||||
void power_set_mode(enum POWER_MODE mode);
|
||||
|
||||
|
||||
enum DVD_SHORT_DCV_MODE {
|
||||
DVDD_SHORT_DCVDDDIS = 0,
|
||||
DVDD_SHORT_DCVDD_EN,
|
||||
};
|
||||
void dcvdd_level_cfg(u8 dcvdd_level_set);
|
||||
void dvdd_short_dcvdd(enum DVD_SHORT_DCV_MODE short_mode, u8 dcvdd_level_set);
|
||||
|
||||
//每个滤波参数不一样
|
||||
#define MAX_WAKEUP_PORT 8 //最大同时支持数字io输入个数
|
||||
#define MAX_WAKEUP_ANA_PORT 3 //最大同时支持模拟io输入个数
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,339 @@
|
||||
#ifndef __P33_SFR_H__
|
||||
#define __P33_SFR_H__
|
||||
|
||||
//#ifdef PMU_SYSTEM
|
||||
#if 0
|
||||
#define P33_ACCESS(x) (*(volatile u32 *)(0xc000 + x*4))
|
||||
#else
|
||||
#define P33_ACCESS(x) (*(volatile u32 *)(0xf20000 + 0xc000 + x*4))
|
||||
#endif
|
||||
|
||||
//#ifdef PMU_SYSTEM
|
||||
#if 0
|
||||
#define RTC_ACCESS(x) (*(volatile u32 *)(0xd000 + x*4))
|
||||
#else
|
||||
#define RTC_ACCESS(x) (*(volatile u32 *)(0xf20000 + 0xd000 + x*4))
|
||||
#endif
|
||||
|
||||
//===========
|
||||
//===============================================================================//
|
||||
//
|
||||
//
|
||||
//
|
||||
//===============================================================================//
|
||||
//............. 0x0000 - 0x000f............
|
||||
//#define P3_VLMT_CON P33_ACCESS(0x01)
|
||||
//#define P3_POR_CON P33_ACCESS(0x02)
|
||||
#define P3_VLVD_CON0 P33_ACCESS(0x03)
|
||||
#define P3_VLVD_CON1 P33_ACCESS(0x04)
|
||||
#define P3_VLVD_FLT P33_ACCESS(0x05)
|
||||
#define P3_WDT_CON P33_ACCESS(0x06)
|
||||
#define P3_OCP_CON0 P33_ACCESS(0x07)
|
||||
|
||||
#define P3_ANA_FLOW0 P33_ACCESS(0x08)
|
||||
#define P3_ANA_FLOW1 P33_ACCESS(0x09)
|
||||
#define P3_ANA_FLOW2 P33_ACCESS(0x0a)
|
||||
|
||||
#define P3_ANA_KEEP0 P33_ACCESS(0x0c)
|
||||
#define P3_ANA_KEEP1 P33_ACCESS(0x0d)
|
||||
#define P3_ANA_KEEP2 P33_ACCESS(0x0e)
|
||||
|
||||
//............. 0X0010 - 0X001F.........for analog others
|
||||
#define P3_OSL_CON P33_ACCESS(0x10)
|
||||
#define P3_RST_FLAG P33_ACCESS(0x11)
|
||||
#define P3_VBAT_TYPE P33_ACCESS(0x12)
|
||||
#define P3_LRC_CON0 P33_ACCESS(0x13)
|
||||
#define P3_LRC_CON1 P33_ACCESS(0x14)
|
||||
#define P3_RST_CON0 P33_ACCESS(0x15)
|
||||
#define P3_RST_CON1 P33_ACCESS(0x16)
|
||||
#define P3_RST_CON2 P33_ACCESS(0x17)
|
||||
#define P3_VLD_KEEP P33_ACCESS(0x18)
|
||||
#define P3_CLK_CON0 P33_ACCESS(0x19)
|
||||
#define P3_ANA_READ P33_ACCESS(0x1a)
|
||||
#define P3_CHG_CON0 P33_ACCESS(0x1b)
|
||||
#define P3_CHG_CON1 P33_ACCESS(0x1c)
|
||||
#define P3_CHG_CON2 P33_ACCESS(0x1d)
|
||||
#define P3_CHG_CON3 P33_ACCESS(0x1e)
|
||||
#define P3_CHG_CON4 P33_ACCESS(0x1f)
|
||||
|
||||
//............. 0X0020 - 0X002F............ for buck circuit
|
||||
//#define P3_BUCK1_CON0 P33_ACCESS(0x20)
|
||||
//#define P3_BUCK1_CON1 P33_ACCESS(0x21)
|
||||
//#define P3_BUCK1_CON2 P33_ACCESS(0x22)
|
||||
//#define P3_BUCK1_CON3 P33_ACCESS(0x23)
|
||||
//#define P3_BUCK1_CON4 P33_ACCESS(0x24)
|
||||
//#define P3_BUCK1_CON5 P33_ACCESS(0x25)
|
||||
//#define P3_BUCK1_CON6 P33_ACCESS(0x26)
|
||||
//#define P3_BUCK1_CON7 P33_ACCESS(0x27)
|
||||
#define P3_BUCK2_CON0 P33_ACCESS(0x20)
|
||||
#define P3_BUCK2_CON1 P33_ACCESS(0x21)
|
||||
#define P3_BUCK2_CON2 P33_ACCESS(0x22)
|
||||
#define P3_BUCK2_CON3 P33_ACCESS(0x23)
|
||||
#define P3_BUCK2_CON4 P33_ACCESS(0x24)
|
||||
#define P3_BUCK2_CON5 P33_ACCESS(0x25)
|
||||
#define P3_BUCK2_CON6 P33_ACCESS(0x26)
|
||||
#define P3_BUCK2_CON7 P33_ACCESS(0x27)
|
||||
//#define P3_BUCK3_CON0 P33_ACCESS(0x28)
|
||||
//#define P3_BUCK3_CON1 P33_ACCESS(0x29)
|
||||
//#define P3_BUCK3_CON2 P33_ACCESS(0x2a)
|
||||
//#define P3_BUCK3_CON3 P33_ACCESS(0x2b)
|
||||
//#define P3_BUCK3_CON4 P33_ACCESS(0x2c)
|
||||
//#define P3_BUCK3_CON5 P33_ACCESS(0x2d)
|
||||
//#define P3_BUCK3_CON6 P33_ACCESS(0x2e)
|
||||
//#define P3_BUCK3_CON7 P33_ACCESS(0x2f)
|
||||
|
||||
//............. 0X0030 - 0X003F............ for PMU manager
|
||||
#define P3_SFLAG0 P33_ACCESS(0x30)
|
||||
#define P3_SFLAG1 P33_ACCESS(0x31)
|
||||
#define P3_SFLAG2 P33_ACCESS(0x32)
|
||||
#define P3_SFLAG3 P33_ACCESS(0x33)
|
||||
#define P3_SFLAG4 P33_ACCESS(0x34)
|
||||
#define P3_SFLAG5 P33_ACCESS(0x35)
|
||||
#define P3_SFLAG6 P33_ACCESS(0x36)
|
||||
#define P3_SFLAG7 P33_ACCESS(0x37)
|
||||
#define P3_SFLAG8 P33_ACCESS(0x38)
|
||||
#define P3_SFLAG9 P33_ACCESS(0x39)
|
||||
#define P3_SFLAGA P33_ACCESS(0x3a)
|
||||
#define P3_SFLAGB P33_ACCESS(0x3b)
|
||||
|
||||
//............. 0X0040 - 0X004F............ for
|
||||
#define P3_IVS_RD P33_ACCESS(0x40)
|
||||
#define P3_IVS_SET P33_ACCESS(0x41)
|
||||
#define P3_IVS_CLR P33_ACCESS(0x42)
|
||||
#define P3_PVDD0_AUTO P33_ACCESS(0x43)
|
||||
#define P3_PVDD1_AUTO P33_ACCESS(0x44)
|
||||
#define P3_WKUP_DLY P33_ACCESS(0x45)
|
||||
|
||||
#define P3_PCNT_FLT P33_ACCESS(0x48)
|
||||
#define P3_PCNT_CON P33_ACCESS(0x49)
|
||||
#define P3_PCNT_SET0 P33_ACCESS(0x4a)
|
||||
#define P3_PCNT_SET1 P33_ACCESS(0x4b)
|
||||
#define P3_PCNT_DAT0 P33_ACCESS(0x4c)
|
||||
#define P3_PCNT_DAT1 P33_ACCESS(0x4d)
|
||||
|
||||
#define P3_P11_CPU P33_ACCESS(0x4f)
|
||||
|
||||
//............. 0X0050 - 0X005F............ for port wake up
|
||||
#define P3_WKUP_FLT_EN0 P33_ACCESS(0x50)
|
||||
#define P3_WKUP_P_IE0 P33_ACCESS(0x51)
|
||||
#define P3_WKUP_N_IE0 P33_ACCESS(0x52)
|
||||
#define P3_WKUP_LEVEL0 P33_ACCESS(0x53)
|
||||
#define P3_WKUP_P_CPND0 P33_ACCESS(0x54)
|
||||
#define P3_WKUP_N_CPND0 P33_ACCESS(0x55)
|
||||
#define P3_WKUP_P_PND0 P33_ACCESS(0x56)
|
||||
#define P3_WKUP_N_PND0 P33_ACCESS(0x57)
|
||||
#define P3_WKUP_FLT_EN1 P33_ACCESS(0x58)
|
||||
#define P3_WKUP_P_IE1 P33_ACCESS(0x59)
|
||||
#define P3_WKUP_N_IE1 P33_ACCESS(0x5a)
|
||||
#define P3_WKUP_LEVEL1 P33_ACCESS(0x5b)
|
||||
#define P3_WKUP_P_CPND1 P33_ACCESS(0x5c)
|
||||
#define P3_WKUP_N_CPND1 P33_ACCESS(0x5d)
|
||||
#define P3_WKUP_P_PND1 P33_ACCESS(0x5e)
|
||||
#define P3_WKUP_N_PND1 P33_ACCESS(0x5f)
|
||||
|
||||
//............. 0X0060 - 0X006F............ for analog wake up
|
||||
#define P3_AWKUP_FLT_EN P33_ACCESS(0x60)
|
||||
#define P3_AWKUP_P_IE P33_ACCESS(0x61)
|
||||
#define P3_AWKUP_N_IE P33_ACCESS(0x62)
|
||||
#define P3_AWKUP_LEVEL P33_ACCESS(0x63)
|
||||
#define P3_AWKUP_P_PND P33_ACCESS(0x64)
|
||||
#define P3_AWKUP_N_PND P33_ACCESS(0x65)
|
||||
#define P3_AWKUP_P_CPND P33_ACCESS(0x66)
|
||||
#define P3_AWKUP_N_CPND P33_ACCESS(0x67)
|
||||
#define P3_WKUP_CLK_SEL P33_ACCESS(0x68)
|
||||
#define P3_AWKUP_CLK_SEL P33_ACCESS(0x69)
|
||||
#define P3_SYS_PWR0 P33_ACCESS(0x6a)
|
||||
#define P3_SYS_PWR1 P33_ACCESS(0x6b)
|
||||
#define P3_SYS_PWR2 P33_ACCESS(0x6c)
|
||||
#define P3_SYS_PWR3 P33_ACCESS(0x6d)
|
||||
#define P3_SYS_PWR4 P33_ACCESS(0x6e)
|
||||
#define P3_SYS_PWR5 P33_ACCESS(0x6f)
|
||||
|
||||
//............. 0X0070 - 0X007F............ for
|
||||
#define P3_PGDR_CON0 P33_ACCESS(0x70)
|
||||
#define P3_PGDR_CON1 P33_ACCESS(0x71)
|
||||
#define P3_PGSD_CON P33_ACCESS(0x72)
|
||||
|
||||
#define P3_LP_CTL P33_ACCESS(0x74)
|
||||
#define P3_LP_CFG P33_ACCESS(0x75)
|
||||
#define P3_NVRAM_PWR P33_ACCESS(0x76)
|
||||
#define P3_WVD_CON0 P33_ACCESS(0x77)
|
||||
#define P3_PVD_CON0 P33_ACCESS(0x78)
|
||||
#define P3_EVD_CON0 P33_ACCESS(0x79)
|
||||
#define P3_PMU_CON0 P33_ACCESS(0x7a)
|
||||
|
||||
#define P3_PMU_CON4 P33_ACCESS(0x7e)
|
||||
#define P3_PMU_CON5 P33_ACCESS(0x7f)
|
||||
|
||||
//............. 0X0080 - 0X008F............ for
|
||||
#define P3_PINR_CON P33_ACCESS(0x80)
|
||||
#define P3_PINR_CON1 P33_ACCESS(0x81)
|
||||
#define P3_PINR_SAFE P33_ACCESS(0x82)
|
||||
#define P3_PINR_SAFE1 P33_ACCESS(0x83)
|
||||
#define P3_PINR_PND1 P33_ACCESS(0x84)
|
||||
|
||||
#define P3_RST_SRC0 P33_ACCESS(0x8e)
|
||||
#define P3_RST_SRC1 P33_ACCESS(0x8f)
|
||||
|
||||
//............. 0X0090 - 0X009F............ for
|
||||
#define P3_PSW_CON0 P33_ACCESS(0x90)
|
||||
#define P3_PSW_CON1 P33_ACCESS(0x91)
|
||||
#define P3_PSW_CON2 P33_ACCESS(0x92)
|
||||
#define P3_PMU_ADC0 P33_ACCESS(0x93)
|
||||
#define P3_PMU_ADC1 P33_ACCESS(0x94)
|
||||
#define P3_VBG_CON0 P33_ACCESS(0x95)
|
||||
#define P3_VBG_CON1 P33_ACCESS(0x96)
|
||||
#define P3_IOV_CON0 P33_ACCESS(0x97)
|
||||
#define P3_IOV_CON1 P33_ACCESS(0x98)
|
||||
#define P3_PAVD_CON0 P33_ACCESS(0x99)
|
||||
#define P3_DCV_CON0 P33_ACCESS(0x9a)
|
||||
#define P3_DVD_CON0 P33_ACCESS(0x9b)
|
||||
#define P3_DVD2_CON0 P33_ACCESS(0x9c)
|
||||
#define P3_RVD_CON0 P33_ACCESS(0x9d)
|
||||
#define P3_RVD_CON1 P33_ACCESS(0x9e)
|
||||
#define P3_RVD2_CON0 P33_ACCESS(0x9f)
|
||||
|
||||
//............. 0X00A0 - 0X00AF............
|
||||
#define P3_PR_PWR P33_ACCESS(0xa0)
|
||||
#define P3_VPWR_CON0 P33_ACCESS(0xa1)
|
||||
#define P3_VPWR_CON1 P33_ACCESS(0xa2)
|
||||
#define P3_RTC_ADC0 P33_ACCESS(0xa3)
|
||||
#define P3_LS_P11 P33_ACCESS(0xa4)
|
||||
#define P3_LS_EN P33_ACCESS(0xa5)
|
||||
|
||||
#define P3_EXT_EFUSE_CON P33_ACCESS(0xa6)
|
||||
|
||||
#define P3_WKUP_SRC P33_ACCESS(0xa8)
|
||||
#define P3_ANA_MFIX P33_ACCESS(0xa9)
|
||||
#define P3_DBG_CON0 P33_ACCESS(0xaa)
|
||||
#define P3_DBG_CON1 P33_ACCESS(0xab)
|
||||
#define P3_MFIX_OPT P33_ACCESS(0xac)
|
||||
|
||||
//............. 0X00B0 - 0X00BF............ for EFUSE
|
||||
#define P3_EFUSE_CON0 P33_ACCESS(0xb0)
|
||||
#define P3_EFUSE_CON1 P33_ACCESS(0xb1)
|
||||
#define P3_EFUSE_CON2 P33_ACCESS(0xb2)
|
||||
#define P3_EFUSE_RDAT P33_ACCESS(0xb3)
|
||||
#define P3_EFUSE_PU_DAT0 P33_ACCESS(0xb4)
|
||||
#define P3_EFUSE_PU_DAT1 P33_ACCESS(0xb5)
|
||||
#define P3_EFUSE_PU_DAT2 P33_ACCESS(0xb6)
|
||||
#define P3_EFUSE_PU_DAT3 P33_ACCESS(0xb7)
|
||||
|
||||
#define P3_FUNC_EN P33_ACCESS(0xb8)
|
||||
#define P3_FUNC_CTL0 P33_ACCESS(0xb9)
|
||||
#define P3_FUNC_CTL1 P33_ACCESS(0xba)
|
||||
#define P3_FUNC_CTL2 P33_ACCESS(0xbb)
|
||||
#define P3_EFUSE_ANA0 P33_ACCESS(0xbc)
|
||||
|
||||
//............. 0X00C0 - 0X00CF............ for port input select
|
||||
#define P3_PORT_SEL0 P33_ACCESS(0xc0)
|
||||
#define P3_PORT_SEL1 P33_ACCESS(0xc1)
|
||||
#define P3_PORT_SEL2 P33_ACCESS(0xc2)
|
||||
#define P3_PORT_SEL3 P33_ACCESS(0xc3)
|
||||
#define P3_PORT_SEL4 P33_ACCESS(0xc4)
|
||||
#define P3_PORT_SEL5 P33_ACCESS(0xc5)
|
||||
#define P3_PORT_SEL6 P33_ACCESS(0xc6)
|
||||
#define P3_PORT_SEL7 P33_ACCESS(0xc7)
|
||||
|
||||
//............. 0x00d0 - 0x00df............
|
||||
#define P3_LS_IO_USR P33_ACCESS(0xd0) //TODO: check sync with verilog head file chip_def.v LEVEL_SHIFTER
|
||||
#define P3_LS_IO_ROM P33_ACCESS(0xd1)
|
||||
#define P3_LS_IO_PINR P33_ACCESS(0xd2)
|
||||
#define P3_LS_CTMU P33_ACCESS(0xd3)
|
||||
#define P3_LS_IO_SHA P33_ACCESS(0xd4)
|
||||
#define P3_LS_LRC24M P33_ACCESS(0xd5)
|
||||
#define P3_LS_BT P33_ACCESS(0xd6)
|
||||
#define P3_LS_PLL P33_ACCESS(0xd7)
|
||||
|
||||
//............. 0X00E0 - 0X00FF............ for p33 lp timer
|
||||
#define P3_LP_RSC00 P33_ACCESS(0xe0)
|
||||
#define P3_LP_RSC01 P33_ACCESS(0xe1)
|
||||
#define P3_LP_RSC02 P33_ACCESS(0xe2)
|
||||
#define P3_LP_RSC03 P33_ACCESS(0xe3)
|
||||
#define P3_LP_PRD00 P33_ACCESS(0xe4)
|
||||
#define P3_LP_PRD01 P33_ACCESS(0xe5)
|
||||
#define P3_LP_PRD02 P33_ACCESS(0xe6)
|
||||
#define P3_LP_PRD03 P33_ACCESS(0xe7)
|
||||
#define P3_LP_RSC10 P33_ACCESS(0xe8)
|
||||
#define P3_LP_RSC11 P33_ACCESS(0xe9)
|
||||
#define P3_LP_RSC12 P33_ACCESS(0xea)
|
||||
#define P3_LP_RSC13 P33_ACCESS(0xeb)
|
||||
#define P3_LP_RSC14 P33_ACCESS(0xec)
|
||||
#define P3_LP_RSC15 P33_ACCESS(0xed)
|
||||
#define P3_LP_PRD10 P33_ACCESS(0xee)
|
||||
#define P3_LP_PRD11 P33_ACCESS(0xef)
|
||||
#define P3_LP_PRD12 P33_ACCESS(0xf0)
|
||||
#define P3_LP_PRD13 P33_ACCESS(0xf1)
|
||||
#define P3_LP_PRD14 P33_ACCESS(0xf2)
|
||||
#define P3_LP_PRD15 P33_ACCESS(0xf3)
|
||||
#define P3_LP_TMR0_CLK P33_ACCESS(0xf4)
|
||||
#define P3_LP_TMR1_CLK P33_ACCESS(0xf5)
|
||||
#define P3_LP_TMR0_CON P33_ACCESS(0xf6)
|
||||
#define P3_LP_TMR1_CON P33_ACCESS(0xf7)
|
||||
#define P3_LP_TMR_CFG P33_ACCESS(0xf8)
|
||||
#define P3_LP_CNTRD0 P33_ACCESS(0xf9)
|
||||
#define P3_LP_CNT0 P33_ACCESS(0xfa)
|
||||
#define P3_LP_CNT1 P33_ACCESS(0xfb)
|
||||
#define P3_LP_CNT2 P33_ACCESS(0xfc)
|
||||
#define P3_LP_CNT3 P33_ACCESS(0xfd)
|
||||
#define P3_LP_CNT4 P33_ACCESS(0xfe)
|
||||
#define P3_LP_CNT5 P33_ACCESS(0xff)
|
||||
|
||||
|
||||
|
||||
//===============================================================================//
|
||||
//
|
||||
// P33 RTCVDD
|
||||
//
|
||||
//===============================================================================//
|
||||
|
||||
//............. 0X0080 - 0X008F............ for RTC
|
||||
#define R3_ALM_CON RTC_ACCESS(0x80)
|
||||
|
||||
#define R3_RTC_CON0 RTC_ACCESS(0x84)
|
||||
#define R3_RTC_CON1 RTC_ACCESS(0x85)
|
||||
#define R3_RTC_DAT0 RTC_ACCESS(0x86)
|
||||
#define R3_RTC_DAT1 RTC_ACCESS(0x87)
|
||||
#define R3_RTC_DAT2 RTC_ACCESS(0x88)
|
||||
#define R3_RTC_DAT3 RTC_ACCESS(0x89)
|
||||
#define R3_RTC_DAT4 RTC_ACCESS(0x8a)
|
||||
#define R3_ALM_DAT0 RTC_ACCESS(0x8b)
|
||||
#define R3_ALM_DAT1 RTC_ACCESS(0x8c)
|
||||
#define R3_ALM_DAT2 RTC_ACCESS(0x8d)
|
||||
#define R3_ALM_DAT3 RTC_ACCESS(0x8e)
|
||||
#define R3_ALM_DAT4 RTC_ACCESS(0x8f)
|
||||
|
||||
//............. 0X0090 - 0X009F............ for wake up
|
||||
#define R3_WKUP_EN RTC_ACCESS(0x90)
|
||||
#define R3_WKUP_EDGE RTC_ACCESS(0x91)
|
||||
#define R3_WKUP_CPND RTC_ACCESS(0x92)
|
||||
#define R3_WKUP_PND RTC_ACCESS(0x93)
|
||||
#define R3_WKUP_LEVEL RTC_ACCESS(0x94)
|
||||
|
||||
//............. 0X00A0 - 0X00AF............ for system
|
||||
#define R3_TIME_CON RTC_ACCESS(0xa0)
|
||||
#define R3_TIME_CPND RTC_ACCESS(0xa1)
|
||||
#define R3_TIME_PND RTC_ACCESS(0xa2)
|
||||
|
||||
#define R3_ADC_CON RTC_ACCESS(0xa4)
|
||||
#define R3_OSL_CON RTC_ACCESS(0xa5)
|
||||
|
||||
#define R3_WKUP_SRC RTC_ACCESS(0xa8)
|
||||
#define R3_RST_SRC RTC_ACCESS(0xa9)
|
||||
|
||||
#define R3_RST_CON RTC_ACCESS(0xab)
|
||||
#define R3_CLK_CON RTC_ACCESS(0xac)
|
||||
|
||||
//............. 0X00B0 - 0X00BF............ for PORT control
|
||||
#define R3_PR_IN RTC_ACCESS(0xb0)
|
||||
#define R3_PR_OUT RTC_ACCESS(0xb1)
|
||||
#define R3_PR_DIR RTC_ACCESS(0xb2)
|
||||
#define R3_PR_DIE RTC_ACCESS(0xb3)
|
||||
#define R3_PR_PU0 RTC_ACCESS(0xb4)
|
||||
#define R3_PR_PU1 RTC_ACCESS(0xb5)
|
||||
#define R3_PR_PD0 RTC_ACCESS(0xb6)
|
||||
#define R3_PR_PD1 RTC_ACCESS(0xb7)
|
||||
#define R3_PR_HD0 RTC_ACCESS(0xb8)
|
||||
#define R3_PR_HD1 RTC_ACCESS(0xb9)
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,180 @@
|
||||
#ifndef __POWER_API_H__
|
||||
#define __POWER_API_H__
|
||||
|
||||
#define AT_VOLATILE_RAM_POWER AT(.power_driver.data)
|
||||
#define AT_VOLATILE_RAM_BSS_POWER AT(.power_driver.data.bss)
|
||||
#define AT_VOLATILE_RAM_CODE_POWER AT(.power_driver.text.cache.L1)
|
||||
|
||||
#define AT_VOLATILE_RAM_LOWPOWER AT_VOLATILE_RAM_POWER //AT(.power_driver.data.overlay)
|
||||
#define AT_VOLATILE_RAM_BSS_LOWPOWER AT(.power_driver.data.bss.overlay)//AT_VOLATILE_RAM_BSS_POWER
|
||||
#define AT_VOLATILE_RAM_CODE_LOWPOWER AT_VOLATILE_RAM_CODE_POWER //AT(.power_driver.text.cache.L1.overlay)
|
||||
|
||||
#define AT_VOLATILE_CACHE_LOWPOWER
|
||||
#define AT_VOLATILE_CACHE_BSS_LOWPOWER
|
||||
#define AT_VOLATILE_CACHE_CODE_LOWPOWER AT(.power_driver.text.cache.fetch)
|
||||
|
||||
//
|
||||
//
|
||||
// platform_data
|
||||
//
|
||||
//
|
||||
//
|
||||
//******************************************************************
|
||||
//config
|
||||
enum LOWPOWER_CONFIG {
|
||||
LOWPOWER_CLOSE,
|
||||
SLEEP_EN,
|
||||
DEEP_SLEEP_EN,
|
||||
};
|
||||
|
||||
//osc_type
|
||||
enum LOWPOWER_OSC_TYPE {
|
||||
OSC_TYPE_LRC,
|
||||
OSC_TYPE_BT_OSC,
|
||||
OSC_TYPE_NULL,
|
||||
};
|
||||
|
||||
struct _power_param {
|
||||
//sleep
|
||||
u32 btosc_hz; //蓝牙晶振频率(默认使用24M)
|
||||
u32 osc_delay_us; //低功耗晶振起振延时,为预留配置。
|
||||
u32 t1; //低功耗参数,预留配置
|
||||
u32 t2; //低功耗参数,预留配置
|
||||
u32 t3; //低功耗参数,预留配置
|
||||
u32 t4; //低功耗参数,预留配置
|
||||
|
||||
//power
|
||||
//vddiom\vddiow在进出低功耗时使用 VDDIO_KEEP_TYPE 配置
|
||||
u8 vddiom_lev; //vddiom,系统工作时使用vddiom ldo(使用enum VDDIOM_VOL配置)
|
||||
u8 vddiow_lev; //vddiow,系统低功耗时使用vddiow ldo(使用enum VDDIOW_VOL配置)
|
||||
|
||||
//sleep
|
||||
u8 config; //低功耗使能,蓝牙&&系统空闲可进入低功耗(使用LOWPOWER_CONFIG配置)
|
||||
u8 osc_type; //低功耗晶振类型(使用enum LOWPOWER_OSC_TYPE配置)
|
||||
u8 lptmr_flow; //低功耗参数由用户配置
|
||||
};
|
||||
|
||||
struct _power_pdata {
|
||||
struct _power_param *power_param_p;
|
||||
struct _wakeup_param *wakeup_param_p;
|
||||
};
|
||||
|
||||
//
|
||||
//
|
||||
// power_api
|
||||
//
|
||||
//
|
||||
//
|
||||
//******************************************************************
|
||||
enum VDDIO_KEEP_TYPE {
|
||||
VDDIO_KEEP_TYPE_NULL, //vddiow使用配置值
|
||||
VDDIO_KEEP_TYPE_NORMAL, //vddiow使用配置值使用vddiom挡位,即vddiom_lev
|
||||
VDDIO_KEEP_TYPE_TRIM, //vddiow使用trim值
|
||||
VDDIO_KEEP_TYPE_PG, //保持vddiom不关闭
|
||||
VDDIO_KEEP_TYPE_CLOSE, //vddio关闭
|
||||
};
|
||||
|
||||
|
||||
#include "power/low_power.h"
|
||||
|
||||
void power_early_init(u32 arg);
|
||||
|
||||
void power_later_init(u32 arg);
|
||||
|
||||
void power_init(struct _power_pdata *pdata);
|
||||
|
||||
enum PCONTROL_CMD {
|
||||
PCONTROL_POWER_DRIVER_RESERVE = 0,
|
||||
PCONTROL_P_PUTBYTE, //串口调试函数
|
||||
|
||||
//*****************************************************
|
||||
/* power
|
||||
*/
|
||||
PCONTROL_POWER_MODE = 0x100,
|
||||
PCONTROL_DCVDD_CAP_SW, //0:DCVDD上没有外挂电容 1:DCVDD上有外挂电容
|
||||
PCONTROL_FLASH_PG_VDDIO, //0:FLASH电源引脚使用IO 1:FLASH电源引脚没有使用IO
|
||||
PCONTROL_RTC_CLK, //RTC_CLK类型,配置开机、关机晶振流程
|
||||
PCONTROL_POWER_SUPPLY, //供电方式,0:IOVDD供电,1:VPWR供电
|
||||
|
||||
//*****************************************************
|
||||
/* sleep
|
||||
*/
|
||||
PCONTROL_PD_VDDIO_KEEP, //pdown vddio切换流程(使用enum VDDIO_KEEP_TYPE配置)
|
||||
PCONTROL_PD_WDVDD_LEV, //pdown wvdd挡位
|
||||
PCONTROL_PD_DVDD_LEV, //pdown dvdd挡位
|
||||
PCONTROL_PD_KEEP_LPCTMU, //pdown 触摸是否保持 0:不保持 1:保持
|
||||
PCONTROL_PD_KEEP_NVDD, //pdown 模式pvdd是否掉电 0, 不掉点 1:掉电
|
||||
|
||||
//*****************************************************
|
||||
/* soff
|
||||
*/
|
||||
PCONTROL_SF_KEEP_LRC, //soff lrc是否保持 0:不保持 1:保持
|
||||
PCONTROL_SF_VDDIO_KEEP, //soff vddio切换流程(使用enum VDDIO_KEEP_TYPE配置)
|
||||
PCONTROL_SF_KEEP_NVDD, //soff nvdd是否保持 0:不保持 1:保持
|
||||
PCONTROL_SF_KEEP_PVDD, //soff pvdd是否保持 0:不保持 1:保持
|
||||
|
||||
|
||||
//*****************************************************
|
||||
/* 以下配置为对应子模块的预留配置
|
||||
*/
|
||||
PCONTROL_PHW_RESERVE = 0x100, //使用enum POWER_MODE配置
|
||||
PCONTROL_P33_RESERVE = 0x200, //使用PCONTROL_P33_CMD配置
|
||||
PCONTROL_P11_RESERVE = 0x300, //使用PCONTROL_P11_CMD配置
|
||||
PCONTROL_LP_FLOW_IC_RESERVE = 0x400, //使用PCONTROL_IC_CMD配置
|
||||
};
|
||||
|
||||
u32 power_control(enum PCONTROL_CMD cmd, u32 arg);
|
||||
|
||||
void dvdd2_bypass_en(u8 mode);
|
||||
|
||||
//
|
||||
//
|
||||
// lowpower
|
||||
//
|
||||
//
|
||||
//
|
||||
//******************************************************************
|
||||
void pmu_trim(u32 force_trim, u32 vddio_tieup_vbat);
|
||||
|
||||
|
||||
//
|
||||
//
|
||||
// soff
|
||||
//
|
||||
//
|
||||
//
|
||||
//******************************************************************
|
||||
|
||||
//p33 soft flag
|
||||
enum soft_flag_io_stage {
|
||||
SOFTFLAG_HIGH_RESISTANCE,
|
||||
SOFTFLAG_PU,
|
||||
SOFTFLAG_PD,
|
||||
|
||||
SOFTFLAG_OUT0,
|
||||
SOFTFLAG_OUT0_HD0,
|
||||
SOFTFLAG_OUT0_HD,
|
||||
SOFTFLAG_OUT0_HD0_HD,
|
||||
|
||||
SOFTFLAG_OUT1,
|
||||
SOFTFLAG_OUT1_HD0,
|
||||
SOFTFLAG_OUT1_HD,
|
||||
SOFTFLAG_OUT1_HD0_HD,
|
||||
|
||||
SOFTFLAG_PU100K,
|
||||
SOFTFLAG_PU1M,
|
||||
SOFTFLAG_PD100K,
|
||||
SOFTFLAG_PD1M,
|
||||
};
|
||||
|
||||
struct app_soft_flag_t {
|
||||
u8 sfc_fast_boot;
|
||||
u8 flash_stable_delay_sel;
|
||||
u8 usbdp;
|
||||
u8 usbdm;
|
||||
u8 pp0;
|
||||
};
|
||||
|
||||
void mask_softflag_config(struct app_soft_flag_t *softflag);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,13 @@
|
||||
#ifndef __POWER_COMPAT_H__
|
||||
#define __POWER_COMPAT_H__
|
||||
|
||||
int cpu_reset_by_soft();
|
||||
|
||||
void wdt_close();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,55 @@
|
||||
#ifndef __POWER_GATE_H__
|
||||
#define __POWER_GATE_H__
|
||||
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
//STPG define bit
|
||||
#define STPG_A 0 //STPG output bit
|
||||
#define STPG_HD0 2 //STPG HD0
|
||||
#define STPG_HD1 3 //STPG HD1
|
||||
#define STPG_OE 4 //STPG output enable bit
|
||||
#define STPG_PD 5 //STPG pull down enable bit
|
||||
#define STPG_PD1 6 //STPG pull down enable bit
|
||||
|
||||
/*
|
||||
*@brief 初始化pg_io送出高阻+低电平的pwm
|
||||
*@param pg_io : 可选IO_LCD_PG, IO_MT_PG
|
||||
*@param freq : pwm的频率
|
||||
*@param duty : pwm的低电平的占空比,0~10000对应0%~100%
|
||||
*@return 0:成功 非0:失败
|
||||
*/
|
||||
int power_gate_pwm_init(u32 pg_io, u32 freq, u32 duty);
|
||||
|
||||
/*
|
||||
*@brief 设置pg_io的pwm的低电平占空比
|
||||
*@param pg_io : 可选IO_LCD_PG, IO_MT_PG
|
||||
*@param duty : pwm的低电平的占空比,0~10000对应0%~100%
|
||||
*/
|
||||
void power_gate_pwm_set_duty(u32 pg_io, u32 duty);
|
||||
|
||||
/*
|
||||
*@brief 关闭pwm, pg_io为高阻
|
||||
*@param pg_io : 可选IO_LCD_PG, IO_MT_PG
|
||||
*/
|
||||
void power_gate_pwm_close(u32 pg_io);
|
||||
|
||||
/*
|
||||
*@brief 设置pg_io的开漏输出
|
||||
*@param pg_io : 可选IO_LCD_PG, IO_MT_PG
|
||||
*@param value : 0,输出低电平 1,则高阻
|
||||
*/
|
||||
void power_gate_open_drain_output(u32 pg_io, u32 value);
|
||||
|
||||
/*
|
||||
*@brief 开启stpg供电
|
||||
*@param ms : ms延时
|
||||
*/
|
||||
void fspg2_poweron(u32 ms);
|
||||
|
||||
/*
|
||||
*@brief 关闭stpg供电
|
||||
*@param ms : ms延时
|
||||
*/
|
||||
void fspg2_poweroff(u32 ms);
|
||||
#endif
|
||||
@@ -0,0 +1,134 @@
|
||||
#ifndef __POWER_PORT_H__
|
||||
#define __POWER_PORT_H__
|
||||
|
||||
//
|
||||
//
|
||||
// FLASH PIN
|
||||
//
|
||||
//
|
||||
//
|
||||
//*****************************************************************************/
|
||||
#define GET_SFC_PORT() ((JL_SFC_IOMC->IOMC0 & BIT(1)) ? 1:0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define _PORT(p) JL_PORT##p
|
||||
#define _PORT_IN(p,b) P##p##b##_IN
|
||||
#define _PORT_OUT(p,b) JL_OMAP->P##p##b##_OUT
|
||||
|
||||
/****************************spi boot *****************************************/
|
||||
#define SPI_PORT(p) _PORT(p)
|
||||
#define SPI0_FUNC_OUT(p,b) _PORT_OUT(p,b)
|
||||
#define SPI0_FUNC_IN(p,b) _PORT_IN(p,b)
|
||||
// | func\port | A | B |
|
||||
// |-----------|------|------|
|
||||
// | VCC | FSPG | |
|
||||
// | CS | PD3 | |
|
||||
// | CLK | PD0 | |
|
||||
// | DO(D0) | PD1 | |
|
||||
// | DI(D1) | PD2 | |
|
||||
// | WP(D2) | PA5 | |
|
||||
// | HOLD(D3) | PA6 | |
|
||||
|
||||
|
||||
//FSPG define bit
|
||||
#define FSPG_A 0 //FSPG output bit
|
||||
#define FSPG_CS_EN 1 //FSPG CS connect enable bit
|
||||
#define FSPG_HD0 2 //FSPG HD0
|
||||
#define FSPG_HD1 3 //FSPG HD1
|
||||
#define FSPG_OE 4 //FSPG output enable bit
|
||||
#define FSPG_PD 5 //FSPG pull down enable bit
|
||||
#define FSPG_PD1 6 //FSPG pull down enable bit
|
||||
#define FSPG_18V 7 //flash supply power domain 1: DCVDD 1.8V; 0: IOVDD;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//group a
|
||||
#define PORT_SPI0_CSA F
|
||||
#define SPI0_CSA 0
|
||||
|
||||
#define PORT_SPI0_CLKA F
|
||||
#define SPI0_CLKA 4
|
||||
|
||||
#define PORT_SPI0_DOA F
|
||||
#define SPI0_DOA 5
|
||||
|
||||
#define PORT_SPI0_DIA F
|
||||
#define SPI0_DIA 1
|
||||
|
||||
#define PORT_SPI0_D2A F
|
||||
#define SPI0_D2A 2
|
||||
|
||||
#define PORT_SPI0_D3A F
|
||||
#define SPI0_D3A 3
|
||||
|
||||
|
||||
//#define SPI0_PWR_A IO_PORTD_04
|
||||
#define SPI0_CS_A IO_PORTF_00
|
||||
#define SPI0_CLK_A IO_PORTF_04
|
||||
#define SPI0_DO_D0_A IO_PORTF_05
|
||||
#define SPI0_DI_D1_A IO_PORTF_01
|
||||
#define SPI0_WP_D2_A IO_PORTF_02
|
||||
#define SPI0_HOLD_D3_A IO_PORTF_03
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//group b
|
||||
#define PORT_SPI0_CSB F
|
||||
#define SPI0_CSB 3
|
||||
|
||||
#define PORT_SPI0_CLKB F
|
||||
#define SPI0_CLKB 1
|
||||
|
||||
#define PORT_SPI0_DOB F
|
||||
#define SPI0_DOB 0
|
||||
|
||||
#define PORT_SPI0_DIB F
|
||||
#define SPI0_DIB 4
|
||||
|
||||
#define PORT_SPI0_D2B F
|
||||
#define SPI0_D2B 5
|
||||
|
||||
#define PORT_SPI0_D3B F
|
||||
#define SPI0_D3B 2
|
||||
|
||||
//#define SPI0_PWR_B IO_PORTD_04
|
||||
#define SPI0_CS_B IO_PORTF_03
|
||||
#define SPI0_CLK_B IO_PORTF_01
|
||||
#define SPI0_DO_D0_B IO_PORTF_00
|
||||
#define SPI0_DI_D1_B IO_PORTF_04
|
||||
#define SPI0_WP_D2_B IO_PORTF_05
|
||||
#define SPI0_HOLD_D3_B IO_PORTF_02
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//
|
||||
//
|
||||
// PSRAM
|
||||
//
|
||||
//
|
||||
//
|
||||
//*****************************************************************************/
|
||||
#define PSRAM_CS IO_PORTC_06
|
||||
#define PSRAM_CLK IO_PORTC_05
|
||||
#define PSRAM_D0A IO_PORTC_09
|
||||
#define PSRAM_D1A IO_PORTC_07
|
||||
#define PSRAM_D2A IO_PORTC_08
|
||||
#define PSRAM_D3A IO_PORTC_04
|
||||
|
||||
#define PINR_DEFAULT_IO IO_PORTB_07
|
||||
|
||||
#define MCLR_PORT IO_PORTB_06
|
||||
|
||||
//A B C F P USB
|
||||
#define PORT_TABLE(arg) u32 gpio_confi##arg[6] = {0xffff, 0xffff,0xffff, 0xffff, 0xffff, 0xffff}
|
||||
|
||||
void port_protect(u32 *gpio_config, u32 gpio);
|
||||
|
||||
#define PORT_PROTECT(gpio) port_protect(gpio_config, gpio)
|
||||
|
||||
void init_boot_rom();
|
||||
u8 get_boot_rom();
|
||||
|
||||
void *__port_init(u32 arg);
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,42 @@
|
||||
#ifndef __POWER_INTERFACE_H__
|
||||
#define __POWER_INTERFACE_H__
|
||||
|
||||
#include "generic/typedef.h"
|
||||
#include "gpio.h"
|
||||
|
||||
//-------------------------------------------------------
|
||||
/* p33
|
||||
*/
|
||||
#include "power/p33/p33_sfr.h"
|
||||
#include "power/p33/p33_access.h"
|
||||
#include "power/p33/charge_hw.h"
|
||||
#include "power/p33/p33_api.h"
|
||||
#include "power/wdt.h"
|
||||
|
||||
//-------------------------------------------------------
|
||||
/* p11
|
||||
*/
|
||||
#include "power/p11/p11_csfr.h"
|
||||
#include "power/p11/p11_sfr.h"
|
||||
#include "power/p11/p11_mmap.h"
|
||||
#include "power/p11/p11_api.h"
|
||||
#include "power/p11/lp_ipc.h"
|
||||
#include "power/p11/ipc_spin_lock.h"
|
||||
|
||||
|
||||
//-------------------------------------------------------
|
||||
/* power
|
||||
*/
|
||||
#include "power/power_api.h"
|
||||
#include "power/power_wakeup.h"
|
||||
#include "power/power_reset.h"
|
||||
#include "power/power_port.h"
|
||||
#include "power/power_gate.h"
|
||||
|
||||
//-------------------------------------------------------
|
||||
/* other
|
||||
*/
|
||||
#include "power/power_app.h"
|
||||
#include "power/power_compat.h"
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,119 @@
|
||||
#ifndef __PSRAM_API_H__
|
||||
#define __PSRAM_API_H__
|
||||
|
||||
|
||||
enum PSRAM_PORT_SEL_TABLE {
|
||||
PSRAM_PORT_SEL_PORTA = 0,
|
||||
};
|
||||
|
||||
enum PSRAM_MODE_SEL_TABLE {
|
||||
PSRAM_MODE_1_WIRE = 0,
|
||||
PSRAM_MODE_4_WIRE_CMD1_ADR4_DAT4,
|
||||
PSRAM_MODE_4_WIRE_CMD4_ADR4_DAT4,
|
||||
};
|
||||
|
||||
|
||||
enum psram_power_status {
|
||||
PSRAM_STATE_POWER_OFF,
|
||||
PSRAM_STATE_POWER_ON,
|
||||
PSRAM_STATE_POWER_STANDBY,
|
||||
};
|
||||
|
||||
struct psram_platform_data {
|
||||
u8 power_port;
|
||||
enum PSRAM_PORT_SEL_TABLE port;
|
||||
enum PSRAM_MODE_SEL_TABLE mode;
|
||||
u32 init_clk;
|
||||
};
|
||||
|
||||
#define PSRAM_PLATFORM_DATA_BEGIN(data) \
|
||||
static const struct psram_platform_data data = {
|
||||
|
||||
#define PSRAM_PLATFORM_DATA_END() \
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
/**
|
||||
* @brief 获取psram在使用的buf数量
|
||||
*
|
||||
* @return psram在使用的buf数量
|
||||
*/
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
extern u32 psram_get_used_block(void);
|
||||
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
/**
|
||||
* @brief psram heap reset
|
||||
*/
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
extern void psram_heap_reset(void);
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief psram_flush_cache
|
||||
*
|
||||
* @param begin
|
||||
* @param len
|
||||
*/
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
void psram_flush_cache(void *begin, u32 len);
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief psram_flush_invaild_cache
|
||||
*
|
||||
* @param begin
|
||||
* @param len
|
||||
*/
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
void psram_flush_invaild_cache(void *begin, u32 len);
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief psram_init psram初始化
|
||||
*
|
||||
* @param config
|
||||
*/
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
void psram_init(const struct psram_platform_data *config);
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief :检查mem是否psram cache地址
|
||||
*
|
||||
* @param mem :检查对象
|
||||
*
|
||||
* @return :true - psram地址,false - 非psram地址
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
int psram_cache_check(void *pv);
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief :检查mem是否psram no cache地址
|
||||
*
|
||||
* @param mem :检查对象
|
||||
*
|
||||
* @return :true - psram地址,false - 非psram地址
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
int psram_no_cache_check(void *pv);
|
||||
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief :psram no cache地址转换为cache地址
|
||||
*
|
||||
* @param mem :检查对象
|
||||
*
|
||||
* @return :非0- psram cahce地址,NULL - 非psram地址
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
void *psram_no_cache_2_cache(void *pv);
|
||||
/* --------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief :psram cache地址转换为no cache地址
|
||||
*
|
||||
* @param mem :检查对象
|
||||
*
|
||||
* @return :非0- psram no cahce地址,NULL - 非psram地址
|
||||
*/
|
||||
/* ----------------------------------------------------------------------------*/
|
||||
void *psram_cache_2_no_cache(void *pv);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,35 @@
|
||||
#ifndef _RDEC_HW_H
|
||||
#define _RDEC_HW_H
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
typedef JL_QDEC_TypeDef RDEC;
|
||||
#define RDEC0 JL_QDEC0
|
||||
|
||||
#define RDEC_MAX_NUM 1
|
||||
#define RDEC_REG_BASE_ADDR JL_QDEC0
|
||||
#define RDEC_REG_OFFSET 0
|
||||
#define IRQ_RDECx_IDX_LIST IRQ_QDEC0_IDX
|
||||
|
||||
|
||||
//RDECx_CON reg
|
||||
#define RDEC_SPND 16 //bit16~bit31
|
||||
// #define RDEC_RESERVED 11 //bit11~bit15
|
||||
#define RDEC_INT_MODE 10
|
||||
#define RDEC_MODE 8 //bit8~bit9
|
||||
#define RDEC_PND 7
|
||||
#define RDEC_CPND 6
|
||||
// #define RDEC_RESERVED 2 //bit2~bit5
|
||||
#define RDEC_POL 1
|
||||
#define RDEC_EN 0
|
||||
|
||||
//RDECx_SMP 8bit
|
||||
//RDECx_DAT 8bit
|
||||
//RDECx_DBE 8bit
|
||||
|
||||
typedef enum : u8 {
|
||||
RDEC_0 = 0,
|
||||
RDEC_x,
|
||||
} rdec_dev;
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,48 @@
|
||||
#ifndef ARCH_SDMMC_H
|
||||
#define ARCH_SDMMC_H
|
||||
|
||||
|
||||
#include "device/sdmmc/sdmmc.h"
|
||||
|
||||
struct sdmmc_platform_data {
|
||||
char port[6];
|
||||
u8 irq;
|
||||
u8 data_width;
|
||||
u8 priority;
|
||||
u8 detect_mode;
|
||||
u8 detect_io;
|
||||
u8 detect_io_level;
|
||||
u8 detect_time_interval;
|
||||
u32 detect_timeout;
|
||||
u32 speed;
|
||||
volatile u16 *sfr;
|
||||
int (*detect_func)(const struct sdmmc_platform_data *);
|
||||
void (*port_init)(const struct sdmmc_platform_data *, int mode);
|
||||
void (*power)(u8 on);
|
||||
};
|
||||
|
||||
#define SD0_PLATFORM_DATA_BEGIN(data) \
|
||||
static const struct sdmmc_platform_data data
|
||||
|
||||
|
||||
#define SD0_PLATFORM_DATA_END() \
|
||||
.irq = IRQ_SD0_IDX, \
|
||||
.sfr = (volatile u16 *)JL_SD0, \
|
||||
.port_init = sdmmc_0_port_init, \
|
||||
.detect_time_interval = 250, \
|
||||
.detect_timeout = 1000, \
|
||||
|
||||
extern const struct device_operations sd_dev_ops;
|
||||
|
||||
void sdmmc_0_port_init(const struct sdmmc_platform_data *, int mode);
|
||||
|
||||
int sdmmc_0_clk_detect(const struct sdmmc_platform_data *);
|
||||
int sdmmc_0_io_detect(const struct sdmmc_platform_data *);
|
||||
int sdmmc_0_cmd_detect(const struct sdmmc_platform_data *);
|
||||
int sdmmc_cmd_detect(const struct sdmmc_platform_data *data);
|
||||
|
||||
void sd_set_power(u8 enable);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
#ifndef _SFC1_INTERFACE_H_
|
||||
#define _SFC1_INTERFACE_H_
|
||||
#include "typedef.h"
|
||||
#include "generic/ioctl.h"
|
||||
|
||||
enum SFC_DATA_WIDTH {
|
||||
SFC_DATA_WIDTH_2 = 2,
|
||||
SFC_DATA_WIDTH_4 = 4,
|
||||
};
|
||||
|
||||
enum SFC_READ_MODE {
|
||||
SFC_RD_OUTPUT = 0,
|
||||
SFC_RD_IO,
|
||||
SFC_RD_IO_CONTINUE,
|
||||
};
|
||||
|
||||
struct sfc_spi_platform_data {
|
||||
// u8 spi_hw_index;
|
||||
enum SFC_DATA_WIDTH sfc_data_width;
|
||||
enum SFC_READ_MODE sfc_read_mode;
|
||||
// u8 sfc_encry; //是否加密
|
||||
// u16 sfc_clk_div; //时钟分频: sfc_fre = sys_clk / div;
|
||||
// u32 unencry_start_addr; //不加密起始地址
|
||||
// u32 unencry_size; //不加密大小
|
||||
};
|
||||
|
||||
#define SFC_SPI_PLATFORM_DATA_BEGIN(data) \
|
||||
const struct sfc_spi_platform_data data = {
|
||||
|
||||
#define SFC_SPI_PLATFORM_DATA_END() \
|
||||
};
|
||||
|
||||
|
||||
#endif /* #ifndef _SFC1_INTERFACE_H_ */
|
||||
@@ -0,0 +1,28 @@
|
||||
#ifndef _SPI_HW_H_
|
||||
#define _SPI_HW_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "generic/ioctl.h"
|
||||
|
||||
#define SUPPORT_SPI0 0 //是否使能SPI0
|
||||
#define SUPPORT_SPI1 1 //是否使能SPI1
|
||||
#define SPI1_SUPPORT_UNIDIR_4BIT 1 //spi 4bit
|
||||
#define SUPPORT_SPI2 1 //是否使能spi2
|
||||
#define SPI2_SUPPORT_UNIDIR_4BIT 1 //spi 4bit
|
||||
|
||||
#define HW_SPI_MAX_NUM 3
|
||||
typedef enum spi_index {
|
||||
HW_SPI0, //SPI0系统已使用
|
||||
HW_SPI1,
|
||||
HW_SPI2,
|
||||
} hw_spi_dev;
|
||||
|
||||
enum spi_bit_mode {
|
||||
SPI_FIRST_BIT_MSB, //7,6,5,4,3,2,1,0
|
||||
SPI_FIRST_BIT_LSB, //0,1,2,3,4,5,6,7
|
||||
SPI_FIRST_BIT_BIT3, //3,2,1,0,7,6,5,4
|
||||
SPI_FIRST_BIT_BIT4, //4,5,6,7,0,1,2,3
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
#ifndef ASM_SPIFLASH_H
|
||||
#define ASM_SPIFLASH_H
|
||||
|
||||
|
||||
|
||||
#include "device/device.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern const struct device_operations spiflash_dev_ops;
|
||||
extern const struct device_operations sfcflash_dev_ops;
|
||||
extern const struct device_operations sdfile_dev_ops;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
#ifndef _USB_HW_H_
|
||||
#define _USB_HW_H_
|
||||
#include "typedef.h"
|
||||
//#include "generic/ioctl.h"
|
||||
|
||||
|
||||
#define USB_MAX_HW_EPNUM 5
|
||||
|
||||
/* #define ep_regs JL_USB_EP_TypeDef */
|
||||
typedef struct {
|
||||
volatile u32 TXMAXP;
|
||||
volatile u32 TXCSR1;
|
||||
volatile u32 TXCSR2;
|
||||
volatile u32 RXMAXP;
|
||||
volatile u32 RXCSR1;
|
||||
volatile u32 RXCSR2;
|
||||
volatile const u32 RXCOUNT1;
|
||||
volatile const u32 RXCOUNT2;
|
||||
volatile u32 TXTYPE;
|
||||
volatile u32 TXINTERVAL;
|
||||
volatile u32 RXTYPE;
|
||||
volatile u32 RXINTERVAL;
|
||||
u32 RESERVED[0xd0 / 4];
|
||||
} ep_regs;
|
||||
|
||||
|
||||
|
||||
//USB_CON0 register
|
||||
// #define RESERVED 0
|
||||
#define LOW_SPEED 1
|
||||
#define USB_NRST 2
|
||||
#define TM1 3
|
||||
#define CID 4
|
||||
#define VBUS 5
|
||||
#define KEEP_DPLL 6
|
||||
// #define RESERVED 7~9
|
||||
#define SOFIE 10
|
||||
#define SIEIE 11
|
||||
#define CLR_SOF 12
|
||||
#define SOF_PND 13
|
||||
#define SIE_PND 14
|
||||
// #define RESERVED 15~17
|
||||
#define LOWP_MD_ 18
|
||||
#define RST_STL 19
|
||||
#define EP1_DISABLE 20
|
||||
#define EP2_DISABLE 21
|
||||
#define EP3_DISABLE 22
|
||||
#define EP4_DISABLE 23
|
||||
#define EP1_RLIM_EN 24
|
||||
#define EP2_RLIM_EN 25
|
||||
#define EP3_RLIM_EN 26
|
||||
#define EP4_RLIM_EN 27
|
||||
#define TX_BLOCK_EN 28
|
||||
// #define RESERVED 29~31
|
||||
|
||||
|
||||
//USB_CON1 register
|
||||
#define EP1_MTX_EN 0
|
||||
#define EP1_MRX_EN 1
|
||||
#define EP1_MTX_PND_CLR 2
|
||||
#define EP1_MRX_PND_CLR 3
|
||||
#define EP1_MTX_PND 4
|
||||
#define EP1_MRX_PND 5
|
||||
// #define RESERVED 6~31
|
||||
|
||||
|
||||
//USB_TXDLY_CON register
|
||||
#define CLK_DIS 0
|
||||
#define CLR_PND 1
|
||||
#define TXDLY_PND 2
|
||||
// #define RESERVED 3~15
|
||||
#define USB_TXDLY_CON(x) SFR(JL_USB->TXDLY_CON, 16, 16, x)
|
||||
|
||||
#define USB_EP1_RX_LEN(x) SFR(JL_USB->EP1_RLEN, 0, 11, x)
|
||||
#define USB_EP2_RX_LEN(x) SFR(JL_USB->EP2_RLEN, 0, 11, x)
|
||||
#define USB_EP3_RX_LEN(x) SFR(JL_USB->EP3_RLEN, 0, 11, x)
|
||||
#define USB_EP4_RX_LEN(x) SFR(JL_USB->EP4_RLEN, 0, 11, x)
|
||||
|
||||
#define USB_EP1_MTX_PRD(x) SFR(JL_USB->EP1_MTX_PRD, 0, 8, x)
|
||||
#define USB_EP1_MTX_NUM(x) SFR(JL_USB->EP1_MTX_NUM, 0, 8, x)
|
||||
#define USB_EP1_MRX_PRD(x) SFR(JL_USB->EP1_MRX_PRD, 0, 8, x)
|
||||
#define USB_EP1_MRX_NUM(x) SFR(JL_USB->EP1_MRX_NUM, 0, 8, x)
|
||||
|
||||
//JL_PORTUSB->CON register
|
||||
#define RCVEN 0
|
||||
// #define RESERVED 1
|
||||
#define SR0 2
|
||||
// #define RESERVED 3
|
||||
#define PDCHKDP 4
|
||||
// #define RESERVED 5
|
||||
#define DIDF 6
|
||||
#define CHKDPO 7
|
||||
#define IO_MODE 8
|
||||
// #define RESERVED 9~10
|
||||
#define DBG_SEL 11 //2bit
|
||||
// #define RESERVED 13~31
|
||||
|
||||
|
||||
|
||||
enum {
|
||||
USB0,
|
||||
};
|
||||
#define USB_MAX_HW_NUM 1
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef ___WDT_H__
|
||||
#define ___WDT_H__
|
||||
|
||||
#include "asm/power_interface.h"
|
||||
|
||||
#endif
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user