gsmopen: readded mod_gsmopen.cpp, deleted by mistake

This commit is contained in:
Giovanni Maruzzelli 2012-04-06 22:40:54 +02:00
parent 100bccbcf8
commit c2b93b8350
4 changed files with 3103 additions and 229 deletions

View File

@ -1,31 +1,9 @@
GSMopen, GSM Endpoint and Trunk
This is just a prototype.
put this directory in freeswitch.trunk/src/mod/endpoints/
make clean; make; make install
Is not getting its configuration from the configuration file, it's all hardcoded but it needs the configuration file.
Copy gsmopen.conf.xml in /usr/local/freeswitch/conf/autoload_configs/
You must have the device on serial port /dev/ttyACM0 and the audio as second soundcard plughw:1 (if you do not have a first soundcard, just modprobe snd-dummy before to connect the usb thingy).
Put the volumes (with alsamixer -c1 -Vall) as: speaker 80, autogain on, mic off, mic capt 0.
Then, with alsamixer -c1 -Vcapture, be sure capture is active (eg, press the spacebar until the red CAPTURE appear). When it all working, adjust to your taste.
It answer calls, make calls, receive sms, and send sms (with the CLI command "sendsms").
Copy ciapalo in /usr/local/bin/ (is the program automatically spawned when an SMS is received).
Copy asound.conf in /etc/asound.conf, it will spare you cpu cycles when rate conversion is required (always).
All documentation on compiling, using, configuring,
tricks and tweaks, possible problems at:
http://wiki.freeswitch.org/wiki/GSMopen_GSM_Endpoint_and_Trunk
http://wiki.freeswitch.org/wiki/Gsmopen
Enjoy

File diff suppressed because it is too large Load Diff

View File

@ -1,206 +0,0 @@
// *************************************************************************
// * GSM TA/ME library
// *
// * File: testgsmlib.cc
// *
// * Purpose: Test general gsm functions (without SMS/phonebook)
// *
// * Author: Peter Hofmann (software@pxh.de)
// *
// * Created: 17.5.1999
// *************************************************************************
#ifdef HAVE_CONFIG_H
#include <gsm_config.h>
#endif
#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;
// some time-consuming tests can be switched off by commenting out the
// following macros
#define TEST_OPERATOR_INFO
void printForwardReason(string s, ForwardInfo &info)
{
cout << " " << s << ": "
<< (info._active ? "active " : "inactive ")
<< "number: " << info._number
<< " subaddr: " << info._subAddr
<< " time: " << info._time << endl;
}
int main(int argc, char *argv[])
{
string ciapa;
int i;
if(argc<2){
cout << (string)"You gave no \"device\" argument!" << endl;
return -1;
}
try
{
cout << (string)"Opening device " + argv[1] << endl;
#ifdef WIN32
Ref<Port> port = new Win32SerialPort((string)argv[1], 38400);
#else
//Ref<Port> port = new UnixSerialPort((string)argv[1], B38400);
Ref<Port> port = new UnixSerialPort((string)argv[1], B115200);
#endif
cout << "Creating MeTa object" << endl;
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("ATI9", true);
for(i=0; i<9; i++){
ciapa = gsmat->getLine();
cout << "PRESO: |||" << ciapa << "|||" << endl;
//usleep(5000);
}
#ifdef NOTDEF
cout << "Getting ME info" << endl;
MEInfo mei = m.getMEInfo();
cout << " Manufacturer: " << mei._manufacturer << endl
<< " Model: " << mei._model << endl
<< " Revision: " << mei._revision << endl
<< " Serial Number: " << mei._serialNumber << endl << endl;
#ifdef TEST_OPERATOR_INFO
try
{
cout << "Getting operator info" << endl;
vector<OPInfo> opis = m.getAvailableOPInfo();
for (vector<OPInfo>::iterator i = opis.begin(); i != opis.end(); ++i)
{
cout << " Status: ";
switch (i->_status)
{
case 0: cout << "unknown"; break;
case 1: cout << "current"; break;
case 2: cout << "available"; break;
case 3: cout << "forbidden"; break;
}
cout << endl
<< " Long name: '" << i->_longName << "' "
<< " Short name: '" << i->_shortName << "' "
<< " Numeric name: " << i->_numericName << endl;
}
}
catch (GsmException &ge)
{
if (ge.getErrorCode() == 0)
cout << "phone failure ignored" << endl;
else
throw;
}
cout << endl;
#endif // TEST_OPERATOR_INFO
cout << "Current operator info" << endl;
OPInfo opi = m.getCurrentOPInfo();
cout << " Long name: '" << opi._longName << "' "
<< " Short name: '" << opi._shortName << "' "
<< " Numeric name: " << opi._numericName << endl
<< " Mode: ";
switch (opi._mode)
{
case 0: cout << "automatic"; break;
case 1: cout << "manual"; break;
case 2: cout << "deregister"; break;
case 4: cout << "manual/automatic"; break;
}
cout << endl;
cout << "Facility lock capabilities" << endl << " ";
vector<string> fclc = m.getFacilityLockCapabilities();
for (vector<string>::iterator i = fclc.begin(); i != fclc.end(); ++i)
cout << *i << " ";
cout << endl << endl;
cout << "Facility lock states" << endl;
for (vector<string>::iterator k = fclc.begin(); k != fclc.end(); ++k)
if (*k != "AB" && *k != "AG" && *k != "AC")
{
cout << " " << *k;
if (m.getFacilityLockStatus(*k, VoiceFacility))
cout << " Voice";
if (m.getFacilityLockStatus(*k, DataFacility))
cout << " Data";
if (m.getFacilityLockStatus(*k, FaxFacility))
cout << " Fax";
}
cout << endl;
cout << "Facilities with password" << endl;
vector<PWInfo> pwi = m.getPasswords();
for (vector<PWInfo>::iterator j = pwi.begin(); j != pwi.end(); ++j)
cout << " " << j->_facility << " len " << j->_maxPasswdLen << endl;
cout << endl;
cout << "Network caller line identification identification: "
<< (m.getNetworkCLIP() ? "on" : "off") << endl << endl;
cout << "Call forwarding information" << endl;
for (int r = 0; r < 4; ++r)
{
switch (r)
{
case 0: cout << "UnconditionalReason" << endl; break;
case 1: cout << "MobileBusyReason" << endl; break;
case 2: cout << "NoReplyReason" << endl; break;
case 3: cout << "NotReachableReason" << endl; break;
}
ForwardInfo voice, fax, data;
m.getCallForwardInfo((ForwardReason)r, voice, fax, data);
printForwardReason("Voice", voice);
printForwardReason("Data", data);
printForwardReason("Fax", fax);
}
cout << endl;
cout << "Battery charge status" << endl;
int bcs = m.getBatteryChargeStatus();
switch (bcs)
{
case 0: cout << "ME is powered by the battery" << endl; break;
case 1: cout << "ME has a battery connected, but is not powered by it"
<< endl; break;
case 2: cout << "ME does not have a battery connected" << endl; break;
case 3: cout << "Recognized power fault, calls inhibited" << endl; break;
}
cout << endl;
cout << "Battery charge: " << m.getBatteryCharge() << endl << endl;
cout << "Signal strength: " << m.getSignalStrength() << endl << endl;
cout << "Bit error rate: " << m.getBitErrorRate() << endl << endl;
#endif //NOTDEF
}
catch (GsmException &ge)
{
cerr << "GsmException '" << ge.what() << "'" << endl;
return 1;
}
return 0;
}