bayonne-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bayonne-devel] Aculab Recording on bayonne


From: mks
Subject: Re: [Bayonne-devel] Aculab Recording on bayonne
Date: 30 Apr 2005 23:59:03 +0100


David,


Indeed problem went away, the script advanced and I must admit trunk.cpp was not a place in the first instance to look for the state.

Luca, thank you for community service.

Mo

On Apr 30 2005, David Sugar wrote:

I think I see the solution.  In aculab/trunk.cpp, starting at line 238:

         case TRUNK_TIMER_EXPIRED:
                 trunkSignal(TRUNK_SIGNAL_TIMEOUT);
                 event->id = TRUNK_STOP_STATE;
                 goto retry;

This should be changed to:

         case TRUNK_TIMER_EXPIRED:
                 if(!trunkSignal(TRUNK_SIGNAL_TIMEOUT))
                        trunkSignal(TRUNK_SIGNAL_STEP);
                 event->id = TRUNK_STOP_STATE;
                 goto retry;

It will then stop and step to the next statement when record times out. This looks consistent with other drivers also.



address@hidden wrote:
> > > > This is what we get on our system > > aculab(4,1): starting play of file > '/usr/local/share/bayonne/sys/test/beep.au', bufsize=2048,format=7 > aculab(4,1): event 500 received aculab(4,1): playHandler - got event > 500 aculab(4,1): stepHandler event 100 aculab(4,1): step 3 > record(=prefix,%rdir,%g,=maxtime,8) aculab(4,1): stepHandler event 303 > aculab(4,1): record aculab(4,1): starting record of file > '/home/data/testmbox/pegasus-129-1114867667v2.au', > bufsize=2048,format=7 aculab(4,1): event 401 received aculab(4,1): > stepHandler event 100 aculab(4,1): step 3 > record(=prefix,%rdir,%g,=maxtime,8) aculab(4,1): stepHandler event 303 > aculab(4,1): record aculab(4,1): starting record of file > '/home/data/testmbox/pegasus-129-1114867667v2.au', > bufsize=2048,format=7 aculab(4,1): event 401 received aculab(4,1): > stepHandler event 100 aculab(4,1): step 3 > record(=prefix,%rdir,%g,=maxtime,8) aculab(4,1): stepHandler event 303 > aculab(4,1): record aculab(4,1): starting record of file > '/home/data/testmbox/pegasus-129-1114867667v2.au', > bufsize=2048,format=7 > > > Mo > > On Apr 28 2005, David Sugar wrote: > >> Hmm...it looks to me the actual problem is actually simple. There is >> only a dtmf handler and a stop state for exiting. If the stop state >> is triggered, then the engine does not step but immediately falls back >> to step state, and hence re-executes the record command all over >> again. This sounds to me like what is happening based on what was >> described.
>>
>> I would need to know exactly which event->id's are received in the >> record state as it runs, but whichever one it is, it should do a >> signal step to advance the interpreter. I would expect audio idle to >> eventually come out, and it may make more sense to eliminate changing >> to the step state on stop and dtmf handlers entirely, and then >> fallback to the interpreter only on a AUDIO_IDLE, but it would be much >> better to see the event sequence you do receive to be certain.
>>
>> address@hidden wrote:
>> > On Apr 27 2005, David Sugar wrote:
>> > >> Hmm...so you can build against 141?
>> >>
>> >> Perhaps tracing the record state in the aculab driver would help. >> You >> can have it report each event->id it receives. Are you using a >> >> timeout to set a maximum record duration? Does the timer go off? >> >> What happens in the TRUNK_TIMER_EXPIRED handler in >> >> aculab/record.cpp?
>> >>
>> >> Luca Bariani wrote:
>> >> > have you already posted this to bayonne-aculab mailing list?
>> >> > > Luca
>> >> > > >> First, we do not use DTK111 we use DTK141 with patch from >> >> DTK140 that >> gives options of building drivers as Prosody2 (TiNG) or >> >> Prosody 1, >> since we could not get dtk111 to load firmware onto >> our >> boards.
>> >> >>
>> >> >> You only need to create sysmbolic link of ln -s >> >> >> /usr/src/aculab/dtk141 dtk111 and bayonne will build >> >> >> straightforward.
>> >> >>
>> >> >> In bayonne.conf we set firmware=/root/ets_supu.upr and it >> >> downloaded >> the firmware ok, it will look for dtk111 this time under >> >> >> /home/aculab/dtk111 , which is another symbolic link from dtk141.
>> >> >>
>> >> >>We made thousands of calls, most of them in bulk and everthing is >> ok.
>> >> >>
>> >> >> We do have problem though of recording, it keep looping and >> >> >> overwriting the audio and the script will not advance unless you >> press >> >> #, however if we replace record with sleep the script will >> complete.
>> >> >>
>> >> >> There has been similar problem with other drivers, I believe and >> I >> was >> wondering those who have been running aculab resolved this >> >> aculab >> recording issue we use bayonne-1.2.14
>> >> >>
>> >> >>We are getting similar problem with bayonne-1.2.8 which we have >> run >> with
>> >> >>dialogic with great sucess.
>> >> >>
>> >> >>Your help will be very appriciated.
>> >> >>
>> >> >>Thanks,
>> >> >>
>> >> >>Mo
>> >> >>
>> >> >>
>> >> >>
>> >> >>_______________________________________________
>> >> >>Bayonne-devel mailing list
>> >> >>address@hidden
>> >> >>http://lists.gnu.org/mailman/listinfo/bayonne-devel
>> >> > > > > > > > _______________________________________________
>> >> > Bayonne-devel mailing list
>> >> > address@hidden
>> >> > http://lists.gnu.org/mailman/listinfo/bayonne-devel
>> > > > > > Source code  of record.cpp in bayonne-1.2.14
>> > > > #include "driver.h"
>> > > #ifdef    CCXX_NAMESPACES
>> > using namespace std;
>> > namespace ost {
>> > #endif
>> > > bool AculabTrunk::recordHandler(TrunkEvent *event)
>> > {
>> >        struct tm *dt, tbuf;
>> >        struct stat ino;
>> >        char buffer[32];
>> >        const char *ext;
>> >        Audio::Info info;
>> >        unsigned mask;
>> > >        switch(event->id)
>> >        {
>> >        case TRUNK_STOP_STATE:
>> >                endTimer();
>> >                handler = &AculabTrunk::stepHandler;
>> >                StopRecordFile();
>> >                Trunk::flags.dsp=DSP_MODE_INACTIVE;
>> >                return true;
>> >        case TRUNK_DTMF_KEYUP:
>> >                mask = (1 << event->parm.dtmf.digit);
>> >                if(!(mask & data.record.term)) {
>> >                        return false;
>> >                }
>> >                endTimer();
>> >                StopRecordFile();
>> >                Trunk::flags.dsp=DSP_MODE_INACTIVE;
>> >                trunkSignal(TRUNK_SIGNAL_STEP);
>> >                handler = &AculabTrunk::stepHandler;
>> >                return true;
>> >        case TRUNK_ENTER_STATE:
>> >                enterState("record");
>> >                status[id] = 'r';
>> > >                setTimer(data.record.timeout);
>> >                if(data.record.term) {
>> >                        setDTMFDetect(true);
>> >                }
>> >                else {
>> >                        Trunk::setDTMFDetect();
>> >                }
>> > >                ext = strrchr(data.record.name, '/');
>> >                if(!ext)
>> >                        ext = data.record.name;
>> > >                ext = strrchr(ext, '.');
>> > >                info.format = raw;
>> >                info.encoding = mulawAudio;
>> >                info.order = 0;
>> >                info.annotation = (char *)data.record.annotation;
>> >                info.rate = 8000;
>> > >                if(!ext)                {
>> >                        ext = data.record.extension;
>> >                        strcat(data.record.name, ext);
>> >                }
>> > >                if(!stricmp(ext, ".al")) {
>> >                        info.encoding = alawAudio;
>> >                }
>> >                else if(!stricmp(ext, ".au"))
>> >                {
>> >                        info.format = sun;
>> >                        info.order = __BIG_ENDIAN;
>> >                }
>> >                else if(!stricmp(ext, ".wav"))
>> >                {
>> >                        info.format = riff;
>> >                        info.order = __LITTLE_ENDIAN;
>> >                }
>> > >                close();
>> > >                filename=data.record.name;
>> > >                if(data.record.offset != (unsigned long)-1)
>> >                {
>> >                        open(data.record.name);
>> >                        setPosition(data.record.offset);
>> >                }
>> >                else if(data.record.append)
>> >                        open(data.record.name);
>> >                else
>> >                        create(data.record.name, &info);
>> > >                setSymbol(SYM_OFFSET, "0");
>> >                setSymbol(SYM_RECORDED, "0");
>> > >                if(!isOpen())
>> >                {
>> > slog(Slog::levelError) << name<<": > >> "<<data.record.name << ": cannot open" << endl;
>> >                        setSymbol(SYM_ERROR, "record-failed");
>> >                        trunkSignal(TRUNK_SIGNAL_ERROR);
>> >                        handler = &AculabTrunk::stepHandler;
>> >                        return true;
>> >                }
>> >                if(data.record.append) {
>> >                        setPosition();
>> >                }
>> > >                dt = localtime_r(&ino.st_ctime, &tbuf);
>> >                sprintf(buffer, "%04d%02d%02d,%02d%02d%02d",
>> > dt->tm_year + 1900, dt->tm_mon + 1, >> > dt->tm_mday,
>> >                        dt->tm_hour, dt->tm_min, dt->tm_sec);
>> >                setSymbol(SYM_CREATED, buffer);
>> >                if(data.record.info)
>> >                {
>> >                        sprintf(buffer, "%ld", getPosition());
>> >                        setSymbol(SYM_OFFSET, buffer);
>> >                }
>> >                else
>> >                        StartRecordFile();
>> >                Trunk::flags.dsp=DSP_MODE_VOICE;
>> >                return true;
>> >        }
>> >        return false;
>> > }
>> > > #ifdef    CCXX_NAMESPACES
>> > };
>> > #endif
>> > > > > > > > _______________________________________________
>> > Bayonne-devel mailing list
>> > address@hidden
>> > http://lists.gnu.org/mailman/listinfo/bayonne-devel
>>





reply via email to

[Prev in Thread] Current Thread [Next in Thread]