std::vector<unsigned char> Emulator::SendCmd(size_t const unit, std::vector<unsigned char> const & packet, size_t const timeoutMs) { PacketListener::Ptr pRh(new SyncResponseHandler(UnitId(unit))); auto pPacketPromise = dynamic_cast<SyncResponseHandler*>(pRh.get())->GetPromise(); auto packetFuture = pPacketPromise->get_future(); size_t handler; { LOCK_SCOPE; handler = NextIdx(mExclusiveHandlers); mExclusiveHandlers.emplace(handler, pRh); } mpDev->SendPacket(*Packet::Down(UnitId(unit), packet.begin(), packet.end())); if(timeoutMs && packetFuture.wait_for(chrono::milliseconds(timeoutMs)) == future_status::timeout) { LOCK_SCOPE; mExclusiveHandlers.erase(handler); throw runtime_error("Response timeout"); } // if the handler got called, it has been removed from the handler // stack automatically. auto resp = packetFuture.get(); return std::vector<unsigned char>(resp.Begin(), resp.End()); }
// --------------------------------------------------------------------------- // CAccPolAudioUnitBase::GetAudioControlsL // --------------------------------------------------------------------------- // EXPORT_C void CAccPolAudioUnitBase::GetAudioUnitListL( RPointerArray<CAccPolAudioUnitBase>& aAudioUnits ) const { API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetAudioUnitListL() - Enter" ); RPointerArray<CAccPolAudioUnitBase> audioUnits; reinterpret_cast<CAccPolAudioTopologyObjectCon*> ( iObjectContainer )->GetAudioUnitsL( audioUnits ); TInt audioUnitCount = audioUnits.Count(); TInt sourceIdCount = iSourceId.Count(); API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetAudioUnitListL() - Source id count=%d", sourceIdCount ); for( TInt i = 0; i < sourceIdCount; i++ ) { for( TInt j = 0; j < audioUnitCount; j++ ) { if( iSourceId.operator[]( i ) == audioUnits.operator[]( j )->UnitId() ) { aAudioUnits.AppendL( audioUnits.operator[]( j ) ); audioUnits.operator[]( j )->SetPreviousUnitId( UnitId() ); //JNI } } } API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetAudioUnitListL() - Return" ); }
// --------------------------------------------------------------------------- // CAccPolAudioUnitBase::GetAudioControlsL // --------------------------------------------------------------------------- // EXPORT_C TBool CAccPolAudioUnitBase::GetNextAudioUnitL( CAccPolAudioUnitBase*& aAudioUnit ) const { API_TRACE_( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetNextAudioUnitL() - Enter" ); RPointerArray<CAccPolAudioUnitBase> audioUnits; TBool bFound = EFalse; reinterpret_cast<CAccPolAudioTopologyObjectCon*> ( iObjectContainer )->GetAudioUnitsL( audioUnits ); TInt count = audioUnits.Count(); aAudioUnit = NULL; for( TInt i = 0; i < count; i++ ) { if( iSourceId.Count() != 0 ) //JNI { API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] SourceId - count=%d", iSourceId.Count() ); TInt sourceid = iSourceId.operator[]( 0 ); if( iSourceId.operator[]( 0 ) == audioUnits.operator[]( i )->UnitId() ) { aAudioUnit = audioUnits.operator[]( i ); aAudioUnit->SetPreviousUnitId( UnitId() ); bFound = ETrue; break; } } } API_TRACE_1( "[AccFW: ACCPOLAUDIODEVICETOPOLOGY] CAccPolAudioUnitBase::GetNextAudioUnitL() - Return=%d", bFound ); return bFound; }
bool Emulator::Send(size_t const unit, std::vector<unsigned char> const & packet) { auto p = Packet::Down(UnitId(unit), packet.begin(), packet.end()); try { mpDev->SendPacket(*p); } catch(exception e) { D(string("error: ") + e.what()); return false; } return true; }