void LLIMSpeakerMgr::setSpeakers(const LLSD& speakers) { if ( !speakers.isMap() ) return; if ( speakers.has("agent_info") && speakers["agent_info"].isMap() ) { LLSD::map_const_iterator speaker_it; for(speaker_it = speakers["agent_info"].beginMap(); speaker_it != speakers["agent_info"].endMap(); ++speaker_it) { LLUUID agent_id(speaker_it->first); LLPointer<LLSpeaker> speakerp = setSpeaker( agent_id, LLStringUtil::null, LLSpeaker::STATUS_TEXT_ONLY); if ( speaker_it->second.isMap() ) { BOOL is_moderator = speakerp->mIsModerator; speakerp->mIsModerator = speaker_it->second["is_moderator"]; speakerp->mModeratorMutedText = speaker_it->second["mutes"]["text"]; // Fire event only if moderator changed if ( is_moderator != speakerp->mIsModerator ) { LL_DEBUGS("Speakers") << "Speaker " << agent_id << (is_moderator ? "is now" : "no longer is") << " a moderator" << llendl; fireEvent(new LLSpeakerUpdateModeratorEvent(speakerp), "update_moderator"); } } } } else if ( speakers.has("agents" ) && speakers["agents"].isArray() ) { //older, more decprecated way. Need here for //using older version of servers LLSD::array_const_iterator speaker_it; for(speaker_it = speakers["agents"].beginArray(); speaker_it != speakers["agents"].endArray(); ++speaker_it) { const LLUUID agent_id = (*speaker_it).asUUID(); LLPointer<LLSpeaker> speakerp = setSpeaker( agent_id, LLStringUtil::null, LLSpeaker::STATUS_TEXT_ONLY); } } }
void LLLocalSpeakerMgr::updateSpeakerList() { // pull speakers from voice channel LLSpeakerMgr::updateSpeakerList(); if (gDisconnected)//the world is cleared. { return ; } // pick up non-voice speakers in chat range uuid_vec_t avatar_ids; std::vector<LLVector3d> positions; LLWorld::getInstance()->getAvatars(&avatar_ids, &positions, gAgent.getPositionGlobal(), CHAT_NORMAL_RADIUS); for(U32 i=0; i<avatar_ids.size(); i++) { setSpeaker(avatar_ids[i]); } // check if text only speakers have moved out of chat range for (speaker_map_t::iterator speaker_it = mSpeakers.begin(); speaker_it != mSpeakers.end(); ++speaker_it) { LLUUID speaker_id = speaker_it->first; LLSpeaker* speakerp = speaker_it->second; if (speakerp->mStatus == LLSpeaker::STATUS_TEXT_ONLY) { LLVOAvatar* avatarp = (LLVOAvatar*)gObjectList.findObject(speaker_id); if (!avatarp || dist_vec(avatarp->getPositionAgent(), gAgent.getPositionAgent()) > CHAT_NORMAL_RADIUS) { setSpeakerNotInChannel(speakerp); } } } }
void LLSpeakerMgr::updateSpeakerList() { //MK if (gRRenabled && gAgent.mRRInterface.mContainsShownames) { return; } //mk // are we bound to the currently active voice channel? if ((!mVoiceChannel && LLVoiceClient::getInstance()->inProximalChannel()) || (mVoiceChannel && mVoiceChannel->isActive())) { std::set<LLUUID> participants; LLVoiceClient::getInstance()->getParticipantList(participants); // add new participants to our list of known speakers for (std::set<LLUUID>::iterator participant_it = participants.begin(); participant_it != participants.end(); ++participant_it) { setSpeaker(*participant_it, LLVoiceClient::getInstance()->getDisplayName(*participant_it), LLSpeaker::STATUS_VOICE_ACTIVE, (LLVoiceClient::getInstance()->isParticipantAvatar(*participant_it)?LLSpeaker::SPEAKER_AGENT:LLSpeaker::SPEAKER_EXTERNAL)); } } }
void LLLocalSpeakerMgr::updateSpeakerList() { // pull speakers from voice channel LLSpeakerMgr::updateSpeakerList(); // add non-voice speakers in chat range std::vector< LLCharacter* >::iterator avatar_it; for(avatar_it = LLCharacter::sInstances.begin(); avatar_it != LLCharacter::sInstances.end(); ++avatar_it) { LLVOAvatar* avatarp = (LLVOAvatar*)*avatar_it; if (!avatarp->isDead() && dist_vec(avatarp->getPositionAgent(), gAgent.getPositionAgent()) <= CHAT_NORMAL_RADIUS) { setSpeaker(avatarp->getID()); } } // check if text only speakers have moved out of chat range for (speaker_map_t::iterator speaker_it = mSpeakers.begin(); speaker_it != mSpeakers.end(); ++speaker_it) { LLUUID speaker_id = speaker_it->first; LLSpeaker* speakerp = speaker_it->second; if (speakerp->mStatus == LLSpeaker::STATUS_TEXT_ONLY) { LLVOAvatar* avatarp = (LLVOAvatar*)gObjectList.findObject(speaker_id); if (!avatarp || avatarp->isDead() || dist_vec(avatarp->getPositionAgent(), gAgent.getPositionAgent()) > CHAT_NORMAL_RADIUS) { speakerp->mStatus = LLSpeaker::STATUS_NOT_IN_CHANNEL; speakerp->mDotColor = INACTIVE_COLOR; speakerp->mActivityTimer.resetWithExpiry(SPEAKER_TIMEOUT); } } } }
void LLIMSpeakerMgr::setSpeakers(const LLSD& speakers) { if ( !speakers.isMap() ) return; if ( speakers.has("agent_info") && speakers["agent_info"].isMap() ) { LLSD::map_const_iterator speaker_it; for(speaker_it = speakers["agent_info"].beginMap(); speaker_it != speakers["agent_info"].endMap(); ++speaker_it) { LLUUID agent_id(speaker_it->first); LLPointer<LLSpeaker> speakerp = setSpeaker( agent_id, LLStringUtil::null, LLSpeaker::STATUS_TEXT_ONLY); if ( speaker_it->second.isMap() ) { speakerp->mIsModerator = speaker_it->second["is_moderator"]; speakerp->mModeratorMutedText = speaker_it->second["mutes"]["text"]; } } } else if ( speakers.has("agents" ) && speakers["agents"].isArray() ) { //older, more decprecated way. Need here for //using older version of servers LLSD::array_const_iterator speaker_it; for(speaker_it = speakers["agents"].beginArray(); speaker_it != speakers["agents"].endArray(); ++speaker_it) { const LLUUID agent_id = (*speaker_it).asUUID(); LLPointer<LLSpeaker> speakerp = setSpeaker( agent_id, LLStringUtil::null, LLSpeaker::STATUS_TEXT_ONLY); } } }
void LLSpeakerMgr::updateSpeakerList() { // are we bound to the currently active voice channel? if ((!mVoiceChannel && gVoiceClient->inProximalChannel()) || (mVoiceChannel && mVoiceChannel->isActive())) { LLVoiceClient::participantMap* participants = gVoiceClient->getParticipantList(); LLVoiceClient::participantMap::iterator participant_it; // add new participants to our list of known speakers for (participant_it = participants->begin(); participant_it != participants->end(); ++participant_it) { LLVoiceClient::participantState* participantp = participant_it->second; setSpeaker(participantp->mAvatarID, "", LLSpeaker::STATUS_VOICE_ACTIVE); } } }
//lgg todo setIrcSpeakers setSpeaker void LLIMSpeakerMgr::setIrcSpeakers(const LLSD& speakers) { for (speaker_map_t::iterator speaker_it = mSpeakers.begin(); speaker_it != mSpeakers.end(); ++speaker_it) { LLSpeaker* tempspeakerp = speaker_it->second; tempspeakerp->mStatus = LLSpeaker::STATUS_NOT_IN_CHANNEL; tempspeakerp->mDotColor = INACTIVE_COLOR; tempspeakerp->mActivityTimer.resetWithExpiry(SPEAKER_TIMEOUT); } //mSpeakers.clear(); //mSpeakersSorted.clear(); for(int i = 0; i < speakers.size(); i++) { LLSD personData = speakers[i]; /*(llinfos << " adding a new person to the list " << personData["irc_agent_id"].asString().c_str() << "=id----" << personData["irc_agent_name"].asString().c_str() << "=name----" << personData["irc_agent_mod"].asString().c_str() << "=mod----" << personData["irc_channel"].asString().c_str() << "=chan----" << personData["irc_mode"].asString().c_str() << "=mode----" << llendl; */ LLUUID agent_id = LLUUID((const LLUUID&)personData["irc_agent_id"]); LLPointer<LLSpeaker> speakerp = findSpeaker(agent_id); if(speakerp.isNull()) { speakerp = setSpeaker( agent_id, personData["irc_agent_name"].asString(), LLSpeaker::STATUS_TEXT_ONLY, LLSpeaker::SPEAKER_AGENT); } speakerp->mDotColor = ACTIVE_COLOR; speakerp->mStatus = LLSpeaker::STATUS_TEXT_ONLY; speakerp->mIsModerator = personData["irc_agent_mod"].asBoolean(); } }
void LLLocalSpeakerMgr::updateSpeakerList() { // pull speakers from voice channel LLSpeakerMgr::updateSpeakerList(); if (gDisconnected)//the world is cleared. { return ; } // pick up non-voice speakers in chat range std::vector<LLUUID> avatar_ids; std::vector<LLVector3d> positions; LLWorld::getInstance()->getAvatars(&avatar_ids, &positions, gAgent.getPositionGlobal(), CHAT_NORMAL_RADIUS); for(U32 i=0; i<avatar_ids.size(); i++) { setSpeaker(avatar_ids[i]); } // check if text only speakers have moved out of chat range for (speaker_map_t::iterator speaker_it = mSpeakers.begin(); speaker_it != mSpeakers.end(); ++speaker_it) { LLUUID speaker_id = speaker_it->first; LLSpeaker* speakerp = speaker_it->second; if (speakerp->mStatus == LLSpeaker::STATUS_TEXT_ONLY) { LLVOAvatar* avatarp = (LLVOAvatar*)gObjectList.findObject(speaker_id); if (!avatarp || avatarp->isDead() || dist_vec(avatarp->getPositionAgent(), gAgent.getPositionAgent()) > CHAT_NORMAL_RADIUS) { speakerp->mStatus = LLSpeaker::STATUS_NOT_IN_CHANNEL; speakerp->mDotColor = INACTIVE_COLOR; speakerp->mActivityTimer.resetWithExpiry(SPEAKER_TIMEOUT); } } } }
void LLIMSpeakerMgr::updateSpeakers(const LLSD& update) { if ( !update.isMap() ) return; if ( update.has("agent_updates") && update["agent_updates"].isMap() ) { LLSD::map_const_iterator update_it; for( update_it = update["agent_updates"].beginMap(); update_it != update["agent_updates"].endMap(); ++update_it) { LLUUID agent_id(update_it->first); LLPointer<LLSpeaker> speakerp = findSpeaker(agent_id); LLSD agent_data = update_it->second; if (agent_data.isMap() && agent_data.has("transition")) { if (agent_data["transition"].asString() == "LEAVE" && speakerp.notNull()) { setSpeakerNotInChannel(speakerp); } else if (agent_data["transition"].asString() == "ENTER") { // add or update speaker speakerp = setSpeaker(agent_id); } else { llwarns << "bad membership list update " << ll_print_sd(agent_data["transition"]) << llendl; } } if (speakerp.isNull()) continue; // should have a valid speaker from this point on if (agent_data.isMap() && agent_data.has("info")) { LLSD agent_info = agent_data["info"]; if (agent_info.has("is_moderator")) { BOOL is_moderator = speakerp->mIsModerator; speakerp->mIsModerator = agent_info["is_moderator"]; // Fire event only if moderator changed if ( is_moderator != speakerp->mIsModerator ) fireEvent(new LLSpeakerUpdateModeratorEvent(speakerp), "update_moderator"); } if (agent_info.has("mutes")) { speakerp->mModeratorMutedText = agent_info["mutes"]["text"]; } } } } else if ( update.has("updates") && update["updates"].isMap() ) { LLSD::map_const_iterator update_it; for ( update_it = update["updates"].beginMap(); update_it != update["updates"].endMap(); ++update_it) { LLUUID agent_id(update_it->first); LLPointer<LLSpeaker> speakerp = findSpeaker(agent_id); std::string agent_transition = update_it->second.asString(); if (agent_transition == "LEAVE" && speakerp.notNull()) { setSpeakerNotInChannel(speakerp); } else if ( agent_transition == "ENTER") { // add or update speaker speakerp = setSpeaker(agent_id); } else { llwarns << "bad membership list update " << agent_transition << llendl; } } } }
void LLIMSpeakerMgr::updateSpeakers(const LLSD& update) { if ( !update.isMap() ) return; if ( update.has("agent_updates") && update["agent_updates"].isMap() ) { LLSD::map_const_iterator update_it; for( update_it = update["agent_updates"].beginMap(); update_it != update["agent_updates"].endMap(); ++update_it) { LLUUID agent_id(update_it->first); LLPointer<LLSpeaker> speakerp = findSpeaker(agent_id); LLSD agent_data = update_it->second; if (agent_data.isMap() && agent_data.has("transition")) { if (agent_data["transition"].asString() == "LEAVE" && speakerp.notNull()) { speakerp->mStatus = LLSpeaker::STATUS_NOT_IN_CHANNEL; speakerp->mDotColor = INACTIVE_COLOR; speakerp->mActivityTimer.resetWithExpiry(SPEAKER_TIMEOUT); } else if (agent_data["transition"].asString() == "ENTER") { // add or update speaker speakerp = setSpeaker(agent_id); } else { llwarns << "bad membership list update " << ll_print_sd(agent_data["transition"]) << llendl; } } if (speakerp.isNull()) continue; // should have a valid speaker from this point on if (agent_data.isMap() && agent_data.has("info")) { LLSD agent_info = agent_data["info"]; if (agent_info.has("is_moderator")) { speakerp->mIsModerator = agent_info["is_moderator"]; } if (agent_info.has("mutes")) { speakerp->mModeratorMutedText = agent_info["mutes"]["text"]; } } } } else if ( update.has("updates") && update["updates"].isMap() ) { LLSD::map_const_iterator update_it; for ( update_it = update["updates"].beginMap(); update_it != update["updates"].endMap(); ++update_it) { LLUUID agent_id(update_it->first); LLPointer<LLSpeaker> speakerp = findSpeaker(agent_id); std::string agent_transition = update_it->second.asString(); if (agent_transition == "LEAVE" && speakerp.notNull()) { speakerp->mStatus = LLSpeaker::STATUS_NOT_IN_CHANNEL; speakerp->mDotColor = INACTIVE_COLOR; speakerp->mActivityTimer.resetWithExpiry(SPEAKER_TIMEOUT); } else if ( agent_transition == "ENTER") { // add or update speaker speakerp = setSpeaker(agent_id); } else { llwarns << "bad membership list update " << agent_transition << llendl; } } } }
int main( int argc, char **argv ) { int n, i; char *com; fp_err = stderr; init_conf(); com = argv[0]; --argc; ++argv; while( argc > 0 && argv[0][0] == '-' ) { switch( argv[0][1] ) { case 'C': if( argc < 2 ) usage( com ); read_conf( argv[1] ); --argc; ++argv; break; /*******↓for server mode *******/ case 'p': /* 引数が不正な場合はエラー出力 */ if( argc < 2 ) usage( com ); /* ポート番号の読み込み */ i = atoi( argv[1] ); if (i > 1024) { nPort = i; } s_mode = 1; --argc; ++argv; break; /*******↑***********************/ case 'v': printf( "%s\n", moduleVersion ); printf( "%s\n", protocolVersion ); exit(0); default: usage( com ); } --argc; ++argv; } set_default_conf(); initialize(); n = setjmp( ebuf ); if( n > 0 ) chasen_process = 0; /* to restart 'chasen' process */ for( ;; ) { #ifdef PRINTDATA TmpMsg( "> " ); #endif n_arg = read_command( v_arg ); #ifdef PRINTDATA { int i; TmpMsg( "command is \n" ); for( i=0; i<n_arg; ++i ) { TmpMsg( " %d: %s\n", i+1, v_arg[i] ); } } #endif /* 「o」 で set Speak = NOW のショートカット */ if( strcmp(v_arg[0],"o")==0 ) { setSpeak( "=", "NOW" ); continue; } if( n_arg < 2 ) { unknown_com(); continue; } switch( commandID( v_arg[0] ) ) { case C_set: if( n_arg < 4 ) { unknown_com(); break; } switch( slotID( v_arg[1] ) ) { case S_Run: setRun( v_arg[2], v_arg[3] ); break; case S_Speaker: setSpeaker( v_arg[2], v_arg[3] ); break; case S_Alpha: setAlpha( v_arg[2], v_arg[3] ); break; case S_Postfilter_coef: setPostfilter_coef( v_arg[2], v_arg[3] ); break; case S_Text: setText( v_arg[2], v_arg[3] ); break; case S_Speak: setSpeak( v_arg[2], v_arg[3] ); break; case S_SaveRAW: setSave( v_arg[2], v_arg[3] ); break; case S_Save: setSave( v_arg[2], v_arg[3] ); break; case S_LoadRAW: setSpeechFile( v_arg[2], v_arg[3], RAW ); break; case S_SpeechFile: setSpeechFile( v_arg[2], v_arg[3], RAW ); break; case S_SaveWAV: setSaveWAV( v_arg[2], v_arg[3] ); break; case S_LoadWAV: setSpeechFile( v_arg[2], v_arg[3], WAV ); break; case S_SavePros: setSavePros( v_arg[2], v_arg[3] ); break; case S_LoadPros: setProsFile( v_arg[2], v_arg[3] ); break; case S_ProsFile: setProsFile( v_arg[2], v_arg[3] ); break; case S_ParsedText: setParsedText( v_arg[2], v_arg[3] ); break; case S_Speak_syncinterval: setSpeakSyncinterval( v_arg[2], v_arg[3] ); break; case S_AutoPlay: slot_Auto_play = setLogYesNo( v_arg[2], v_arg[3] ); break; case S_AutoPlayDelay: slot_Auto_play_delay = atoi( v_arg[3] ); break; case S_Log: setLog( v_arg[2], v_arg[3] ); break; case S_Log_conf: slot_Log_conf = setLogYesNo( v_arg[2], v_arg[3] ); break; case S_Log_text: slot_Log_text = setLogYesNo( v_arg[2], v_arg[3] ); break; case S_Log_arranged_text: slot_Log_arranged_text = setLogYesNo( v_arg[2], v_arg[3] ); break; case S_Log_chasen: slot_Log_chasen = setLogYesNo( v_arg[2], v_arg[3] ); break; case S_Log_tag: slot_Log_tag = setLogYesNo( v_arg[2], v_arg[3] ); break; case S_Log_phoneme: slot_Log_phoneme = setLogYesNo( v_arg[2], v_arg[3] ); break; case S_Log_mora: slot_Log_mora = setLogYesNo( v_arg[2], v_arg[3] ); break; case S_Log_morph: slot_Log_morph = setLogYesNo( v_arg[2], v_arg[3] ); break; case S_Log_aphrase: slot_Log_aphrase = setLogYesNo( v_arg[2], v_arg[3] ); break; case S_Log_breath: slot_Log_breath = setLogYesNo( v_arg[2], v_arg[3] ); break; case S_Log_sentence: slot_Log_sentence = setLogYesNo( v_arg[2], v_arg[3] ); break; case S_Err: setErr( v_arg[2], v_arg[3] ); break; default: unknown_com(); } break; case C_inq: switch( slotID( v_arg[1] ) ) { case S_Run: inqRun(); break; case S_ModuleVersion: inqModuleVersion(); break; case S_ProtocolVersion: inqProtocolVersion(); break; case S_SpeakerSet: inqSpeakerSet(); break; case S_Speaker: inqSpeaker(); break; case S_SpeechFile: inqSpeechFile(); break; case S_ProsFile: inqProsFile(); break; case S_AutoPlay: inqAutoPlay(); break; case S_AutoPlayDelay: inqAutoPlayDelay(); break; case S_Text_text: inqTextText(); break; case S_Text_pho: inqTextPho(); break; case S_Text_dur: inqTextDur(); break; case S_Speak_text: inqSpeakText(); break; case S_Speak_pho: inqSpeakPho(); break; case S_Speak_dur: inqSpeakDur(); break; case S_Speak_utt: inqSpeakUtt(); break; case S_Speak_len: inqSpeakLen(); break; case S_Speak_stat: inqSpeakStat(); break; case S_Speak_syncinterval: inqSpeakSyncinterval(); break; case S_Log: RepMsg( "rep Log = %s\n", slot_Log_file ); break; case S_Log_conf: RepMsg( "rep Log.conf = %s\n", YesNoSlot(S_Log_conf) ); break; case S_Log_text: RepMsg( "rep Log.text = %s\n", YesNoSlot(S_Log_text) ); break; case S_Log_arranged_text: RepMsg( "rep Log.arranged_text = %s\n", YesNoSlot(S_Log_arranged_text) ); break; case S_Log_chasen: RepMsg( "rep Log.chasen = %s\n", YesNoSlot(S_Log_chasen) ); break; case S_Log_tag: RepMsg( "rep Log.tag = %s\n", YesNoSlot(S_Log_tag) ); break; case S_Log_phoneme: RepMsg( "rep Log.phoneme = %s\n", YesNoSlot(S_Log_phoneme) ); break; case S_Log_mora: RepMsg( "rep Log.mora = %s\n", YesNoSlot(S_Log_mora) ); break; case S_Log_morph: RepMsg( "rep Log.morph = %s\n", YesNoSlot(S_Log_morph) ); break; case S_Log_aphrase: RepMsg( "rep Log.aphrase = %s\n", YesNoSlot(S_Log_aphrase) ); break; case S_Log_breath: RepMsg( "rep Log.breath = %s\n", YesNoSlot(S_Log_breath) ); break; case S_Log_sentence: RepMsg( "rep Log.sentence = %s\n", YesNoSlot(S_Log_sentence) ); break; case S_Err: RepMsg( "rep Err = %s\n", slot_Err_file ); break; default: unknown_com(); } break; case C_prop: { SlotProp prop; if( strcmp(v_arg[2],"=")!=0 ) { unknown_com(); break; } if( strcmp(v_arg[3],"AutoOutput")==0 ) { prop = AutoOutput; } else if(strcmp(v_arg[3],"NoAutoOutput")==0 ) { prop = NoAutoOutput; } else { unknown_com(); break; } switch( slotID( v_arg[1] ) ) { case S_Run: prop_Run = prop; break; case S_ModuleVersion: prop_ModuleVersion = prop; break; case S_ProtocolVersion: prop_ProtocolVersion = prop; break; case S_SpeakerSet: prop_SpeakerSet = prop; break; case S_Speaker: prop_Speaker = prop; break; case S_SpeechFile: prop_SpeechFile = prop; break; case S_ProsFile: prop_ProsFile = prop; break; case S_Text: prop_Text = prop; break; case S_Text_text: prop_Text_text = prop; break; case S_Text_pho: prop_Text_pho = prop; break; case S_Text_dur: prop_Text_dur = prop; break; case S_Speak: prop_Speak = prop; break; case S_Speak_text: prop_Speak_text = prop; break; case S_Speak_pho: prop_Speak_pho = prop; break; case S_Speak_dur: prop_Speak_dur = prop; break; case S_Speak_utt: prop_Speak_utt = prop; break; case S_Speak_len: prop_Speak_len = prop; break; case S_Speak_stat: prop_Speak_stat = prop; break; case S_Speak_syncinterval: prop_Speak_syncinterval = prop; break; default: unknown_com(); } } break; default: unknown_com(); } } if( s_mode ) { server_destroy (); } exit(0); }
static int mono_speaker_on( int channel, struct tfa98xx_param_data *speaker, struct tfa98xx_param_data *config, struct tfa98xx_param_data *preset, struct tfa98xx_param_data *eq) { enum Tfa98xx_Error err; FIXEDPT re25; int calibrateDone = 0; /* use the generic slave address for optimizations */ coldStartup(handles[channel]); /*Set to calibration once*/ /* Only needed for really first time calibration */ setOtc(handles[channel], 1); /* Check if MTPEX bit is set for calibration once mode */ if (checkMTPEX(handles[channel]) == 0) { pr_info("%s: DSP not yet calibrated. Calibration will start\n", __func__); /* ensure no audio during special calibration */ err = Tfa98xx_SetMute(handles[channel], Tfa98xx_Mute_Digital); if (err != Tfa98xx_Error_Ok) { pr_err("%s: Tfa98xx_ReadRegister16 failed\n", __func__); return -EINVAL; } } else pr_info("%s: DSP already calibrated\n", __func__); /* load predefined, or fullmodel from file */ setSpeaker(1, &handles[channel], speaker); /* load the settings */ setConfig(1, &handles[channel], config); /* load a preset */ setPreset(1, &handles[channel], preset); /* set the equalizer */ setEQ(1, &handles[channel], eq); err = Tfa98xx_SelectChannel(handles[channel], Tfa98xx_Channel_L_R); if (err != Tfa98xx_Error_Ok) { pr_err("%s: Tfa98xx_SelectChannel failed\n", __func__); return -EINVAL; } /* all settings loaded, signal the DSP to start calibration */ err = Tfa98xx_SetConfigured(handles[channel]); if (err != Tfa98xx_Error_Ok) { pr_err("%s: Tfa98xx_SetConfigured failed\n", __func__); return -EINVAL; } waitCalibration(handles[channel], &calibrateDone); if (calibrateDone) Tfa98xx_DspGetCalibrationImpedance(handles[channel], &re25); else { re25 = 0; err = Tfa98xx_Powerdown(handles[channel], 1); pr_err("%s: Tfa98xx_Powerdown failed, channel=%d\n", __func__, channel); return -EINVAL; } err = Tfa98xx_SetMute(handles[channel], Tfa98xx_Mute_Off); if (err != Tfa98xx_Error_Ok) { pr_err("%s: Tfa98xx_SetMute failed, channel=%d\n", __func__, channel); return -EINVAL; } return 0; }
static int stereo_speaker_on( struct tfa98xx_param_data *speaker[2], struct tfa98xx_param_data *config[2], struct tfa98xx_param_data *preset[2], struct tfa98xx_param_data *eq[2]) { enum Tfa98xx_Error err = Tfa98xx_Error_Ok; unsigned char h; FIXEDPT re25; int calibrateDone = 0; /* use the generic slave address for optimizations */ for (h = 0; h < 2; h++) { coldStartup(handles[h]); /*Set to calibration once*/ /* Only needed for really first time calibration */ setOtc(handles[h], 1); /* Check if MTPEX bit is set for calibration once mode */ if (checkMTPEX(handles[h]) == 0) { pr_info("%s: DSP not yet calibrated. Calibration will"\ " start\n", __func__); /* ensure no audio during special calibration */ err = Tfa98xx_SetMute( handles[h], Tfa98xx_Mute_Digital); if (err != Tfa98xx_Error_Ok) { pr_err("%s: Tfa98xx_SetMute failed, h=%d\n", __func__, h); return -EINVAL; } } else pr_info("%s: DSP already calibrated\n", __func__); } /* load predefined, or fullmodel from data */ for (h = 0; h < 2; h++) setSpeaker(1, &handles[h], speaker[h]); /* load the settings */ for (h = 0; h < 2; h++) setConfig(1, &handles[h], config[h]); /* load a preset */ for (h = 0; h < 2; h++) setPreset(1, &handles[h], preset[h]); /* set the equalizer */ for (h = 0; h < 2; h++) setEQ(1, &handles[h], eq[h]); err = set_speaker_lr(handles, speaker_lr); if (err != Tfa98xx_Error_Ok) { pr_err("%s: set_speaker_lr failed\n", __func__); return err; } /* all settings loaded, signal the DSP to start calibration */ for (h = 0; h < 2; h++) { err = Tfa98xx_SetConfigured(handles[h]); if (err != Tfa98xx_Error_Ok) { pr_err("%s: Tfa98xx_SetConfigured failed h=%d\n", __func__, h); return -EINVAL; } } for (h = 0; h < 2; h++) { calibrateDone = 0; waitCalibration(handles[h], &calibrateDone); if (calibrateDone) Tfa98xx_DspGetCalibrationImpedance(handles[h], &re25); else { re25 = 0; err = Tfa98xx_Powerdown(handles[h], 1); pr_err("%s: Calibration failed, power down" \ " and return h=%d\n", __func__, h); return -EINVAL; } pr_info("%s re25:%016llx\n", __func__, re25); err = Tfa98xx_SetMute(handles[h], Tfa98xx_Mute_Off); if (err != Tfa98xx_Error_Ok) { pr_err("%s: Tfa98xx_SetMute failed, h=%d\n", __func__, h); return -EINVAL; } } return 0; }