示例#1
0
FeatureHDF5::FeatureHDF5(const shared_ptr<IFile> &file, const shared_ptr<IBlock> &block, const Group &group,
                         const string &id, DataArray data, LinkType link_type, time_t time)
    : EntityHDF5(file, group, id, time), block(block)
{
    linkType(link_type);
    // TODO: the line below currently throws an exception if the DataArray
    // is not in block - to consider if we prefer copying it to the block
    this->data(data.id());
}
示例#2
0
文件: FeatureFS.cpp 项目: G-Node/nix
FeatureFS::FeatureFS(const std::shared_ptr<base::IFile> &file, const std::shared_ptr<base::IBlock> &block, const std::string &loc,
                     const std::string &id, DataArray data, LinkType link_type, time_t time)
    : EntityFS(file, (bfs::path(loc) / bfs::path(id)).string(), id, time), block(block)
{
    linkType(link_type);
    // TODO: the line below currently throws an exception if the DataArray
    // is not in block - to consider if we prefer copying it to the block
    this->data(data.id());
}
示例#3
0
// ---------------------------------------------------------------------------
// CTestDtmf::TestStreamCreationL
// ---------------------------------------------------------------------------
//
void CTestDtmf::TestStreamCreationL( TDtmfSignalType aSigType )
    {
    TMccNetSettings tempSettings = iNetsettings;
    
    CMccInterfaceStub* stub = CMccInterfaceStub::NewL();
    CleanupStack::PushL( stub );
    CMccInterface* interface = CMccInterface::NewL( *stub );
    CleanupStack::PushL( interface );
    
    TUint32 sessionId;
    User::LeaveIfError( interface->CreateSession( sessionId ) );
    
    TUint32 linkId;
    TInt linkType( KMccLinkGeneral );
    User::LeaveIfError( interface->CreateLink( sessionId, linkType, linkId,
        tempSettings ) );
    stub->WaitForEvent( sessionId, linkId, 0, KMccLinkCreated );
    
    CMccCodecInformation* cInfo 
        = FetchCodecByMimeSubtypeNameL( *interface, KTxtDtmf );
    CleanupStack::PushL( cInfo );
    
    if ( aSigType == EInbandSignal )
        {
        cInfo->SetCodecMode( EDTMFModeInband );
        }
    else
        {
        cInfo->SetCodecMode( EDTMFModeEvent );
        }
        
    TUint32 streamId( 0 );
    TUint32 endpointId1( 0 ), endpointId2( 0 );
    User::LeaveIfError(
        interface->AddDataSink( KMccRtpSinkUid, KNullDesC8, endpointId1 ) );
    User::LeaveIfError(
        interface->AddDataSource( KMccRtpSourceUid, KNullDesC8, endpointId2 ) );
    
    User::LeaveIfError( interface->CreateStream( sessionId, linkId, streamId,
        KMccDtmfStream, *cInfo ) );
    
    User::LeaveIfError( interface->DeleteStream( sessionId, linkId, streamId ) );
    //interface->RemoveDataSink( endpointId1 );
    //interface->RemoveDataSource( endpointId1 );
    User::LeaveIfError( interface->CloseLink( sessionId, linkId ) );
    User::LeaveIfError( interface->CloseSession( sessionId ) );
    
    CleanupStack::PopAndDestroy( cInfo );
    CleanupStack::PopAndDestroy( interface );
    CleanupStack::PopAndDestroy( stub );    
    }
示例#4
0
void KDGanttViewTaskLink::showMeType( bool visible )
{
    //qDebug("KDGanttViewTaskLink::showMeType %d",linkType());
    hide();
    isvisible = visible;
    int wid = 1;
    QPen p;
    QBrush b;
    p.setWidth(wid);
    b.setStyle(Qt::SolidPattern);
    if (ishighlighted) {
        b.setColor(myColorHL);
        p.setColor(myColorHL);

    } else {
        b.setColor(myColor);
        p.setColor(myColor);
    }
    QPoint start, end;
    QPtrListIterator<KDCanvasLine> horIt(*horLineList);
    QPtrListIterator<KDCanvasLine> verIt(*verLineList);
    QPtrListIterator<KDCanvasLine> horIt2(*horLineList2);
    QPtrListIterator<KDCanvasLine> verIt2(*verLineList2);
    QPtrListIterator<KDCanvasLine> horIt3(*horLineList3);
    QPtrListIterator<KDCanvasPolygon> topIt(*topList);
    QPtrListIterator<KDCanvasPolygon> topLeftIt(*topLeftList);
    QPtrListIterator<KDCanvasPolygon> topRightIt(*topRightList);
    QPtrListIterator<KDGanttViewItem> fromIt(fromList);
    QPtrListIterator<KDGanttViewItem> toIt(toList);
    for ( ; fromIt.current(); ++fromIt ) {
        (*fromIt)->setTextOffset(QPoint(30,0));
        (*fromIt)->moveTextCanvas();
        toIt.toFirst();
        for ( ; toIt.current(); ++toIt ) {
            if (isvisible && (*fromIt)->isVisibleInGanttView &&
               (*toIt)->isVisibleInGanttView && myTimeTable->taskLinksVisible) {
                (*horIt)->setPen(p);
                (*verIt)->setPen(p);
                (*horIt2)->setPen(p);
                (*verIt2)->setPen(p);
                (*horIt3)->setPen(p);
                (*topIt)->setBrush(b);
                (*topLeftIt)->setBrush(b);
                (*topRightIt)->setBrush(b);
                (*toIt)->setTextOffset(QPoint(30,0));
                (*toIt)->moveTextCanvas();
                switch (linkType()) {
                    case StartStart: {
                        start = (*fromIt)->middleLeft();
                        end = (*toIt)->middleLeft()-QPoint(12,0);
                        bool down = start.y() < end.y();
                        (*horIt)->setPoints(start.x()-xOffset(*fromIt),start.y(),
                                            start.x()-10, start.y());
                        (*verIt)->setPoints(
                            (*horIt)->endPoint().x(),
                            (*horIt)->endPoint().y(),
                            (*horIt)->endPoint().x(),
                            (down ? (*toIt)->itemPos()+1
                                  : (*toIt)->itemPos()+(*toIt)->height()-1));
                        (*horIt2)->setPoints((*verIt)->endPoint().x(),
                                            (*verIt)->endPoint().y(),
                                            end.x()-12,
                                            (*verIt)->endPoint().y());
                        (*verIt2)->setPoints((*horIt2)->endPoint().x(),
                                            (*horIt2)->endPoint().y(),
                                            (*horIt2)->endPoint().x(),
                                            end.y());
                        (*horIt3)->setPoints((*verIt2)->endPoint().x(),
                                            (*verIt2)->endPoint().y(),
                                            end.x(),
                                            end.y());
                        (*topRightIt)->move(end.x(),end.y());
                        (*topRightIt)->show();
                        break;
                    }
                    case FinishFinish: {
                        start = (*fromIt)->middleRight();
                        end = (*toIt)->middleRight()+QPoint(12,0);
                        bool down = start.y() < end.y();
                        (*horIt)->setPoints(start.x()+xOffset(*fromIt),start.y(),
                                            start.x()+10, start.y());
                        (*verIt)->setPoints(
                            (*horIt)->endPoint().x(),
                            (*horIt)->endPoint().y(),
                            (*horIt)->endPoint().x(),
                            (down ? (*toIt)->itemPos()+1
                                  : (*toIt)->itemPos()+(*toIt)->height()-1));
                        (*horIt2)->setPoints((*verIt)->endPoint().x(),
                                            (*verIt)->endPoint().y(),
                                            end.x()+12,
                                            (*verIt)->endPoint().y());
                        (*verIt2)->setPoints((*horIt2)->endPoint().x(),
                                            (*horIt2)->endPoint().y(),
                                            (*horIt2)->endPoint().x(),
                                            end.y());
                        (*horIt3)->setPoints((*verIt2)->endPoint().x(),
                                            (*verIt2)->endPoint().y(),
                                            end.x(),
                                            end.y());
                        (*topLeftIt)->move(end.x(),end.y());
                        (*topLeftIt)->show();
                        break;
                    }
                    case FinishStart: {
                        start = (*fromIt)->middleRight();
                        end = (*toIt)->middleLeft() - QPoint(12,0);
                        bool down = start.y() < end.y();                        
                        (*horIt)->setPoints(start.x()+xOffset(*fromIt),start.y(),
                                            start.x()+10,start.y());
                        (*verIt)->setPoints(
                            (*horIt)->endPoint().x(),
                            (*horIt)->endPoint().y(),
                            (*horIt)->endPoint().x(),
                            (down ? (*toIt)->itemPos()+1
                                  : (*toIt)->itemPos()+(*toIt)->height()-1));
                        (*horIt2)->setPoints((*verIt)->endPoint().x(),
                                            (*verIt)->endPoint().y(),
                                            end.x()-12,
                                            (*verIt)->endPoint().y());
                        (*verIt2)->setPoints((*horIt2)->endPoint().x(),
                                            (*horIt2)->endPoint().y(),
                                            (*horIt2)->endPoint().x(),
                                            end.y());
                        (*horIt3)->setPoints((*verIt2)->endPoint().x(),
                                            (*verIt2)->endPoint().y(),
                                            end.x(),
                                            end.y());
                        (*topRightIt)->move(end.x(),end.y());
                        
                        (*topRightIt)->show();
    
                        break;
                    }
                    case StartFinish: {
                        start = (*fromIt)->middleRight();
                        end = (*toIt)->middleRight()+QPoint(12,0);
                        bool down = start.y() < end.y();
                        (*horIt)->setPoints(start.x()+xOffset(*fromIt),start.y(),
                                            start.x()+10, start.y());
                        (*verIt)->setPoints(
                            (*horIt)->endPoint().x(),
                            (*horIt)->endPoint().y(),
                            (*horIt)->endPoint().x(),
                            (down ? (*toIt)->itemPos()+1
                                  : (*toIt)->itemPos()+(*toIt)->height()-1));
                        (*horIt2)->setPoints((*verIt)->endPoint().x(),
                                            (*verIt)->endPoint().y(),
                                            end.x()-12,
                                            (*verIt)->endPoint().y());
                        (*verIt2)->setPoints((*horIt2)->endPoint().x(),
                                            (*horIt2)->endPoint().y(),
                                            (*horIt2)->endPoint().x(),
                                            end.y());
                        (*horIt3)->setPoints((*verIt2)->endPoint().x(),
                                            (*verIt2)->endPoint().y(),
                                            end.x(),
                                            end.y());
                        (*topRightIt)->move(end.x(),end.y());
                        (*topRightIt)->show();
                        break;
                    }
                    default:
                        qWarning("KDGanttViewTaskLink: Unknown link type");
                        break;
                }
                (*horIt)->show();
                (*verIt)->show();
                (*horIt2)->show();
                (*verIt2)->show();
                (*horIt3)->show();
            }
            ++horIt;
            ++verIt;
            ++horIt2;
            ++verIt2;
            ++horIt3;
            ++topIt;
            ++topLeftIt;
            ++topRightIt;
        }
    }
}
示例#5
0
void KDGanttViewTaskLink::showMe( bool visible )
{
    if (linkType() != None) {
        showMeType(visible);
        return;
    }
    hide();

    isvisible = visible;
    int wid = 1;
    QPen p;
    QBrush b;
    p.setWidth(wid);
    b.setStyle(Qt::SolidPattern);
    if (ishighlighted) {
        b.setColor(myColorHL);
        p.setColor(myColorHL);

    } else {
        b.setColor(myColor);
        p.setColor(myColor);
    }
    QPoint start, end;
    QPtrListIterator<KDCanvasLine> horIt(*horLineList);
    QPtrListIterator<KDCanvasLine> verIt(*verLineList);
    QPtrListIterator<KDCanvasPolygon> topIt(*topList);
    QPtrListIterator<KDGanttViewItem> fromIt(fromList);
    QPtrListIterator<KDGanttViewItem> toIt(toList);
    for ( ; fromIt.current(); ++fromIt ) {
        (*fromIt)->setTextOffset(QPoint(0,0));
        toIt.toFirst();
        for ( ; toIt.current(); ++toIt ) {
            (*toIt)->setTextOffset(QPoint(0,0));
            if (!isvisible || ! (*fromIt)->isVisibleInGanttView || !(*toIt)->isVisibleInGanttView || !myTimeTable->taskLinksVisible) {
                (*horIt)->hide();
                (*verIt)->hide();
                (*topIt)->hide();
                ++horIt;
                ++verIt;
                ++topIt;
            } else {
                (*horIt)->setPen(p);
                (*verIt)->setPen(p);
                (*topIt)->setBrush(b);
                end = (*toIt)->getTaskLinkEndCoord();
                start = (*fromIt)->getTaskLinkStartCoord(end);
                (*horIt)->setPoints(start.x(),start.y(),end.x()+wid,start.y());
                (*verIt)->setPoints(end.x()+wid/2,start.y(),end.x()+wid/2,end.y()-2);
                (*topIt)->move(end.x()+wid/2,end.y());
                (*horIt)->show();
                (*verIt)->show();
                (*topIt)->show();
                ++horIt;
                ++verIt;
                ++topIt;

            }
        }
    }
    while ( horIt.current() ) {
        (*horIt)->hide();
        (*verIt)->hide();
        (*topIt)->hide();
        ++horIt;
        ++verIt;
        ++topIt;
    }
}
示例#6
0
// ---------------------------------------------------------------------------
// CTestDtmf::TestAutomaticDtmfSendingL
// ---------------------------------------------------------------------------
//    
void CTestDtmf::TestAutomaticDtmfSendingL( TDtmfSignalType aSigType )
    {
    TMccNetSettings tempSettings = iNetsettings;
    
    CMccInterfaceStub* stub = CMccInterfaceStub::NewL();
    CleanupStack::PushL( stub );
    CMccInterface* interface = CMccInterface::NewL( *stub );
    CleanupStack::PushL( interface );
    
    TUint32 sessionId;
    User::LeaveIfError( interface->CreateSession( sessionId ) );

    TUint32 linkId;
    TInt linkType( KMccLinkGeneral );
    User::LeaveIfError( interface->CreateLink( sessionId, 
        linkType, linkId, tempSettings ) );  


    CMccCodecInformation* cInfo = FetchCodecByMimeSubtypeNameL( *interface, 
                                                                KAMRSdpName );            
    CleanupStack::PushL( cInfo );
    
    CMccCodecInformation* cInfo2 = FetchCodecByMimeSubtypeNameL( *interface, 
                                                                KTelephoneEvent );
    CleanupStack::PushL( cInfo2 );
    
    if ( aSigType == EInbandSignal )
        {
        cInfo2->SetCodecMode( EDTMFModeInband );
        }
    else
        {
        cInfo2->SetCodecMode( EDTMFModeEvent );
        }
        
    TUint32 speakerSinkId( 0 );
    TUint32 rtpSourceId( 0 );
    
    TUint32 dlStreamId( 0 );
    User::LeaveIfError(
        interface->AddDataSink( KUidMmfAudioOutput, KNullDesC8, speakerSinkId ) );
    User::LeaveIfError(
        interface->AddDataSource( KMccRtpSourceUid, KNullDesC8, rtpSourceId ) );
    User::LeaveIfError( interface->CreateStream( sessionId, linkId, dlStreamId,
        KMccAudioDownlinkStream, *cInfo ) );
        
    TUint32 rtpSinkId( 0 );
    TUint32 micSourceId( 0 );
    TUint32 ulStreamId( 0 );
    User::LeaveIfError(
        interface->AddDataSink( KMccRtpSinkUid, KNullDesC8, rtpSinkId ) );
    User::LeaveIfError( 
        interface->AddDataSource( KUidMmfAudioInput, KNullDesC8, micSourceId ) );
    User::LeaveIfError( interface->CreateStream( sessionId, linkId, ulStreamId,
        KMccAudioUplinkStream, *cInfo ) );

    TUint32 dtmfStreamId( 0 );
    User::LeaveIfError(
        interface->Reuse( sessionId, linkId, dlStreamId, rtpSourceId ) );
    User::LeaveIfError(
        interface->Reuse( sessionId, linkId, ulStreamId, rtpSinkId ) );
    User::LeaveIfError( interface->CreateStream( sessionId, linkId, 
        dtmfStreamId, KMccDtmfStream, *cInfo2 ) );
    
    
    User::LeaveIfError( interface->SetRemoteAddress( sessionId, linkId, 
    iNetsettings.iRemoteAddress ) );


    User::LeaveIfError ( interface->PrepareStream( sessionId, linkId, dlStreamId ) );
    stub->WaitForEvent( sessionId, linkId, dlStreamId, KMccStreamPrepared );
    stub->WaitForEvent( sessionId, linkId, dlStreamId, KMccStreamPrepared );
    User::LeaveIfError ( interface->PrepareStream( sessionId, linkId, ulStreamId ) );
    stub->WaitForEvent( sessionId, linkId, ulStreamId, KMccStreamPrepared );
    stub->WaitForEvent( sessionId, linkId, ulStreamId, KMccStreamPrepared );
    User::LeaveIfError ( interface->PrepareStream( sessionId, linkId, dtmfStreamId ) );
    stub->WaitForEvent( sessionId, linkId, dtmfStreamId, KMccStreamPrepared );
    stub->WaitForEvent( sessionId, linkId, dtmfStreamId, KMccStreamPrepared );
    
/*   
    User::LeaveIfError ( interface->StartStream( sessionId, linkId, dlStreamId ) );
    stub->WaitForEvent( sessionId, linkId, dlStreamId, KMccStreamStarted );
    stub->WaitForEvent( sessionId, linkId, dlStreamId, KMccStreamStarted );
    User::LeaveIfError ( interface->StartStream( sessionId, linkId, ulStreamId ) );
    stub->WaitForEvent( sessionId, linkId, ulStreamId, KMccStreamStarted );
    stub->WaitForEvent( sessionId, linkId, ulStreamId, KMccStreamStarted );
*/    
    User::LeaveIfError ( interface->StartStream( sessionId, linkId, dtmfStreamId ) );
    stub->WaitForEvent( sessionId, linkId, dtmfStreamId, KMccStreamStarted );
    stub->WaitForEvent( sessionId, linkId, dtmfStreamId, KMccStreamStarted );
    
    TMccDtmfEventData dtmfSignal;
    dtmfSignal.iDtmfEventType = KMccDtmfSigSendString;
    dtmfSignal.iDtmfString.Copy( KTxtTestDtmfString1() );
    dtmfSignal.iContinue = ETrue;
    TMccDtmfEventDataPackage signalPkg1( dtmfSignal );

    // BASIC SENDING TEST WITH NORMAL DIGITS
    // Encapsulate the signal in event
    TMccEvent event;
    event.iSessionId = sessionId;
    event.iLinkId = linkId;
    event.iStreamId = dtmfStreamId;
    event.iEventCategory = KMccEventCategoryDtmf;
    event.iEventType = KMccDtmfControl;
    event.iEventData.Copy( signalPkg1 );
    
    interface->SendMediaSignalL( event );
    if ( EOutbandSignal == aSigType )
        {
        // Note: In loopback test activity event comes first due to delayed
        // control event sending.
        stub->WaitForEvent( sessionId, linkId, dtmfStreamId, KMccActivityEvent );
        }
    
    for ( TInt i = 0; i < KTxtTestDtmfString1().Length(); i++ )
        {
        stub->WaitForEvent( 
            sessionId, linkId, dtmfStreamId, KMccDtmfControl, KMccDtmfSequenceStart );
        stub->WaitForEvent( 
            sessionId, linkId, dtmfStreamId, KMccDtmfControl, KMccDtmfSequenceStop );
        }
    
    stub->WaitForEvent( 
        sessionId, linkId, dtmfStreamId, KMccDtmfControl, KMccDtmfSendingComplete );
    
    iConsole.Printf( _L("Media signal sent 1, press to continue\n") );
    iConsole.Getch();
    
    // PAUSE CHARACTER HANDLING TEST
    dtmfSignal.iDtmfString.Copy( KTxtTestDtmfStringWithPauseChars() );
    TMccDtmfEventDataPackage signalPkg2( dtmfSignal );
    event.iEventData.Copy( signalPkg2 );
    interface->SendMediaSignalL( event );
    for ( TInt i = 0; i < 3; i++ )
        {
        stub->WaitForEvent( 
            sessionId, linkId, dtmfStreamId, KMccDtmfControl, KMccDtmfSequenceStart );
        stub->WaitForEvent( 
            sessionId, linkId, dtmfStreamId, KMccDtmfControl, KMccDtmfSequenceStop );
        }

    stub->WaitForEvent( 
        sessionId, linkId, dtmfStreamId, KMccDtmfControl, KMccDtmfSendingComplete );

    iConsole.Printf( _L("Media signal sent 2, press to continue\n") );
    iConsole.Getch();
    
    // STOP CHARACTER HANDLING TEST
    _LIT( KTxtTestDtmfStringWithStopChars, "w12" );
    dtmfSignal.iDtmfString.Copy( KTxtTestDtmfStringWithStopChars() );
    TMccDtmfEventDataPackage signalPkg3( dtmfSignal );
    event.iEventData.Copy( signalPkg3 );
    interface->SendMediaSignalL( event );
    
    stub->WaitForEvent( 
        sessionId, linkId, dtmfStreamId, KMccDtmfControl, KMccDtmfStopInDtmfString );
    
    dtmfSignal.iDtmfEventType = KMccDtmfSigContinueSending;
    dtmfSignal.iContinue = ETrue;
    signalPkg3 = dtmfSignal;
    event.iEventData.Copy( signalPkg3 );
    interface->SendMediaSignalL( event );
    for ( TInt i = 0; i < 2; i++ )
        {
        stub->WaitForEvent( 
            sessionId, linkId, dtmfStreamId, KMccDtmfControl, KMccDtmfSequenceStart );
        stub->WaitForEvent( 
            sessionId, linkId, dtmfStreamId, KMccDtmfControl, KMccDtmfSequenceStop );
        }
    
    stub->WaitForEvent( 
        sessionId, linkId, dtmfStreamId, KMccDtmfControl, KMccDtmfSendingComplete );
    iConsole.Printf( _L("Media signal sent 3, press to continue\n") );
    iConsole.Getch();
    
    // CANCEL DTMF STRING SENDING -TEST
    dtmfSignal.iDtmfString.Copy( KTxtTestDtmfString1() );
    dtmfSignal.iDtmfEventType = KMccDtmfSigSendString;
    
    TMccDtmfEventDataPackage signalPkg4( dtmfSignal );
    event.iEventData.Copy( signalPkg4 );
    interface->SendMediaSignalL( event );
    stub->WaitForEvent( 
        sessionId, linkId, dtmfStreamId, KMccDtmfControl, KMccDtmfSequenceStart );
    
    dtmfSignal.iDtmfEventType = KMccDtmfSigCancelSending;
    signalPkg4 = dtmfSignal;
    event.iEventData.Copy( signalPkg4 );
    interface->SendMediaSignalL( event );
    
    iConsole.Printf( _L("Media signal sent 4, press to continue\n") );
    iConsole.Getch();
    
    // TBD: which event should be sent when string sending is cancelled?
    User::LeaveIfError ( interface->StopStream( sessionId, linkId, dlStreamId ) );
    stub->WaitForEvent( sessionId, linkId, dlStreamId, KMccStreamStopped );
    stub->WaitForEvent( sessionId, linkId, dlStreamId, KMccStreamStopped );
    
    User::LeaveIfError ( interface->StopStream( sessionId, linkId, ulStreamId ) );
    stub->WaitForEvent( sessionId, linkId, ulStreamId, KMccStreamStopped );
    stub->WaitForEvent( sessionId, linkId, ulStreamId, KMccStreamStopped );

    User::LeaveIfError ( interface->StopStream( sessionId, linkId, dtmfStreamId ) );
    stub->WaitForEvent( sessionId, linkId, dtmfStreamId, KMccStreamStopped );
    stub->WaitForEvent( sessionId, linkId, dtmfStreamId, KMccStreamStopped );
    
    User::LeaveIfError( interface->DeleteStream( sessionId, linkId, dlStreamId ) );
    User::LeaveIfError( interface->DeleteStream( sessionId, linkId, ulStreamId ) );
    User::LeaveIfError( interface->DeleteStream( sessionId, linkId, dtmfStreamId ) );
    User::LeaveIfError( interface->CloseLink( sessionId, linkId ) );
    User::LeaveIfError( interface->CloseSession( sessionId ) );
    CleanupStack::PopAndDestroy( cInfo2 );
    CleanupStack::PopAndDestroy( cInfo );
    CleanupStack::PopAndDestroy( interface );
    CleanupStack::PopAndDestroy( stub );
    }    
示例#7
0
// ---------------------------------------------------------------------------
// CTestDtmf::TestManualDtmfSendingL
// ---------------------------------------------------------------------------
//    
void CTestDtmf::TestManualDtmfSendingL( TDtmfSignalType aSigType )
    {
    TMccNetSettings tempSettings = iNetsettings;
    
    CMccInterfaceStub* stub = CMccInterfaceStub::NewL();
    CleanupStack::PushL( stub );
    CMccInterface* interface = CMccInterface::NewL( *stub );
    CleanupStack::PushL( interface );
    
    TUint32 sessionId;
    User::LeaveIfError( interface->CreateSession( sessionId ) );
    
    TUint32 linkId;
    TInt linkType( KMccLinkGeneral );
    User::LeaveIfError( interface->CreateLink( sessionId, 
        linkType, linkId, tempSettings ) );  
    
    CMccCodecInformation* cInfo 
        = FetchCodecByMimeSubtypeNameL( *interface, KAMRSdpName );            
    CleanupStack::PushL( cInfo );
    
    CMccCodecInformation* cInfo2 
        = FetchCodecByMimeSubtypeNameL( *interface, KTelephoneEvent );
    CleanupStack::PushL( cInfo2 );
    
    if ( aSigType == EInbandSignal )
        {
        cInfo2->SetCodecMode( EDTMFModeInband );
        }
    else
        {
        cInfo2->SetCodecMode( EDTMFModeEvent );
        }
        
    TUint32 speakerSinkId( 0 );
    TUint32 rtpSourceId( 0 );
    TUint32 dlStreamId( 0 );
    User::LeaveIfError(
        interface->AddDataSink( KUidMmfAudioOutput, KNullDesC8, speakerSinkId ) );
    User::LeaveIfError(
        interface->AddDataSource( KMccRtpSourceUid, KNullDesC8, rtpSourceId ) );
    User::LeaveIfError( interface->CreateStream( sessionId, linkId, dlStreamId,
        KMccAudioDownlinkStream, *cInfo ) );
        
    TUint32 rtpSinkId( 0 );
    TUint32 micSourceId( 0 );
    TUint32 ulStreamId( 0 );
    User::LeaveIfError(
        interface->AddDataSink( KMccRtpSinkUid, KNullDesC8, rtpSinkId ) );
    User::LeaveIfError( 
        interface->AddDataSource( KUidMmfAudioInput, KNullDesC8, micSourceId ) );
    User::LeaveIfError( interface->CreateStream( sessionId, linkId, ulStreamId,
        KMccAudioUplinkStream, *cInfo ) );

    TUint32 dtmfStreamId( 0 );
    User::LeaveIfError(
        interface->Reuse( sessionId, linkId, dlStreamId, rtpSourceId ) );
    User::LeaveIfError(
        interface->Reuse( sessionId, linkId, ulStreamId, rtpSinkId ) );
    User::LeaveIfError( interface->CreateStream( sessionId, linkId, 
        dtmfStreamId, KMccDtmfStream, *cInfo2 ) );
    
    User::LeaveIfError( interface->SetRemoteAddress( sessionId, linkId, 
    iNetsettings.iRemoteAddress ) );

    User::LeaveIfError ( interface->PrepareStream( sessionId, linkId, dlStreamId ) );
    stub->WaitForEvent( sessionId, linkId, dlStreamId, KMccStreamPrepared );
    stub->WaitForEvent( sessionId, linkId, dlStreamId, KMccStreamPrepared );
    
    User::LeaveIfError ( interface->PrepareStream( sessionId, linkId, ulStreamId ) );
    stub->WaitForEvent( sessionId, linkId, ulStreamId, KMccStreamPrepared );
    stub->WaitForEvent( sessionId, linkId, ulStreamId, KMccStreamPrepared );
    
    User::LeaveIfError ( interface->PrepareStream( sessionId, linkId, dtmfStreamId ) );
    stub->WaitForEvent( sessionId, linkId, dtmfStreamId, KMccStreamPrepared );
    stub->WaitForEvent( sessionId, linkId, dtmfStreamId, KMccStreamPrepared );
    
/*
    User::LeaveIfError ( interface->StartStream( sessionId, linkId, dlStreamId ) );
    stub->WaitForEvent( sessionId, linkId, dlStreamId, KMccStreamStarted );
    stub->WaitForEvent( sessionId, linkId, dlStreamId, KMccStreamStarted );
    User::LeaveIfError ( interface->StartStream( sessionId, linkId, ulStreamId ) );
    stub->WaitForEvent( sessionId, linkId, ulStreamId, KMccStreamStarted );
    stub->WaitForEvent( sessionId, linkId, ulStreamId, KMccStreamStarted );
*/    
    User::LeaveIfError ( interface->StartStream( sessionId, linkId, dtmfStreamId ) );
    stub->WaitForEvent( sessionId, linkId, dtmfStreamId, KMccStreamStarted );
    stub->WaitForEvent( sessionId, linkId, dtmfStreamId, KMccStreamStarted );
    
    TMccDtmfEventData dtmfSignal;
    dtmfSignal.iDtmfEventType = KMccDtmfSigStartTone;
    _LIT8( KDtmfDigit, "0" );
    dtmfSignal.iDtmfString.Copy( KDtmfDigit );
    TMccDtmfEventDataPackage signalPkg1( dtmfSignal );
    
    TMccEvent event;
    event.iSessionId = sessionId;
    event.iLinkId = linkId;
    event.iStreamId = dtmfStreamId;
    event.iEventCategory = KMccEventCategoryDtmf;
    event.iEventType = KMccDtmfControl;
    event.iEventData.Copy( signalPkg1 );
        
    interface->SendMediaSignalL( event );
    stub->WaitForEvent( 
        sessionId, linkId, dtmfStreamId, KMccDtmfControl, KMccDtmfManualStart );
    
    if ( EOutbandSignal == aSigType )
        {
        stub->WaitForEvent( sessionId, linkId, dtmfStreamId, KMccActivityEvent );
        }
    
    iConsole.Printf( _L("Press a key to stop digit send\n") );
    iConsole.Getch();
    
    dtmfSignal.iDtmfEventType = KMccDtmfSigStopTone;
    signalPkg1 = dtmfSignal;
    event.iEventData.Copy( signalPkg1 );
    interface->SendMediaSignalL( event );
    stub->WaitForEvent( 
        sessionId, linkId, dtmfStreamId, KMccDtmfControl, KMccDtmfManualStop );
    
    iConsole.Printf( _L("Press a key to delete streams\n") );
    iConsole.Getch();
    
    User::LeaveIfError( interface->DeleteStream( sessionId, linkId, dlStreamId ) );
    User::LeaveIfError( interface->DeleteStream( sessionId, linkId, ulStreamId ) );
    User::LeaveIfError( interface->DeleteStream( sessionId, linkId, dtmfStreamId ) );
    User::LeaveIfError( interface->CloseLink( sessionId, linkId ) );
    User::LeaveIfError( interface->CloseSession( sessionId ) );
    CleanupStack::PopAndDestroy( cInfo2 );
    CleanupStack::PopAndDestroy( cInfo );
    CleanupStack::PopAndDestroy( interface );
    CleanupStack::PopAndDestroy( stub );
    }
示例#8
0
// ---------------------------------------------------------------------------
// CTestDtmf::TestStreamControlL
// ---------------------------------------------------------------------------
//
void CTestDtmf::TestStreamControlL( TDtmfSignalType aSigType )
    {
    TMccNetSettings tempSettings = iNetsettings;
    
    CMccInterfaceStub* stub = CMccInterfaceStub::NewL();
    CleanupStack::PushL( stub );
    CMccInterface* interface = CMccInterface::NewL( *stub );
    CleanupStack::PushL( interface );
    
    TUint32 sessionId;
    User::LeaveIfError( interface->CreateSession( sessionId ) );
    
    TUint32 linkId;
    TInt linkType( KMccLinkGeneral );
    User::LeaveIfError( interface->CreateLink( sessionId, linkType, linkId,
        tempSettings ) );
    stub->WaitForEvent( sessionId, linkId, 0, KMccLinkCreated );
    
    CMccCodecInformation* cInfo 
        = FetchCodecByMimeSubtypeNameL( *interface, KTxtDtmf );
    CleanupStack::PushL( cInfo );
    
    if ( aSigType == EInbandSignal )
        {
        cInfo->SetCodecMode( EDTMFModeInband );
        }
    else
        {
        cInfo->SetCodecMode( EDTMFModeEvent );
        }
    
    TUint32 streamId( 0 );
    TUint32 sinkId( 0 ), sourceId( 0 );
    interface->AddDataSink( KMccRtpSinkUid, KNullDesC8, sinkId );
    interface->AddDataSource( KMccRtpSourceUid, KNullDesC8, sourceId );
    
    User::LeaveIfError( interface->CreateStream( sessionId, linkId, streamId,
        KMccDtmfStream, *cInfo ) );
    
    // TEST CORRECT CONTROL PATHS
    User::LeaveIfError ( interface->PrepareStream( sessionId, linkId, streamId ) );
    stub->WaitForEvent( sessionId, linkId, streamId, KMccStreamPrepared );
    stub->WaitForEvent( sessionId, linkId, streamId, KMccStreamPrepared );
   
    User::LeaveIfError ( interface->StartStream( sessionId, linkId, streamId ) );
    stub->WaitForEvent( sessionId, linkId, streamId, KMccStreamStarted );
    stub->WaitForEvent( sessionId, linkId, streamId, KMccStreamStarted );
    
    User::LeaveIfError ( interface->PauseStream( sessionId, linkId, streamId ) );
    stub->WaitForEvent( sessionId, linkId, streamId, KMccStreamPaused );
    stub->WaitForEvent( sessionId, linkId, streamId, KMccStreamPaused );
    
    User::LeaveIfError ( interface->ResumeStream( sessionId, linkId, streamId ) );
    stub->WaitForEvent( sessionId, linkId, streamId, KMccStreamResumed );
    stub->WaitForEvent( sessionId, linkId, streamId, KMccStreamResumed );
    
    User::LeaveIfError ( interface->StopStream( sessionId, linkId, streamId ) );
    stub->WaitForEvent( sessionId, linkId, streamId, KMccStreamStopped );
    stub->WaitForEvent( sessionId, linkId, streamId, KMccStreamStopped );
    
    // TBD: TEST INVALID CONTROL PATHS
    
    User::LeaveIfError( interface->DeleteStream( sessionId, linkId, streamId ) );
    User::LeaveIfError( interface->CloseLink( sessionId, linkId ) );
    User::LeaveIfError( interface->CloseSession( sessionId ) );
    
    CleanupStack::PopAndDestroy( cInfo );
    CleanupStack::PopAndDestroy( interface );
    CleanupStack::PopAndDestroy( stub );
    }