211 lines
7.0 KiB
C++
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;
|
|
}
|
|
}
|