add device state

This commit is contained in:
helloyifa 2025-07-12 02:11:33 +08:00
parent c4a50bc6b2
commit 6783da891c
3 changed files with 75 additions and 13 deletions

View File

@ -34,7 +34,7 @@
#define LOGE(...) BK_LOGE(TAG, ##__VA_ARGS__) #define LOGE(...) BK_LOGE(TAG, ##__VA_ARGS__)
#define LOGD(...) BK_LOGD(TAG, ##__VA_ARGS__) #define LOGD(...) BK_LOGD(TAG, ##__VA_ARGS__)
static DeviceState deviceState = kDeviceStateIdle;
static ReturnValue sleep_helper_set_mode_callback(const PropertyList* properties) { static ReturnValue sleep_helper_set_mode_callback(const PropertyList* properties) {
Property* mode_prop = property_list_get_by_name(properties, "mode"); Property* mode_prop = property_list_get_by_name(properties, "mode");
@ -263,6 +263,44 @@ void app_mcp_init(){
} }
} }
void app_set_device_state(DeviceState state){
deviceState = state;
switch(deviceState){
case kDeviceStateIdle:
LOGE("set_device_state -> idle\n");
break;
case kDeviceStateConnecting:
LOGE("set_device_state -> connecting\n");
break;
case kDeviceStateListening:
LOGE("set_device_state -> listening\n");
break;
case kDeviceStateSpeaking:
LOGE("set_device_state -> speaking\n");
break;
case kDeviceStateUpgrading:
LOGE("set_device_state -> upgrading\n");
break;
case kDeviceStateActivating:
LOGE("set_device_state -> activating\n");
break;
case kDeviceStateAudioTesting:
break;
default:
break;
}
}
void app_on_incoming_json(char *json_text, unsigned int size){
}
DeviceState app_get_device_state(){
return deviceState;
}
void app_start(){ void app_start(){
app_mcp_init(); app_mcp_init();
} }

View File

@ -21,13 +21,14 @@ typedef struct
uint32_t sleep_timeout; uint32_t sleep_timeout;
}app_config_t; }app_config_t;
enum AecMode {
typedef enum AecMode {
kAecOff, kAecOff,
kAecOnDeviceSide, kAecOnDeviceSide,
kAecOnServerSide, kAecOnServerSide,
}; }AecMode;
enum DeviceState { typedef enum DeviceState {
kDeviceStateUnknown, kDeviceStateUnknown,
kDeviceStateStarting, kDeviceStateStarting,
kDeviceStateWifiConfiguring, kDeviceStateWifiConfiguring,
@ -39,18 +40,18 @@ enum DeviceState {
kDeviceStateActivating, kDeviceStateActivating,
kDeviceStateAudioTesting, kDeviceStateAudioTesting,
kDeviceStateFatalError kDeviceStateFatalError
}; }DeviceState;
enum AbortReason { typedef enum AbortReason {
kAbortReasonNone, kAbortReasonNone,
kAbortReasonWakeWordDetected kAbortReasonWakeWordDetected
}; }AbortReason;
enum ListeningMode { typedef enum ListeningMode {
kListeningModeAutoStop, kListeningModeAutoStop,
kListeningModeManualStop, kListeningModeManualStop,
kListeningModeRealtime // 需要 AEC 支持 kListeningModeRealtime // 需要 AEC 支持
}; }ListeningMode;
#include "cJSON.h" #include "cJSON.h"
@ -106,6 +107,8 @@ char* app_get_ota_url();
void app_start(); void app_start();
void app_set_device_state(DeviceState state);
DeviceState app_get_device_state();
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -580,7 +580,7 @@ void rtc_websocket_msg_handle(char *json_text, unsigned int size)
{ {
cJSON *text = cJSON_GetObjectItem(root, "text"); cJSON *text = cJSON_GetObjectItem(root, "text");
if(text != NULL){ if(text != NULL){
LOGE(">> %s\n",text->valuestring); LOGE("STT >> %s\n",text->valuestring);
} }
} }
@ -589,7 +589,28 @@ void rtc_websocket_msg_handle(char *json_text, unsigned int size)
cJSON *state = cJSON_GetObjectItem(root, "state"); cJSON *state = cJSON_GetObjectItem(root, "state");
cJSON *text = cJSON_GetObjectItem(root, "text"); cJSON *text = cJSON_GetObjectItem(root, "text");
if(state != NULL && text != NULL){ if(state != NULL && text != NULL){
LOGE("<< (%s) %s\n",state->valuestring,text->valuestring); LOGE("TTS << (%s) %s\n",state->valuestring,text->valuestring);
}
if(text == NULL) return;
if (strcmp(state->valuestring, "start") == 0) {
if (app_get_device_state() == kDeviceStateIdle || app_get_device_state() == kDeviceStateListening) {
app_set_device_state(kDeviceStateSpeaking);
}
}
else if (strcmp(state->valuestring, "stop") == 0) {
if (app_get_device_state() == kDeviceStateSpeaking) {
app_set_device_state(kDeviceStateListening);
}
}
else if (strcmp(state->valuestring, "sentence_start") == 0) {
if (app_get_device_state() == kDeviceStateIdle || app_get_device_state() == kDeviceStateListening) {
app_set_device_state(kDeviceStateSpeaking);
}
}
else if (strcmp(state->valuestring, "sentence_end") == 0) {
if (app_get_device_state() == kDeviceStateSpeaking) {
app_set_device_state(kDeviceStateListening);
}
} }
} }
@ -639,7 +660,7 @@ static void poka_aud_tras_main(void)
// LOGE("msg = %02x %02x len = %d \n",msg.opus_addr[0],msg.opus_addr[1],msg.opus_len); // LOGE("msg = %02x %02x len = %d \n",msg.opus_addr[0],msg.opus_addr[1],msg.opus_len);
ret = bk_aud_intf_write_spk_data((uint8_t *)msg.opus_addr, msg.opus_len); ret = bk_aud_intf_write_spk_data((uint8_t *)msg.opus_addr, msg.opus_len);
rtos_delay_milliseconds(61); rtos_delay_milliseconds(60);
// LOGE("rv opus len: %d \r\n", msg.opus_len); // LOGE("rv opus len: %d \r\n", msg.opus_len);
// int32_t decoder_len = opus_decode(dec, msg.opus_addr, msg.opus_len, (int16_t *)pcm_out2, 960, 0); // int32_t decoder_len = opus_decode(dec, msg.opus_addr, msg.opus_len, (int16_t *)pcm_out2, 960, 0);