• R/O
  • SSH

libatmodem: Commit

Contains API for some AT commands, algorithms and data types which used to control AT-compatible modems


Commit MetaInfo

Revisiondc8dce7bbc909660ab19173ad1c75f1c65654a52 (tree)
Time2015-12-07 05:48:44
Authors.gusarov
Commiters.gusarov

Log Message

Created project tree from the old libtelit library.

Change Summary

Incremental Difference

diff -r 000000000000 -r dc8dce7bbc90 .hgeol
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgeol Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,5 @@
1+[patterns]
2+**.cpp = LF
3+**.hpp = LF
4+**.py = LF
5+**.rst = LF
diff -r 000000000000 -r dc8dce7bbc90 .hgignore
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,10 @@
1+syntax: glob
2+
3+__pycache__
4+*.pyc
5+
6+scripts/__pycache__
7+scripts/*.pyc
8+
9+libatmodem_README.pdf
10+libatmodem_README_RU.pdf
diff -r 000000000000 -r dc8dce7bbc90 .hgsub
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgsub Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,1 @@
1+pyrepo = [hg]https://bitbucket.org/laborer2008/pyrepo
diff -r 000000000000 -r dc8dce7bbc90 .hgsubstate
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgsubstate Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,1 @@
1+d2f27bfc9dc00a1e4a428d474effa1d5fa923727 pyrepo
diff -r 000000000000 -r dc8dce7bbc90 LICENSE
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LICENSE Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,373 @@
1+Mozilla Public License Version 2.0
2+==================================
3+
4+1. Definitions
5+--------------
6+
7+1.1. "Contributor"
8+ means each individual or legal entity that creates, contributes to
9+ the creation of, or owns Covered Software.
10+
11+1.2. "Contributor Version"
12+ means the combination of the Contributions of others (if any) used
13+ by a Contributor and that particular Contributor's Contribution.
14+
15+1.3. "Contribution"
16+ means Covered Software of a particular Contributor.
17+
18+1.4. "Covered Software"
19+ means Source Code Form to which the initial Contributor has attached
20+ the notice in Exhibit A, the Executable Form of such Source Code
21+ Form, and Modifications of such Source Code Form, in each case
22+ including portions thereof.
23+
24+1.5. "Incompatible With Secondary Licenses"
25+ means
26+
27+ (a) that the initial Contributor has attached the notice described
28+ in Exhibit B to the Covered Software; or
29+
30+ (b) that the Covered Software was made available under the terms of
31+ version 1.1 or earlier of the License, but not also under the
32+ terms of a Secondary License.
33+
34+1.6. "Executable Form"
35+ means any form of the work other than Source Code Form.
36+
37+1.7. "Larger Work"
38+ means a work that combines Covered Software with other material, in
39+ a separate file or files, that is not Covered Software.
40+
41+1.8. "License"
42+ means this document.
43+
44+1.9. "Licensable"
45+ means having the right to grant, to the maximum extent possible,
46+ whether at the time of the initial grant or subsequently, any and
47+ all of the rights conveyed by this License.
48+
49+1.10. "Modifications"
50+ means any of the following:
51+
52+ (a) any file in Source Code Form that results from an addition to,
53+ deletion from, or modification of the contents of Covered
54+ Software; or
55+
56+ (b) any new file in Source Code Form that contains any Covered
57+ Software.
58+
59+1.11. "Patent Claims" of a Contributor
60+ means any patent claim(s), including without limitation, method,
61+ process, and apparatus claims, in any patent Licensable by such
62+ Contributor that would be infringed, but for the grant of the
63+ License, by the making, using, selling, offering for sale, having
64+ made, import, or transfer of either its Contributions or its
65+ Contributor Version.
66+
67+1.12. "Secondary License"
68+ means either the GNU General Public License, Version 2.0, the GNU
69+ Lesser General Public License, Version 2.1, the GNU Affero General
70+ Public License, Version 3.0, or any later versions of those
71+ licenses.
72+
73+1.13. "Source Code Form"
74+ means the form of the work preferred for making modifications.
75+
76+1.14. "You" (or "Your")
77+ means an individual or a legal entity exercising rights under this
78+ License. For legal entities, "You" includes any entity that
79+ controls, is controlled by, or is under common control with You. For
80+ purposes of this definition, "control" means (a) the power, direct
81+ or indirect, to cause the direction or management of such entity,
82+ whether by contract or otherwise, or (b) ownership of more than
83+ fifty percent (50%) of the outstanding shares or beneficial
84+ ownership of such entity.
85+
86+2. License Grants and Conditions
87+--------------------------------
88+
89+2.1. Grants
90+
91+Each Contributor hereby grants You a world-wide, royalty-free,
92+non-exclusive license:
93+
94+(a) under intellectual property rights (other than patent or trademark)
95+ Licensable by such Contributor to use, reproduce, make available,
96+ modify, display, perform, distribute, and otherwise exploit its
97+ Contributions, either on an unmodified basis, with Modifications, or
98+ as part of a Larger Work; and
99+
100+(b) under Patent Claims of such Contributor to make, use, sell, offer
101+ for sale, have made, import, and otherwise transfer either its
102+ Contributions or its Contributor Version.
103+
104+2.2. Effective Date
105+
106+The licenses granted in Section 2.1 with respect to any Contribution
107+become effective for each Contribution on the date the Contributor first
108+distributes such Contribution.
109+
110+2.3. Limitations on Grant Scope
111+
112+The licenses granted in this Section 2 are the only rights granted under
113+this License. No additional rights or licenses will be implied from the
114+distribution or licensing of Covered Software under this License.
115+Notwithstanding Section 2.1(b) above, no patent license is granted by a
116+Contributor:
117+
118+(a) for any code that a Contributor has removed from Covered Software;
119+ or
120+
121+(b) for infringements caused by: (i) Your and any other third party's
122+ modifications of Covered Software, or (ii) the combination of its
123+ Contributions with other software (except as part of its Contributor
124+ Version); or
125+
126+(c) under Patent Claims infringed by Covered Software in the absence of
127+ its Contributions.
128+
129+This License does not grant any rights in the trademarks, service marks,
130+or logos of any Contributor (except as may be necessary to comply with
131+the notice requirements in Section 3.4).
132+
133+2.4. Subsequent Licenses
134+
135+No Contributor makes additional grants as a result of Your choice to
136+distribute the Covered Software under a subsequent version of this
137+License (see Section 10.2) or under the terms of a Secondary License (if
138+permitted under the terms of Section 3.3).
139+
140+2.5. Representation
141+
142+Each Contributor represents that the Contributor believes its
143+Contributions are its original creation(s) or it has sufficient rights
144+to grant the rights to its Contributions conveyed by this License.
145+
146+2.6. Fair Use
147+
148+This License is not intended to limit any rights You have under
149+applicable copyright doctrines of fair use, fair dealing, or other
150+equivalents.
151+
152+2.7. Conditions
153+
154+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
155+in Section 2.1.
156+
157+3. Responsibilities
158+-------------------
159+
160+3.1. Distribution of Source Form
161+
162+All distribution of Covered Software in Source Code Form, including any
163+Modifications that You create or to which You contribute, must be under
164+the terms of this License. You must inform recipients that the Source
165+Code Form of the Covered Software is governed by the terms of this
166+License, and how they can obtain a copy of this License. You may not
167+attempt to alter or restrict the recipients' rights in the Source Code
168+Form.
169+
170+3.2. Distribution of Executable Form
171+
172+If You distribute Covered Software in Executable Form then:
173+
174+(a) such Covered Software must also be made available in Source Code
175+ Form, as described in Section 3.1, and You must inform recipients of
176+ the Executable Form how they can obtain a copy of such Source Code
177+ Form by reasonable means in a timely manner, at a charge no more
178+ than the cost of distribution to the recipient; and
179+
180+(b) You may distribute such Executable Form under the terms of this
181+ License, or sublicense it under different terms, provided that the
182+ license for the Executable Form does not attempt to limit or alter
183+ the recipients' rights in the Source Code Form under this License.
184+
185+3.3. Distribution of a Larger Work
186+
187+You may create and distribute a Larger Work under terms of Your choice,
188+provided that You also comply with the requirements of this License for
189+the Covered Software. If the Larger Work is a combination of Covered
190+Software with a work governed by one or more Secondary Licenses, and the
191+Covered Software is not Incompatible With Secondary Licenses, this
192+License permits You to additionally distribute such Covered Software
193+under the terms of such Secondary License(s), so that the recipient of
194+the Larger Work may, at their option, further distribute the Covered
195+Software under the terms of either this License or such Secondary
196+License(s).
197+
198+3.4. Notices
199+
200+You may not remove or alter the substance of any license notices
201+(including copyright notices, patent notices, disclaimers of warranty,
202+or limitations of liability) contained within the Source Code Form of
203+the Covered Software, except that You may alter any license notices to
204+the extent required to remedy known factual inaccuracies.
205+
206+3.5. Application of Additional Terms
207+
208+You may choose to offer, and to charge a fee for, warranty, support,
209+indemnity or liability obligations to one or more recipients of Covered
210+Software. However, You may do so only on Your own behalf, and not on
211+behalf of any Contributor. You must make it absolutely clear that any
212+such warranty, support, indemnity, or liability obligation is offered by
213+You alone, and You hereby agree to indemnify every Contributor for any
214+liability incurred by such Contributor as a result of warranty, support,
215+indemnity or liability terms You offer. You may include additional
216+disclaimers of warranty and limitations of liability specific to any
217+jurisdiction.
218+
219+4. Inability to Comply Due to Statute or Regulation
220+---------------------------------------------------
221+
222+If it is impossible for You to comply with any of the terms of this
223+License with respect to some or all of the Covered Software due to
224+statute, judicial order, or regulation then You must: (a) comply with
225+the terms of this License to the maximum extent possible; and (b)
226+describe the limitations and the code they affect. Such description must
227+be placed in a text file included with all distributions of the Covered
228+Software under this License. Except to the extent prohibited by statute
229+or regulation, such description must be sufficiently detailed for a
230+recipient of ordinary skill to be able to understand it.
231+
232+5. Termination
233+--------------
234+
235+5.1. The rights granted under this License will terminate automatically
236+if You fail to comply with any of its terms. However, if You become
237+compliant, then the rights granted under this License from a particular
238+Contributor are reinstated (a) provisionally, unless and until such
239+Contributor explicitly and finally terminates Your grants, and (b) on an
240+ongoing basis, if such Contributor fails to notify You of the
241+non-compliance by some reasonable means prior to 60 days after You have
242+come back into compliance. Moreover, Your grants from a particular
243+Contributor are reinstated on an ongoing basis if such Contributor
244+notifies You of the non-compliance by some reasonable means, this is the
245+first time You have received notice of non-compliance with this License
246+from such Contributor, and You become compliant prior to 30 days after
247+Your receipt of the notice.
248+
249+5.2. If You initiate litigation against any entity by asserting a patent
250+infringement claim (excluding declaratory judgment actions,
251+counter-claims, and cross-claims) alleging that a Contributor Version
252+directly or indirectly infringes any patent, then the rights granted to
253+You by any and all Contributors for the Covered Software under Section
254+2.1 of this License shall terminate.
255+
256+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
257+end user license agreements (excluding distributors and resellers) which
258+have been validly granted by You or Your distributors under this License
259+prior to termination shall survive termination.
260+
261+************************************************************************
262+* *
263+* 6. Disclaimer of Warranty *
264+* ------------------------- *
265+* *
266+* Covered Software is provided under this License on an "as is" *
267+* basis, without warranty of any kind, either expressed, implied, or *
268+* statutory, including, without limitation, warranties that the *
269+* Covered Software is free of defects, merchantable, fit for a *
270+* particular purpose or non-infringing. The entire risk as to the *
271+* quality and performance of the Covered Software is with You. *
272+* Should any Covered Software prove defective in any respect, You *
273+* (not any Contributor) assume the cost of any necessary servicing, *
274+* repair, or correction. This disclaimer of warranty constitutes an *
275+* essential part of this License. No use of any Covered Software is *
276+* authorized under this License except under this disclaimer. *
277+* *
278+************************************************************************
279+
280+************************************************************************
281+* *
282+* 7. Limitation of Liability *
283+* -------------------------- *
284+* *
285+* Under no circumstances and under no legal theory, whether tort *
286+* (including negligence), contract, or otherwise, shall any *
287+* Contributor, or anyone who distributes Covered Software as *
288+* permitted above, be liable to You for any direct, indirect, *
289+* special, incidental, or consequential damages of any character *
290+* including, without limitation, damages for lost profits, loss of *
291+* goodwill, work stoppage, computer failure or malfunction, or any *
292+* and all other commercial damages or losses, even if such party *
293+* shall have been informed of the possibility of such damages. This *
294+* limitation of liability shall not apply to liability for death or *
295+* personal injury resulting from such party's negligence to the *
296+* extent applicable law prohibits such limitation. Some *
297+* jurisdictions do not allow the exclusion or limitation of *
298+* incidental or consequential damages, so this exclusion and *
299+* limitation may not apply to You. *
300+* *
301+************************************************************************
302+
303+8. Litigation
304+-------------
305+
306+Any litigation relating to this License may be brought only in the
307+courts of a jurisdiction where the defendant maintains its principal
308+place of business and such litigation shall be governed by laws of that
309+jurisdiction, without reference to its conflict-of-law provisions.
310+Nothing in this Section shall prevent a party's ability to bring
311+cross-claims or counter-claims.
312+
313+9. Miscellaneous
314+----------------
315+
316+This License represents the complete agreement concerning the subject
317+matter hereof. If any provision of this License is held to be
318+unenforceable, such provision shall be reformed only to the extent
319+necessary to make it enforceable. Any law or regulation which provides
320+that the language of a contract shall be construed against the drafter
321+shall not be used to construe this License against a Contributor.
322+
323+10. Versions of the License
324+---------------------------
325+
326+10.1. New Versions
327+
328+Mozilla Foundation is the license steward. Except as provided in Section
329+10.3, no one other than the license steward has the right to modify or
330+publish new versions of this License. Each version will be given a
331+distinguishing version number.
332+
333+10.2. Effect of New Versions
334+
335+You may distribute the Covered Software under the terms of the version
336+of the License under which You originally received the Covered Software,
337+or under the terms of any subsequent version published by the license
338+steward.
339+
340+10.3. Modified Versions
341+
342+If you create software not governed by this License, and you want to
343+create a new license for such software, you may create and use a
344+modified version of this License if you rename the license and remove
345+any references to the name of the license steward (except to note that
346+such modified license differs from this License).
347+
348+10.4. Distributing Source Code Form that is Incompatible With Secondary
349+Licenses
350+
351+If You choose to distribute Source Code Form that is Incompatible With
352+Secondary Licenses under the terms of this version of the License, the
353+notice described in Exhibit B of this License must be attached.
354+
355+Exhibit A - Source Code Form License Notice
356+-------------------------------------------
357+
358+ This Source Code Form is subject to the terms of the Mozilla Public
359+ License, v. 2.0. If a copy of the MPL was not distributed with this
360+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
361+
362+If it is not possible or desirable to put the notice in a particular
363+file, then You may include the notice in a location (such as a LICENSE
364+file in a relevant directory) where a recipient would be likely to look
365+for such a notice.
366+
367+You may add additional accurate notices of copyright ownership.
368+
369+Exhibit B - "Incompatible With Secondary Licenses" Notice
370+---------------------------------------------------------
371+
372+ This Source Code Form is "Incompatible With Secondary Licenses", as
373+ defined by the Mozilla Public License, v. 2.0.
diff -r 000000000000 -r dc8dce7bbc90 README.rst
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/README.rst Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,10 @@
1+========================================================================
2+Repository `<libatmodem <https://bitbucket.org/laborer2008/libatmodem>`_
3+========================================================================
4+
5+Readme is planned to be translated from README_RU.rst as soon as possible.
6+
7+General information
8+-------------------
9+
10+.. _libcpptools : https://bitbucket.org/laborer2008/libcpptools
diff -r 000000000000 -r dc8dce7bbc90 README_RU.rst
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/README_RU.rst Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,33 @@
1+========================================================================
2+Репозиторий `libatmodem <https://bitbucket.org/laborer2008/libatmodem>`_
3+========================================================================
4+
5+Общие сведения
6+--------------
7+
8+Содержит описание различных команд, алгоритмов и типов данных применяемых при управлении различными
9+модемами через интерфейс AT-команд.
10+
11+Целевые конфигурации
12+--------------------
13+
14+Любые, на которых работают компиляторы C++11.
15+
16+Сборка
17+------
18+
19+В рамках данного репозитория не осуществляется, т.к. этот проект практически
20+является header-only библиотекой.
21+Сборкой должен заниматься тот проект, который использует эту библиотеку.
22+Для этого он должен указать путь для поиска заголовочных файлов include
23+и линковать все файлы из src.
24+
25+Весь код в этом репозитории является подчинённым: должен использоваться
26+совместно с другими проектами.
27+
28+Зависимости
29+-----------
30+
31+Библиотека зависит от libcpptools_.
32+
33+.. _libcpptools : https://bitbucket.org/laborer2008/
diff -r 000000000000 -r dc8dce7bbc90 include/telit/cgerep.hpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/telit/cgerep.hpp Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,72 @@
1+/*
2+ * @author Sergey Gusarov <sgusarow@mail.ru>
3+ * @section LICENSE
4+ * Copyright (c) 2013,2014 by SPT Ltd
5+ *
6+ * This software is copyrighted by and is the sole property of SPT Ltd.
7+ * All rights, title, ownership, or other interests
8+ * in the software remain the property of SPT Ltd. This
9+ * software may only be used in accordance with the corresponding
10+ * license agreement. Any unauthorized use, duplication, transmission,
11+ * distribution, or disclosure of this software is forbidden.
12+ *
13+ * This Copyright notice may not be removed or modified without prior
14+ * written consent of SPT Ltd.
15+ *
16+ * SPT Ltd reserves the right to modify this software without notice
17+ *
18+ * @section DESCRIPTION
19+ *
20+ */
21+
22+#pragma once
23+
24+#include "telit/common.hpp"
25+
26+/* *INDENT-OFF* */
27+namespace telit {
28+namespace le920 {
29+/* *INDENT-ON* */
30+
31+class CgerepCommand : public ParameterCommand<CommandGroup::plus>
32+{
33+ using BaseClass = ParameterCommand<CommandGroup::plus>;
34+
35+public:
36+ enum class Mode
37+ {
38+ onlyBufferInTa = 0;
39+ discardAsLinkReserved = 1,
40+ bufferAndFlush = 2
41+ };
42+
43+ enum class Bfr
44+ {
45+ clear,
46+ flush
47+ };
48+
49+ CgerepCommand()
50+ :
51+ BaseClass("CGEREP")
52+ {
53+ }
54+
55+ Request setRequest(const enum Mode mode, const enum Bfr bfr) const
56+ {
57+ std::string command = setRequestPrefix() + std::to_string(static_cast<int>(mode));
58+
59+ command += std::to_string(static_cast<int>(mode)) + kSentCommandTrailer;
60+
61+ const Request request{RequestType::set, command};
62+
63+ return request;
64+ }
65+};
66+
67+CgerepCommand cgerepCommand;
68+
69+/* *INDENT-OFF* */
70+} // namespace le920
71+} // namespace telit
72+/* *INDENT-ON* */
diff -r 000000000000 -r dc8dce7bbc90 include/telit/cmee.hpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/telit/cmee.hpp Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,66 @@
1+/*
2+ * @author Sergey Gusarov <sgusarow@mail.ru>
3+ * @section LICENSE
4+ * Copyright (c) 2013,2014 by SPT Ltd
5+ *
6+ * This software is copyrighted by and is the sole property of SPT Ltd.
7+ * All rights, title, ownership, or other interests
8+ * in the software remain the property of SPT Ltd. This
9+ * software may only be used in accordance with the corresponding
10+ * license agreement. Any unauthorized use, duplication, transmission,
11+ * distribution, or disclosure of this software is forbidden.
12+ *
13+ * This Copyright notice may not be removed or modified without prior
14+ * written consent of SPT Ltd.
15+ *
16+ * SPT Ltd reserves the right to modify this software without notice
17+ *
18+ * @section DESCRIPTION
19+ *
20+ */
21+
22+#pragma once
23+
24+#include "telit/common.hpp"
25+
26+/* *INDENT-OFF* */
27+namespace telit {
28+namespace le920 {
29+/* *INDENT-ON* */
30+
31+class CmeeCommand : public ParameterCommand<CommandGroup::plus>
32+{
33+ using BaseClass = ParameterCommand<CommandGroup::plus>;
34+
35+public:
36+ enum class EnableFlag
37+ {
38+ disable = 0,
39+ numeric = 1,
40+ verbose = 2
41+ };
42+
43+ static const enum EnableFlag defaultEnableFlag = EnableFlag::disable;
44+
45+ CmeeCommand()
46+ :
47+ BaseClass("CMEE")
48+ {
49+ }
50+
51+ Request setRequest(const enum EnableFlag enableFlag) const
52+ {
53+ const std::string kStrEnableFlag = std::to_string(static_cast<int>(enableFlag));
54+ const std::string kCommand(setRequestPrefix() + kStrEnableFlag + kSentCommandTrailer);
55+ const Request request{RequestType::set, kCommand};
56+
57+ return request;
58+ }
59+};
60+
61+CmeeCommand cmeeCommand;
62+
63+/* *INDENT-OFF* */
64+} // namespace le920
65+} // namespace telit
66+/* *INDENT-ON* */
diff -r 000000000000 -r dc8dce7bbc90 include/telit/common.hpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/telit/common.hpp Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,243 @@
1+/*
2+ * @author Sergey Gusarov <sgusarow@mail.ru>
3+ * @section LICENSE
4+ * Copyright (c) 2013 by SPT Ltd
5+ *
6+ * This software is copyrighted by and is the sole property of SPT Ltd.
7+ * All rights, title, ownership, or other interests
8+ * in the software remain the property of SPT Ltd. This
9+ * software may only be used in accordance with the corresponding
10+ * license agreement. Any unauthorized use, duplication, transmission,
11+ * distribution, or disclosure of this software is forbidden.
12+ *
13+ * This Copyright notice may not be removed or modified without prior
14+ * written consent of SPT Ltd.
15+ *
16+ * SPT Ltd reserves the right to modify this software without notice
17+ *
18+ * @section DESCRIPTION
19+ *
20+ */
21+
22+#pragma once
23+
24+#include <ctools/predef/external_headers.h>
25+
26+CT_BEGIN_EXTERNAL_HEADERS
27+# include <string>
28+CT_END_EXTERNAL_HEADERS
29+
30+#include <ctools/predef/cxx11_attributes.h>
31+
32+/* *INDENT-OFF* */
33+namespace telit {
34+/* *INDENT-ON* */
35+
36+/*
37+ * Most of the commands can be splitted into 2 heaps: parameters and action command.
38+ * But not all of them.
39+ * Parameters and action commands should be described and constucted by inheritance of ParameterCommand and ActionCommand classes.
40+ * Others commands should be inherited from AbstractCommand.
41+ */
42+
43+enum class RequestType
44+{
45+ set,
46+ read,
47+ execute,
48+ test
49+};
50+
51+struct Request
52+{
53+ enum RequestType requestType;
54+ std::string instruction;
55+};
56+
57+class AbstractCommand
58+{
59+public:
60+ virtual ~AbstractCommand() CT_NOEXCEPT = default;
61+
62+ static std::string getPrintableRequest(const Request& request)
63+ {
64+ return getPrintable(request.instruction);
65+ }
66+
67+ static std::string getPrintableResponse(const std::string& response)
68+ {
69+ return getPrintable(response);
70+ }
71+
72+
73+ static bool isCommandResponseEmpty(const Request& request, const std::string& response);
74+
75+ /*
76+ * Telit module should answer something in specified time.
77+ * 100 ms is often used here as a good default value
78+ */
79+ virtual uint commandTimeoutInMilliSeconds() const CT_NOEXCEPT
80+ {
81+ return 100;
82+ }
83+
84+ /*
85+ * Telit module should apply new settings in specified time.
86+ * For example: switch mobile network, band, registration...
87+ * This may be equal to commandTimeoutInMilliSeconds() or specially denoted in the documentation
88+ */
89+ virtual uint commandActionTimeoutInMilliSeconds() const CT_NOEXCEPT
90+ {
91+ return 100;
92+ }
93+
94+protected:
95+ static const std::string kSentCommandTrailer;
96+ static const std::string kLeftAnswerPart;
97+ static const std::string kRightAnswerOkSuffix;
98+
99+ std::string name;
100+
101+ AbstractCommand(const std::string& nameParameter)
102+ : name(nameParameter)
103+ {
104+ }
105+
106+ static std::string getPrintable(const std::string& moduleString);
107+
108+private:
109+ static const std::string kRightAnswerPart;
110+ static const std::string kRightAnswerErrorSuffix;
111+ static const std::string kOkAnswer;
112+ static const std::string kErrorAnswer;
113+};
114+
115+enum class CommandGroup
116+{
117+ plus = '+',
118+ sharp = '#',
119+ ampersand = '&',
120+ slash = '/',
121+ backslash = '\\',
122+ percent = '%', // Mostly for backward compatibility
123+ empty = ' ', // Absence of the group, marked specially by space
124+};
125+
126+template<CommandGroup commandGroup>
127+class AtCommand : public AbstractCommand
128+{
129+ using BaseClass = AbstractCommand;
130+
131+public:
132+ /**
133+ * @brief Check response for correctness and remove prefix and/of suffix from the response
134+ * @param response String to be examined, may be changed regardless return value
135+ * @param stripPrefix If equal to true left part of the response will be examined
136+ * @param stripSuffix If equal to true right part of the response will be examined
137+ * @param command Command was used to get this response
138+ * @returns true when response was correct
139+ */
140+ bool getStrippedResponse(std::string& response, const bool stripPrefix, const bool stripSuffix,
141+ const std::string& command = "");
142+
143+protected:
144+ AtCommand(const std::string& name)
145+ : BaseClass(name)
146+ {
147+ }
148+
149+ std::string fullCommandString() const
150+ {
151+ return kAtPrefix + groupWithCommand();
152+ }
153+
154+private:
155+ const std::string kAtPrefix = "AT";
156+
157+ std::string groupWithCommand() const
158+ {
159+ std::string groupWithCommandString;
160+
161+ if (commandGroup != CommandGroup::empty)
162+ groupWithCommandString += static_cast<char>(commandGroup);
163+ groupWithCommandString += name;
164+
165+ return groupWithCommandString;
166+ }
167+};
168+
169+template<CommandGroup commandGroup>
170+class ExtendedCommand : public AtCommand<commandGroup>
171+{
172+ using BaseClass = AtCommand<commandGroup>;
173+
174+protected:
175+ const std::string kSetCommandTrailer = "=";
176+ const std::string kTestCommandTrailer = "=?";
177+
178+ ExtendedCommand(const std::string& name)
179+ : BaseClass(name)
180+ {
181+ static_assert(commandGroup == CommandGroup::plus || commandGroup == CommandGroup::sharp,
182+ "Invalid commandGroup template parameter");
183+ }
184+
185+ std::string setRequestPrefix() const
186+ {
187+ return BaseClass::fullCommandString() + kSetCommandTrailer;
188+ }
189+
190+ Request testRequest() const
191+ {
192+ const std::string kCommand(BaseClass::fullCommandString() + kTestCommandTrailer +
193+ BaseClass::kSentCommandTrailer);
194+ const Request request{RequestType::test, kCommand};
195+
196+ return request;
197+ }
198+};
199+
200+template<CommandGroup commandGroup>
201+class ParameterCommand : public ExtendedCommand<commandGroup>
202+{
203+ using BaseClass = ExtendedCommand<commandGroup>;
204+
205+protected:
206+ const std::string kReadCommandTrailer = "?";
207+
208+ ParameterCommand(const std::string& name)
209+ : BaseClass(name)
210+ {
211+ }
212+
213+ std::string readRequestPrefix() const
214+ {
215+ return BaseClass::fullCommandString() + kReadCommandTrailer;
216+ }
217+};
218+
219+template<CommandGroup commandGroup>
220+class ActionCommand : public ExtendedCommand<commandGroup>
221+{
222+ using BaseClass = ExtendedCommand<commandGroup>;
223+
224+protected:
225+ ActionCommand(const std::string& name)
226+ : BaseClass(name)
227+ {
228+ }
229+
230+ Request executeRequest() const
231+ {
232+ const std::string command(BaseClass::fullCommandString() + BaseClass::kSentCommandTrailer);
233+ const Request request{RequestType::execute, command};
234+
235+ return request;
236+ }
237+};
238+
239+static const size_t kMaxCommandLength = 80;
240+
241+/* *INDENT-OFF* */
242+} // namespace telit
243+/* *INDENT-ON* */
diff -r 000000000000 -r dc8dce7bbc90 include/telit/creg.hpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/telit/creg.hpp Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,65 @@
1+/*
2+ * @author Sergey Gusarov <sgusarow@mail.ru>
3+ * @section LICENSE
4+ * Copyright (c) 2013,2014 by SPT Ltd
5+ *
6+ * This software is copyrighted by and is the sole property of SPT Ltd.
7+ * All rights, title, ownership, or other interests
8+ * in the software remain the property of SPT Ltd. This
9+ * software may only be used in accordance with the corresponding
10+ * license agreement. Any unauthorized use, duplication, transmission,
11+ * distribution, or disclosure of this software is forbidden.
12+ *
13+ * This Copyright notice may not be removed or modified without prior
14+ * written consent of SPT Ltd.
15+ *
16+ * SPT Ltd reserves the right to modify this software without notice
17+ *
18+ * @section DESCRIPTION
19+ *
20+ */
21+
22+#pragma once
23+
24+#include "telit/common.hpp"
25+
26+/* *INDENT-OFF* */
27+namespace telit {
28+namespace le920 {
29+/* *INDENT-ON* */
30+
31+class CregCommand : public ParameterCommand<CommandGroup::plus>
32+{
33+ using BaseClass = ParameterCommand<CommandGroup::plus>;
34+
35+public:
36+ enum class Mode
37+ {
38+ disable = 0,
39+ enable = 1,
40+ enableWithCellIdData = 2
41+ };
42+
43+ static const enum Mode defaultMode = Mode::disable;
44+
45+ CregCommand()
46+ :
47+ BaseClass("CREG")
48+ {
49+ }
50+
51+ Request setRequest(const enum Mode mode) const
52+ {
53+ const std::string command(setRequestPrefix() + std::to_string(static_cast<int>(mode)) + kSentCommandTrailer);
54+ const Request request{RequestType::set, command};
55+
56+ return request;
57+ }
58+};
59+
60+CregCommand cregCommand;
61+
62+/* *INDENT-ON* */
63+} // namespace le920
64+} // namespace telit
65+/* *INDENT-OFF* */
diff -r 000000000000 -r dc8dce7bbc90 include/telit/gmr.hpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/telit/gmr.hpp Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,50 @@
1+/*
2+ * @author Sergey Gusarov <sgusarow@mail.ru>
3+ * @section LICENSE
4+ * Copyright (c) 2013 by SPT Ltd
5+ *
6+ * This software is copyrighted by and is the sole property of SPT Ltd.
7+ * All rights, title, ownership, or other interests
8+ * in the software remain the property of SPT Ltd. This
9+ * software may only be used in accordance with the corresponding
10+ * license agreement. Any unauthorized use, duplication, transmission,
11+ * distribution, or disclosure of this software is forbidden.
12+ *
13+ * This Copyright notice may not be removed or modified without prior
14+ * written consent of SPT Ltd.
15+ *
16+ * SPT Ltd reserves the right to modify this software without notice
17+ *
18+ * @section DESCRIPTION
19+ * Retrieve serial number command
20+ */
21+
22+#pragma once
23+
24+#include "telit/common.hpp"
25+
26+/* *INDENT-OFF* */
27+namespace telit {
28+namespace le920 {
29+/* *INDENT-ON* */
30+
31+class GmrCommand : public ActionCommand<CommandGroup::plus>
32+{
33+ using BaseClass = ActionCommand<CommandGroup::plus>;
34+
35+public:
36+ GmrCommand()
37+ :
38+ BaseClass("GMR")
39+ {
40+ }
41+
42+ using BaseClass::executeRequest;
43+};
44+
45+extern GmrCommand gmrCommand;
46+
47+/* *INDENT-OFF* */
48+} // namespace le920
49+} // namespace telit
50+/* *INDENT-ON* */
diff -r 000000000000 -r dc8dce7bbc90 include/telit/gsn.hpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/telit/gsn.hpp Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,50 @@
1+/*
2+ * @author Sergey Gusarov <sgusarow@mail.ru>
3+ * @section LICENSE
4+ * Copyright (c) 2013 by SPT Ltd
5+ *
6+ * This software is copyrighted by and is the sole property of SPT Ltd.
7+ * All rights, title, ownership, or other interests
8+ * in the software remain the property of SPT Ltd. This
9+ * software may only be used in accordance with the corresponding
10+ * license agreement. Any unauthorized use, duplication, transmission,
11+ * distribution, or disclosure of this software is forbidden.
12+ *
13+ * This Copyright notice may not be removed or modified without prior
14+ * written consent of SPT Ltd.
15+ *
16+ * SPT Ltd reserves the right to modify this software without notice
17+ *
18+ * @section DESCRIPTION
19+ * Retrieve serial number command
20+ */
21+
22+#pragma once
23+
24+#include "telit/common.hpp"
25+
26+/* *INDENT-OFF* */
27+namespace telit {
28+namespace le920 {
29+/* *INDENT-ON* */
30+
31+class GsnCommand : public ActionCommand<CommandGroup::plus>
32+{
33+ using BaseClass = ActionCommand<CommandGroup::plus>;
34+
35+public:
36+ GsnCommand()
37+ :
38+ BaseClass("GSN")
39+ {
40+ }
41+
42+ using BaseClass::executeRequest;
43+};
44+
45+extern GsnCommand gsnCommand;
46+
47+/* *INDENT-OFF* */
48+} // namespace le920
49+} // namespace telit
50+/* *INDENT-ON* */
diff -r 000000000000 -r dc8dce7bbc90 include/telit/i.hpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/telit/i.hpp Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,72 @@
1+/*
2+ * @author Sergey Gusarov <sgusarow@mail.ru>
3+ * @section LICENSE
4+ * Copyright (c) 2013 by SPT Ltd
5+ *
6+ * This software is copyrighted by and is the sole property of SPT Ltd.
7+ * All rights, title, ownership, or other interests
8+ * in the software remain the property of SPT Ltd. This
9+ * software may only be used in accordance with the corresponding
10+ * license agreement. Any unauthorized use, duplication, transmission,
11+ * distribution, or disclosure of this software is forbidden.
12+ *
13+ * This Copyright notice may not be removed or modified without prior
14+ * written consent of SPT Ltd.
15+ *
16+ * SPT Ltd reserves the right to modify this software without notice
17+ *
18+ * @section DESCRIPTION
19+ *
20+ */
21+
22+#pragma once
23+
24+#include "telit/common.hpp"
25+
26+/* *INDENT-OFF* */
27+namespace telit {
28+namespace le920 {
29+/* *INDENT-ON* */
30+
31+class ICommand : public AtCommand<CommandGroup::empty>
32+{
33+ using BaseClass = AtCommand<CommandGroup::empty>;
34+
35+public:
36+ enum class Parameter
37+ {
38+ numericalId = '0',
39+ moduleChecksum = '1',
40+ checksumCheckResult = '2',
41+ manufacture = '3',
42+ productName = '4',
43+
44+ /*
45+ * DOB means Data On Board : is the old stack of software
46+ * to permit data transmission when Telit manufacturing cellular phones.
47+ */
48+ dobVersion = '5'
49+ };
50+
51+ ICommand()
52+ :
53+ BaseClass("I")
54+ {
55+ }
56+
57+ Request executeRequest(const enum Parameter& parameter) const
58+ {
59+ const char kCharParameter = static_cast<char>(parameter);
60+ const std::string kCommand(BaseClass::fullCommandString() + kCharParameter + BaseClass::kSentCommandTrailer);
61+ const Request request{RequestType::execute, kCommand};
62+
63+ return request;
64+ }
65+};
66+
67+extern ICommand iCommand;
68+
69+/* *INDENT-OFF* */
70+} // namespace le920
71+} // namespace telit
72+/* *INDENT-ON* */
diff -r 000000000000 -r dc8dce7bbc90 include/telit/moni.hpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/telit/moni.hpp Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,61 @@
1+/*
2+ * @author Sergey Gusarov <sgusarow@mail.ru>
3+ * @section LICENSE
4+ * Copyright (c) 2013,2014 by SPT Ltd
5+ *
6+ * This software is copyrighted by and is the sole property of SPT Ltd.
7+ * All rights, title, ownership, or other interests
8+ * in the software remain the property of SPT Ltd. This
9+ * software may only be used in accordance with the corresponding
10+ * license agreement. Any unauthorized use, duplication, transmission,
11+ * distribution, or disclosure of this software is forbidden.
12+ *
13+ * This Copyright notice may not be removed or modified without prior
14+ * written consent of SPT Ltd.
15+ *
16+ * SPT Ltd reserves the right to modify this software without notice
17+ *
18+ * @section DESCRIPTION
19+ *
20+ */
21+
22+#pragma once
23+
24+#include "telit/common.hpp"
25+
26+/* *INDENT-OFF* */
27+namespace telit {
28+namespace le920 {
29+/* *INDENT-ON* */
30+
31+class MoniCommand : public ActionCommand<CommandGroup::sharp>
32+{
33+ using BaseClass = ActionCommand<CommandGroup::sharp>;
34+
35+public:
36+ MoniCommand()
37+ :
38+ BaseClass("MONI")
39+ {
40+ }
41+
42+ using BaseClass::executeRequest;
43+
44+private:
45+ const std::string kAnswerId = "#MONI:";
46+ const std::string kCellId = " Id:";
47+ const std::string kPwrId = " PWR:";
48+
49+ const std::string kCcId = " Cc:";
50+ const std::string kNcId = " Nc:";
51+
52+ // TODO, Sinse 17.00.101-A055_020_UP, maybe it's temporary
53+ const std::string kZeroOperator = " 000 000";
54+};
55+
56+MoniCommand moniCommand;
57+
58+/* *INDENT-OFF* */
59+} // namespace le920
60+} // namespace telit
61+/* *INDENT-ON* */
diff -r 000000000000 -r dc8dce7bbc90 include/telit/ws46.hpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/telit/ws46.hpp Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,70 @@
1+/*
2+ * @author Sergey Gusarov <sgusarow@mail.ru>
3+ * @section LICENSE
4+ * Copyright (c) 2013 by SPT Ltd
5+ *
6+ * This software is copyrighted by and is the sole property of SPT Ltd.
7+ * All rights, title, ownership, or other interests
8+ * in the software remain the property of SPT Ltd. This
9+ * software may only be used in accordance with the corresponding
10+ * license agreement. Any unauthorized use, duplication, transmission,
11+ * distribution, or disclosure of this software is forbidden.
12+ *
13+ * This Copyright notice may not be removed or modified without prior
14+ * written consent of SPT Ltd.
15+ *
16+ * SPT Ltd reserves the right to modify this software without notice
17+ *
18+ * @section DESCRIPTION
19+ *
20+ */
21+
22+#pragma once
23+
24+#include "telit/common.hpp"
25+
26+/* *INDENT-OFF* */
27+namespace telit {
28+namespace le920 {
29+/* *INDENT-ON* */
30+
31+class Ws46Command : public ParameterCommand<CommandGroup::plus>
32+{
33+ using BaseClass = ParameterCommand<CommandGroup::plus>;
34+
35+public:
36+ enum class WirelessNetwork
37+ {
38+ geran = 12,
39+ utran = 22,
40+ geranUtranEutran = 25,
41+ eutran = 28,
42+ geranUtran = 29,
43+ geranEutran = 30,
44+ utranEutran = 31
45+ };
46+
47+ Ws46Command()
48+ :
49+ BaseClass("WS46")
50+ {
51+ }
52+
53+ Request setRequest(const enum WirelessNetwork wirelessNetwork) const
54+ {
55+ const std::string kStrWirelessNetwork = std::to_string(static_cast<int>(wirelessNetwork));
56+ const std::string command(setRequestPrefix() + kStrWirelessNetwork + kSentCommandTrailer);
57+ const Request request{RequestType::set, command};
58+
59+ return request;
60+ }
61+
62+ virtual uint commandActionTimeoutInMilliSeconds() const CT_NOEXCEPT;
63+};
64+
65+extern Ws46Command ws46Command;
66+
67+/* *INDENT-OFF* */
68+} // namespace le920
69+} // namespace telit
70+/* *INDENT-ON* */
diff -r 000000000000 -r dc8dce7bbc90 pack.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pack.py Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,22 @@
1+#!/usr/bin/env python3
2+
3+"""This script quickly creates a backup archive with proper name."""
4+
5+__author__ = 'Sergey Gusarov'
6+__license__ = 'MPL 2.0, see LICENSE'
7+
8+
9+import os
10+import subprocess
11+import sys
12+
13+sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'pyrepo'))
14+import common_pack
15+import fs
16+
17+
18+def main():
19+ subprocess.check_call(os.path.join(fs.getScriptDir(), 'scripts', 'cleanall.py'), shell = True)
20+ common_pack.pack()
21+
22+main()
diff -r 000000000000 -r dc8dce7bbc90 scripts/cleanall.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/cleanall.py Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,19 @@
1+#!/usr/bin/env python3
2+
3+"""Manual cleaning of all generated files."""
4+
5+__author__ = 'Sergey Gusarov'
6+__license__ = 'MPL 2.0, see LICENSE'
7+
8+
9+import os
10+import sys
11+
12+sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'pyrepo'))
13+import common_clean
14+
15+
16+def main():
17+ common_clean.cleanMinimal()
18+
19+main()
diff -r 000000000000 -r dc8dce7bbc90 scripts/cppcheck_start.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/cppcheck_start.py Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,20 @@
1+#!/usr/bin/env python3
2+
3+"""Wrapper above cppcheck utility."""
4+
5+
6+__author__ = 'Sergey Gusarov'
7+__license__ = 'MPL 2.0, see LICENSE'
8+
9+
10+import os
11+import sys
12+
13+sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'pyrepo'))
14+import cppcheck
15+
16+
17+def main():
18+ cppcheck.runForStandardSources()
19+
20+main()
diff -r 000000000000 -r dc8dce7bbc90 src/common.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/common.cpp Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,158 @@
1+/*
2+ * @author Sergey Gusarov <sgusarow@mail.ru>
3+ * @section LICENSE
4+ * Copyright (c) 2014 by SPT Ltd
5+ *
6+ * This software is copyrighted by and is the sole property of SPT Ltd.
7+ * All rights, title, ownership, or other interests
8+ * in the software remain the property of SPT Ltd. This
9+ * software may only be used in accordance with the corresponding
10+ * license agreement. Any unauthorized use, duplication, transmission,
11+ * distribution, or disclosure of this software is forbidden.
12+ *
13+ * This Copyright notice may not be removed or modified without prior
14+ * written consent of SPT Ltd.
15+ *
16+ * SPT Ltd reserves the right to modify this software without notice
17+ *
18+ * @section DESCRIPTION
19+ *
20+ */
21+
22+#include "telit/common.hpp"
23+
24+#include <ctools/trace.h>
25+#include <ctools/unused.h>
26+
27+/* *INDENT-OFF* */
28+namespace telit {
29+/* *INDENT-ON* */
30+
31+const std::string AbstractCommand::kSentCommandTrailer = "\r"; // '0xd'
32+
33+const std::string AbstractCommand::kLeftAnswerPart = "\r\n";
34+const std::string AbstractCommand::kRightAnswerPart = "\r\n";
35+const std::string AbstractCommand::kRightAnswerOkSuffix = "OK" + kRightAnswerPart;
36+const std::string AbstractCommand::kRightAnswerErrorSuffix = "ERROR" + kRightAnswerPart;
37+const std::string AbstractCommand::kOkAnswer = kLeftAnswerPart + kRightAnswerOkSuffix;
38+const std::string AbstractCommand::kErrorAnswer = kLeftAnswerPart + kRightAnswerErrorSuffix;
39+
40+std::string AbstractCommand::getPrintable(const std::string& moduleString)
41+{
42+ std::string printable(moduleString);
43+
44+ const std::size_t kPrintableLength = printable.length();
45+ const std::size_t kSentCommandTrailerLength = kSentCommandTrailer.length();
46+ const std::size_t kCutPrintableLength = kPrintableLength - kSentCommandTrailerLength;
47+
48+ const std::string kTrail = printable.substr(kCutPrintableLength, kSentCommandTrailerLength);
49+
50+ if (kTrail == kSentCommandTrailer)
51+ {
52+ printable.resize(kCutPrintableLength);
53+ printable += '\n';
54+ }
55+
56+ return printable;
57+}
58+
59+bool AbstractCommand::isCommandResponseEmpty(const Request& request, const std::string& response)
60+{
61+ bool isResponseEmpty;
62+
63+ switch (request.requestType)
64+ {
65+ case RequestType::set:
66+ case RequestType::execute:
67+ {
68+ const std::string kEmptyResponse = request.instruction + kOkAnswer;
69+
70+ isResponseEmpty = response == kEmptyResponse;
71+ }
72+ break;
73+
74+ case RequestType::read:
75+ case RequestType::test:
76+ CT_TRACE_ERRORN("Read and test commands (%s) shouldn't be tested for emptiness",
77+ request.instruction.c_str());
78+ isResponseEmpty = false;
79+ break;
80+
81+ default:
82+ CT_TRACE_ERRORN("Invalid RequestType value: %u", static_cast<uint>(request.requestType));
83+ isResponseEmpty = false;
84+ }
85+
86+ return isResponseEmpty;
87+}
88+
89+template<CommandGroup commandGroup>
90+bool AtCommand<commandGroup>::getStrippedResponse(std::string& response, const bool stripPrefix, const bool stripSuffix,
91+ const std::string& command)
92+{
93+ const std::string kSavedResponse(response);
94+
95+ std::string tmpString;
96+ bool isResponseCorrect = false;
97+
98+ do
99+ {
100+ if (stripPrefix)
101+ {
102+ std::string kAnswerPrefix;
103+
104+ if (command.length())
105+ kAnswerPrefix += command;
106+ else
107+ kAnswerPrefix += fullCommandString() + std::string("\r");
108+
109+ kAnswerPrefix += kLeftAnswerPart;
110+
111+ const std::size_t kAnswerPrefixLength = kAnswerPrefix.length();
112+
113+ tmpString = response.substr(0, kAnswerPrefixLength);
114+ if (tmpString != kAnswerPrefix)
115+ {
116+ //CT_TRACE_INFO("tmpString=%s:%zu", tmpString.c_str(), tmpString.length());
117+ //CT_TRACE_INFO("kAnswerPrefix=%s:%zu", kAnswerPrefix.c_str(), kAnswerPrefix.length());
118+ break;
119+ }
120+
121+ response = response.substr(kAnswerPrefixLength);
122+ }
123+
124+ if (stripSuffix)
125+ {
126+ const std::string kRightAnswer = std::string("\r\n\r\n") + kRightAnswerOkSuffix;
127+ const std::size_t kRightAnswerLength = kRightAnswer.length();
128+ const std::size_t kMiddleLength = response.length() - kRightAnswerLength;
129+
130+ tmpString = response.substr(kMiddleLength, kRightAnswerLength);
131+ if (tmpString != kRightAnswer)
132+ {
133+ //CT_TRACE_INFO("%s:%d", tmpString.c_str(), tmpString.length());
134+ break;
135+ }
136+
137+ response = response.substr(0, kMiddleLength);
138+ }
139+
140+ isResponseCorrect = true;
141+ }
142+ while (false);
143+
144+ if (!isResponseCorrect)
145+ {
146+ CT_UNUSED(kSavedResponse);
147+ CT_TRACE_ERRORN("Invalid module response: \"%s\"", kSavedResponse.c_str());
148+ }
149+
150+ return isResponseCorrect;
151+}
152+
153+template class AtCommand<CommandGroup::plus>;
154+template class AtCommand<CommandGroup::empty>;
155+
156+/* *INDENT-OFF* */
157+} // namespace telit
158+/* *INDENT-ON* */
diff -r 000000000000 -r dc8dce7bbc90 src/gmr.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/gmr.cpp Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,34 @@
1+/*
2+ * @author Sergey Gusarov <sgusarow@mail.ru>
3+ * @section LICENSE
4+ * Copyright (c) 2014 by SPT Ltd
5+ *
6+ * This software is copyrighted by and is the sole property of SPT Ltd.
7+ * All rights, title, ownership, or other interests
8+ * in the software remain the property of SPT Ltd. This
9+ * software may only be used in accordance with the corresponding
10+ * license agreement. Any unauthorized use, duplication, transmission,
11+ * distribution, or disclosure of this software is forbidden.
12+ *
13+ * This Copyright notice may not be removed or modified without prior
14+ * written consent of SPT Ltd.
15+ *
16+ * SPT Ltd reserves the right to modify this software without notice
17+ *
18+ * @section DESCRIPTION
19+ *
20+ */
21+
22+#include "telit/gmr.hpp"
23+
24+/* *INDENT-OFF* */
25+namespace telit {
26+namespace le920 {
27+/* *INDENT-ON* */
28+
29+GmrCommand gmrCommand;
30+
31+/* *INDENT-OFF* */
32+} // namespace le920
33+} // namespace telit
34+/* *INDENT-ON* */
diff -r 000000000000 -r dc8dce7bbc90 src/gsn.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/gsn.cpp Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,34 @@
1+/*
2+ * @author Sergey Gusarov <sgusarow@mail.ru>
3+ * @section LICENSE
4+ * Copyright (c) 2014 by SPT Ltd
5+ *
6+ * This software is copyrighted by and is the sole property of SPT Ltd.
7+ * All rights, title, ownership, or other interests
8+ * in the software remain the property of SPT Ltd. This
9+ * software may only be used in accordance with the corresponding
10+ * license agreement. Any unauthorized use, duplication, transmission,
11+ * distribution, or disclosure of this software is forbidden.
12+ *
13+ * This Copyright notice may not be removed or modified without prior
14+ * written consent of SPT Ltd.
15+ *
16+ * SPT Ltd reserves the right to modify this software without notice
17+ *
18+ * @section DESCRIPTION
19+ *
20+ */
21+
22+#include "telit/gsn.hpp"
23+
24+/* *INDENT-OFF* */
25+namespace telit {
26+namespace le920 {
27+/* *INDENT-ON* */
28+
29+GsnCommand gsnCommand;
30+
31+/* *INDENT-OFF* */
32+} // namespace le920
33+} // namespace telit
34+/* *INDENT-ON* */
diff -r 000000000000 -r dc8dce7bbc90 src/i.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/i.cpp Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,34 @@
1+/*
2+ * @author Sergey Gusarov <sgusarow@mail.ru>
3+ * @section LICENSE
4+ * Copyright (c) 2014 by SPT Ltd
5+ *
6+ * This software is copyrighted by and is the sole property of SPT Ltd.
7+ * All rights, title, ownership, or other interests
8+ * in the software remain the property of SPT Ltd. This
9+ * software may only be used in accordance with the corresponding
10+ * license agreement. Any unauthorized use, duplication, transmission,
11+ * distribution, or disclosure of this software is forbidden.
12+ *
13+ * This Copyright notice may not be removed or modified without prior
14+ * written consent of SPT Ltd.
15+ *
16+ * SPT Ltd reserves the right to modify this software without notice
17+ *
18+ * @section DESCRIPTION
19+ *
20+ */
21+
22+#include "telit/i.hpp"
23+
24+/* *INDENT-OFF* */
25+namespace telit {
26+namespace le920 {
27+/* *INDENT-ON* */
28+
29+ICommand iCommand;
30+
31+/* *INDENT-OFF* */
32+} // namespace le920
33+} // namespace telit
34+/* *INDENT-ON* */
diff -r 000000000000 -r dc8dce7bbc90 src/ws46.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ws46.cpp Sun Dec 06 23:48:44 2015 +0300
@@ -0,0 +1,41 @@
1+/*
2+ * @author Sergey Gusarov <sgusarow@mail.ru>
3+ * @section LICENSE
4+ * Copyright (c) 2014 by SPT Ltd
5+ *
6+ * This software is copyrighted by and is the sole property of SPT Ltd.
7+ * All rights, title, ownership, or other interests
8+ * in the software remain the property of SPT Ltd. This
9+ * software may only be used in accordance with the corresponding
10+ * license agreement. Any unauthorized use, duplication, transmission,
11+ * distribution, or disclosure of this software is forbidden.
12+ *
13+ * This Copyright notice may not be removed or modified without prior
14+ * written consent of SPT Ltd.
15+ *
16+ * SPT Ltd reserves the right to modify this software without notice
17+ *
18+ * @section DESCRIPTION
19+ *
20+ */
21+
22+#include "telit/ws46.hpp"
23+
24+#include <ctools/time_consts.h>
25+
26+/* *INDENT-OFF* */
27+namespace telit {
28+namespace le920 {
29+/* *INDENT-ON* */
30+
31+Ws46Command ws46Command;
32+
33+uint Ws46Command::commandActionTimeoutInMilliSeconds() const CT_NOEXCEPT
34+{
35+ return 10 * ctools::kMilliSecsInSec;
36+}
37+
38+/* *INDENT-OFF* */
39+} // namespace le920
40+} // namespace telit
41+/* *INDENT-ON* */
Show on old repository browser