mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
119 lines
3.5 KiB
C
119 lines
3.5 KiB
C
|
/*
|
||
|
This example code is in the Public Domain (or CC0 licensed, at your option.)
|
||
|
|
||
|
Unless required by applicable law or agreed to in writing, this
|
||
|
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||
|
CONDITIONS OF ANY KIND, either express or implied.
|
||
|
*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <unistd.h>
|
||
|
#include <string.h>
|
||
|
#include "freertos/FreeRTOS.h"
|
||
|
#include "freertos/task.h"
|
||
|
#include "nvs.h"
|
||
|
#include "nvs_flash.h"
|
||
|
#include "esp_system.h"
|
||
|
#include "esp_log.h"
|
||
|
#include "esp_bt.h"
|
||
|
#include "bt_app_core.h"
|
||
|
#include "esp_bt_main.h"
|
||
|
#include "esp_bt_device.h"
|
||
|
#include "esp_gap_bt_api.h"
|
||
|
#include "esp_hf_client_api.h"
|
||
|
#include "bt_app_hf.h"
|
||
|
#include "gpio_pcm_config.h"
|
||
|
#include "console_uart.h"
|
||
|
|
||
|
/* event for handler "bt_av_hdl_stack_up */
|
||
|
enum {
|
||
|
BT_APP_EVT_STACK_UP = 0,
|
||
|
};
|
||
|
|
||
|
/* handler for bluetooth stack enabled events */
|
||
|
static void bt_hf_client_hdl_stack_evt(uint16_t event, void *p_param);
|
||
|
|
||
|
void app_main(void)
|
||
|
{
|
||
|
/* Initialize NVS — it is used to store PHY calibration data */
|
||
|
esp_err_t ret = nvs_flash_init();
|
||
|
if (ret == ESP_ERR_NVS_NO_FREE_PAGES) {
|
||
|
ESP_ERROR_CHECK(nvs_flash_erase());
|
||
|
ret = nvs_flash_init();
|
||
|
}
|
||
|
ESP_ERROR_CHECK( ret );
|
||
|
|
||
|
ESP_ERROR_CHECK(esp_bt_controller_mem_release(ESP_BT_MODE_BLE));
|
||
|
|
||
|
esp_err_t err;
|
||
|
esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
|
||
|
if ((err = esp_bt_controller_init(&bt_cfg)) != ESP_OK) {
|
||
|
ESP_LOGE(BT_HF_TAG, "%s initialize controller failed: %s\n", __func__, esp_err_to_name(ret));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ((err = esp_bt_controller_enable(ESP_BT_MODE_CLASSIC_BT)) != ESP_OK) {
|
||
|
ESP_LOGE(BT_HF_TAG, "%s enable controller failed: %s\n", __func__, esp_err_to_name(ret));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ((err = esp_bluedroid_init()) != ESP_OK) {
|
||
|
ESP_LOGE(BT_HF_TAG, "%s initialize bluedroid failed: %s\n", __func__, esp_err_to_name(ret));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ((err = esp_bluedroid_enable()) != ESP_OK) {
|
||
|
ESP_LOGE(BT_HF_TAG, "%s enable bluedroid failed: %s\n", __func__, esp_err_to_name(ret));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
/* create application task */
|
||
|
bt_app_task_start_up();
|
||
|
|
||
|
/* Bluetooth device name, connection mode and profile set up */
|
||
|
bt_app_work_dispatch(bt_hf_client_hdl_stack_evt, BT_APP_EVT_STACK_UP, NULL, 0, NULL);
|
||
|
|
||
|
/* initialize console via UART */
|
||
|
console_uart_init();
|
||
|
|
||
|
/* configure the PCM interface and PINs used */
|
||
|
app_gpio_pcm_io_cfg();
|
||
|
|
||
|
/* configure externel chip for acoustic echo cancellation */
|
||
|
#if ACOUSTIC_ECHO_CANCELLATION_ENABLE
|
||
|
app_gpio_aec_io_cfg();
|
||
|
#endif /* ACOUSTIC_ECHO_CANCELLATION_ENABLE */
|
||
|
}
|
||
|
|
||
|
|
||
|
static void bt_hf_client_hdl_stack_evt(uint16_t event, void *p_param)
|
||
|
{
|
||
|
ESP_LOGD(BT_HF_TAG, "%s evt %d", __func__, event);
|
||
|
switch (event) {
|
||
|
case BT_APP_EVT_STACK_UP: {
|
||
|
/* set up device name */
|
||
|
char *dev_name = "ESP_HFP_HF";
|
||
|
esp_bt_dev_set_device_name(dev_name);
|
||
|
|
||
|
esp_hf_client_register_callback(bt_app_hf_client_cb);
|
||
|
esp_hf_client_init();
|
||
|
|
||
|
esp_bt_pin_type_t pin_type = ESP_BT_PIN_TYPE_FIXED;
|
||
|
esp_bt_pin_code_t pin_code;
|
||
|
pin_code[0] = '0';
|
||
|
pin_code[1] = '0';
|
||
|
pin_code[2] = '0';
|
||
|
pin_code[3] = '0';
|
||
|
esp_bt_gap_set_pin(pin_type, 4, pin_code);
|
||
|
|
||
|
/* set discoverable and connectable mode, wait to be connected */
|
||
|
esp_bt_gap_set_scan_mode(ESP_BT_CONNECTABLE, ESP_BT_GENERAL_DISCOVERABLE);
|
||
|
break;
|
||
|
}
|
||
|
default:
|
||
|
ESP_LOGE(BT_HF_TAG, "%s unhandled evt %d", __func__, event);
|
||
|
break;
|
||
|
}
|
||
|
}
|