⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gsmsiectl.cc

📁 开发手机AT指令的源码
💻 CC
📖 第 1 页 / 共 2 页
字号:
// *************************************************************************// * GSM TA/ME library// *// * File:    gsmsiectl.cc// *// * Purpose: GSM Siemens mobile phone control program// *// * Author:  Christian W. Zuckschwerdt  <zany@triq.net>// *// * Created: 2001-12-15// *************************************************************************#ifdef HAVE_CONFIG_H#include <gsm_config.h>#endif#include <gsmlib/gsm_nls.h>#include <string>#if defined(HAVE_GETOPT_LONG) || defined(WIN32)#include <getopt.h>#endif#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <gsmlib/gsm_me_ta.h>#include <gsm_sie_me.h>#include <gsmlib/gsm_util.h>#include <gsmlib/gsm_sysdep.h>#ifdef WIN32#include <gsmlib/gsm_win32_serial.h>#else#include <gsmlib/gsm_unix_serial.h>#include <unistd.h>#endif#include <iostream>using namespace std;using namespace gsmlib;// my MEstatic SieMe *m;// information parametersenum InfoParameter {AllInfo, // print all info                    MeInfo,     // MeInfo must be first!                    OperatorInfo,                    CurrentOperatorInfo,                    FacilityLockStateInfo,                    FacilityLockCapabilityInfo,                    PasswordInfo,                    CLIPInfo,                    CallForwardingInfo,                    BatteryInfo,                    BitErrorInfo,                    SCAInfo,                    CharSetInfo,                    PhonebookInfo, // extended Siemens info		    SignalToneInfo,		    RingingToneInfo,		    BinaryInfo,                    SignalInfo}; // SignalInfo must be last!// operation parameters// FIXME operations not implemented yet// options#ifdef HAVE_GETOPT_LONGstatic struct option longOpts[] ={  {"xonxoff", no_argument, (int*)NULL, 'X'},  {"operation", required_argument, (int*)NULL, 'o'},  {"device", required_argument, (int*)NULL, 'd'},  {"baudrate", required_argument, (int*)NULL, 'b'},  {"init", required_argument, (int*)NULL, 'I'},  {"help", no_argument, (int*)NULL, 'h'},  {"version", no_argument, (int*)NULL, 'v'},  {(char*)NULL, 0, (int*)NULL, 0}};#else#define getopt_long(argc, argv, options, longopts, indexptr) \  getopt(argc, argv, options)#endif// helper function, prints forwarding infovoid printForwardReason(string s, ForwardInfo &info){  cout << s << "  "       << (info._active ? _("active ") : _("inactive "))       << _("number: ") << info._number       << _("  subaddr: ") << info._subAddr       << _("  time: ") << info._time << endl;}// helper function, prints integer rangevoid printIntRange(IntRange ir){  cout << "(" << ir._low;  if (ir._high != NOT_SET)    cout << "-" << ir._high;  cout << ")";}// helper function, prints parameter rangevoid printParameterRange(ParameterRange pr){  cout << "(\"" << pr._parameter << "\",";  printIntRange(pr._range);  cout << ")";}// print informationstatic void printInfo(InfoParameter ip){  switch (ip)  {  case MeInfo:  {    MEInfo mei = m->getMEInfo();    cout << _("<ME0>  Manufacturer: ") << mei._manufacturer << endl         << _("<ME1>  Model: ") << mei._model << endl         << _("<ME2>  Revision: ") << mei._revision << endl         << _("<ME3>  Serial Number: ") << mei._serialNumber << endl;    break;  }  case OperatorInfo:  {    int count = 0;    vector<OPInfo> opis = m->getAvailableOPInfo();    for (vector<OPInfo>::iterator i = opis.begin(); i != opis.end(); ++i)    {      cout << "<OP" << count << _(">  Status: ");      switch (i->_status)      {      case UnknownOPStatus: cout << _("unknown"); break;      case CurrentOPStatus: cout << _("current"); break;      case AvailableOPStatus: cout << _("available"); break;      case ForbiddenOPStatus: cout << _("forbidden"); break;      }      cout << _("  Long name: '") << i->_longName << "' "           << _("  Short name: '") << i->_shortName << "' "           << _("  Numeric name: ") << i->_numericName << endl;      ++count;    }    break;  }  case CurrentOperatorInfo:  {    OPInfo opi = m->getCurrentOPInfo();    cout << "<CURROP0>"         << _("  Long name: '") << opi._longName << "' "         << _("  Short name: '") << opi._shortName << "' "         << _("  Numeric name: ") << opi._numericName         << _("  Mode: ");    switch (opi._mode)    {    case AutomaticOPMode: cout << _("automatic"); break;    case ManualOPMode: cout << _("manual"); break;    case DeregisterOPMode: cout << _("deregister"); break;    case ManualAutomaticOPMode: cout << _("manual/automatic"); break;    }    cout << endl;    break;  }  case FacilityLockStateInfo:  {    int count = 0;    vector<string> fclc = m->getFacilityLockCapabilities();    for (vector<string>::iterator i = fclc.begin(); i != fclc.end(); ++i)      if (*i != "AB" && *i != "AG" && *i != "AC")      {        cout << "<FLSTAT" << count <<  ">  '" << *i << "'";        try        {          if (m->getFacilityLockStatus(*i, VoiceFacility))            cout << _("  Voice");        }        catch (GsmException &e)        {          cout << _("  unknown");        }        try        {        if (m->getFacilityLockStatus(*i, DataFacility))          cout << _("  Data");        }        catch (GsmException &e)        {          cout << _("  unknown");        }        try        {        if (m->getFacilityLockStatus(*i, FaxFacility))          cout << _("  Fax");        }        catch (GsmException &e)        {          cout << _("  unknown");        }        cout << endl;        ++count;      }    break;  }  case FacilityLockCapabilityInfo:  {    cout << "<FLCAP0>  ";    vector<string> fclc = m->getFacilityLockCapabilities();    for (vector<string>::iterator i = fclc.begin(); i != fclc.end(); ++i)      cout << "'" << *i << "' ";    cout << endl;    break;  }  case PasswordInfo:  {    vector<PWInfo> pwi = m->getPasswords();    int count = 0;    for (vector<PWInfo>::iterator i = pwi.begin(); i != pwi.end(); ++i)    {      cout << "<PW" << count <<  ">  '"           << i->_facility << "' " << i->_maxPasswdLen << endl;      ++count;    }    break;  }  case CLIPInfo:  {    cout << "<CLIP0>  " << (m->getNetworkCLIP() ? _("on") : _("off")) << endl;    break;  }  case CallForwardingInfo:  {    for (int r = 0; r < 4; ++r)    {      string text;      switch (r)      {      case 0: text = _("UnconditionalReason"); break;      case 1: text = _("MobileBusyReason"); break;      case 2: text = _("NoReplyReason"); break;      case 3: text = _("NotReachableReason"); break;      }      ForwardInfo voice, fax, data;      m->getCallForwardInfo((ForwardReason)r, voice, fax, data);      cout << "<FORW" << r << ".";      printForwardReason("0>  " + text + _("  Voice"), voice);      cout << "<FORW" << r << ".";      printForwardReason("1>  " + text + _("  Data"), data);      cout << "<FORW" << r << ".";      printForwardReason("2>  " + text + _("  Fax"), fax);    }    break;  }  case BatteryInfo:  {    cout << "<BATT0>  ";    int bcs = m->getBatteryChargeStatus();    switch (bcs)    {    case 0: cout << _("0 ME is powered by the battery") << endl; break;    case 1: cout << _("1 ME has a battery connected, but is not powered by it")                 << endl; break;    case 2: cout << _("2 ME does not have a battery connected") << endl; break;    case 3:      cout << _("3 Recognized power fault, calls inhibited") << endl;      break;    }    cout << "<BATT1>  " << m->getBatteryCharge() << endl;    break;  }  case BitErrorInfo:  {    cout << "<BITERR0>  " << m->getBitErrorRate() << endl;    break;  }  case SCAInfo:  {    cout << "<SCA0>  " << m->getServiceCentreAddress() << endl;    break;  }  case CharSetInfo:  {    cout << "<CSET0>  ";    vector<string> cs = m->getSupportedCharSets();    for (vector<string>::iterator i = cs.begin(); i != cs.end(); ++i)      cout << "'" << *i << "' ";    cout << endl;    cout << "<CSET1>  '" << m->getCurrentCharSet() << "'" << endl;    break;  }  case SignalInfo:  {    cout << "<SIG0>  " << m->getSignalStrength() << endl;    break;  }  case PhonebookInfo:  {    cout << "<PBOOK0>  ";    vector<string> pb = m->getSupportedPhonebooks();    for (vector<string>::iterator i = pb.begin(); i != pb.end(); ++i)      cout << "'" << *i << "' ";    cout << endl;    cout << "<PBOOK1>  '" << m->getCurrentPhonebook() << "'" << endl;    break;  }  case SignalToneInfo:  {    cout << "<SIGNAL0>  ";    IntRange st = m->getSupportedSignalTones();    printIntRange(st);    cout << endl;//    cout << "<SIGT1>  '" << m->getCurrentSignalTone() << "'" << endl;    break;  }  case RingingToneInfo:  {    cout << "<RING0>  ";    IntRange rt = m->getSupportedRingingTones();    printIntRange(rt);    cout << endl;    cout << "<RING1>  " << m->getCurrentRingingTone() << endl;    break;  }  case BinaryInfo:  {    cout << "<BIN0>  ";    vector<ParameterRange> bnr = m->getSupportedBinaryReads();    for (vector<ParameterRange>::iterator i = bnr.begin(); i != bnr.end(); ++i)    {      printParameterRange(*i);      cout << " ";    }    cout << endl;    cout << "<BIN1>  ";    vector<ParameterRange> bnw = m->getSupportedBinaryWrites();    for (vector<ParameterRange>::iterator i = bnw.begin(); i != bnw.end(); ++i)    {      printParameterRange(*i);      cout << " ";    }    cout << endl;    break;  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -