/*!
 * @file  bluetoothAmplifier.ino
 * @brief  简易蓝牙音频播放器
 * @details  当您的其他蓝牙设备（如手机）成功连接到烧录了此示例的ESP32控制器，
 * @n  且放大器已通过I2S通信引脚正确连接到ESP32，
 * @n  您就拥有了一个简易的蓝牙音箱，可以从连接到放大器的扬声器听到手机播放的音乐，
 * @n  并且可以通过蓝牙AVRCP协议命令获取当前播放歌曲的一些信息。
 * @copyright  Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @license  The MIT License (MIT)
 * @author  [qsjhyy](yihuan.huang@dfrobot.com)
 * @version  V1.0
 * @date  2022-01-24
 * @url  https://github.com/DFRobot/DFRobot_MAX98357A
 */
#include <DFRobot_MAX98357A.h>

DFRobot_MAX98357A amplifier;   // 实例化一个对象来控制放大器

void setup(void)
{
  Serial.begin(115200);

  /**
   * @brief 初始化函数
   * @param btName - 创建的蓝牙设备名称
   * @param bclk - I2S通信引脚号，串行时钟(SCK)，也称位时钟(BCK)
   * @param lrclk - I2S通信引脚号，字选择(WS)，即命令(通道)选择，用于切换左右声道数据
   * @param din - I2S通信引脚号，串行数据信号(SD)，用于以二进制补码格式传输音频数据
   * @return 成功返回true，失败返回false
   */
  while( !amplifier.begin(/*btName=*/"bluetoothAmplifier", /*bclk=*/GPIO_NUM_25, /*lrclk=*/GPIO_NUM_26, /*din=*/GPIO_NUM_27) ){
    Serial.println("初始化失败！");
    delay(3000);
  }
  Serial.println("初始化成功！");

}

void loop(void)
{
  String Title, Artist, Album;
  /**
   * @brief 通过AVRC命令获取"元数据"
   * @param type - 要获取的元数据类型，当前支持的参数：
   * @n     ESP_AVRC_MD_ATTR_TITLE（标题）   ESP_AVRC_MD_ATTR_ARTIST（艺术家）   ESP_AVRC_MD_ATTR_ALBUM（专辑）
   * @return 对应类型的"元数据"
   * @note 如果请求元数据时超时，返回"NULL"
   */
  Title = amplifier.getMetadata(ESP_AVRC_MD_ATTR_TITLE);
  if(0 != Title.length()){
    Serial.print("音乐标题：");
    Serial.println(Title);
  }
  Artist = amplifier.getMetadata(ESP_AVRC_MD_ATTR_ARTIST);
  if(0 != Artist.length()){
    Serial.print("音乐艺术家：");
    Serial.println(Artist);
  }
  Album = amplifier.getMetadata(ESP_AVRC_MD_ATTR_ALBUM);
  if(0 != Album.length()){
    Serial.print("音乐专辑：");
    Serial.println(Album);
  }
  delay(3000);
}
