mcu_hi3321_watch/tjd/ui/app/voice_assistant/TjdUiAppVocassistModel.cpp
2025-05-26 20:15:20 +08:00

211 lines
7.0 KiB
C++

/*
* Copyright (c) CompanyNameMagicTag 2022-2022. All rights reserved.
* Description: voice assistant
* Author: CompanyName
* Create: 2022-01-18
*/
#include "PhoneService.h"
// #include "MainViewSample.h"
// #include "TjdUiAppVocassist.h"
#include "TjdUiAppVocassistModel.h"
#include "TjdUiAppIds.h"
#include "NativeAbility.h"
#include "graphic_service.h"
#include "sys_config.h"
#define ENABLE_PRINT_INFO 1
#if ENABLE_PRINT_INFO
#define static_print_info(...) sys_ui_log_i(__VA_ARGS__) // 一般信息打印宏控制
#define static_print_warn(...) sys_ui_log_w(__VA_ARGS__) // 警告信息打印一般常开
#define static_print_error(...) sys_ui_log_e(__VA_ARGS__) // 错误信息打印一般常开
#define static_print_debug(...) sys_ui_log_d(__VA_ARGS__) // 调试信息打印
#else
#define static_print_info(...)
#define static_print_warn(...)
#define static_print_error(...)
#define static_print_debug(...)
#endif
#ifdef __cplusplus
extern "C" {
#endif
static constexpr int CMD_LENGTH = 20;
static const char g_voiceWordName[SMART_VOICE_INVALID_CMD_ID + 1][CMD_LENGTH] = { "接听电话",
"挂断电话",
"上一首",
"下一首",
"调大音量",
"调小音量",
"播放音乐",
"停止播放",
"继续播放",
"打开锻炼",
"打开短信",
"打开闹钟",
"支付宝支付",
"微信支付"
};
#ifdef __cplusplus
}
#endif
using namespace OHOS;
namespace TJD {
static void RecognVoiceEvent(const SmartVoiceCmdParam data)
{
SmartVoiceCmdParam *param = nullptr;
param = (SmartVoiceCmdParam *)&data;
if (param->cmdId < 0 || param->cmdId > SMART_VOICE_INVALID_CMD_ID) {
static_print_info("Get cmdid failed, funct callback finish!!");
return;
}
if (TjdUiVocassistModel::GetInstance()->GetPhoneDetailStatus() == ONE_OR_MORE_ROAD_AND_OTHER_STATUS) {
static_print_info("Phone is active, voc assistance can not open!!");
return;
}
static_print_info("[VoiceAssistModel] RecognVoiceEvent, cmdid = %d", param->cmdId);
if (NativeAbility::GetInstance().GetCurSliceId() != TJD_APP_VIEW_VOICE_ASSISTANT) { // 其他界面切换到语音助手界面
static_print_info("[VoiceAssistModel] CurSliceId does not equal TJD_APP_VIEW_VOICE_ASSISTANT");
if (strcmp(g_voiceWordName[param->cmdId], "小艺小艺") == 0) {
static_print_info("Current view is not offlineassist");
NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_VOICE_ASSISTANT);
}
} else if (NativeAbility::GetInstance().GetCurSliceId() == TJD_APP_VIEW_VOICE_ASSISTANT) { // 已经进入语音助手
if (TjdVoiceAssistance::GetInstance() == nullptr) {
static_print_info("VoiceAssistance instance is nullptr, funct callback finish!!");
return;
}
if (!TjdUiVocassistModel::GetInstance()->GetHasOneCmd()) {
static_print_info("CurSliceId equals TJD_APP_VIEW_VOICE_ASSISTANT");
// TjdVoiceAssistance::GetInstance()->SetCmdContext(g_voiceWordName[param->cmdId]);
TjdVoiceAssistance::GetInstance()->SwitchMedium(param->cmdId);
TjdUiVocassistModel::GetInstance()->SetHasOneCmd(true);
// TjdUiVocassistModel::GetInstance()->SetRegFlag(param->cmdId);
// TjdUiVocassistModel::GetInstance()->SetExitStatus(CONTINUTE_EXIT_MODE2);
// TjdVoiceAssistance::GetInstance()->DelayDisplayTime(500); // 500ms
}
}
}
void TJDVoiceFunction(SmartVoiceEventType type, td_void *data, td_s32 size)
{
int dataSize = sizeof(SmartVoiceCmdParam);
if (data == nullptr || dataSize != size) {
return;
}
switch (type) {
case SMART_VOICE_EVENT_VOICE_BEGIN:
break;
case SMART_VOICE_EVENT_VOICE_END:
break;
case SMART_VOICE_EVENT_VOICE_COMMAND: {
GraphicService::GetInstance()->PostGraphicEvent(std::bind(RecognVoiceEvent, *(SmartVoiceCmdParam *)data));
break;
}
default:
break;
}
}
TjdUiVocassistModel::TjdUiVocassistModel()
{
static_print_info( "[VoiceAssistModel] TjdUiVocassistModel");
}
TjdUiVocassistModel::~TjdUiVocassistModel()
{
static_print_info("[VoiceAssistModel] ~TjdUiVocassistModel");
}
TjdUiVocassistModel *TjdUiVocassistModel::GetInstance()
{
static TjdUiVocassistModel vocassistModel;
return &vocassistModel;
}
void TjdUiVocassistModel::Init()
{
static_print_info("[VoiceAssistModel] Init");
LocalAsrInitParams asrpara;
asrpara.powerMode = ALWAYS_WAKE;
asrpara.inputMode = INNER_AUDIO_PORT;
asrpara.enableAEC = DISABLE;
asrpara.enableNpu = DISABLE;
LocalAsrInit(&asrpara);
LocalAsrSetCallback(TJDVoiceFunction);
}
void TjdUiVocassistModel::UnInit()
{
static_print_info("[VoiceAssistModel] UnInit");
}
int TjdUiVocassistModel::GetPhoneDetailStatus() // 设置来电时的状态
{
int curCallNum = GetCurrCallNum();
int curCallState = GetCurrCallState();
if (curCallNum != 0) {
if (curCallNum == 1 && curCallState == HFP_HF_CALL_STATE_INCOMING) {
return ONE_ROAD_AND_INCOMING;
} else {
return ONE_OR_MORE_ROAD_AND_OTHER_STATUS;
}
} else {
return OTHER_STATUS;
}
}
// int TjdUiVocassistModel::GetToggleFlag()
// {
// return toggleFg;
// }
// void TjdUiVocassistModel::SetToggleFlag(int val)
// {
// toggleFg = val;
// }
int TjdUiVocassistModel::GetRegFlag()
{
return regFlag;
}
void TjdUiVocassistModel::SetRegFlag(int val)
{
regFlag = val;
}
// int TjdUiVocassistModel::GetExitStatus()
// {
// return exitStatus;
// }
// void TjdUiVocassistModel::SetExitStatus(int val)
// {
// exitStatus = val;
// }
// int TjdUiVocassistModel::GetConnectFlag()
// {
// return imgConnectFlag;
// }
// void TjdUiVocassistModel::SetConnectFlag(int flag)
// {
// imgConnectFlag = flag;
// }
bool TjdUiVocassistModel::GetHasOneCmd()
{
return hasOneCmd;
}
void TjdUiVocassistModel::SetHasOneCmd(bool fg)
{
hasOneCmd = fg;
}
}