A
download otdialtg.cpp
Language: C++
Copyright: (c) 1995-99 OpenComm do Brasil Ltda.
LOC: 87
Project Info
Open Telephony Server(opentel)
Server: SourceForge
Type: cvs
...el\server\drivers\dialogic\
   dialogic.dsp
   otdialap.cpp
   otdialap.h
   otdialar.cpp
   otdialar.h
   otdialdev.h
   otdialdrv.cpp
   otdialdrv.h
   otdialdti.cpp
   otdialdti.h
   otdialdxx.cpp
   otdialdxx.h
   otdialei.cpp
   otdialei.h
   otdialev.cpp
   otdialev.h
   otdialex.cpp
   otdialex.h
   otdialgc.cpp
   otdialgc.h
   otdialmsi.cpp
   otdialmsi.h
   otdialogic.cpp
   otdialogic.h
   otdialsc.cpp
   otdialsc.h
   otdialtd.cpp
   otdialtd.h
   otdialtg.cpp
   otdialtg.h

/*****************************************************************************
* OpenTel Telephony Server & Framework
* Copyright (c) 1995-99 OpenComm do Brasil Ltda.
* Todos os direitos reservados.
* Este arquivo contem material confidencial de OpenComm do Brasil, e deve
* darse tratamento como tal.
******************************************************************************/

#ident "@(#) $Header: /cvsroot/opentel/opentel/server/drivers/dialogic/otdialtg.cpp,v 1.2 2000/03/24 05:16:43 jbernab Exp $"

#include <otconfig.h>

#ifdef _WINDOWS
#include <windows.h>
#include <io.h>
#endif

extern "C" {
#include <srllib.h>
#include <dxxxlib.h>
};

#include <otcallc.includes>
#include <dialogic/otdialogic.h>
#include <ottonegen.includes>
#include <dialogic/otdialdxx.h>
#include <dialogic/otdialtg.h>
#include <otarchive.includes>

#include <otgroup.includes>
#include <otgroupim.includes>

OT_IMPLEMENT_DYNAMIC(OtDialogicToneGenerator,OtToneGenerator);

OtDialogicToneGenerator::OtDialogicToneGenerator( OtDialogicDxx *dxx ) :
        OtToneGenerator(),
        m_dxx(dxx)
{
        m_dxx->addTarget(this);
        setName(OtString("OtDialogicToneGenerator(") + OtString(ATDV_NAMEP(m_dxx->getFd())) + OtString(")") );
}

OtDialogicToneGenerator::~OtDialogicToneGenerator(void)
{
        m_dxx->removeTarget(this);
}

OtTimeSlotListener *OtDialogicToneGenerator::getListener()
{
        return m_dxx->getListener();
}

OtTimeSlotTransmitter *OtDialogicToneGenerator::getTransmitter()
{
        return m_dxx->getTransmitter();
}

int OtDialogicToneGenerator::isPlayingTone(void) const
{
        return OtToneGenerator::isPlayingTone();
}

void OtDialogicToneGenerator::playTone(OtToneGenTmpl *t)
{
        OTASSERT(t!=NULL);

        // Dialogic Stuff
        TN_GEN tone;

        // See dx_bldtngen Dialogic Voice Software Ref for Unix II
        // page 4-136 on valid freq, and ampl ranges
        OTASSERT(t->getFreq1()==0 || (t->getFreq1()>200 && t->getFreq1()<3000));
        OTASSERT(t->getFreq2()==0 || (t->getFreq2()>200 && t->getFreq2()<3000));
        OTASSERT((t->getAmpl1()<=0) && t->getAmpl1()>-40);
        OTASSERT((t->getAmpl2()<=0) && t->getAmpl2()>-40);

        dx_bldtngen(&tone,t->getFreq1(),t->getFreq2(),
                t->getAmpl1(),t->getAmpl2(),t->getDuration());

        static DV_TPT tpt[1];

        dx_clrtpt( tpt, 1 );

        /* TODO: agregar razones para detener automaticamente */

        tpt[0].tp_type   = IO_EOT; /* only entry in the table */
        tpt[0].tp_termno = DX_MAXDTMF; /* Maximum digits */
        tpt[0].tp_length = 1; /* terminate in the first digit */
        tpt[0].tp_flags = TF_MAXDTMF; /* default flags */

        dx_clrdigbuf(m_dxx->getFd());           // This is temporary

        // Set this resource as the one that is talking now
        ((OtGroupImpl *)getGroup())->setTalking(this);

        if(dx_playtone(m_dxx->getFd(), &tone, tpt, EV_ASYNC)<0) {
                throw OtDialogicException(m_dxx->getFd());
                }

        OtToneGenerator::playTone(t);

}

void OtDialogicToneGenerator::stop(void)
{
        // If not maybe some body is playing a wav file and we stop them
        if(isPlayingTone()) {
                dx_stopch(m_dxx->getFd(),EV_SYNC);
                }
}

void OtDialogicToneGenerator::onMessage(OtMessage *msg)
{
        OtDialogicEvent *e=(OtDialogicEvent *)((OtDlgMsg *)msg)->getEv();

        if(e->getClass()==OtDialogicEvent::eventClass) {
                if(e->getType()==TDX_PLAYTONE) {

                                // Reset playing status, OtToneGenerator::playTone()
                        m_playingTone=false;

                        int term = ATDX_TERMMSK(m_dxx->getFd());

//                      if (term)               //CHECK
//                                      dispatchEvent(OtToneGeneratorEvent::eventError);
//                      else
                                        dispatchEvent(OtToneGeneratorEvent::eventTonePlayed);

                        }
                }
}

void OtDialogicToneGenerator::dispatchEvent(OtEventType t)
{
        OtToneGeneratorEvent ev(*this,t);
        postEvent(ev);
}



About Koders | Resources | Downloads | Support | Black Duck | Terms of Service | DMCA | Privacy Policy | Contact Us