亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gsm_me_ta.c

?? Gsm手機(jī)(短信息,電話簿)開發(fā)庫C++源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
// *************************************************************************
// * GSM TA/ME library
// *
// * File:    gsm_me_ta.cc
// *
// * Purpose: Mobile Equipment/Terminal Adapter functions
// *          (ETSI GSM 07.07)
// *
// * Author:  Peter Hofmann (software@pxh.de)
// *
// * Created: 10.5.1999
// *************************************************************************

#ifdef HAVE_CONFIG_H
#include <gsm_config.h>
#endif

#include <gsmlib/gsm_nls.h>
#include <gsmlib/gsm_me_ta.h>
#include <gsmlib/gsm_parser.h>
#define min(a,b)            (((a) < (b)) ? (a) : (b))
using namespace std;
using namespace gsmlib;

// Capabilities members

Capabilities::Capabilities() :
  _hasSMSSCAprefix(true),
  _cpmsParamCount(-1),          // initialize to -1, must be set later by
                                // setSMSStore() function
  _omitsColon(true),            // FIXME
  _veryShortCOPSanswer(false),  // Falcom A2-1
  _wrongSMSStatusCode(false)    // Motorola Timeport 260
{
}

// MeTa members

void MeTa::init() throw(GsmException)
{
  // switch on extended error codes
  // caution: may be ignored by some TAs, so allow it to fail
  _at->chat("+CMEE=1", "", true, true);
  
  // select SMS pdu mode
  _at->chat("+CMGF=0");

  // now fill in capability object
  MEInfo info = getMEInfo();
  
  // Ericsson model 6050102
  if ((info._manufacturer == "ERICSSON" &&
      (info._model == "1100801" ||
       info._model == "1140801")) ||
      getenv("GSMLIB_SH888_FIX") != NULL)
  {
    // the Ericsson leaves out the service centre address
    _capabilities._hasSMSSCAprefix = false;
  }

  // handle Falcom strangeness
  if ((info._manufacturer == "Funkanlagen Leipoldt OHG" &&
      info._revision == "01.95.F2") ||
      getenv("GSMLIB_FALCOM_A2_1_FIX") != NULL)
  {
    _capabilities._veryShortCOPSanswer = true;
  }

  // handle Motorola SMS store bug - wrong status code
  if ((info._manufacturer == "Motorola" &&
       info._model == "L Series"))
  {
    _capabilities._wrongSMSStatusCode = true;
  } 
 
  // set GSM default character set
  try
  {
    setCharSet("GSM");
  }
  catch (GsmException)
  {
    // ignore errors, some devices don't support this
  }

  // set default event handler
  // necessary to handle at least RING indications that might
  // otherwise confuse gsmlib
  _at->setEventHandler(&_defaultEventHandler);
}

MeTa::MeTa(Ref<Port> port) throw(GsmException) : _port(port)
{
  // initialize AT handling
  _at = new GsmAt(*this);

  init();
}

// MeTa::MeTa(Ref<GsmAt> at) throw(GsmException) :
//   _at(at)
// {
//   init();
// }

void MeTa::setPhonebook(string phonebookName) throw(GsmException)
{
  if (phonebookName != _lastPhonebookName)
  {
    _at->chat("+CPBS=\"" + phonebookName + "\"");
    _lastPhonebookName = phonebookName;
  }
}

string MeTa::setSMSStore(string smsStore, int storeTypes, bool needResultCode)
  throw(GsmException)
{
  if (_capabilities._cpmsParamCount == -1)
  {
    // count the number of parameters for the CPMS AT sequences
    _capabilities._cpmsParamCount = 1;
    Parser p(_at->chat("+CPMS=?", "+CPMS:"));
    p.parseStringList();
    while (p.parseComma(true))
    {
      ++_capabilities._cpmsParamCount;
      p.parseStringList();
    }
  }

  // optimatization: only set current SMS store if different from last call
  // or the result code is needed
  if (needResultCode || _lastSMSStoreName != smsStore)
  {
    _lastSMSStoreName = smsStore;

    // build chat string
    string chatString = "+CPMS=\"" + smsStore + "\"";
    for (int i = 1; i < min(_capabilities._cpmsParamCount, storeTypes); ++i)
      chatString += ",\"" + smsStore + "\"";

    return _at->chat(chatString, "+CPMS:");
  }
  return "";
}

void MeTa::waitEvent(GsmTime timeout) throw(GsmException)
{
  if (_at->wait(timeout))
    _at->chat();                // send AT, wait for OK, handle events
}

// aux function for MeTa::getMEInfo()

static string stringVectorToString(const vector<string>& v,
                                   char separator = '\n')
{
  if (v.empty())
    return "";

  // concatenate string in vector as rows
  string result;
  for (vector<string>::const_iterator i = v.begin();;)
  {
    string s = *i;
    // remove leading and trailing "s
    if (s.length() > 0 && s[0] == '"')
      s.erase(s.begin());
    if (s.length() > 0 && s[s.length() - 1] == '"')
      s.erase(s.end() - 1);

    result += s;
    // don't add end line to last
    if ( ++i == v.end() || !separator)
      break;
    result += separator;
  }
  return result;
}

MEInfo MeTa::getMEInfo() throw(GsmException)
{
  MEInfo result;
  // some TAs just return OK and no info line
  // leave the info empty in this case
  // some TAs return multirows with info like address, firmware version
  result._manufacturer =
    stringVectorToString(_at->chatv("+CGMI", "+CGMI:", false));
  result._model = stringVectorToString(_at->chatv("+CGMM", "+CGMM:", false));
  result._revision =
    stringVectorToString(_at->chatv("+CGMR", "+CGMR:", false));
  result._serialNumber =
    stringVectorToString(_at->chatv("+CGSN", "+CGSN:", false),0);
  return result;
}

vector<string> MeTa::getSupportedCharSets() throw(GsmException)
{
  Parser p(_at->chat("+CSCS=?", "+CSCS:"));
  return p.parseStringList();
}
    
string MeTa::getCurrentCharSet() throw(GsmException)
{
  if (_lastCharSet == "")
  {
    Parser p(_at->chat("+CSCS?", "+CSCS:"));
    _lastCharSet = p.parseString();
  }
  return _lastCharSet;
}

void MeTa::setCharSet(string charSetName) throw(GsmException)
{
  _at->chat("+CSCS=\"" + charSetName + "\"");
  _lastCharSet = "";
}

string MeTa::getExtendedErrorReport() throw(GsmException)
{
  return _at->chat("+CEER", "+CEER:");
}

void MeTa::dial(string number) throw(GsmException)
{
  _at->chat("D" + number + ";");
}

vector<OPInfo> MeTa::getAvailableOPInfo() throw(GsmException)
{
  vector<OPInfo> result;
  vector<string> responses = _at->chatv("+COPS=?", "+COPS:");

  // special treatment for Falcom A2-1, answer looks like
  //   responses.push_back("(1,29341),(3,29340)");
  if (_capabilities._veryShortCOPSanswer)
  {
    if (responses.size() == 1)
    {
      Parser p(responses[0]);
      while (p.parseChar('(', true))
      {
        OPInfo opi;
        opi._status = (OPStatus)p.parseInt();
        p.parseComma();
        opi._numericName = p.parseInt();
        p.parseChar(')');
        p.parseComma(true);
        result.push_back(opi);
      }
    }
  }
  else
    // some formats I have encountered...
    //responses.push_back("2,,,31017,,(0,1),(2)");
    //responses.push_back("(3,\"UK CELLNET\",\"CLNET\",\"23410\")," 
    //                    "(3,\"ONE2 ONE\",\"ONE2ONE\",\"23430\"),"
    //                    "(3,\"ORANGE\",\"ORANGE\",\"23433\")");
    //responses.push_back("(2,\"D1-TELEKOM\",,26201),"
    //                    "(3,\"D2  PRIVAT\",,26202),,(0,1,3,4),(0,2)");
    
    // GSM modems might return
    // 1. quadruplets of info enclosed in brackets separated by comma
    // 2. several lines of quadruplets of info enclosed in brackets
    // 3. several lines of quadruplets without brackets and additional
    //    info at EOL (e.g. Nokia 8290)
    for (vector<string>::iterator i = responses.begin();
         i != responses.end(); ++i)
    {
      bool expectClosingBracket = false;
      Parser p(*i);
      while (1)
      {
        OPInfo opi;
        expectClosingBracket = p.parseChar('(', true);
        int status = p.parseInt(true);
        opi._status = (status == NOT_SET ? UnknownOPStatus : (OPStatus)status);
        p.parseComma();
        opi._longName = p.parseString(true);
        p.parseComma();
        opi._shortName = p.parseString(true);
        p.parseComma();
        try
        {
          opi._numericName = p.parseInt(true);
        }
        catch (GsmException &e)
        {
          if (e.getErrorClass() == ParserError)
          {
            // the Ericsson GM12 GSM modem returns the numeric ID as string
            string s = p.parseString();
            opi._numericName = checkNumber(s);
          }
          else
            throw e;
        }
        if (expectClosingBracket) p.parseChar(')');
        result.push_back(opi);
        if (! p.parseComma(true)) break;
        // two commas ",," mean the list is finished
        if (p.parseComma(true)) break;
      }
      // without brackets, the ME/TA must use format 3.
      if (! expectClosingBracket) break;
    }
  return result;
}

OPInfo MeTa::getCurrentOPInfo() throw(GsmException)
{
  OPInfo result;

  // 1. This exception thing is necessary because not all ME/TA combinations
  // might support all the formats and then return "ERROR".
  // 2. Additionally some modems return "ERROR" for all "COPS=3,n" command
  // and report only one format with the "COPS?" command (e.g. Nokia 8290).

  // get long format
  try
  {
    try
    {
      _at->chat("+COPS=3,0");
    }
    catch (GsmException &e)
    {
      if (e.getErrorClass() != ChatError) throw;
    }
    Parser p(_at->chat("+COPS?", "+COPS:"));
    result._mode = (OPModes)p.parseInt();
    // some phones (e.g. Nokia Card Phone 2.0) just return "+COPS: 0"
    // if no network connection
    if (p.parseComma(true))
    {
      if (p.parseInt() == 0)
      {
        p.parseComma();
        result._longName = p.parseString();
      }
    }
  }
  catch (GsmException &e)
  {
    if (e.getErrorClass() != ChatError) throw;
  }

  // get short format
  try
  {
    try
    {
      _at->chat("+COPS=3,1");
    }
    catch (GsmException &e)
    {
      if (e.getErrorClass() != ChatError) throw;
    }
    Parser p(_at->chat("+COPS?", "+COPS:"));
    result._mode = (OPModes)p.parseInt();
    // some phones (e.g. Nokia Card Phone 2.0) just return "+COPS: 0"
    // if no network connection
    if (p.parseComma(true))
    {
      if (p.parseInt() == 1)
      {
        p.parseComma();
        result._shortName = p.parseString();
      }
    }
  }
  catch (GsmException &e)
  {
    if (e.getErrorClass() != ChatError) throw;
  }

  // get numeric format
  try
  {
    try
    {
      _at->chat("+COPS=3,2");
    }
    catch (GsmException &e)
    {
      if (e.getErrorClass() != ChatError) throw;
    }
    Parser p(_at->chat("+COPS?", "+COPS:"));
    result._mode = (OPModes)p.parseInt();
    // some phones (e.g. Nokia Card Phone 2.0) just return "+COPS: 0"
    // if no network connection
    if (p.parseComma(true))
    {
      if (p.parseInt() == 2)
      {
        p.parseComma();
        try
        {
          result._numericName = p.parseInt();
        }
        catch (GsmException &e)
        {
          if (e.getErrorClass() == ParserError)
          {
            // the Ericsson GM12 GSM modem returns the numeric ID as string
            string s = p.parseString();
            result._numericName = checkNumber(s);
          }
          else
            throw e;
        }
      }
    }
  }
  catch (GsmException &e)
  {
    if (e.getErrorClass() != ChatError) throw;
  }
  return result;
}

void MeTa::setCurrentOPInfo(OPModes mode,
                            string longName,
                            string shortName,
                            int numericName) throw(GsmException)
{
  bool done = false;
  if (longName != "")
  {
    try
    {
      _at->chat("+COPS=" + intToStr((int)mode) + ",0,\"" + longName + "\"");
      done = true;
    }
    catch (GsmException &e)
    {
      if (e.getErrorClass() != ChatError) throw;
    }
  }
  if (shortName != "" && ! done)
  {
    try
    {
      _at->chat("+COPS=" + intToStr((int)mode) + ",1,\"" + shortName + "\"");
      done = true;
    }
    catch (GsmException &e)
    {
      if (e.getErrorClass() != ChatError) throw;
    }
  }
  if (numericName != NOT_SET && ! done)
  {
    try
    {
      _at->chat("+COPS=" + intToStr((int)mode) + ",2," +
                intToStr(numericName));
      done = true;
    }
    catch (GsmException &e)
    {
      if (e.getErrorClass() != ChatError) throw;
    }
  }
  if (! done)
    throw GsmException(_("unable to set operator"), OtherError);
}

vector<string> MeTa::getFacilityLockCapabilities() throw(GsmException)
{
  string locks = _at->chat("+CLCK=?", "+CLCK:");
  // some TA don't add '(' and ')' (Option FirstFone)
  if (locks.length() && locks[0] != '(')
  {
    locks.insert(locks.begin(),'(');
    locks += ')';
  }
  Parser p(locks);
  return p.parseStringList();
}

bool MeTa::getFacilityLockStatus(string facility, FacilityClass cl)
  throw(GsmException)
{
  // some TA return always multiline response with all classes
  // (Option FirstFone)
  // !!! errors handling is correct (responses.empty() true) ?
  vector<string> responses = 
    _at->chatv("+CLCK=\"" + facility + "\",2,," + intToStr((int)cl),"+CLCK:",true);
  for (vector<string>::iterator i = responses.begin();
       i != responses.end(); ++i)
  {
    Parser p(*i);
    int enabled = p.parseInt();

    // if the first time and there is no comma this 
    // return direct state of classes
    // else return all classes
    if (i == responses.begin())
    {
      if (!p.parseComma(true))
        return enabled == 1;
    }
    else
      p.parseComma();

    if ( p.parseInt() == (int)cl )
      return enabled == 1;
  }
  return false;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产伦理网| 国产成人在线网站| 欧美无人高清视频在线观看| 亚洲欧美电影一区二区| 97久久超碰国产精品| 一区二区三区在线观看欧美| 欧美日精品一区视频| 日韩成人dvd| 精品免费日韩av| 成人精品视频一区二区三区尤物| 国产精品午夜免费| 欧美在线三级电影| 日韩电影免费在线看| 欧美精品一区二| 91女神在线视频| 日韩国产欧美三级| 日韩精品一区二区三区老鸭窝| 国产精品99精品久久免费| 亚洲天堂2014| 欧美日韩国产在线观看| 极品美女销魂一区二区三区免费 | 欧美日韩mp4| 国内国产精品久久| 综合久久久久综合| 91精品国产乱| 成人综合婷婷国产精品久久| 一区二区三区在线不卡| 91福利区一区二区三区| 麻豆精品国产传媒mv男同| 国产精品欧美一区二区三区| 欧美日韩国产欧美日美国产精品| 韩国精品免费视频| 亚洲福利视频一区二区| 国产夜色精品一区二区av| 欧美综合色免费| 国产精品一区不卡| 视频一区欧美精品| 最新热久久免费视频| 日韩视频免费直播| 91久久人澡人人添人人爽欧美| 激情欧美一区二区三区在线观看| 樱花影视一区二区| 国产欧美一区二区三区鸳鸯浴 | 91精品免费在线| a亚洲天堂av| 美女视频黄 久久| 亚洲一区二区三区美女| 国产区在线观看成人精品| 欧美一区二区三区白人| 91看片淫黄大片一级在线观看| 狠狠网亚洲精品| 日韩成人精品在线| 亚洲国产精品一区二区www| 中文字幕在线观看一区| 久久亚洲综合色| 制服丝袜中文字幕一区| 欧日韩精品视频| 99久久777色| 成人激情小说乱人伦| 久久国产福利国产秒拍| 午夜久久久久久久久| 一区二区三区四区精品在线视频| 国产欧美日韩亚州综合| 久久一二三国产| 欧美精品一区二区三区视频| 日韩一区二区三区在线| 欧美日韩精品一区二区三区| 91福利在线观看| 欧美中文一区二区三区| 一本色道久久加勒比精品| 成人av片在线观看| 成人国产精品免费观看动漫| 国产盗摄精品一区二区三区在线| 国产一区二区免费看| 国产一区91精品张津瑜| 国产乱一区二区| 国产91高潮流白浆在线麻豆| 国产精品99久久久久久有的能看| 韩国毛片一区二区三区| 国产精品一区二区男女羞羞无遮挡 | 久久福利视频一区二区| 蜜桃av噜噜一区二区三区小说| 欧美aaa在线| 蜜桃在线一区二区三区| 蜜臀国产一区二区三区在线播放| 麻豆成人久久精品二区三区小说| 看国产成人h片视频| 日本成人在线电影网| 日本网站在线观看一区二区三区| 青青青伊人色综合久久| 麻豆视频观看网址久久| 国产成人一区二区精品非洲| 成人免费高清视频在线观看| av亚洲精华国产精华| 99麻豆久久久国产精品免费优播| 国产99久久久国产精品潘金 | 久久国产尿小便嘘嘘尿| 国产在线不卡视频| 成人国产电影网| 色94色欧美sute亚洲线路一ni| 欧美日韩一卡二卡| 日韩欧美在线不卡| 亚洲国产精品成人综合色在线婷婷| 亚洲国产高清在线| 一区二区高清免费观看影视大全 | 日本一区二区电影| 亚洲欧美欧美一区二区三区| 亚洲国产精品一区二区www| 奇米一区二区三区av| 国产在线不卡一卡二卡三卡四卡| 成人开心网精品视频| 欧美性受xxxx黑人xyx性爽| 欧美一级理论性理论a| 欧美一区二区免费视频| 欧美激情资源网| 一区二区三区久久| 久久精品国产久精国产爱| 国模少妇一区二区三区| 国产91丝袜在线播放| 欧美优质美女网站| 久久嫩草精品久久久精品一| 国产精品丝袜91| 亚洲成人自拍偷拍| 国产精品 日产精品 欧美精品| 色久优优欧美色久优优| 日韩片之四级片| 久久久九九九九| 亚洲精品久久久蜜桃| 韩国女主播成人在线观看| 色婷婷亚洲精品| 日韩一区二区电影在线| 久久精品欧美日韩精品| 天堂成人国产精品一区| 成人午夜短视频| 在线亚洲高清视频| 精品国免费一区二区三区| 亚洲精品高清在线| 国产高清精品在线| 91精品国产免费| 亚洲色图视频免费播放| 国产剧情av麻豆香蕉精品| 欧美日韩国产高清一区二区三区| 国产情人综合久久777777| 视频在线观看91| 欧美视频一区二区三区四区| 国产日韩欧美电影| 精品一区二区三区在线观看| 欧美亚洲愉拍一区二区| 日韩一区日韩二区| 成人免费毛片app| 欧美美女网站色| 一区二区三区四区亚洲| 94色蜜桃网一区二区三区| 国产日韩欧美精品在线| 精品亚洲免费视频| 91精品国产免费| 日韩高清不卡一区| 4438亚洲最大| 日韩va亚洲va欧美va久久| 欧美视频中文一区二区三区在线观看| 国产精品蜜臀av| 成人精品免费看| 欧美国产在线观看| 成人免费视频播放| 国产精品久久久久永久免费观看 | 免费精品视频在线| 日韩免费一区二区三区在线播放| 亚洲午夜电影在线| 色视频欧美一区二区三区| 亚洲人成伊人成综合网小说| 91在线视频观看| 一区二区三区波多野结衣在线观看| 色综合久久久久综合99| 自拍偷拍欧美精品| 色婷婷av久久久久久久| 亚洲第一精品在线| 宅男噜噜噜66一区二区66| 美女视频黄免费的久久| 久久麻豆一区二区| 成人三级在线视频| 亚洲黄色片在线观看| 欧美日韩精品系列| 裸体一区二区三区| 久久精品一级爱片| 99热在这里有精品免费| 亚洲一区视频在线| 日韩欧美一区中文| 风间由美一区二区av101| 中文字幕中文乱码欧美一区二区| 色婷婷综合久久久中文字幕| 亚洲bt欧美bt精品| 欧美成人video| 成人免费高清在线观看| 亚洲国产成人91porn| 日韩女优电影在线观看| 成人精品免费看| 日日骚欧美日韩| 欧美国产日产图区| 欧美日韩一级黄| 国产主播一区二区三区|