File: gsm_at.h

package info (click to toggle)
gsmlib 1.10+20120414.gita5e5ae9a-0.3
  • links: PTS
  • area: main
  • in suites: bullseye, buster, sid, stretch
  • size: 3,468 kB
  • ctags: 1,907
  • sloc: cpp: 12,315; sh: 11,376; ansic: 2,366; makefile: 263; sed: 93
file content (102 lines) | stat: -rw-r--r-- 3,178 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// *************************************************************************
// * GSM TA/ME library
// *
// * File:    gsm_at.h
// *
// * Purpose: Utility classes for AT command sequence handling
// *
// * Author:  Peter Hofmann (software@pxh.de)
// *
// * Created: 3.5.1999
// *************************************************************************

#ifndef GSM_AT_H
#define GSM_AT_H

#include <gsmlib/gsm_port.h>
#include <string>
#include <vector>

namespace gsmlib
{
  // forward declarations
  
  class GsmEvent;
  class MeTa;

  // utiliy class to handle AT sequences

  class GsmAt : public RefBase
  {
  protected:
    MeTa &_meTa;
    Ref<Port> _port;
    GsmEvent *_eventHandler;
    
    // return true if response matches
    bool matchResponse(std::string answer, std::string responseToMatch);

    // cut response and normalize
    std::string cutResponse(std::string answer, std::string responseToMatch);

    // parse CME error contained in string and throw MeTaException
    void throwCmeException(std::string s) throw(GsmException);

  public:
    GsmAt(MeTa &meTa);

    // return MeTa object for this AT object
    MeTa &getMeTa() {return _meTa;}

    // the following sequence functions recognize asynchronous messages
    // from the TA and return the appropriate event

    // send AT command, wait for response response, returns response line
    // without response match
    // if response == "" only an OK is expected
    // white space at beginning or end are removed
    // +CME ERROR or ERROR raises exception (if ignoreErrors == true)
    // additionally, accept empty responses (just an OK)
    //   if acceptEmptyResponse == true
    //   in this case an empty string is returned
    std::string chat(std::string atCommand = "",
		     std::string response = "",
		     bool ignoreErrors = false,
		     bool acceptEmptyResponse = false) throw(GsmException);

    // same as chat() above but also get pdu if expectPdu == true
    std::string chat(std::string atCommand,
		     std::string response,
		     std::string &pdu,
		     bool ignoreErrors = false,
		     bool expectPdu = true,
		     bool acceptEmptyResponse = false) throw(GsmException);

    // same as above, but expect several response lines
    std::vector<std::string> chatv(std::string atCommand = "",
				   std::string response = "",
				   bool ignoreErrors = false)
      throw(GsmException);

    // removes whitespace at beginning and end of string
    std::string normalize(std::string s);

    // send pdu (wait for <CR><LF><greater_than><space> and send <CTRL-Z>
    // at the end
    // return text after response
    std::string sendPdu(std::string atCommand, std::string response, std::string pdu,
			bool acceptEmptyResponse = false) throw(GsmException);
    
    // functions from class Port
    std::string getLine() throw(GsmException);
    void putLine(std::string line,
                 bool carriageReturn = true) throw(GsmException);
    bool wait(GsmTime timeout) throw(GsmException);
    int readByte() throw(GsmException);

    // set event handler class, return old one
    GsmEvent *setEventHandler(GsmEvent *newHandler);
  };
};

#endif // GSM_AT_H