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: David Sugar
Subject: Re: [Bayonne-devel] Aculab Recording on bayonne
Date: Thu, 28 Apr 2005 07:12:47 -0400
User-agent: Mozilla Thunderbird 1.0.2 (Macintosh/20050317)

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

Attachment: dyfet.vcf
Description: Vcard


reply via email to

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