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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? gsm_me_ta.c

?? Gsm手機(jī)(短信息,電話(huà)簿)開(kāi)發(fā)庫(kù)C++源代碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
// *************************************************************************
// * 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;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲美女偷拍久久| 欧美成人精品3d动漫h| 国产一区免费电影| 亚洲在线中文字幕| 欧美韩国日本一区| 日韩欧美成人午夜| 欧美日韩日本视频| 成人黄色在线看| 九九九久久久精品| 亚洲成av人片www| 亚洲精品日日夜夜| 亚洲精品五月天| 亚洲欧美日本韩国| 亚洲电影欧美电影有声小说| 国产精品污www在线观看| 久久人人超碰精品| 国产午夜精品一区二区| 久久精品欧美一区二区三区麻豆| 国产毛片一区二区| 美女在线观看视频一区二区| 亚洲国产精品久久一线不卡| 亚洲国产高清aⅴ视频| 日本一区二区在线不卡| 国产亚洲一区二区三区在线观看| 精品国产伦一区二区三区观看体验| 欧美日韩一区二区在线视频| 在线观看日韩电影| 欧美视频精品在线| 精品粉嫩超白一线天av| 亚洲一区二区在线视频| 蜜桃视频在线观看一区| 国产成人免费网站| 色婷婷综合在线| 欧美一级电影网站| 久久久久久久久久久久久久久99| 久久中文字幕电影| 亚洲免费大片在线观看| 极品少妇xxxx偷拍精品少妇| 不卡av在线免费观看| 欧美色图12p| 日韩精品资源二区在线| 国产精品日韩成人| 香蕉久久夜色精品国产使用方法| 日韩av网站在线观看| 成人av午夜电影| 5858s免费视频成人| 中文字幕制服丝袜一区二区三区| 亚洲精品欧美综合四区| 国产一区二区0| 在线观看91视频| 国产婷婷色一区二区三区在线| 国产亚洲欧美日韩俺去了| 天天色综合成人网| 成人免费看视频| 欧美电影精品一区二区| 人人爽香蕉精品| 色综合久久88色综合天天| 国产亚洲va综合人人澡精品| 天天色综合成人网| 91啪九色porn原创视频在线观看| 欧美一级高清片| 亚洲国产精品久久久久婷婷884| 国产成人午夜视频| 精品免费国产一区二区三区四区| 一区二区三区国产精品| 成人高清在线视频| 欧美激情一区二区三区| 欧美日韩精品系列| 极品少妇一区二区| 中文字幕免费不卡| 欧美日韩成人在线| 首页综合国产亚洲丝袜| 欧美一区二区三区色| 久久精品国产精品青草| 精品国产91亚洲一区二区三区婷婷| 国产乱码字幕精品高清av| 亚洲欧洲av另类| 欧美手机在线视频| 日本欧美久久久久免费播放网| 久久久久9999亚洲精品| 成人va在线观看| 一区二区三区日本| 日韩精品一区二区三区四区| 国产成人亚洲综合a∨婷婷| 亚洲男人都懂的| 欧美白人最猛性xxxxx69交| 成人福利在线看| 亚洲一区在线观看视频| 精品国产免费久久| 91网站在线观看视频| 国产精品一区二区x88av| 亚洲国产精品一区二区www在线| 7777精品伊人久久久大香线蕉的| 九九九久久久精品| 国产精品亲子伦对白| 欧美日韩mp4| www.欧美.com| 精品一区二区三区影院在线午夜 | 国产成人综合亚洲91猫咪| 一区二区三区在线看| 国产欧美精品区一区二区三区 | 夜夜精品视频一区二区| 欧美日韩色一区| 欧洲av在线精品| 99视频一区二区三区| 丁香亚洲综合激情啪啪综合| 精品亚洲国产成人av制服丝袜| 亚洲激情男女视频| 亚洲欧洲综合另类| 国产精品久久久久影院亚瑟 | 97久久超碰国产精品| 成人综合婷婷国产精品久久| 丁香网亚洲国际| 国产一区二区美女诱惑| 免费观看在线综合| 国产在线一区二区| 久久er99热精品一区二区| 亚洲国产美国国产综合一区二区| 一区二区高清免费观看影视大全 | 日韩av一区二| 日韩av电影免费观看高清完整版在线观看| 日本一区二区三区久久久久久久久不| 久久综合久久综合久久综合| 久久久久久久久久久久久久久99| 精品成人一区二区三区四区| 久久久久一区二区三区四区| 中文在线一区二区| 香蕉影视欧美成人| 日韩在线一区二区三区| 亚洲国产色一区| 午夜视频久久久久久| 久久精品国产亚洲高清剧情介绍| 国模少妇一区二区三区| 风间由美中文字幕在线看视频国产欧美| 成人小视频在线观看| 色系网站成人免费| 日韩欧美一级片| 综合久久久久久| 久久91精品国产91久久小草 | 亚洲综合一区二区三区| 久久国产乱子精品免费女| 国产盗摄视频一区二区三区| 91天堂素人约啪| 欧美xxxxxxxxx| 国产精品传媒视频| 久久99蜜桃精品| 91精品国产综合久久久蜜臀图片| 国产精品久久久久久久久免费相片| 日本在线播放一区二区三区| 欧美在线三级电影| 18成人在线观看| 波多野结衣在线aⅴ中文字幕不卡| 成人一二三区视频| 国产精品美女一区二区三区| 丝袜美腿一区二区三区| 亚洲综合激情另类小说区| 中文字幕日韩精品一区| 国内成+人亚洲+欧美+综合在线| 26uuu国产在线精品一区二区| 国产酒店精品激情| 精品国一区二区三区| 免费观看在线色综合| 久久综合久久99| gogo大胆日本视频一区| 日韩欧美国产一二三区| 日韩在线播放一区二区| 日韩一级片在线播放| 香港成人在线视频| 欧美一区二区视频免费观看| 欧美a级一区二区| 国产亚洲美州欧州综合国| 成人久久18免费网站麻豆| 亚洲欧美综合网| 91久久精品一区二区| 五月开心婷婷久久| 精品久久久久久久人人人人传媒| 国产精品伊人色| 亚洲成人av电影在线| 精品国产乱码久久久久久影片| 麻豆精品久久久| 国产精品久久久久永久免费观看 | 亚洲电影一级黄| 久久久不卡网国产精品二区| 欧美日韩高清在线播放| 国产成人av一区二区三区在线观看| 夜色激情一区二区| 久久久久久97三级| 欧美精选午夜久久久乱码6080| 国产a精品视频| 国产成人午夜精品5599| 久久99精品国产麻豆不卡| 亚洲福利视频导航| 欧美无砖砖区免费| 韩国精品在线观看| 一区二区三区 在线观看视频 | 中文字幕一区二区三区四区不卡| 日本高清不卡在线观看| 韩国在线一区二区| 三级影片在线观看欧美日韩一区二区| 日韩精品一区二区三区在线|