当前位置:网站首页>Introduction to esp32 Bluetooth controller API
Introduction to esp32 Bluetooth controller API
2022-04-23 01:50:00 【Wireless_ Link】
Preface :
This article mainly introduces ESP32 bluetooth controller Of API, Through this article, you will gain the following :
1)ESP32 Bluetooth architecture
2)ESP32 bluetooth controller API Use
zero . Statement
We will continue to update this column in serial form , This column plans to update as follows :
Chapter one :ESP-IDF Basic introduction , It mainly involves modules , chip , Introduction to the development board , Environment building , Program compilation and download , Start the process and other basic operations , Make you right ESP-IDF Development has an overall understanding , Lay a foundation for our follow-up study !
Second articles :ESP32-IDF Introduction to peripheral drivers , Mainly based on esp-idf The existing driver, Provide drivers for various peripherals , such as LED,OLED,SPI LCD,TOUCH, infrared ,Codec ic wait , In this article , We're not just doing peripheral drivers , It will also introduce the commonly used peripheral bus , Let everyone know what it is and why !
Third articles : At present, it is quite hot GUI LVGL Introduce , Mainly design LVGL7.1,LVGL8 Introduction to migration of , It will also introduce various components , After knowing the principle , Last , We will launch a configuration software to build our GUI, To improve our efficiency !
Fourth articles :ESP32- bluetooth , Familiar with my , We should all know , Even if I am engaged in the development of Bluetooth protocol stack , So this is our unique advantage , In this chapter , We will provide more than just knowledge of Bluetooth application methods , It will also apply the theory of combining Bluetooth underlying protocol stack , Let you completely get through the Bluetooth Ren Du pulse from top to bottom !
Chapter five :Wi-Fi Introduce , Familiar with my , I should know , We also made one sdio wifi Driving tutorial board , So in wifi We also have unique advantages in this regard , In this chapter , We also don't just offer Wi-Fi Knowledge of application , It will also be combined with the underlying theory , Make you right Wi-Fi There's a clear perception !
in addition , Our tutorial includes but is not limited to the above chapters , To give you a better navigation , The following information is particularly important , Please check in detail !!
------------------------------------------------------------------------------------------------------------------------------------------
Buy development boards ( Click on the I )
Document directory ( Click on the I )
Github Code warehouse ( Click on the I )
Bluetooth AC button group :539357317
WeChat official account ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
------------------------------------------------------------------------------------------------------------------------------------------
One . summary
In the previous chapter , We saw it ESP32 Bluetooth architecture , As shown in the figure below
Let's introduce Bluetooth in this chapter controller dependent API,API The document links are as follows :
Controller && VHCI - ESP32 - — ESP-IDF Programming Guide v4.4.1 file
Unfortunately :ESP32 Not open Controller Of source code, So we can only see API docu!
Two . API Introduce
controller Part of the API stay bt/include/esp32/include/esp_bt.h In file
esp_err_t esp_ble_tx_power_set (esp_ble_power_type_t power_type, esp_power_level_t power_level)
effect : Set up BLE Of tx power, Divided into radio / Search for / Connected , Connected TX power Can only be used after connection
Parameters 1: power_type tx power The type of |
typedef enum { ESP_BLE_PWR_TYPE_CONN_HDL0 = 0, /*!< For connection handle 0 */ ESP_BLE_PWR_TYPE_CONN_HDL1 = 1, /*!< For connection handle 1 */ ESP_BLE_PWR_TYPE_CONN_HDL2 = 2, /*!< For connection handle 2 */ ESP_BLE_PWR_TYPE_CONN_HDL3 = 3, /*!< For connection handle 3 */ ESP_BLE_PWR_TYPE_CONN_HDL4 = 4, /*!< For connection handle 4 */ ESP_BLE_PWR_TYPE_CONN_HDL5 = 5, /*!< For connection handle 5 */ ESP_BLE_PWR_TYPE_CONN_HDL6 = 6, /*!< For connection handle 6 */ ESP_BLE_PWR_TYPE_CONN_HDL7 = 7, /*!< For connection handle 7 */ ESP_BLE_PWR_TYPE_CONN_HDL8 = 8, /*!< For connection handle 8 */ ESP_BLE_PWR_TYPE_ADV = 9, /*!< For advertising */ ESP_BLE_PWR_TYPE_SCAN = 10, /*!< For scan */ ESP_BLE_PWR_TYPE_DEFAULT = 11, /*!< For default, if not set other, it will use default value */ ESP_BLE_PWR_TYPE_NUM = 12, /*!< TYPE numbers */ } esp_ble_power_type_t; |
Parameters 2: power_level tx power The level of |
typedef enum { ESP_PWR_LVL_N12 = 0, /*!< Corresponding to -12dbm */ ESP_PWR_LVL_N9 = 1, /*!< Corresponding to -9dbm */ ESP_PWR_LVL_N6 = 2, /*!< Corresponding to -6dbm */ ESP_PWR_LVL_N3 = 3, /*!< Corresponding to -3dbm */ ESP_PWR_LVL_N0 = 4, /*!< Corresponding to 0dbm */ ESP_PWR_LVL_P3 = 5, /*!< Corresponding to +3dbm */ ESP_PWR_LVL_P6 = 6, /*!< Corresponding to +6dbm */ ESP_PWR_LVL_P9 = 7, /*!< Corresponding to +9dbm */ ESP_PWR_LVL_N14 = ESP_PWR_LVL_N12, /*!< Backward compatibility! Setting to -14dbm will actually result to -12dbm */ ESP_PWR_LVL_N11 = ESP_PWR_LVL_N9, /*!< Backward compatibility! Setting to -11dbm will actually result to -9dbm */ ESP_PWR_LVL_N8 = ESP_PWR_LVL_N6, /*!< Backward compatibility! Setting to -8dbm will actually result to -6dbm */ ESP_PWR_LVL_N5 = ESP_PWR_LVL_N3, /*!< Backward compatibility! Setting to -5dbm will actually result to -3dbm */ ESP_PWR_LVL_N2 = ESP_PWR_LVL_N0, /*!< Backward compatibility! Setting to -2dbm will actually result to 0dbm */ ESP_PWR_LVL_P1 = ESP_PWR_LVL_P3, /*!< Backward compatibility! Setting to +1dbm will actually result to +3dbm */ ESP_PWR_LVL_P4 = ESP_PWR_LVL_P6, /*!< Backward compatibility! Setting to +4dbm will actually result to +6dbm */ ESP_PWR_LVL_P7 = ESP_PWR_LVL_P9, /*!< Backward compatibility! Setting to +7dbm will actually result to +9dbm */ } esp_power_level_t; |
Return value : esp_err_t |
typedef int esp_err_t; /* Definitions for error constants. */ #define ESP_OK 0 /*!< esp_err_t value indicating success (no error) */ #define ESP_FAIL -1 /*!< Generic esp_err_t code indicating failure */ #define ESP_ERR_NO_MEM 0x101 /*!< Out of memory */ #define ESP_ERR_INVALID_ARG 0x102 /*!< Invalid argument */ #define ESP_ERR_INVALID_STATE 0x103 /*!< Invalid state */ #define ESP_ERR_INVALID_SIZE 0x104 /*!< Invalid size */ #define ESP_ERR_NOT_FOUND 0x105 /*!< Requested resource not found */ #define ESP_ERR_NOT_SUPPORTED 0x106 /*!< Operation or feature not supported */ #define ESP_ERR_TIMEOUT 0x107 /*!< Operation timed out */ #define ESP_ERR_INVALID_RESPONSE 0x108 /*!< Received response was invalid */ #define ESP_ERR_INVALID_CRC 0x109 /*!< CRC or checksum was invalid */ #define ESP_ERR_INVALID_VERSION 0x10A /*!< Version was invalid */ #define ESP_ERR_INVALID_MAC 0x10B /*!< MAC address was invalid */ #define ESP_ERR_WIFI_BASE 0x3000 /*!< Starting number of WiFi error codes */ #define ESP_ERR_MESH_BASE 0x4000 /*!< Starting number of MESH error codes */ #define ESP_ERR_FLASH_BASE 0x6000 /*!< Starting number of flash error codes */ #define ESP_ERR_HW_CRYPTO_BASE 0xc000 /*!< Starting number of HW cryptography module error codes */ |
esp_power_level_t esp_ble_tx_power_get(esp_ble_power_type_t power_type)
effect : According to the specific tx power type , To get ble tx power Level of
Parameters 1:power_type tx power The level of |
typedef enum { ESP_BLE_PWR_TYPE_CONN_HDL0 = 0, /*!< For connection handle 0 */ ESP_BLE_PWR_TYPE_CONN_HDL1 = 1, /*!< For connection handle 1 */ ESP_BLE_PWR_TYPE_CONN_HDL2 = 2, /*!< For connection handle 2 */ ESP_BLE_PWR_TYPE_CONN_HDL3 = 3, /*!< For connection handle 3 */ ESP_BLE_PWR_TYPE_CONN_HDL4 = 4, /*!< For connection handle 4 */ ESP_BLE_PWR_TYPE_CONN_HDL5 = 5, /*!< For connection handle 5 */ ESP_BLE_PWR_TYPE_CONN_HDL6 = 6, /*!< For connection handle 6 */ ESP_BLE_PWR_TYPE_CONN_HDL7 = 7, /*!< For connection handle 7 */ ESP_BLE_PWR_TYPE_CONN_HDL8 = 8, /*!< For connection handle 8 */ ESP_BLE_PWR_TYPE_ADV = 9, /*!< For advertising */ ESP_BLE_PWR_TYPE_SCAN = 10, /*!< For scan */ ESP_BLE_PWR_TYPE_DEFAULT = 11, /*!< For default, if not set other, it will use default value */ ESP_BLE_PWR_TYPE_NUM = 12, /*!< TYPE numbers */ } esp_ble_power_type_t; |
Return value :power_level |
typedef enum { ESP_PWR_LVL_N12 = 0, /*!< Corresponding to -12dbm */ ESP_PWR_LVL_N9 = 1, /*!< Corresponding to -9dbm */ ESP_PWR_LVL_N6 = 2, /*!< Corresponding to -6dbm */ ESP_PWR_LVL_N3 = 3, /*!< Corresponding to -3dbm */ ESP_PWR_LVL_N0 = 4, /*!< Corresponding to 0dbm */ ESP_PWR_LVL_P3 = 5, /*!< Corresponding to +3dbm */ ESP_PWR_LVL_P6 = 6, /*!< Corresponding to +6dbm */ ESP_PWR_LVL_P9 = 7, /*!< Corresponding to +9dbm */ ESP_PWR_LVL_N14 = ESP_PWR_LVL_N12, /*!< Backward compatibility! Setting to -14dbm will actually result to -12dbm */ ESP_PWR_LVL_N11 = ESP_PWR_LVL_N9, /*!< Backward compatibility! Setting to -11dbm will actually result to -9dbm */ ESP_PWR_LVL_N8 = ESP_PWR_LVL_N6, /*!< Backward compatibility! Setting to -8dbm will actually result to -6dbm */ ESP_PWR_LVL_N5 = ESP_PWR_LVL_N3, /*!< Backward compatibility! Setting to -5dbm will actually result to -3dbm */ ESP_PWR_LVL_N2 = ESP_PWR_LVL_N0, /*!< Backward compatibility! Setting to -2dbm will actually result to 0dbm */ ESP_PWR_LVL_P1 = ESP_PWR_LVL_P3, /*!< Backward compatibility! Setting to +1dbm will actually result to +3dbm */ ESP_PWR_LVL_P4 = ESP_PWR_LVL_P6, /*!< Backward compatibility! Setting to +4dbm will actually result to +6dbm */ ESP_PWR_LVL_P7 = ESP_PWR_LVL_P9, /*!< Backward compatibility! Setting to +7dbm will actually result to +9dbm */ } esp_power_level_t; |
esp_err_t esp_bredr_tx_power_set(esp_power_level_t min_power_level, esp_power_level_t max_power_level)
effect : Set up BR/EDR Of tx power, This function will work on the whole traditional Bluetooth , Include search ,paging, Connections etc. , Must be in esp_bt_controller_enable Function and after RF do TX Set before action !
Parameters 1:min_power_level Set up tx powr The minimum value of |
typedef enum { ESP_PWR_LVL_N12 = 0, /*!< Corresponding to -12dbm */ ESP_PWR_LVL_N9 = 1, /*!< Corresponding to -9dbm */ ESP_PWR_LVL_N6 = 2, /*!< Corresponding to -6dbm */ ESP_PWR_LVL_N3 = 3, /*!< Corresponding to -3dbm */ ESP_PWR_LVL_N0 = 4, /*!< Corresponding to 0dbm */ ESP_PWR_LVL_P3 = 5, /*!< Corresponding to +3dbm */ ESP_PWR_LVL_P6 = 6, /*!< Corresponding to +6dbm */ ESP_PWR_LVL_P9 = 7, /*!< Corresponding to +9dbm */ ESP_PWR_LVL_N14 = ESP_PWR_LVL_N12, /*!< Backward compatibility! Setting to -14dbm will actually result to -12dbm */ ESP_PWR_LVL_N11 = ESP_PWR_LVL_N9, /*!< Backward compatibility! Setting to -11dbm will actually result to -9dbm */ ESP_PWR_LVL_N8 = ESP_PWR_LVL_N6, /*!< Backward compatibility! Setting to -8dbm will actually result to -6dbm */ ESP_PWR_LVL_N5 = ESP_PWR_LVL_N3, /*!< Backward compatibility! Setting to -5dbm will actually result to -3dbm */ ESP_PWR_LVL_N2 = ESP_PWR_LVL_N0, /*!< Backward compatibility! Setting to -2dbm will actually result to 0dbm */ ESP_PWR_LVL_P1 = ESP_PWR_LVL_P3, /*!< Backward compatibility! Setting to +1dbm will actually result to +3dbm */ ESP_PWR_LVL_P4 = ESP_PWR_LVL_P6, /*!< Backward compatibility! Setting to +4dbm will actually result to +6dbm */ ESP_PWR_LVL_P7 = ESP_PWR_LVL_P9, /*!< Backward compatibility! Setting to +7dbm will actually result to +9dbm */ } esp_power_level_t; |
Parameters 2:max_power_level Set up tx powr The maximum of |
typedef enum { ESP_PWR_LVL_N12 = 0, /*!< Corresponding to -12dbm */ ESP_PWR_LVL_N9 = 1, /*!< Corresponding to -9dbm */ ESP_PWR_LVL_N6 = 2, /*!< Corresponding to -6dbm */ ESP_PWR_LVL_N3 = 3, /*!< Corresponding to -3dbm */ ESP_PWR_LVL_N0 = 4, /*!< Corresponding to 0dbm */ ESP_PWR_LVL_P3 = 5, /*!< Corresponding to +3dbm */ ESP_PWR_LVL_P6 = 6, /*!< Corresponding to +6dbm */ ESP_PWR_LVL_P9 = 7, /*!< Corresponding to +9dbm */ ESP_PWR_LVL_N14 = ESP_PWR_LVL_N12, /*!< Backward compatibility! Setting to -14dbm will actually result to -12dbm */ ESP_PWR_LVL_N11 = ESP_PWR_LVL_N9, /*!< Backward compatibility! Setting to -11dbm will actually result to -9dbm */ ESP_PWR_LVL_N8 = ESP_PWR_LVL_N6, /*!< Backward compatibility! Setting to -8dbm will actually result to -6dbm */ ESP_PWR_LVL_N5 = ESP_PWR_LVL_N3, /*!< Backward compatibility! Setting to -5dbm will actually result to -3dbm */ ESP_PWR_LVL_N2 = ESP_PWR_LVL_N0, /*!< Backward compatibility! Setting to -2dbm will actually result to 0dbm */ ESP_PWR_LVL_P1 = ESP_PWR_LVL_P3, /*!< Backward compatibility! Setting to +1dbm will actually result to +3dbm */ ESP_PWR_LVL_P4 = ESP_PWR_LVL_P6, /*!< Backward compatibility! Setting to +4dbm will actually result to +6dbm */ ESP_PWR_LVL_P7 = ESP_PWR_LVL_P9, /*!< Backward compatibility! Setting to +7dbm will actually result to +9dbm */ } esp_power_level_t; |
Return value :esp_err_t |
It has been introduced earlier |
esp_err_t esp_bredr_tx_power_get(esp_power_level_t *min_power_level, esp_power_level_t *max_power_level)
effect : obtain BR/EDR Of tx power Minimum / Great value
Parameters 1:*min_power_level The pointer , Minimum returned tx power |
It has been introduced earlier |
Parameters 2:*max_power_level The pointer , Maximum returned tx power |
It has been introduced earlier |
Return value :esp_err_t |
It has been introduced earlier |
esp_err_t esp_bredr_sco_datapath_set(esp_sco_data_path_t data_path)
effect : Set up BR/EDR Of sco The data path of , belong controller enable Then call , And in (e)SCO Build before link
Parameters 1:data_path sco The data path of |
typedef enum { ESP_SCO_DATA_PATH_HCI = 0, /*!< data over HCI transport */ ESP_SCO_DATA_PATH_PCM = 1, /*!< data over PCM interface */ } esp_sco_data_path_t; |
Return value :esp_err_t |
It has been introduced earlier |
esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
effect : according to config To do controller The initialization
Parameters 1:*cfg controller Configuration parameters for |
typedef struct { /* * Following parameters can be configured runtime, when call esp_bt_controller_init() */ uint16_t controller_task_stack_size; /*!< Bluetooth controller task stack size */ uint8_t controller_task_prio; /*!< Bluetooth controller task priority */ uint8_t hci_uart_no; /*!< If use UART1/2 as HCI IO interface, indicate UART number */ uint32_t hci_uart_baudrate; /*!< If use UART1/2 as HCI IO interface, indicate UART baudrate */ uint8_t scan_duplicate_mode; /*!< scan duplicate mode */ uint8_t scan_duplicate_type; /*!< scan duplicate type */ uint16_t normal_adv_size; /*!< Normal adv size for scan duplicate */ uint16_t mesh_adv_size; /*!< Mesh adv size for scan duplicate */ uint16_t send_adv_reserved_size; /*!< Controller minimum memory value */ uint32_t controller_debug_flag; /*!< Controller debug log flag */ uint8_t mode; /*!< Controller mode: BR/EDR, BLE or Dual Mode */ uint8_t ble_max_conn; /*!< BLE maximum connection numbers */ uint8_t bt_max_acl_conn; /*!< BR/EDR maximum ACL connection numbers */ uint8_t bt_sco_datapath; /*!< SCO data path, i.e. HCI or PCM module */ bool auto_latency; /*!< BLE auto latency, used to enhance classic BT performance */ bool bt_legacy_auth_vs_evt; /*!< BR/EDR Legacy auth complete event required to protect from BIAS attack */ /* * Following parameters can not be configured runtime when call esp_bt_controller_init() * It will be overwrite with a constant value which in menuconfig or from a macro. * So, do not modify the value when esp_bt_controller_init() */ uint8_t bt_max_sync_conn; /*!< BR/EDR maximum ACL connection numbers. Effective in menuconfig */ uint8_t ble_sca; /*!< BLE low power crystal accuracy index */ uint8_t pcm_role; /*!< PCM role (master & slave)*/ uint8_t pcm_polar; /*!< PCM polar trig (falling clk edge & rising clk edge) */ uint32_t magic; /*!< Magic number */ } esp_bt_controller_config_t; |
Return value :esp_err_t |
It has been introduced earlier |
esp_err_t esp_bt_controller_deinit(void)
effect :De-initialize BT controller
esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
effect :Enable bluetooth controller
Parameters 1:mode |
typedef enum { ESP_BT_MODE_IDLE = 0x00, /*!< Bluetooth is not running */ ESP_BT_MODE_BLE = 0x01, /*!< Run BLE mode */ ESP_BT_MODE_CLASSIC_BT = 0x02, /*!< Run Classic BT mode */ ESP_BT_MODE_BTDM = 0x03, /*!< Run dual mode */ } esp_bt_mode_t; |
Return value :esp_err_t |
It has been introduced earlier |
esp_err_t esp_bt_controller_disable(void)
effect :Disable bluetooth controller
esp_bt_controller_status_t esp_bt_controller_get_status(void)
effect : obtain controller The state of
Return value :esp_bt_controller_status_t |
typedef enum { ESP_BT_CONTROLLER_STATUS_IDLE = 0, ESP_BT_CONTROLLER_STATUS_INITED, ESP_BT_CONTROLLER_STATUS_ENABLED, ESP_BT_CONTROLLER_STATUS_NUM, } esp_bt_controller_status_t; |
bool esp_vhci_host_check_send_available(void)
effect : Check if you can controller send data
void esp_vhci_host_send_packet(uint8_t *data, uint16_t len)
effect :Host Send data to Controller
Parameters 1: *data |
Host Ready to send to Controller The data of |
Parameters 2: len |
Host Ready to send to Controller The data length of |
esp_err_t esp_vhci_host_register_callback(const esp_vhci_host_callback_t *callback)
effect :host image controller register callback function , Include sendable callback With receiving data callback
Parameters 1:*callback |
typedef struct esp_vhci_host_callback { void (*notify_host_send_available)(void); /*!< callback used to notify that the host can send packet to controller */ int (*notify_host_recv)(uint8_t *data, uint16_t len); /*!< callback used to notify that the controller has a packet to send to the host*/ } esp_vhci_host_callback_t; |
Return value :esp_err_t |
It has been introduced earlier |
esp_err_t esp_bt_controller_mem_release(esp_bt_mode_t mode)
effect : Release bt controller Of bss,heap data , Save memory , Only in esp_bt_controller_init Call before function or top note esp_bt_controller_deinit Call after function , The general usage is that you use BR/EDR, Then you release BLE, If you use BLE, Then release BR/EDR Of
Parameters 1:mode |
typedef enum { ESP_BT_MODE_IDLE = 0x00, /*!< Bluetooth is not running */ ESP_BT_MODE_BLE = 0x01, /*!< Run BLE mode */ ESP_BT_MODE_CLASSIC_BT = 0x02, /*!< Run Classic BT mode */ ESP_BT_MODE_BTDM = 0x03, /*!< Run dual mode */ } esp_bt_mode_t; |
Return value :esp_err_t |
It has been introduced earlier |
esp_err_t esp_bt_mem_release(esp_bt_mode_t mode)
effect : Free memory , First of all, I will call esp_bt_controller_mem_release function
esp_err_t esp_bt_sleep_enable(void)
effect : Can make bt controller Dormancy of
esp_err_t esp_bt_sleep_disable(void)
effect : prohibit bt controller Sleep
esp_err_t esp_ble_scan_dupilcate_list_flush(void)
effect : Manually remove BLE scan list ()
The one we use most often is esp_bt_controller_init/esp_bt_controller_enable/esp_bt_controller_disable/esp_bt_controller_deinit, Let's draw the flow of these functions
版权声明
本文为[Wireless_ Link]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204230144192841.html
边栏推荐
- 领导/老师让填写电子excel表格文档可手机上如何编辑word/excel文件填写excel/word电子文档?
- How can e-procurement become a value-added function in the supply chain?
- MySQL active / standby configuration binary log problem
- The sixth season of 2022, the perfect children's model IPA national race leads the yuanuniverse track
- Performance introduction of the first new version of cdr2022
- Sqlserver data transfer to MySQL
- J-Link RTT使用
- Analyze the advantages and disadvantages of tunnel proxy IP.
- The leader / teacher asks to fill in the EXCEL form document. How to edit the word / Excel file on the mobile phone and fill in the Excel / word electronic document?
- Leetcode 112 Total path (2022.04.22)
猜你喜欢
NR polar code VII - SCL (successful cancellation list coding)
C语言中如何“指名道姓”的进行初始化
什么是代理IP池,如何构建?
有哪些常见的代理ip问题?
Use of j-link RTT
RuntimeError: The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimensio
2022 crane driver (limited to bridge crane) examination question bank and online simulation examination
Virtual serial port function of j-link V9 using skills
The sixth season of 2022, the perfect children's model IPA national race leads the yuanuniverse track
最长公共子序列(记录路径版)
随机推荐
LSF的使用方法总结
Performance introduction of the first new version of cdr2022
W801/W800/W806唯一ID/CPUID/FLASHID
Linux系统下以RPM方式如何安装mysql-5.7.9
如何设置电脑ip?
什么是布尔类型?
2022.4.22-----leetcode.396
什么是代理IP池,如何构建?
Jerry's AI server [chapter]
mb_substr()、mb_strpos()函数(故事篇)
What are the benefits of writing unit tests using the unit test framework?
Chapter 6 uses Matplotlib to draw thermodynamic diagram
. net unit test Part 1: common Net unit test framework?
什么是bgp服务器,有哪些优势?
Makefile文件是什麼?
Uncover floating-point operations hidden by the ARM compiler
Echo "new password" |passwd -- stdin user name
代理IP可用率是不是等同于代理IP的效率?
如何对代理IP进行分类?
Problem solving: dpkg DEB: error: package name has characters that are't lowercase alphanums or '- +‘