...
|
...
|
@@ -14,6 +14,8 @@ |
|
|
#include "Megaphone/Megaphone.h"
|
|
|
#include "DeviceInfo/DeviceInfo.h"
|
|
|
|
|
|
#include "CommonMod/CommonMod.h"
|
|
|
|
|
|
#include "Hal_Send/HalSend_type1/HalSend_type1.h"
|
|
|
#include "Hal_Send/HalSend.h"
|
|
|
#include "JZsdk_Hal.h"
|
...
|
...
|
@@ -21,9 +23,10 @@ |
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
#include "Megaphone/Megaphone.h"
|
|
|
#include "Megaphone/Music/AudioFile/Megaphone_AudioFile.h"
|
|
|
#include "Megaphone/Opus/Megaphone_Opus.h"
|
|
|
#endif
|
|
|
|
|
|
static int HalRecvMode = JZ_FLAGCODE_OFF;
|
|
|
static int HalRecvMode = JZ_FLAGCODE_OFF; //接收模式,主要是为了限制不同设备同时要求hal层做出 同一个数据接收相关功能 ,目前做法是只限定一个hal设备使用一种数据接收模式
|
|
|
static int HalRecvDataLen = 0; //用于计算接收数据长度
|
|
|
|
|
|
static int SecondaryDeviceName = 0x00; // 从设备名,用于多设备相连时通知控制端 从机设备名
|
...
|
...
|
@@ -74,6 +77,10 @@ static T_JZsdkReturnCode RecvDeal_AskForConnect(int Port, char *getbuf) |
|
|
Main_WorkModeSet(JZ_FLAGCODE_ON);
|
|
|
}
|
|
|
|
|
|
//5、打开连接状态
|
|
|
s_JZsdk_Hal_Info *halInfo = JZsdk_Hal_GetHalInfo();
|
|
|
halInfo->HalPort[Port].ConnectStatus = JZ_FLAGCODE_ON;
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
|
|
|
...
|
...
|
@@ -90,10 +97,28 @@ static T_JZsdkReturnCode RecvDeal_HeartBeat(int Port, char *getbuf) |
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
//1、获取连接情况
|
|
|
int status = Main_WorkModeSet(JZ_FLAGCODE_GET);
|
|
|
s_JZsdk_Hal_Info *halInfo = JZsdk_Hal_GetHalInfo();
|
|
|
|
|
|
//分析模式
|
|
|
int mode = getbuf[9];
|
|
|
if (mode == 0x00)
|
|
|
{
|
|
|
//2、回复心跳帧
|
|
|
HalSend_type1Send_Send_HeartBeatStatus(Port, FrameSequence, status);
|
|
|
HalSend_type1Send_Send_HeartBeatStatus(Port, FrameSequence, halInfo->HalPort[Port].ConnectStatus);
|
|
|
}
|
|
|
else if (mode == 0x01 || mode == 0x02)
|
|
|
{
|
|
|
if(mode == 0x01)
|
|
|
{
|
|
|
halInfo->HalPort[Port].HeartBeatStatusSend = JZ_FLAGCODE_ON;
|
|
|
}
|
|
|
else if (mode == 0x02)
|
|
|
{
|
|
|
halInfo->HalPort[Port].HeartBeatStatusSend = JZ_FLAGCODE_OFF;
|
|
|
}
|
|
|
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
}
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
...
|
...
|
@@ -449,20 +474,13 @@ static T_JZsdkReturnCode RecvDeal_RealTimeMP2_stop(int Port, char *getbuf) |
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_start(int Port, char *getbuf, int len)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,开始传输的音频文件保存",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
T_JZsdkReturnCode ret = HalRecv_tpye1_RecvDeal_UartTransmodeDecide();
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
JZSDK_LOG_ERROR("开始传输的音频文件保存失败");
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
//1、处理帧长度,获取文件名长度
|
|
|
int FileNameLen = ((int)getbuf[3] << 8) + (int)getbuf[4] - 2 - 9;
|
|
|
|
...
|
...
|
@@ -475,21 +493,16 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_start(int Port, char *getbu |
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
|
|
|
ret = Megaphone_SaveAudioFileStart(FileName);
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
//3、调整接收模式为音频文件传输
|
|
|
HalRecv_tpye1_RecvDeal_Set_UartReceiveMode(Port, JZ_DATA_TRANS_TYPE_AUDIO_FILE);
|
|
|
HalRecvDataLen = 0;
|
|
|
|
|
|
//4、回复操作成功
|
|
|
#endif
|
|
|
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
#else
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
|
}
|
...
|
...
|
@@ -502,7 +515,7 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_start(int Port, char *getbu |
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_LimitTransmission(int Port, char *getbuf, int len)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret;
|
|
|
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
...
|
...
|
@@ -515,21 +528,21 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_LimitTransmission(int Port, |
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
if (HalRecvMode != JZ_DATA_TRANS_TYPE_AUDIO_FILE)
|
|
|
{
|
|
|
JZSDK_LOG_ERROR("%s, 传输mp2文件未开始,无法传输", JZsdk_DefineCode_GetPortName(Port));
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
HalRecvDataLen += DataLen;
|
|
|
//JZSDK_LOG_DEBUG("%s,传输定长音频文件中 ,一共传输了%d字节",JZsdk_DefineCode_GetPortName(Port), HalRecvDataLen);
|
|
|
|
|
|
//传输数据接口
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
Megaphone_SaveAudioFileTrans(getbuf+9, DataLen);
|
|
|
ret = Megaphone_SaveAudioFileTrans(getbuf+9, DataLen);
|
|
|
#endif
|
|
|
|
|
|
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//无操作
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
}
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
|
|
|
...
|
...
|
@@ -541,31 +554,28 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_LimitTransmission(int Port, |
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,传输的音频文件保存",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
if (HalRecvMode != JZ_DATA_TRANS_TYPE_AUDIO_FILE)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
JZSDK_LOG_ERROR("关闭音频文件上传失败,音频文件上传未开始,无法关闭");
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
//1、保存音频数据
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
Megaphone_SaveAudioFileStop(JZ_FLAGCODE_OFF, NULL);
|
|
|
ret = Megaphone_SaveAudioFileStop(JZ_FLAGCODE_OFF, NULL);
|
|
|
#endif
|
|
|
|
|
|
//3、调整接收模式为音频文件传输
|
|
|
HalRecv_tpye1_RecvDeal_Set_UartReceiveMode(Port, JZ_FLAGCODE_OFF);
|
|
|
JZSDK_LOG_INFO("一共传输了%d字节", HalRecvDataLen);
|
|
|
HalRecvDataLen = 0;
|
|
|
|
|
|
//2、回复操作成功
|
|
|
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//4、回复操作成功
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//4、回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
}
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
...
|
...
|
@@ -585,14 +595,6 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop_and_check(int Port, ch |
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
if (HalRecvMode != JZ_DATA_TRANS_TYPE_AUDIO_FILE)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
JZSDK_LOG_ERROR("关闭音频文件上传失败,音频文件上传未开始,无法关闭");
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
unsigned char checkCode[128];
|
|
|
int frameLenth = ((int)getbuf[3]) << 8 | (int)getbuf[4];
|
|
|
int CodeLenth = frameLenth - 10 - 2;
|
...
|
...
|
@@ -649,11 +651,6 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop_and_check(int Port, ch |
|
|
}
|
|
|
#endif
|
|
|
|
|
|
//调整接收模式为音频文件传输
|
|
|
HalRecv_tpye1_RecvDeal_Set_UartReceiveMode(Port, JZ_FLAGCODE_OFF);
|
|
|
JZSDK_LOG_INFO("一共传输了%d字节", HalRecvDataLen);
|
|
|
HalRecvDataLen = 0;
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
|
...
|
...
|
@@ -1563,10 +1560,13 @@ static T_JZsdkReturnCode RecvDeal_Delete_Audio(int Port, char *getbuf) |
|
|
FileName[FileName_Length] = '\0'; // 确保文件名以null结尾
|
|
|
|
|
|
//3、拼接指令
|
|
|
char cmd[512];
|
|
|
snprintf(cmd, 512 ,"rm /root/sdcard/audio/%s", FileName);
|
|
|
char FilePath[512];
|
|
|
snprintf(FilePath, 512 ,"/root/sdcard/audio/%s", FileName);
|
|
|
|
|
|
//4、删除文件
|
|
|
JZsdk_Osal_delete(FilePath);
|
|
|
|
|
|
JZsdk_RunSystemCmd(cmd);
|
|
|
JZsdk_Sync();
|
|
|
|
|
|
//4、刷新歌曲列表
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
...
|
...
|
@@ -1587,7 +1587,7 @@ static T_JZsdkReturnCode RecvDeal_Delete_Audio(int Port, char *getbuf) |
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_Delete_VoiceRecord(int Port, char *getbuf)
|
|
|
{
|
|
|
JZSDK_LOG_INFO("%s,删除录音操作",JZsdk_DefineCode_GetPortName(Port));
|
|
|
JZSDK_LOG_INFO("%s,删除opus录音操作",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
...
|
...
|
@@ -1597,19 +1597,22 @@ static T_JZsdkReturnCode RecvDeal_Delete_VoiceRecord(int Port, char *getbuf) |
|
|
FileName_Length = ((int)getbuf[3] << 8) + (int)getbuf[4] - 2 - 9;
|
|
|
|
|
|
//2、获取名字
|
|
|
char FileName[256];
|
|
|
char FileName[JZSDK_FILE_NAME_SIZE_MAX];
|
|
|
memcpy(FileName, &getbuf[9], FileName_Length);
|
|
|
FileName[FileName_Length] = '\0'; // 确保文件名以null结尾
|
|
|
|
|
|
//3、拼接指令
|
|
|
char cmd[512];
|
|
|
snprintf(cmd, 512 ,"rm /root/sdcard/audio/%s", FileName);
|
|
|
char FilePath[512];
|
|
|
snprintf(FilePath, 512 ,"/root/sdcard/opus/%s", FileName);
|
|
|
|
|
|
JZsdk_RunSystemCmd(cmd);
|
|
|
//4、删除文件
|
|
|
JZsdk_Osal_delete(FilePath);
|
|
|
|
|
|
JZsdk_Sync();
|
|
|
|
|
|
//4、刷新歌曲列表
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
Megaphone_Flush_MusicList();
|
|
|
OpusFile_FlushList();
|
|
|
#endif
|
|
|
|
|
|
//回复操作成功
|
...
|
...
|
@@ -1629,6 +1632,128 @@ static T_JZsdkReturnCode RecvDeal_Delete_VideoRecord() |
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* 音频重命名
|
|
|
*
|
|
|
*
|
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_Rename_Audio(int Port, char *getbuf)
|
|
|
{
|
|
|
JZSDK_LOG_INFO("%s,音频重命名",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
//获取总帧长度
|
|
|
int FrameLength = JZsdk_Get_FrameLength(getbuf);
|
|
|
|
|
|
//获取原文件长度
|
|
|
int OldFileName_Length = getbuf[9];
|
|
|
|
|
|
//获取新文件长度
|
|
|
int NewFileName_Length = getbuf[10 + OldFileName_Length];
|
|
|
|
|
|
//获取原文件名字
|
|
|
unsigned char OldFileName[128];
|
|
|
memcpy(OldFileName, &getbuf[9], OldFileName_Length);
|
|
|
OldFileName[OldFileName_Length] = '\0'; // 确保文件名以null结尾
|
|
|
|
|
|
//获取新文件名字
|
|
|
unsigned char NewFileName[128];
|
|
|
memcpy(NewFileName, &getbuf[10 + OldFileName_Length], NewFileName_Length);
|
|
|
NewFileName[NewFileName_Length] = '\0'; // 确保文件名以null结尾
|
|
|
|
|
|
//3、拼接出地址
|
|
|
char OldFilePath[JZSDK_FILE_PATH_SIZE_MAX];
|
|
|
snprintf(OldFilePath, JZSDK_FILE_PATH_SIZE_MAX ,"/root/sdcard/audio/%s", OldFileName);
|
|
|
|
|
|
char NewFilePath[JZSDK_FILE_PATH_SIZE_MAX];
|
|
|
snprintf(NewFilePath, JZSDK_FILE_PATH_SIZE_MAX ,"/root/sdcard/audio/%s", NewFileName);
|
|
|
|
|
|
JZsdk_Osal_Rename(OldFilePath, NewFilePath);
|
|
|
|
|
|
JZsdk_Sync();
|
|
|
|
|
|
//4、刷新歌曲列表
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
Megaphone_Flush_MusicList();
|
|
|
#endif
|
|
|
|
|
|
//回复操作成功
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* 录音重命名
|
|
|
*
|
|
|
*
|
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_Rename_VoiceRecord(int Port, char *getbuf)
|
|
|
{
|
|
|
JZSDK_LOG_INFO("%s,音频重命名",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
//获取总帧长度
|
|
|
int FrameLength = JZsdk_Get_FrameLength(getbuf);
|
|
|
|
|
|
//获取原文件长度
|
|
|
int OldFileName_Length = getbuf[9];
|
|
|
|
|
|
//获取新文件长度
|
|
|
int NewFileName_Length = getbuf[10 + OldFileName_Length];
|
|
|
|
|
|
//获取原文件名字
|
|
|
unsigned char OldFileName[128];
|
|
|
memcpy(OldFileName, &getbuf[9], OldFileName_Length);
|
|
|
OldFileName[OldFileName_Length] = '\0'; // 确保文件名以null结尾
|
|
|
|
|
|
//获取新文件名字
|
|
|
unsigned char NewFileName[128];
|
|
|
memcpy(NewFileName, &getbuf[10 + OldFileName_Length], NewFileName_Length);
|
|
|
NewFileName[NewFileName_Length] = '\0'; // 确保文件名以null结尾
|
|
|
|
|
|
//3、拼接出地址
|
|
|
char OldFilePath[JZSDK_FILE_PATH_SIZE_MAX];
|
|
|
snprintf(OldFilePath, JZSDK_FILE_PATH_SIZE_MAX ,"/root/sdcard/opus/%s", OldFileName);
|
|
|
|
|
|
char NewFilePath[JZSDK_FILE_PATH_SIZE_MAX];
|
|
|
snprintf(NewFilePath, JZSDK_FILE_PATH_SIZE_MAX ,"/root/sdcard/opus/%s", NewFileName);
|
|
|
|
|
|
JZsdk_Osal_Rename(OldFilePath, NewFilePath);
|
|
|
|
|
|
JZsdk_Sync();
|
|
|
|
|
|
//4、刷新歌曲列表
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
OpusFile_FlushList();
|
|
|
#endif
|
|
|
|
|
|
//回复操作成功
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* 删除视频
|
|
|
*
|
|
|
*
|
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_Rename_VideoRecord()
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* tts设置音色
|
...
|
...
|
@@ -1840,28 +1965,101 @@ static T_JZsdkReturnCode RecvDeal_TTS_Trans_stop(int Port, char *getbuf) |
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* 打开opus传输
|
|
|
* 播放时间回传
|
|
|
*
|
|
|
*
|
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_OpusTrans_start(int Port, char *getbuf)
|
|
|
static T_JZsdkReturnCode RecvDeal_Current_Play_Time(int Port, char *getbuf)
|
|
|
{
|
|
|
JZSDK_LOG_INFO("%s,打开opus传输",JZsdk_DefineCode_GetPortName(Port));
|
|
|
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,设置播放时间回传",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
T_JZsdkReturnCode ret = HalRecv_tpye1_RecvDeal_UartTransmodeDecide();
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
//获取帧操作
|
|
|
int Mode = getbuf[9];
|
|
|
|
|
|
JZSDK_LOG_INFO("设置播放回传模式:%d", Mode);
|
|
|
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
|
|
|
//如果是0 或者 1 是关闭或打开回传模式
|
|
|
if (Mode == JZ_FLAGCODE_OFF || Mode == JZ_FLAGCODE_ON)
|
|
|
{
|
|
|
ret = Megaphone_PlayBackSet(Port, Mode);
|
|
|
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复操作成功
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
JZSDK_LOG_ERROR("打开opus传输失败, 已开启其他传输模式");
|
|
|
return ret;
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//如果是2,则主动索取
|
|
|
if (Mode == 2)
|
|
|
{
|
|
|
ret = Megaphone_PlayBackTimeGet(Port);
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* 获取播放时间回传模式
|
|
|
*
|
|
|
*
|
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_CheckStatus_CurrentPlayTime(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,获取播放时间回传模式",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
|
|
|
int mode = Megaphone_PlayBackGetMode(Port);
|
|
|
HalSend_type1Send_Reply_CurrentPlayTimeStatus(Port, mode);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* 打开opus传输
|
|
|
*
|
|
|
*
|
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_OpusTrans_start(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,打开opus传输1型",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
//1、获取解码比特率
|
|
|
int decode_rate = getbuf[9] * 8000;
|
|
|
if(decode_rate == 0)
|
...
|
...
|
@@ -1871,19 +2069,140 @@ static T_JZsdkReturnCode RecvDeal_OpusTrans_start(int Port, char *getbuf) |
|
|
|
|
|
//2、创建存储文件
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
Megaphone_SaveOpusStart(decode_rate);
|
|
|
ret = Megaphone_SaveOpusStart(NULL, decode_rate, 16000, 1);
|
|
|
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复操作成功
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
|
|
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_IS_BUSY)
|
|
|
{
|
|
|
JZSDK_LOG_ERROR("opus忙碌中");
|
|
|
}
|
|
|
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE)
|
|
|
{
|
|
|
JZSDK_LOG_ERROR("opus创建失败");
|
|
|
}
|
|
|
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
|
|
|
#else
|
|
|
JZSDK_LOG_ERROR("非喊话器不支持opus传输");
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
//3、修改接收模式为传输opus
|
|
|
HalRecv_tpye1_RecvDeal_Set_UartReceiveMode(Port, JZ_DATA_TRANS_TYPE_OPUS_FILE);
|
|
|
HalRecvDataLen = 0;
|
|
|
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* 打开opus传输Ⅱ型
|
|
|
*
|
|
|
*
|
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_OpusTrans_start_2(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,打开opus传输1型",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
//获取帧的长度
|
|
|
int FrameLen = JZsdk_Get_FrameLength(getbuf);
|
|
|
|
|
|
//获取存储模式
|
|
|
int SaveMode = getbuf[9];
|
|
|
|
|
|
//获取比特率
|
|
|
int BitChoose = getbuf[10];
|
|
|
int decode_rate = 16000;
|
|
|
// if (BitChoose == 0)
|
|
|
// {
|
|
|
// decode_rate = 16000;
|
|
|
// }
|
|
|
|
|
|
//获取采样率
|
|
|
int SampleChoose = getbuf[11];
|
|
|
int SampleRate = 16000;
|
|
|
// if (SampleChoose == 0)
|
|
|
// {
|
|
|
// SampleRate = 16000;
|
|
|
// }
|
|
|
|
|
|
//获取频道数
|
|
|
int ChannelChoose = getbuf[12];
|
|
|
int ChannelNum = 1;
|
|
|
// if (ChannelChoose == 0)
|
|
|
// {
|
|
|
// ChannelNum = 1;
|
|
|
// }
|
|
|
|
|
|
//获取文件名长度
|
|
|
int FileNameLen = getbuf[13];
|
|
|
if(FileNameLen != FrameLen - 14 - 2)
|
|
|
{
|
|
|
JZSDK_LOG_ERROR("文件名长度错误");
|
|
|
FileNameLen = FrameLen - 14 - 2;
|
|
|
}
|
|
|
|
|
|
if (FileNameLen > 128)
|
|
|
{
|
|
|
JZSDK_LOG_ERROR("文件名长度过长");
|
|
|
FileNameLen = 128;
|
|
|
}
|
|
|
|
|
|
//获取文件名
|
|
|
unsigned char FileName[128] = {0};
|
|
|
memcpy(FileName, getbuf + 14, FileNameLen);
|
|
|
|
|
|
//2、创建存储文件
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
|
|
|
if (SaveMode == JZ_FLAGCODE_OFF)
|
|
|
{
|
|
|
ret = Megaphone_SaveOpusStart(NULL, decode_rate, SampleRate, ChannelNum);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ret = Megaphone_SaveOpusStart(FileName, decode_rate, SampleRate, ChannelNum);
|
|
|
}
|
|
|
|
|
|
|
|
|
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复操作成功
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
|
|
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_IS_BUSY)
|
|
|
{
|
|
|
JZSDK_LOG_ERROR("opus忙碌中");
|
|
|
}
|
|
|
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE)
|
|
|
{
|
|
|
JZSDK_LOG_ERROR("opus创建失败");
|
|
|
}
|
|
|
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
|
|
|
#else
|
|
|
JZSDK_LOG_ERROR("非喊话器不支持opus传输");
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* opus定长传输文件
|
...
|
...
|
@@ -1897,13 +2216,6 @@ static T_JZsdkReturnCode RecvDeal_OpusTrans_LimitTransmission(int Port, char *ge |
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
if (HalRecvMode != JZ_DATA_TRANS_TYPE_OPUS_FILE)
|
|
|
{
|
|
|
JZSDK_LOG_ERROR("%s,不处于opus传输模式,无法接收opus定长音频文件",JZsdk_DefineCode_GetPortName(Port));
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
//提取出数据
|
|
|
int DataLen = ((int)getbuf[3] << 8 ) + (int)getbuf[4] - 2 - 9;
|
|
|
if (DataLen > 1024)
|
...
|
...
|
@@ -1912,12 +2224,20 @@ static T_JZsdkReturnCode RecvDeal_OpusTrans_LimitTransmission(int Port, char *ge |
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
HalRecvDataLen += DataLen;
|
|
|
JZSDK_LOG_DEBUG("%s,传输opus定长音频文件中 一共传输了%d字节",JZsdk_DefineCode_GetPortName(Port),HalRecvDataLen);
|
|
|
|
|
|
//传输数据接口
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
Megaphone_SaveOpusTrans(getbuf+9, DataLen);
|
|
|
ret = Megaphone_SaveOpusTrans(getbuf+9, DataLen);
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
#else
|
|
|
JZSDK_LOG_ERROR("非喊话器不支持opus传输");
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
#endif
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
...
|
...
|
@@ -1932,30 +2252,35 @@ static T_JZsdkReturnCode RecvDeal_OpusTrans_LimitTransmission(int Port, char *ge |
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_OpusTrans_stop(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,结束opus传输",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
if (HalRecvMode != JZ_DATA_TRANS_TYPE_OPUS_FILE)
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
ret = Megaphone_SaveOpusStop(JZ_FLAGCODE_OFF, NULL);
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
JZSDK_LOG_ERROR("关闭opus结束传输失败,opus结束传输未开始,无法关闭");
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//回复操作成功
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
|
|
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
Megaphone_SaveOpusStop(JZ_FLAGCODE_OFF, NULL);
|
|
|
#endif
|
|
|
|
|
|
HalRecv_tpye1_RecvDeal_Set_UartReceiveMode(Port, JZ_FLAGCODE_OFF);
|
|
|
JZSDK_LOG_INFO("一共传输了 %d字节\n",HalRecvDataLen);
|
|
|
HalRecvDataLen = 0;
|
|
|
#else
|
|
|
JZSDK_LOG_ERROR("非喊话器不支持opus传输");
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
|
|
|
//回复操作成功
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
#endif
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
...
|
...
|
@@ -1976,13 +2301,6 @@ static T_JZsdkReturnCode RecvDeal_OpusTrans_stop_and_check(int Port, char *getbu |
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
if (HalRecvMode != JZ_DATA_TRANS_TYPE_OPUS_FILE)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
JZSDK_LOG_ERROR("关闭音频文件上传失败,音频文件上传未开始,无法关闭");
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
unsigned char checkCode[128];
|
|
|
int frameLenth = ((int)getbuf[3]) << 8 | (int)getbuf[4];
|
...
|
...
|
@@ -2036,17 +2354,15 @@ static T_JZsdkReturnCode RecvDeal_OpusTrans_stop_and_check(int Port, char *getbu |
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
}
|
|
|
|
|
|
#else
|
|
|
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
JZSDK_LOG_ERROR("非喊话器不支持opus传输");
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
#endif
|
|
|
|
|
|
//3、调整接收模式为音频文件传输
|
|
|
HalRecv_tpye1_RecvDeal_Set_UartReceiveMode(Port, JZ_FLAGCODE_OFF);
|
|
|
JZSDK_LOG_INFO("一共传输了 %d字节\n",HalRecvDataLen);
|
|
|
HalRecvDataLen = 0;
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* opus播放
|
...
|
...
|
@@ -2060,24 +2376,147 @@ static T_JZsdkReturnCode RecvDeal_OpusPlay(int Port, char *getbuf) |
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
T_JZsdkReturnCode ret = HalRecv_tpye1_RecvDeal_UartTransmodeDecide();
|
|
|
//获取是否处于opus传输中的模式
|
|
|
if (OpusFile_GetSaveFlag() == JZ_FLAGCODE_ON)
|
|
|
{
|
|
|
JZSDK_LOG_ERROR("禁止播放opus,当前正处于录入中");
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
//获取命令
|
|
|
int Mode = getbuf[9];
|
|
|
if (Mode == 0)
|
|
|
{
|
|
|
UIcontrol_Opus_PlayFixedFile(Port);
|
|
|
|
|
|
//回复操作成功
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
}
|
|
|
else if (Mode == 1)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
|
|
|
|
|
/**********************************
|
|
|
*
|
|
|
* opus列表查询
|
|
|
*
|
|
|
*
|
|
|
* **********************************/
|
|
|
static T_JZsdkReturnCode RecvDeal_Get_OpusList(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,opus列表查询",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
|
|
|
//刷新opus列表
|
|
|
OpusFile_FlushList();
|
|
|
|
|
|
//获取opus总数
|
|
|
int OpusFileCount = OpusFile_GetListNum();
|
|
|
|
|
|
//注册一个opus数组
|
|
|
unsigned char **MusicName = (unsigned char **)malloc(OpusFileCount * sizeof(unsigned char*));
|
|
|
if (MusicName == NULL)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
//注册一个歌曲名字长度的数组
|
|
|
int *MusicNameLength = (int *)malloc(OpusFileCount * sizeof(int));
|
|
|
if (MusicNameLength == NULL)
|
|
|
{
|
|
|
free(MusicName);
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
//为每一首opus分配内存
|
|
|
for (int i = 0; i < OpusFileCount; i++)
|
|
|
{
|
|
|
MusicName[i] = (unsigned char*)malloc(128 * sizeof(unsigned char));
|
|
|
if (MusicName[i] == NULL)
|
|
|
{
|
|
|
// 内存分配失败,需要释放之前分配的内存
|
|
|
for (int j = 0; j < i; j++)
|
|
|
{
|
|
|
free(MusicName[j]);
|
|
|
}
|
|
|
free(MusicNameLength);
|
|
|
free(MusicName);
|
|
|
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
memset(MusicName[i], 0, 128 * sizeof(unsigned char));
|
|
|
|
|
|
//如果成功分配内存,则写入名字
|
|
|
Megaphone_OpusFile_GetAudioNameByIndex(i, MusicName[i], &MusicNameLength[i]);
|
|
|
}
|
|
|
|
|
|
JZSDK_LOG_DEBUG("opus列表取出完成");
|
|
|
|
|
|
//发送开始帧
|
|
|
ret = HalSend_type1Send_Send_OpusList_Start(Port, FrameSequence, OpusFileCount);
|
|
|
|
|
|
for (int i = 0; i < OpusFileCount; i++)
|
|
|
{
|
|
|
//获取歌曲详细信息
|
|
|
struct AudioMange_audio_struct AudioDetailMessage;
|
|
|
memset(&AudioDetailMessage, 0, sizeof(struct AudioMange_audio_struct));
|
|
|
ret = OpusFile_GetAudioInfo(MusicName[i], MusicNameLength[i],&AudioDetailMessage);
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
JZSDK_LOG_ERROR("opus播放失败,存在传输模式打开中");
|
|
|
return ret;
|
|
|
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
UIcontrol_Opus_PlayFixedFile(Port);
|
|
|
//发送opus列表
|
|
|
ret = HalSend_type1Send_Send_OpusList_Trans(Port, FrameSequence, AudioDetailMessage.FileName, AudioDetailMessage.FileNameLen, AudioDetailMessage.FileSize, AudioDetailMessage.Time);
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
|
|
|
//回复操作成功
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
|
|
//释放存储的数据
|
|
|
for (int i = 0; i < OpusFileCount; i++)
|
|
|
{
|
|
|
free(MusicName[i]);
|
|
|
}
|
|
|
|
|
|
free(MusicNameLength);
|
|
|
free(MusicName);
|
|
|
|
|
|
//发送结束帧
|
|
|
ret = HalSend_type1Send_Send_OpusList_Stop(Port, FrameSequence);
|
|
|
|
|
|
#else
|
|
|
JZSDK_LOG_ERROR("非喊话器不支持opus列表");
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
/*********
|
|
|
*
|
...
|
...
|
@@ -2087,24 +2526,13 @@ static T_JZsdkReturnCode RecvDeal_OpusPlay(int Port, char *getbuf) |
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_Opus_RealTimeVoice_start(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,开启opus实时喊话功能",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
T_JZsdkReturnCode ret = HalRecv_tpye1_RecvDeal_UartTransmodeDecide();
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
JZSDK_LOG_ERROR("开启opus实时喊话失败");
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
//1、修改接收模式
|
|
|
HalRecv_tpye1_RecvDeal_Set_UartReceiveMode(Port, JZ_DATA_TRANS_TYPE_REAL_TIME_OPUS);
|
|
|
HalRecvDataLen = 0;
|
|
|
|
|
|
//2、获取码率倍率 默认8k*1倍
|
|
|
int RateMagnification = (int)getbuf[9];
|
|
|
int Rate;
|
...
|
...
|
@@ -2120,11 +2548,17 @@ static T_JZsdkReturnCode RecvDeal_Opus_RealTimeVoice_start(int Port, char *getbu |
|
|
|
|
|
//3、打开实时语音模式
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
Megaphone_RealTimeVoice_Start(Rate);
|
|
|
ret = Megaphone_RealTimeVoice_Start(Rate);
|
|
|
#endif
|
|
|
|
|
|
//4、通知成功打开语音发送模式
|
|
|
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
}
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
...
|
...
|
@@ -2138,7 +2572,7 @@ static T_JZsdkReturnCode RecvDeal_Opus_RealTimeVoice_start(int Port, char *getbu |
|
|
static T_JZsdkReturnCode RecvDeal_Opus_RealTimeVoice_LimitTransmission(int Port, char *getbuf, int len)
|
|
|
{
|
|
|
|
|
|
T_JZsdkReturnCode ret;
|
|
|
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
...
|
...
|
@@ -2152,23 +2586,18 @@ static T_JZsdkReturnCode RecvDeal_Opus_RealTimeVoice_LimitTransmission(int Port, |
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
//判断是否是opus实时语音传输模式
|
|
|
if (HalRecvMode != JZ_DATA_TRANS_TYPE_REAL_TIME_OPUS)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
JZSDK_LOG_ERROR("%s,opus实时语音定长传输失败,未开启实时opus传输模式", JZsdk_DefineCode_GetPortName(Port));
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
HalRecvDataLen += DataLen;
|
|
|
JZSDK_LOG_DEBUG("%s,传输opus定长语音传输中 长度:%d,总长度:%d",JZsdk_DefineCode_GetPortName(Port), DataLen, HalRecvDataLen);
|
|
|
JZSDK_LOG_DEBUG("%s,传输opus定长语音传输中 长度:%d",JZsdk_DefineCode_GetPortName(Port), DataLen);
|
|
|
|
|
|
//传输数据接口
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
ret = Megaphone_RealTimeVoice_Trans(getbuf+9, DataLen);
|
|
|
#endif
|
|
|
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
|
...
|
...
|
@@ -2188,19 +2617,6 @@ static T_JZsdkReturnCode RecvDeal_Opus_RealTimeVoice_stop(int Port, char *getbuf |
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
if (HalRecvMode != JZ_DATA_TRANS_TYPE_REAL_TIME_OPUS)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
JZSDK_LOG_ERROR("关闭opus实时语音发送功能失败,opus实时语音发送功能未开始,无法关闭");
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
//1、修改接收模式
|
|
|
HalRecv_tpye1_RecvDeal_Set_UartReceiveMode(Port, JZ_FLAGCODE_OFF);
|
|
|
JZSDK_LOG_INFO("一共播放了:%d的内容", HalRecvDataLen);
|
|
|
HalRecvDataLen = 0;
|
|
|
|
|
|
//2、关闭实时语音模式
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
ret = Megaphone_RealTimeVoice_Close();
|
...
|
...
|
@@ -2604,6 +3020,185 @@ static T_JZsdkReturnCode RecvDeal_Checkstatus_OutPutPower(int Port, char *getbuf |
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************************************************************
|
|
|
*
|
|
|
* 升级部分
|
|
|
*
|
|
|
* *******************************************************************************************************************************/
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* 准备升级
|
|
|
*
|
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_Upgrade_Prepare(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,准备升级",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
int status = 0;
|
|
|
Upgrade_GetStatus(&status);
|
|
|
|
|
|
//回复升级的准备状态
|
|
|
HalSend_type1Send_Reply_ReadyForUpdate(Port, FrameSequence);
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* 升级校验码
|
|
|
*
|
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_Upgrade_SendCheckCode(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,升级校验码",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
//解析出校验码
|
|
|
unsigned char CheckCode[32];
|
|
|
memcpy(CheckCode, getbuf + 9, 32);
|
|
|
|
|
|
//将校验码放置到升级模块
|
|
|
ret = Upgrade_PackageCheckCodeSave(CheckCode, JZSDK_CHECK_SUM_TYPE_MD5, 32);
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复校验码已收到
|
|
|
HalSend_type1Send_Reply_UpgradeHaveRecvCheckCode(Port, 1);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//回复校验码已收到
|
|
|
HalSend_type1Send_Reply_UpgradeHaveRecvCheckCode(Port, 0);
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* 数据传输开始
|
|
|
*
|
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_Upgrade_Start(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,数据传输开始",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
ret = Upgrade_PackageDownload_Start();
|
|
|
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复开始文件发送
|
|
|
HalSend_type1Send_Reply_UpgradeStart(Port);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//回复开始文件发送失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* 数据传输中
|
|
|
*
|
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_Upgrade_Trans(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,数据传输中",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
//解析数据长度
|
|
|
int FrameLength = JZsdk_Get_FrameLength(getbuf);
|
|
|
int BufLen = FrameLength - 8 -2;
|
|
|
|
|
|
ret = Upgrade_PackageDownload_Trans(&getbuf[9], BufLen);
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复数据传输失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* 数据传输结束
|
|
|
*
|
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_Upgrade_End(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,数据传输结束",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
ret = Upgrade_PackageDownload_Stop();
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复数据传输失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return ret;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//回复结束文件传输
|
|
|
HalSend_type1Send_Reply_UpgradeEnd(Port);
|
|
|
}
|
|
|
|
|
|
//回复完成后,开始校验
|
|
|
ret = Upgrade_PackageCheck();
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
HalSend_type1Send_Reply_UpgradeCheckResult(Port, 1);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
//回复校验成功
|
|
|
HalSend_type1Send_Reply_UpgradeCheckResult(Port, 0);
|
|
|
|
|
|
//开始升级
|
|
|
Upgrade_PackageUpgrade();
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************************************************************
|
|
|
*
|
|
|
* 警灯部分
|
...
|
...
|
@@ -3311,8 +3906,31 @@ static T_JZsdkReturnCode RecvDeal_Checkstatus_GimbalLinkage(int Port, char *getb |
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
|
|
|
static T_JZTaskHandle g_UartReinit_task = NULL;
|
|
|
|
|
|
static void *UartReinit_thread(void *arg)
|
|
|
{
|
|
|
int *arg_value = (int *)arg;
|
|
|
|
|
|
int Port = arg_value[0];
|
|
|
|
|
|
int Value[1];
|
|
|
Value[0]= arg_value[1];
|
|
|
|
|
|
|
|
|
JZsdk_HalPort_ReInit(Port, Value);
|
|
|
|
|
|
JZSDK_LOG_INFO("串口重置完毕");
|
|
|
|
|
|
free(arg);
|
|
|
}
|
|
|
|
|
|
|
|
|
static T_JZsdkReturnCode RecvDeal_UartBitrateChange(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkOsalHandler *osalHandler = JZsdk_Platform_GetOsalHandler();
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,收到串口比特率修改",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
...
|
...
|
@@ -3349,8 +3967,14 @@ static T_JZsdkReturnCode RecvDeal_UartBitrateChange(int Port, char *getbuf) |
|
|
break;
|
|
|
}
|
|
|
|
|
|
int Value[1] = {BitRate};
|
|
|
JZsdk_HalPort_ReInit(Port, Value);
|
|
|
int *arg = (int *)malloc(sizeof(int) * 2);
|
|
|
arg[0] = Port;
|
|
|
arg[1] = BitRate;
|
|
|
|
|
|
//使用一个线程用于修改比特率
|
|
|
osalHandler->TaskCreate("UartReinit_task", UartReinit_thread, 8192, arg, &g_UartReinit_task);
|
|
|
|
|
|
JZSDK_LOG_INFO("已创建串口重置线程");
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
...
|
...
|
@@ -3832,13 +4456,37 @@ static T_JZsdkReturnCode RecvDeal_InstructInput(int Port, int Receive_mode, unsi |
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
//音频重命名
|
|
|
case JZ_INSCODE_5AFRAME_RENAME_AUDIO:
|
|
|
RecvDeal_Rename_Audio(Port,getbuf);
|
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
//录音重命名
|
|
|
case JZ_INSCODE_5AFRAME_RENAME_VOICE_RECORD:
|
|
|
RecvDeal_Rename_VoiceRecord(Port,getbuf);
|
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
//视频重命名
|
|
|
case JZ_INSCODE_5AFRAME_RENAME_VIDEO_RECORD:
|
|
|
RecvDeal_Rename_VideoRecord(Port,getbuf);
|
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
//打开opus传输
|
|
|
case JZ_INSCODE_5AFRAME_OPUS_TRANS_START:
|
|
|
case JZ_INSCODE_5AFRAME_OPUS_TRANS_START_1:
|
|
|
RecvDeal_OpusTrans_start(Port,getbuf);
|
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
|
|
|
//传输opus文件数据2型
|
|
|
case JZ_INSCODE_5AFRAME_OPUS_TRANS_START_2:
|
|
|
RecvDeal_OpusTrans_start_2(Port,getbuf);
|
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
//传输定长opus文件数据
|
|
|
case JZ_INSCODE_5AFRAME_OPUS_TRANS_LIMIT_TRANSMISSION:
|
|
|
RecvDeal_OpusTrans_LimitTransmission(Port,getbuf, len);
|
...
|
...
|
@@ -3863,6 +4511,11 @@ static T_JZsdkReturnCode RecvDeal_InstructInput(int Port, int Receive_mode, unsi |
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
//获取opus列表
|
|
|
case JZ_INSCODE_5AFRAME_OPUS_GETOPUSLIST:
|
|
|
RecvDeal_Get_OpusList(Port,getbuf);
|
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
//开启opus实时喊话
|
|
|
case JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_START:
|
...
|
...
|
@@ -3922,6 +4575,17 @@ static T_JZsdkReturnCode RecvDeal_InstructInput(int Port, int Receive_mode, unsi |
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
//开关播放时间回传
|
|
|
case JZ_INSCODE_5AFRAME_CURRENT_PLAY_TIME:
|
|
|
RecvDeal_Current_Play_Time(Port,getbuf);
|
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
//检查是否开启播放时间回传
|
|
|
case JZ_INSCODE_5AFRAME_CHECKSTATUS_CURRENT_PLAYTIME:
|
|
|
RecvDeal_CheckStatus_CurrentPlayTime(Port,getbuf);
|
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
//音频列表获取
|
|
|
case JZ_INSCODE_5AFRAME_AUDIO_GETMUSICLIST:
|
...
|
...
|
@@ -3998,6 +4662,34 @@ static T_JZsdkReturnCode RecvDeal_InstructInput(int Port, int Receive_mode, unsi |
|
|
|
|
|
|
|
|
|
|
|
//升级部分
|
|
|
|
|
|
//准备升级
|
|
|
case JZ_INSCODE_5AFRAME_UPGRADE_PERPARE:
|
|
|
RecvDeal_Upgrade_Prepare(Port,getbuf);
|
|
|
break;
|
|
|
|
|
|
//升级校验码
|
|
|
case JZ_INSCODE_5AFRAME_UPGRADE_SEND_CHECKCODE:
|
|
|
RecvDeal_Upgrade_SendCheckCode(Port,getbuf);
|
|
|
break;
|
|
|
|
|
|
//数据传输开始
|
|
|
case JZ_INSCODE_5AFRAME_UPGRADE_STRAT:
|
|
|
RecvDeal_Upgrade_Start(Port,getbuf);
|
|
|
break;
|
|
|
|
|
|
//数据传输中
|
|
|
case JZ_INSCODE_5AFRAME_UPGRADE_TRANS:
|
|
|
RecvDeal_Upgrade_Trans(Port,getbuf);
|
|
|
break;
|
|
|
|
|
|
//数据传输结束
|
|
|
case JZ_INSCODE_5AFRAME_UPGRADE_END:
|
|
|
RecvDeal_Upgrade_End(Port,getbuf);
|
|
|
break;
|
|
|
|
|
|
|
|
|
/*******************************************************************************************************************************
|
|
|
*
|
|
|
* 5B类部分
|
...
|
...
|
@@ -4293,9 +4985,6 @@ static T_JZsdkReturnCode HalRecv_tpye1_RecvDeal_Set_UartReceiveMode(int Port, in |
|
|
static T_JZsdkReturnCode HalRecv_tpye1_RecvDeal_UartTransmodeDecide()
|
|
|
{
|
|
|
if ((HalRecvMode == JZ_DATA_TRANS_TYPE_REAL_TIME_MP2 ) //mp2实时语音传输模式
|
|
|
|| (HalRecvMode == JZ_DATA_TRANS_TYPE_AUDIO_FILE) //音频文件传输模式
|
|
|
|| (HalRecvMode == JZ_DATA_TRANS_TYPE_OPUS_FILE) //opus无限制传输模式
|
|
|
|| (HalRecvMode == JZ_DATA_TRANS_TYPE_REAL_TIME_OPUS) //opus实时语音无限制传输模式
|
|
|
|| (HalRecvMode == JZ_DATA_TRANS_TYPE_TTS)) //TTS无限制传输模式)
|
|
|
{
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
...
|
...
|
|