|
@@ -36,7 +36,7 @@
|
|
|
#include "argtable3/argtable3.h"
|
|
|
|
|
|
#define STATS_REPORT_DELAY_MS 15000
|
|
|
-static const char * TAG = "platform_esp32";
|
|
|
+static const char * TAG = "platform";
|
|
|
extern char * get_output_state_desc(output_state state);
|
|
|
|
|
|
extern struct outputstate output;
|
|
@@ -50,6 +50,7 @@ time_t disconnect_time=0;
|
|
|
#define LOCK pthread_mutex_lock(&(outputbuf->mutex))
|
|
|
#define UNLOCK pthread_mutex_unlock(&(outputbuf->mutex))
|
|
|
int64_t connecting_timeout = 0;
|
|
|
+
|
|
|
static const char * art_a2dp_connected[]={"\n",
|
|
|
" ___ _____ _____ _____ _ _ _ ",
|
|
|
" /\\ |__ \\| __ \\| __ \\ / ____| | | | | |",
|
|
@@ -136,7 +137,7 @@ char * APP_AV_STATE_DESC[] = {
|
|
|
enum {
|
|
|
APP_AV_MEDIA_STATE_IDLE,
|
|
|
APP_AV_MEDIA_STATE_STARTING,
|
|
|
- APP_AV_MEDIA_STATE_BUFFERING,
|
|
|
+
|
|
|
APP_AV_MEDIA_STATE_STARTED,
|
|
|
APP_AV_MEDIA_STATE_STOPPING,
|
|
|
APP_AV_MEDIA_STATE_WAIT_DISCONNECT
|
|
@@ -411,7 +412,6 @@ static void a2d_app_heart_beat(void *arg)
|
|
|
|
|
|
static void bt_app_av_sm_hdlr(uint16_t event, void *param)
|
|
|
{
|
|
|
-
|
|
|
switch (s_a2d_state) {
|
|
|
case APP_AV_STATE_DISCOVERING:
|
|
|
ESP_LOGV(TAG,"state %s, evt 0x%x, output state: %s", APP_AV_STATE_DESC[s_a2d_state], event, get_output_state_desc(output.state));
|
|
@@ -488,6 +488,12 @@ static void filter_inquiry_scan_result(esp_bt_gap_cb_param_t *param)
|
|
|
uint8_t *eir = NULL;
|
|
|
uint8_t nameLen = 0;
|
|
|
esp_bt_gap_dev_prop_t *p;
|
|
|
+ if(s_a2d_state != APP_AV_STATE_DISCOVERING)
|
|
|
+ {
|
|
|
+
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
memset(s_peer_bdname, 0x00,sizeof(s_peer_bdname));
|
|
|
|
|
|
ESP_LOGI(TAG,"\n=======================\nScanned device: %s", bda2str(param->disc_res.bda, bda_str, 18));
|
|
@@ -630,7 +636,7 @@ static void bt_app_av_media_proc(uint16_t event, void *param)
|
|
|
if (event == BT_APP_HEART_BEAT_EVT) {
|
|
|
if(out_state > OUTPUT_STOPPED)
|
|
|
{
|
|
|
- ESP_LOGI(TAG,"Output state is %s, a2dp media ready and connected. Checking if A2DP is ready.", get_output_state_desc(out_state));
|
|
|
+ ESP_LOGI(TAG,"Output state is %s, Checking if A2DP is ready.", get_output_state_desc(out_state));
|
|
|
esp_a2d_media_ctrl(ESP_A2D_MEDIA_CTRL_CHECK_SRC_RDY);
|
|
|
}
|
|
|
|
|
@@ -639,43 +645,13 @@ static void bt_app_av_media_proc(uint16_t event, void *param)
|
|
|
if (a2d->media_ctrl_stat.cmd == ESP_A2D_MEDIA_CTRL_CHECK_SRC_RDY &&
|
|
|
a2d->media_ctrl_stat.status == ESP_A2D_MEDIA_CTRL_ACK_SUCCESS
|
|
|
) {
|
|
|
- ESP_LOGI(TAG,"a2dp media ready, waiting for media buffering ...");
|
|
|
- s_media_state = APP_AV_MEDIA_STATE_BUFFERING;
|
|
|
+ ESP_LOGI(TAG,"a2dp media ready, starting playback!");
|
|
|
+ s_media_state = APP_AV_MEDIA_STATE_STARTING;
|
|
|
+ esp_a2d_media_ctrl(ESP_A2D_MEDIA_CTRL_START);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
- case APP_AV_MEDIA_STATE_BUFFERING: {
|
|
|
- if (event == BT_APP_HEART_BEAT_EVT) {
|
|
|
- switch (out_state) {
|
|
|
- case OUTPUT_RUNNING :
|
|
|
- case OUTPUT_PAUSE_FRAMES :
|
|
|
- case OUTPUT_SKIP_FRAMES:
|
|
|
- case OUTPUT_START_AT:
|
|
|
- case OUTPUT_BUFFER:
|
|
|
-
|
|
|
- ESP_LOGI(TAG,"Out state is %s, a2dp media ready and connected. Starting playback! ", get_output_state_desc(out_state));
|
|
|
- s_media_state = APP_AV_MEDIA_STATE_STARTING;
|
|
|
- esp_a2d_media_ctrl(ESP_A2D_MEDIA_CTRL_START);
|
|
|
- break;
|
|
|
- case OUTPUT_STOPPED:
|
|
|
- case OUTPUT_OFF:
|
|
|
- ESP_LOGD(TAG,"Output state is %s. Changing app status to ",get_output_state_desc(out_state));
|
|
|
- s_media_state = APP_AV_MEDIA_STATE_STOPPING;
|
|
|
- esp_a2d_media_ctrl(ESP_A2D_MEDIA_CTRL_STOP);
|
|
|
- break;
|
|
|
- default:
|
|
|
- ESP_LOGE(TAG,"Unknown output status while waiting for buffering to complete %d",out_state);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- else{
|
|
|
- ESP_LOGW(TAG,"Received unknown event while in state APP_AV_MEDIA_STATE_BUFFERING");
|
|
|
- }
|
|
|
-
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
case APP_AV_MEDIA_STATE_STARTING: {
|
|
|
if (event == ESP_A2D_MEDIA_CTRL_ACK_EVT) {
|
|
@@ -695,7 +671,7 @@ static void bt_app_av_media_proc(uint16_t event, void *param)
|
|
|
case APP_AV_MEDIA_STATE_STARTED: {
|
|
|
if (event == BT_APP_HEART_BEAT_EVT) {
|
|
|
if(out_state <= OUTPUT_STOPPED) {
|
|
|
- ESP_LOGI(TAG,"Output state is stopped. Stopping a2dp media ...");
|
|
|
+ ESP_LOGI(TAG,"Output state is %s. Stopping a2dp media ...", get_output_state_desc(out_state));
|
|
|
s_media_state = APP_AV_MEDIA_STATE_STOPPING;
|
|
|
esp_a2d_media_ctrl(ESP_A2D_MEDIA_CTRL_STOP);
|
|
|
}
|
|
@@ -812,13 +788,13 @@ static void bt_app_av_state_unconnected(uint16_t event, void *param)
|
|
|
}
|
|
|
|
|
|
|
|
|
+ for(uint8_t l=0;art_a2dp_connecting[l][0]!='\0';l++){
|
|
|
+ ESP_LOGI(TAG,"%s",art_a2dp_connecting[l]);
|
|
|
+ }
|
|
|
+ ESP_LOGI(TAG,"Device: %s", s_peer_bdname);
|
|
|
if(esp_a2d_source_connect(s_peer_bda)==ESP_OK) {
|
|
|
- s_a2d_state = APP_AV_STATE_CONNECTING;
|
|
|
- for(uint8_t l=0;art_a2dp_connecting[l][0]!='\0';l++){
|
|
|
- ESP_LOGI(TAG,"%s",art_a2dp_connecting[l]);
|
|
|
- }
|
|
|
- ESP_LOGI(TAG,"********** A2DP CONNECTING TO %s", s_peer_bdname);
|
|
|
A2DP_TIMER_INIT;
|
|
|
+ s_a2d_state = APP_AV_STATE_CONNECTING;
|
|
|
}
|
|
|
else {
|
|
|
|
|
@@ -844,12 +820,13 @@ static void bt_app_av_state_connecting(uint16_t event, void *param)
|
|
|
if (a2d->conn_stat.state == ESP_A2D_CONNECTION_STATE_CONNECTED) {
|
|
|
s_a2d_state = APP_AV_STATE_CONNECTED;
|
|
|
s_media_state = APP_AV_MEDIA_STATE_IDLE;
|
|
|
- for(uint8_t l=0;art_a2dp_connected[l][0]!='\0';l++){
|
|
|
- ESP_LOGI(TAG,"%s",art_a2dp_connected[l]);
|
|
|
- }
|
|
|
+
|
|
|
ESP_LOGD(TAG,"Setting scan mode to ESP_BT_NON_CONNECTABLE, ESP_BT_NON_DISCOVERABLE");
|
|
|
esp_bt_gap_set_scan_mode(ESP_BT_NON_CONNECTABLE, ESP_BT_NON_DISCOVERABLE);
|
|
|
ESP_LOGD(TAG,"Done setting scan mode. App state is now CONNECTED and media state IDLE.");
|
|
|
+ for(uint8_t l=0;art_a2dp_connected[l][0]!='\0';l++){
|
|
|
+ ESP_LOGI(TAG,"%s",art_a2dp_connected[l]);
|
|
|
+ }
|
|
|
} else if (a2d->conn_stat.state == ESP_A2D_CONNECTION_STATE_DISCONNECTED) {
|
|
|
s_a2d_state = APP_AV_STATE_UNCONNECTED;
|
|
|
}
|
|
@@ -868,8 +845,7 @@ static void bt_app_av_state_connecting(uint16_t event, void *param)
|
|
|
if (IS_A2DP_TIMER_OVER)
|
|
|
{
|
|
|
s_a2d_state = APP_AV_STATE_UNCONNECTED;
|
|
|
- ESP_LOGE(TAG,"A2DP Connect time out! Setting state to Unconnected. ");
|
|
|
- A2DP_TIMER_INIT;
|
|
|
+ ESP_LOGW(TAG,"A2DP Connect time out! Setting state to Unconnected. ");
|
|
|
}
|
|
|
ESP_LOGV(TAG,"BT_APP_HEART_BEAT_EVT");
|
|
|
break;
|
|
@@ -911,7 +887,7 @@ static void bt_app_av_state_connected(uint16_t event, void *param)
|
|
|
break;
|
|
|
}
|
|
|
case BT_APP_HEART_BEAT_EVT: {
|
|
|
- ESP_LOG_DEBUG_EVENT(TAG,QUOTE(BT_APP_HEART_BEAT_EVT));
|
|
|
+ ESP_LOGV(TAG,QUOTE(BT_APP_HEART_BEAT_EVT));
|
|
|
bt_app_av_media_proc(event, param);
|
|
|
break;
|
|
|
}
|
|
@@ -952,3 +928,17 @@ static void bt_app_av_state_disconnecting(uint16_t event, void *param)
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+const char *loc_logtime(void) {
|
|
|
+ static char buf[100];
|
|
|
+#if WIN
|
|
|
+ SYSTEMTIME lt;
|
|
|
+ GetLocalTime(<);
|
|
|
+ sprintf(buf, "[%02d:%02d:%02d.%03d]", lt.wHour, lt.wMinute, lt.wSecond, lt.wMilliseconds);
|
|
|
+#else
|
|
|
+ struct timeval tv;
|
|
|
+ gettimeofday(&tv, NULL);
|
|
|
+ strftime(buf, sizeof(buf), "[%T.", localtime(&tv.tv_sec));
|
|
|
+ sprintf(buf+strlen(buf), "%06ld]", (long)tv.tv_usec);
|
|
|
+#endif
|
|
|
+ return buf;
|
|
|
+}
|