#include "gsmopen.h"
-//#include <iostream.h>
-#ifndef NO_GSMLIB
-#include <gsmlib/gsm_sms.h>
-#ifdef WIN32
-#include <gsmlib/gsm_win32_serial.h>
-#else
-#include <gsmlib/gsm_unix_serial.h>
-#endif
-#include <gsmlib/gsm_me_ta.h>
-#include <iostream>
-
-
-using namespace std;
-using namespace gsmlib;
-#endif// NO_GSMLIB
+extern int running; //FIXME
+int gsmopen_dir_entry_extension = 1; //FIXME
+int option_debug = 100; //FIXME
-#ifdef ASTERISK
-#define gsmopen_sleep usleep
-#define gsmopen_strncpy strncpy
-#define tech_pvt p
-extern int gsmopen_debug;
-extern char *gsmopen_console_active;
-#else /* FREESWITCH */
#define gsmopen_sleep switch_sleep
#define gsmopen_strncpy switch_copy_string
extern switch_memory_pool_t *gsmopen_module_pool;
extern switch_endpoint_interface_t *gsmopen_endpoint_interface;
-#endif /* ASTERISK */
-//int samplerate_gsmopen = SAMPLERATE_GSMOPEN;
-
-extern int running;
-int gsmopen_dir_entry_extension = 1;
-
-int option_debug = 100;
-
-
-#ifdef WIN32
-#define GSMLIBGIO
-#else //WIN32
-#undef GSMLIBGIO
-#endif //WIN32
#ifdef WIN32
/***************/
/***************/
#endif /* WIN32 */
-#ifdef GSMOPEN_PORTAUDIO
-#include "pablio.h"
-
-#ifndef GIOVA48
-#define SAMPLES_PER_FRAME 160
-#else // GIOVA48
-#define SAMPLES_PER_FRAME 960
-#endif // GIOVA48
-
-int gsmopen_portaudio_devlist(private_t *tech_pvt)
-{
- int i, numDevices;
- const PaDeviceInfo *deviceInfo;
-
- numDevices = Pa_GetDeviceCount();
- if (numDevices < 0) {
- return 0;
- }
- for (i = 0; i < numDevices; i++) {
- deviceInfo = Pa_GetDeviceInfo(i);
- NOTICA
- ("Found PORTAUDIO device: id=%d\tname=%s\tmax input channels=%d\tmax output channels=%d\n",
- GSMOPEN_P_LOG, i, deviceInfo->name, deviceInfo->maxInputChannels,
- deviceInfo->maxOutputChannels);
- }
-
- return numDevices;
-}
-
-int gsmopen_portaudio_init(private_t *tech_pvt)
-{
- PaError err;
- int c;
- PaStreamParameters inputParameters, outputParameters;
- int numdevices;
- const PaDeviceInfo *deviceInfo;
-
-#ifndef GIOVA48
- setenv("PA_ALSA_PLUGHW", "1", 1);
-#endif // GIOVA48
-
- err = Pa_Initialize();
- if (err != paNoError)
- return err;
-
- numdevices = gsmopen_portaudio_devlist(tech_pvt);
-
- if (tech_pvt->portaudiocindex > (numdevices - 1)) {
- ERRORA("Portaudio Capture id=%d is out of range: valid id are from 0 to %d\n",
- GSMOPEN_P_LOG, tech_pvt->portaudiocindex, (numdevices - 1));
- return -1;
- }
-
- if (tech_pvt->portaudiopindex > (numdevices - 1)) {
- ERRORA("Portaudio Playback id=%d is out of range: valid id are from 0 to %d\n",
- GSMOPEN_P_LOG, tech_pvt->portaudiopindex, (numdevices - 1));
- return -1;
- }
- //inputParameters.device = 0;
- if (tech_pvt->portaudiocindex != -1) {
- inputParameters.device = tech_pvt->portaudiocindex;
- } else {
- inputParameters.device = Pa_GetDefaultInputDevice();
- }
- deviceInfo = Pa_GetDeviceInfo(inputParameters.device);
- NOTICA
- ("Using INPUT PORTAUDIO device: id=%d\tname=%s\tmax input channels=%d\tmax output channels=%d\n",
- GSMOPEN_P_LOG, inputParameters.device, deviceInfo->name,
- deviceInfo->maxInputChannels, deviceInfo->maxOutputChannels);
- if (deviceInfo->maxInputChannels == 0) {
- ERRORA
- ("No INPUT channels on device: id=%d\tname=%s\tmax input channels=%d\tmax output channels=%d\n",
- GSMOPEN_P_LOG, inputParameters.device, deviceInfo->name,
- deviceInfo->maxInputChannels, deviceInfo->maxOutputChannels);
- return -1;
- }
- inputParameters.channelCount = 1;
- inputParameters.sampleFormat = paInt16;
- //inputParameters.suggestedLatency = Pa_GetDeviceInfo(inputParameters.device)->defaultHighInputLatency;
- inputParameters.suggestedLatency = 0.1;
- inputParameters.hostApiSpecificStreamInfo = NULL;
-
- //outputParameters.device = 3;
- if (tech_pvt->portaudiopindex != -1) {
- outputParameters.device = tech_pvt->portaudiopindex;
- } else {
- outputParameters.device = Pa_GetDefaultOutputDevice();
- }
- deviceInfo = Pa_GetDeviceInfo(outputParameters.device);
- NOTICA
- ("Using OUTPUT PORTAUDIO device: id=%d\tname=%s\tmax input channels=%d\tmax output channels=%d\n",
- GSMOPEN_P_LOG, outputParameters.device, deviceInfo->name,
- deviceInfo->maxInputChannels, deviceInfo->maxOutputChannels);
- if (deviceInfo->maxOutputChannels == 0) {
- ERRORA
- ("No OUTPUT channels on device: id=%d\tname=%s\tmax input channels=%d\tmax output channels=%d\n",
- GSMOPEN_P_LOG, inputParameters.device, deviceInfo->name,
- deviceInfo->maxInputChannels, deviceInfo->maxOutputChannels);
- return -1;
- }
-#ifndef GIOVA48
- outputParameters.channelCount = 1;
-#else // GIOVA48
- outputParameters.channelCount = 2;
-#endif // GIOVA48
- outputParameters.sampleFormat = paInt16;
- //outputParameters.suggestedLatency = Pa_GetDeviceInfo(outputParameters.device)->defaultHighOutputLatency;
- outputParameters.suggestedLatency = 0.1;
- outputParameters.hostApiSpecificStreamInfo = NULL;
-
-/* build the pipe that will be polled on by pbx */
- c = pipe(tech_pvt->audiopipe);
- if (c) {
- ERRORA("Unable to create audio pipe\n", GSMOPEN_P_LOG);
- return -1;
- }
- fcntl(tech_pvt->audiopipe[0], F_SETFL, O_NONBLOCK);
- fcntl(tech_pvt->audiopipe[1], F_SETFL, O_NONBLOCK);
-
- err =
-#ifndef GIOVA48
- OpenAudioStream(&tech_pvt->stream, &inputParameters, &outputParameters, 8000,
- paClipOff|paDitherOff, SAMPLES_PER_FRAME, 0);
- //&tech_pvt->speexecho, &tech_pvt->speexpreprocess, &tech_pvt->owner);
-
-#else // GIOVA48
- OpenAudioStream(&tech_pvt->stream, &inputParameters, &outputParameters, 48000,
- paDitherOff | paClipOff, SAMPLES_PER_FRAME, tech_pvt->audiopipe[1],
- &tech_pvt->speexecho, &tech_pvt->speexpreprocess, &tech_pvt->owner);
-
-
-#endif// GIOVA48
- if (err != paNoError) {
- ERRORA("Unable to open audio stream: %s\n", GSMOPEN_P_LOG, Pa_GetErrorText(err));
- return -1;
- }
-
-/* the pipe is our audio fd for pbx to poll on */
- tech_pvt->gsmopen_sound_capt_fd = tech_pvt->audiopipe[0];
-
- return 0;
-}
-//int gsmopen_portaudio_write(private_t *tech_pvt, struct ast_frame *f)
-int gsmopen_portaudio_write(private_t * tech_pvt, short *data, int datalen)
-{
- int samples;
-#ifdef GIOVA48
- //short buf[GSMOPEN_FRAME_SIZE * 2];
- short buf[3840];
- short *buf2;
-
- //ERRORA("1 f->datalen=: %d\n", GSMOPEN_P_LOG, f->datalen);
-
-
-
-
- memset(buf, '\0', GSMOPEN_FRAME_SIZE *2);
-
- buf2 = f->data;
-
- int i=0, a=0;
-
- for(i=0; i< f->datalen / sizeof(short); i++){
-//stereo, 2 chan 48 -> mono 8
- buf[a] = buf2[i];
- a++;
- buf[a] = buf2[i];
- a++;
- buf[a] = buf2[i];
- a++;
- buf[a] = buf2[i];
- a++;
- buf[a] = buf2[i];
- a++;
- buf[a] = buf2[i];
- a++;
- buf[a] = buf2[i];
- a++;
- buf[a] = buf2[i];
- a++;
- buf[a] = buf2[i];
- a++;
- buf[a] = buf2[i];
- a++;
- buf[a] = buf2[i];
- a++;
- buf[a] = buf2[i];
- a++;
- /*
- */
- }
- f->data = &buf;
- f->datalen = f->datalen * 6;
- //ERRORA("2 f->datalen=: %d\n", GSMOPEN_P_LOG, f->datalen);
- //f->datalen = f->datalen;
-#endif // GIOVA48
-
-
- samples =
- WriteAudioStream(tech_pvt->stream, (short *) data, (int) (datalen / sizeof(short)), &tech_pvt->timer_write);
-
- if (samples != (int) (datalen / sizeof(short)))
- ERRORA("WriteAudioStream wrote: %d of %d\n", GSMOPEN_P_LOG, samples,
- (int) (datalen / sizeof(short)));
-
- return samples;
-}
-//struct ast_frame *gsmopen_portaudio_read(private_t *tech_pvt)
-#define AST_FRIENDLY_OFFSET 0
-int gsmopen_portaudio_read(private_t * tech_pvt, short *data, int datalen)
-{
-#if 0
- //static struct ast_frame f;
- static short __buf[GSMOPEN_FRAME_SIZE + AST_FRIENDLY_OFFSET / 2];
- short *buf;
- static short __buf2[GSMOPEN_FRAME_SIZE + AST_FRIENDLY_OFFSET / 2];
- short *buf2;
- int samples;
- //char c;
-
- memset(__buf, '\0', (GSMOPEN_FRAME_SIZE + AST_FRIENDLY_OFFSET / 2));
-
- buf = __buf + AST_FRIENDLY_OFFSET / 2;
-
- memset(__buf2, '\0', (GSMOPEN_FRAME_SIZE + AST_FRIENDLY_OFFSET / 2));
-
- buf2 = __buf2 + AST_FRIENDLY_OFFSET / 2;
-
-#if 0
- f.frametype = AST_FRAME_NULL;
- f.subclass = 0;
- f.samples = 0;
- f.datalen = 0;
-
-#ifdef ASTERISK_VERSION_1_6_1
- f.data.ptr = NULL;
-#else
- f.data = NULL;
-#endif /* ASTERISK_VERSION_1_6_1 */
- f.offset = 0;
- f.src = gsmopen_type;
- f.mallocd = 0;
- f.delivery.tv_sec = 0;
- f.delivery.tv_usec = 0;
-#endif //0
-
- //if ((samples = ReadAudioStream(tech_pvt->stream, buf, SAMPLES_PER_FRAME)) == 0)
- //if ((samples = ReadAudioStream(tech_pvt->stream, data, datalen/sizeof(short))) == 0)
- if (samples = ReadAudioStream(tech_pvt->stream, (short *)data, datalen, &tech_pvt->timer_read) == 0) {
- //do nothing
- } else {
-#ifdef GIOVA48
- int i=0, a=0;
-
- samples = samples / 6;
- for(i=0; i< samples; i++){
- buf2[i] = buf[a];
- a = a + 6; //mono, 1 chan 48 -> 8
- }
- buf = buf2;
-
-#if 0
- /* A real frame */
- f.frametype = AST_FRAME_VOICE;
- f.subclass = AST_FORMAT_SLINEAR;
- f.samples = GSMOPEN_FRAME_SIZE/6;
- f.datalen = GSMOPEN_FRAME_SIZE * 2/6;
-#endif //0
-#else// GIOVA48
-#if 0
- /* A real frame */
- f.frametype = AST_FRAME_VOICE;
- f.subclass = AST_FORMAT_SLINEAR;
- f.samples = GSMOPEN_FRAME_SIZE;
- f.datalen = GSMOPEN_FRAME_SIZE * 2;
-#endif //0
-#endif// GIOVA48
-
-#if 0
-#ifdef ASTERISK_VERSION_1_6_1
- f.data.ptr = buf;
-#else
- f.data = buf;
-#endif /* ASTERISK_VERSION_1_6_1 */
- f.offset = AST_FRIENDLY_OFFSET;
- f.src = gsmopen_type;
- f.mallocd = 0;
-#endif //0
- }
-
-#if 0
- read(tech_pvt->audiopipe[0], &c, 1);
-
- return &f;
-#endif //0
-#endif //0
-
- int samples;
- samples = ReadAudioStream(tech_pvt->stream, (short *)data, datalen, &tech_pvt->timer_read);
- //WARNINGA("samples=%d\n", GSMOPEN_P_LOG, samples);
-
- return samples;
-}
-int gsmopen_portaudio_shutdown(private_t *tech_pvt)
-{
- PaError err;
-
- err = CloseAudioStream(tech_pvt->stream);
-
- if (err != paNoError)
- ERRORA("not able to CloseAudioStream\n", GSMOPEN_P_LOG);
-
- Pa_Terminate();
- return 0;
-}
-
-
-
-
-#endif // GSMOPEN_PORTAUDIO
-#ifndef GSMLIBGIO
int gsmopen_serial_init(private_t * tech_pvt, speed_t controldevice_speed)
{
int fd;
}
return (fd);
}
-#else //GSMLIBGIO
-#ifdef WIN32
-int gsmopen_serial_init(private_t * tech_pvt, int controldevice_speed)
-#else
-int gsmopen_serial_init(private_t * tech_pvt, speed_t controldevice_speed)
-#endif //WIN32
-{
- int i;
- string ciapa;
- SMSMessageRef sms;
- char content2[1000];
- int size;
-
-#ifdef WIN32
- Ref <Port> port = new Win32SerialPort((string) tech_pvt->controldevice_name, 38400);
-#else
- //Ref<Port> port = new UnixSerialPort((string)argv[1], B38400);
- Ref < Port > port = new UnixSerialPort((string) tech_pvt->controldevice_name, B115200);
-#endif
- MeTa m(port);
-
- //cout << "Creating GsmAt object" << endl;
- Ref <GsmAt> gsmat = new GsmAt(m);
-
- //cout << "Using GsmAt object" << endl;
- //cout << gsmat->chat("AT", "OK", false, false) << endl;
- //cout << gsmat->chat("D3472665618;") << endl;
- gsmat->putLine("AT+cgmm", true);
- for (i = 0; i < 4; i++) {
- ciapa = gsmat->getLine();
- //cout << "PRESO: |||" << ciapa << "|||" << endl;
- NOTICA("PRESO %d |||%s|||\n", GSMOPEN_P_LOG, i, ciapa.c_str());
- //gsmopen_sleep(5000);
- }
-
- sms = SMSMessage::decode("079194710167120004038571F1390099406180904480A0D41631067296EF7390383D07CD622E58CD95CB81D6EF39BDEC66BFE7207A794E2FBB4320AFB82C07E56020A8FC7D9687DBED32285C9F83A06F769A9E5EB340D7B49C3E1FA3C3663A0B24E4CBE76516680A7FCBE920725A5E5ED341F0B21C346D4E41E1BA790E4286DDE4BC0BD42CA3E5207258EE1797E5A0BA9B5E9683C86539685997EBEF61341B249BC966"); // dataCodingScheme = 0
- NOTICA("SMS=\n%s\n", GSMOPEN_P_LOG, sms->toString().c_str());
- sms = SMSMessage::decode("0791934329002000040C9193432766658100009001211133318004D4F29C0E"); // dataCodingScheme = 0
- NOTICA("SMS=\n%s\n", GSMOPEN_P_LOG, sms->toString().c_str());
- sms = SMSMessage::decode("0791934329002000040C919343276665810008900121612521801600CC00E800E900F900F200E00020006300690061006F"); // dataCodingScheme = 8
- NOTICA("SMS=\n%s\n", GSMOPEN_P_LOG, sms->toString().c_str());
- sms = SMSMessage::decode("0791934329002000040C919343276665810008900172002293404C006300690061006F0020003100320033002000620065006C00E80020043D043E0432043E044104420438002005DC05E7002005E805D005EA0020FE8EFEE0FEA0FEE4FECBFE9300204EBA5927"); // dataCodingScheme = 8 , text=ciao 123 belè новости לק ראת ﺎﻠﺠﻤﻋﺓ 人大
- NOTICA("SMS=\n%s\n", GSMOPEN_P_LOG, sms->toString().c_str());
- sms = SMSMessage::decode("07911497941902F00414D0E474989D769F5DE4320839001040122151820000"); // dataCodingScheme = 0
- NOTICA("SMS=\n%s\n", GSMOPEN_P_LOG, sms->toString().c_str());
-
-#if 0
- size = MultiByteToWideChar(CP_OEMCP, 0, username, strlen(username)+1, UserName, 0);\r
- UserName=(wchar_t*)GlobalAlloc(GME M_ZEROINIT, size);\r
- ret = MultiByteToWideChar(CP_OEMCP, 0, username, strlen(username)+1, UserName, size);\r
- if(ret == 0)\r
- getError(GetLastError());\r
-#endif //0
- return (-1);
-}
-
-#endif //GSMLIBGIO
int gsmopen_serial_read(private_t * tech_pvt)