在 ESP32 藍牙(Bluetooth)的內置GAP(Generic Access Profile)的 API 函數,GAP 保證在不同的藍牙產品可以互相發現對方並建立連接,並且定義了藍牙設備如何發現和建立與其他設備的安全/不安全連接,它處理一些一般模式的業務(如詢問、命名和搜索)和一些安全性問題(如擔保),同時還處理一些有關連接的業務(如鏈路建立、通道和連接建立),GAP 規定的是一些一般性的運行任務;因此,它具有強制性,並作為所有其它藍牙應用規範的基礎。
藍牙 GAP(Generic Access Profile) |
功能 - esp_bt_gap_get_cod_srvc
原型:uint32_t esp_bt_gap_get_cod_srvc(uint32_t cod)
參數:cod: Class of Device
返回:major service bits
說明:get major service field of COD
範例:uint32_t cod = 0;
esp_bt_gap_get_cod_srvc(cod);
功能 - esp_bt_gap_get_cod_major_dev
原型:uint32_t esp_bt_gap_get_cod_major_dev(uint32_t cod)
參數:cod: Class of Device
返回:major device bits
說明:get major device field of COD
範例:
功能 - esp_bt_gap_get_cod_minor_dev
原型:uint32_t esp_bt_gap_get_cod_minor_dev(uint32_t cod)
參數:cod: Class of Device
返回:minor service bits
說明:get minor service field of COD
範例:
功能 - esp_bt_gap_get_cod_format_type
原型:uint32_t esp_bt_gap_get_cod_format_type(uint32_t
cod)
參數:cod: Class of Device
返回:format type
說明:get format type of COD
範例:
功能 - esp_bt_gap_is_valid_cod
原型:bool esp_bt_gap_is_valid_cod(uint32_t cod)
參數:cod: Class of Device
返回:true if cod is valid
false otherise
說明:decide the integrity of COD
範例:uint32_t cod = 0;
esp_bt_gap_is_valid_cod(cod)
功能 - esp_bt_gap_register_callback
原型:esp_err_t
esp_bt_gap_register_callback(esp_bt_gap_cb_t callback)
參數:
返回:ESP_OK : Succeed
ESP_FAIL: others
說明:register callback function. This function should be
called after esp_bluedroid_enable() completes successfully
範例:esp_bt_gap_register_callback(bt_app_gap_cb);
功能 - esp_bt_gap_set_scan_mode
原型:esp_err_t esp_bt_gap_set_scan_mode(esp_bt_scan_mode_t
mode)
參數:mode: : one of the enums of bt_scan_mode_t
返回:ESP_OK : Succeed
ESP_ERR_INVALID_ARG: if argument invalid
ESP_ERR_INVALID_STATE: if bluetooth stack
is not yet enabled
ESP_FAIL: others
說明:Set discoverability and connectability mode for
legacy bluetooth. This function should be called after esp_bluedroid_enable()
completes successfully.
範例:esp_bt_gap_set_scan_mode(ESP_BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE);
esp_bt_gap_set_scan_mode(ESP_BT_SCAN_MODE_NONE);
功能 - esp_bt_gap_start_discovery
原型:esp_err_t
esp_bt_gap_start_discovery(esp_bt_inq_mode_t mode, uint8_t inq_len, uint8_t
num_rsps)
參數:mode: - inquiry mode
inq_len: - inquiry duration in 1.28 sec
units, ranging from 0x01 to 0x30
num_rsps: - number of inquiry responses
that can be received, value 0 indicates an unlimited number of responses
返回:ESP_OK : Succeed
ESP_ERR_INVALID_STATE: if bluetooth stack
is not yet enabled
ESP_ERR_INVALID_ARG: if invalid parameters
are provided
ESP_FAIL: others
說明:Start device discovery. This function should be
called after esp_bluedroid_enable() completes successfully. esp_bt_gap_cb_t
will is called with ESP_BT_GAP_DISC_STATE_CHANGED_EVT if discovery is started
or halted. esp_bt_gap_cb_t will is called with ESP_BT_GAP_DISC_RES_EVT if
discovery result is got.
範例:esp_bt_gap_start_discovery(ESP_BT_INQ_MODE_GENERAL_INQUIRY,
10, 0);
功能 - esp_bt_gap_cancel_discovery
原型:esp_err_t esp_bt_gap_cancel_discovery(void)
參數:
返回:ESP_OK : Succeed
ESP_ERR_INVALID_STATE: if bluetooth stack
is not yet enabled
ESP_FAIL: others
說明:Cancel device discovery. This function should be
called after esp_bluedroid_enable() completes successfully esp_bt_gap_cb_t will
is called with ESP_BT_GAP_DISC_STATE_CHANGED_EVT if discovery is stopped.
範例:esp_bt_gap_cancel_discovery();
功能 - esp_bt_gap_get_remote_services
原型:esp_err_t
esp_bt_gap_get_remote_services(esp_bd_addr_t remote_bda)
參數:
返回:ESP_OK : Succeed
ESP_ERR_INVALID_STATE: if bluetooth stack
is not yet enabled
ESP_FAIL: others
說明:Start SDP to get remote services. This function
should be called after esp_bluedroid_enable() completes successfully.
esp_bt_gap_cb_t will is called with ESP_BT_GAP_RMT_SRVCS_EVT after service
discovery ends.
範例:
功能 - esp_bt_gap_get_remote_service_record
原型:esp_err_t
esp_bt_gap_get_remote_service_record(esp_bd_addr_t remote_bda, esp_bt_uuid_t
*uuid)
參數:
返回:ESP_OK : Succeed
ESP_ERR_INVALID_STATE: if bluetooth stack
is not yet enabled
ESP_FAIL: others
說明:Start SDP to look up the service matching uuid on
the remote device. This function should be called after esp_bluedroid_enable()
completes successfully.
esp_bt_gap_cb_t will is called with ESP_BT_GAP_RMT_SRVC_REC_EVT after
service discovery ends
範例:
功能 - *esp_bt_gap_resolve_eir_data
原型:uint8_t *esp_bt_gap_resolve_eir_data(uint8_t *eir,
esp_bt_eir_type_t type, uint8_t *length)
參數:eir: - pointer of raw eir data to be resolved
type:
- specific EIR data type
length: - return the length of EIR data
excluding fields of length and data type
返回:pointer of starting position of eir data excluding
eir data type, NULL if not found
說明:This function is called to get EIR data for a
specific type.
範例:uint8_t *rmt_bdname = NULL;
uint8_t rmt_bdname_len = 0;
rmt_bdname =
esp_bt_gap_resolve_eir_data(eir, ESP_BT_EIR_TYPE_CMPL_LOCAL_NAME,
&rmt_bdname_len);
功能 - esp_bt_gap_set_cod
原型:esp_err_t esp_bt_gap_set_cod(esp_bt_cod_t cod,
esp_bt_cod_mode_t mode)
參數:cod: - class of device
mode: - setting mode
返回:ESP_OK : Succeed
ESP_ERR_INVALID_STATE: if bluetooth stack
is not yet enabled
ESP_ERR_INVALID_ARG: if param is invalid
ESP_FAIL: others
說明:This function is called to set class of device.
esp_bt_gap_cb_t will is called with ESP_BT_GAP_SET_COD_EVT after set COD ends
Some profile have special restrictions on class of device, changes may cause
these profile do not work.
範例:
功能 - esp_bt_gap_get_cod
原型:esp_err_t esp_bt_gap_get_cod(esp_bt_cod_t *cod)
參數:cod: - class of device
返回:ESP_OK : Succeed
ESP_FAIL: others
說明:This function is called to get class of device.
範例:
功能 - esp_bt_gap_read_rssi_delta
原型:esp_err_t esp_bt_gap_read_rssi_delta(esp_bd_addr_t
remote_addr)
參數:remote_addr: - remote device address, corresponding
to a certain connection handle.
返回:ESP_OK : Succeed
ESP_FAIL: others
說明:This function is called to read RSSI delta by
address after connected. The RSSI value returned by
ESP_BT_GAP_READ_RSSI_DELTA_EVT.
範例:
功能 - esp_bt_gap_remove_bond_device
原型:esp_err_t
esp_bt_gap_remove_bond_device(esp_bd_addr_t bd_addr)
參數:bd_addr: : BD address of the peer device
返回:ESP_OK : success
ESP_FAIL : failed
說明:Removes a device from the security database list of
peer device.
範例:
功能 - pcnt_isr_service_uninstall
原型:int esp_bt_gap_get_bond_device_num(void)
參數:
返回:- >= 0 : bonded devices number.
ESP_FAIL : failed
說明:Get the device number from the security database
list of peer device. It will return the device bonded number immediately.
範例:
功能 - esp_bt_gap_get_bond_device_list
原型:esp_err_t esp_bt_gap_get_bond_device_list(int
*dev_num, esp_bd_addr_t *dev_list)
參數:dev_num: Indicate the dev_list array(buffer) size
as input. If dev_num is large enough, it means the actual number as output.
Suggest that dev_num value equal to esp_ble_get_bond_device_num().
dev_list: an array(buffer) of esp_bd_addr_t
type. Use for storing the bonded devices address. The dev_list should be allocated
by who call this API.
返回:ESP_OK : Succeed
ESP_ERR_INVALID_STATE: if bluetooth stack
is not yet enabled
ESP_FAIL: others
說明:Get the device from the security database list of
peer device. It will return the device bonded information immediately.
範例:
功能 - esp_bt_gap_set_pin
原型:esp_err_t esp_bt_gap_set_pin(esp_bt_pin_type_t
pin_type, uint8_t pin_code_len, esp_bt_pin_code_t pin_code)
參數:pin_type: Use variable or fixed pin. If pin_type is
ESP_BT_PIN_TYPE_VARIABLE, pin_code and pin_code_len will be ignored, and
ESP_BT_GAP_PIN_REQ_EVT will come when control requests for pin code. Else, will
use fixed pin code and not callback to users.
pin_code_len: Length of pin_code
pin_code: Pin_code
返回:ESP_OK : success
ESP_ERR_INVALID_STATE: if bluetooth stack is
not yet enabled
other : failed
說明:Set pin type and default pin code for legacy
pairing.
範例:esp_bt_pin_type_t pin_type =
ESP_BT_PIN_TYPE_VARIABLE;
esp_bt_pin_code_t pin_code;
esp_bt_gap_set_pin(pin_type,
0, pin_code);
功能 - esp_bt_gap_pin_reply
原型:esp_err_t esp_bt_gap_pin_reply(esp_bd_addr_t
bd_addr, bool accept, uint8_t pin_code_len, esp_bt_pin_code_t pin_code)
參數:bd_addr: BD address of the peer
accept: Pin_code reply successful or
declined.
pin_code_len: Length of pin_code
pin_code: Pin_code
返回:ESP_OK : success
ESP_ERR_INVALID_STATE: if bluetooth stack is
not yet enabled
other : failed
說明:Reply the pin_code to the peer device for legacy
pairing when ESP_BT_GAP_PIN_REQ_EVT is coming.
範例:esp_bt_pin_code_t pin_code;
esp_bt_gap_pin_reply(param->pin_req.bda, true, 16, pin_code);
功能 - esp_bt_gap_set_security_param
原型:esp_err_t esp_bt_gap_set_security_param(esp_bt_sp_param_t
param_type, void *value, uint8_t len)
參數:param_type: : the type of the param which is to be
set
value: : the param value
len: : the length of the param value
返回:ESP_OK : success
ESP_ERR_INVALID_STATE: if bluetooth stack is
not yet enabled
other : failed
說明:Set a GAP security parameter value.
Overrides the default value.
範例:esp_bt_gap_set_security_param(param_type,
&iocap, sizeof(uint8_t));
功能 - esp_bt_gap_ssp_passkey_reply
原型:esp_err_t esp_bt_gap_ssp_passkey_reply(esp_bd_addr_t
bd_addr, bool accept, uint32_t passkey)
參數:bd_addr: : BD address of the peer
accept: : passkey entry successful or
declined.
passkey: : passkey value, must be a 6 digit
number, can be lead by 0.
返回:ESP_OK : success
ESP_ERR_INVALID_STATE: if bluetooth
stack is not yet enabled
other : failed
說明:Reply the key value to the peer device in the
legacy connection stage.
範例:
功能 - esp_bt_gap_ssp_confirm_reply
原型:esp_err_t esp_bt_gap_ssp_confirm_reply(esp_bd_addr_t
bd_addr, bool accept)
參數:bd_addr: : BD address of the peer device
accept: : numbers to compare are the same
or different.
返回:ESP_OK : success
ESP_ERR_INVALID_STATE: if bluetooth stack
is not yet enabled
other
: failed
說明:Reply the confirm value to the peer device in the
legacy connection stage.
範例:esp_bt_gap_ssp_confirm_reply(param->cfm_req.bda,
true);
Header File:bt/bluedroid/api/include/api/esp_gap_bt_api.h
參考網址:https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/bluetooth/esp_gap_bt.html
2019年 1月 25日 天氣報告
氣溫:16.9度 @ 20:40
相對濕度:百分之 74%
天氣:天色良好
沒有留言:
張貼留言