This class adds HTTP, FTP and CellLocate client support for u-blox modules for the C027 and C030 boards (excepting the C030 N2xx flavour) from mbed 5.5 onwards. The HTTP, FTP and CellLocate operations are all hosted on the module, minimizing RAM consumption in the mbed MCU. It also sub-classes ublox-cellular-driver-gen to bring in SMS, USSD and modem file system support if you need to use these functions at the same time as the cellular interface.
Dependencies: ublox-at-cellular-interface
Dependents: example-ublox-at-cellular-interface-ext HelloMQTT ublox_new_driver_test example-ublox-at-cellular-interface-ext ... more
UbloxATCellularInterfaceExt.h
00001 /* Copyright (c) 2017 ARM Limited 00002 * 00003 * Licensed under the Apache License, Version 2.0 (the "License"); 00004 * you may not use this file except in compliance with the License. 00005 * You may obtain a copy of the License at 00006 * 00007 * http://www.apache.org/licenses/LICENSE-2.0 00008 * 00009 * Unless required by applicable law or agreed to in writing, software 00010 * distributed under the License is distributed on an "AS IS" BASIS, 00011 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00012 * See the License for the specific language governing permissions and 00013 * limitations under the License. 00014 */ 00015 00016 #ifndef _UBLOX_AT_CELLULAR_INTERFACE_EXT_ 00017 #define _UBLOX_AT_CELLULAR_INTERFACE_EXT_ 00018 00019 #include "UbloxATCellularInterface.h" 00020 #include "UbloxCellularDriverGen.h" 00021 00022 /**UbloxATCellularInterfaceExt class. 00023 * 00024 * This interface extends the UbloxATCellularInterface to 00025 * include other features that use the IP stack on board the 00026 * cellular modem: HTTP, FTP and Cell Locate. 00027 * 00028 * Note: the UbloxCellularGeneric class is required because 00029 * reading a large HTTP response is performed via a modem 00030 * file system call and the UbloxCellularGeneric class is 00031 * where modem file system support is provided. 00032 */ 00033 class UbloxATCellularInterfaceExt : public UbloxATCellularInterface, public UbloxCellularDriverGen { 00034 00035 public: 00036 /** Constructor. 00037 * 00038 * @param tx the UART TX data pin to which the modem is attached. 00039 * @param rx the UART RX data pin to which the modem is attached. 00040 * @param baud the UART baud rate. 00041 * @param debugOn true to switch AT interface debug on, otherwise false. 00042 */ 00043 UbloxATCellularInterfaceExt(PinName tx = MDMTXD, 00044 PinName rx = MDMRXD, 00045 int baud = MBED_CONF_UBLOX_CELL_BAUD_RATE, 00046 bool debugOn = false, 00047 osPriority priority = osPriorityNormal); 00048 00049 /* Destructor. 00050 */ 00051 virtual ~UbloxATCellularInterfaceExt(); 00052 00053 /********************************************************************** 00054 * PUBLIC: General 00055 **********************************************************************/ 00056 00057 /** Infinite timeout. 00058 */ 00059 #define TIMEOUT_BLOCKING -1 00060 00061 /** A struct containing an HTTP or FTP error class and code 00062 */ 00063 typedef struct { 00064 int eClass; 00065 int eCode; 00066 } Error; 00067 00068 /********************************************************************** 00069 * PUBLIC: HTTP 00070 **********************************************************************/ 00071 00072 /** HTTP profile unused marker. 00073 */ 00074 #define HTTP_PROF_UNUSED -1 00075 00076 /** HTTP configuration parameters (reference to HTTP control +UHTTP). 00077 */ 00078 typedef enum { 00079 HTTP_IP_ADDRESS = 0, 00080 HTTP_SERVER_NAME = 1, 00081 HTTP_USER_NAME = 2, 00082 HTTP_PASSWORD = 3, 00083 HTTP_AUTH_TYPE = 4, 00084 HTTP_SERVER_PORT = 5, 00085 HTTP_SECURE = 6, 00086 HTTP_REQ_HEADER = 9 00087 } HttpOpCode; 00088 00089 /** Type of HTTP Command. 00090 */ 00091 typedef enum { 00092 HTTP_HEAD = 0, 00093 HTTP_GET = 1, 00094 HTTP_DELETE = 2, 00095 HTTP_PUT = 3, 00096 HTTP_POST_FILE = 4, 00097 HTTP_POST_DATA = 5 00098 } HttpCmd; 00099 00100 /** HTTP content types. 00101 */ 00102 typedef enum { 00103 HTTP_CONTENT_URLENCODED = 0, 00104 HTTP_CONTENT_TEXT = 1, 00105 HTTP_CONTENT_OCTET_STREAM = 2, 00106 HTTP_CONTENT_FORM_DATA = 3, 00107 HTTP_CONTENT_JSON = 4, 00108 HTTP_CONTENT_XML = 5, 00109 HTTP_CONTENT_USER_DEFINED = 6 00110 } HttpContentType; 00111 00112 /** Find a free HTTP profile. 00113 * 00114 * A profile will be blocking when first allocated. 00115 * 00116 * @return the profile or negative if none are available. 00117 */ 00118 int httpAllocProfile(); 00119 00120 /** Free the HTTP profile. 00121 * 00122 * @param profile the HTTP profile handle. 00123 * @return true if successful, otherwise false. 00124 */ 00125 bool httpFreeProfile(int profile); 00126 00127 /** Set the timeout for this profile. 00128 * 00129 * @param profile the HTTP profile handle. 00130 * @param timeout -1 blocking, else non-blocking timeout in milliseconds. 00131 * @return true if successful, otherwise false. 00132 */ 00133 bool httpSetTimeout(int profile, int timeout); 00134 00135 /** Reset a HTTP profile back to defaults. 00136 * 00137 * This may be called if the state of a HTTP profile 00138 * during parameter setting or exchange of HTTP commands 00139 * has become confusing/unknown. 00140 * 00141 * @param httpProfile the HTTP profile to be reset. 00142 * @return true if successful, false otherwise. 00143 */ 00144 bool httpResetProfile(int httpProfile); 00145 00146 /** Set HTTP parameters. 00147 * 00148 * This should be called as many times as is necessary 00149 * to set all the possible parameters (HttpOpCode). 00150 * 00151 * See section 28.1 of u-blox-ATCommands_Manual(UBX-13002752).pdf 00152 * for full details. By example: 00153 * 00154 * httpOpCode httpInPar 00155 * HTTP_IP_ADDRESS "145.33.18.10" (the target HTTP server IP address) 00156 * HTTP_SERVER_NAME "www.myhttpserver.com" (the target HTTP server name) 00157 * HTTP_USER_NAME "my_username" 00158 * HTTP_PASSWORD "my_password" 00159 * HTTP_AUTH_TYPE "0" for no authentication, "1" for username/password 00160 * authentication (the default is 0) 00161 * HTTP_SERVER_PORT "81" (default is port 80) 00162 * HTTP_SECURE "0" for no security, "1" for TLS (the default is 0), 00163 * not all modems support this parameter 00164 * 00165 * @param httpProfile the HTTP profile identifier. 00166 * @param httpOpCode the HTTP operation code. 00167 * @param httpInPar the HTTP input parameter. 00168 * @return true if successful, false otherwise. 00169 */ 00170 bool httpSetPar(int httpProfile, HttpOpCode httpOpCode, const char * httpInPar); 00171 00172 /** Perform a HTTP command. 00173 * 00174 * See section 28.3 of u-blox-ATCommands_Manual(UBX-13002752).pdf 00175 * for full details. By example, it works like this: 00176 * 00177 * httpCmd httpPath rspFile sendStr httpContentType httpCustomPar 00178 * HEAD "path/file.html" NULL NULL 0 NULL 00179 * GET "path/file.html" NULL NULL 0 NULL 00180 * DELETE "path/file.html" NULL NULL 0 NULL 00181 * PUT "path/file.html" NULL "myfile.txt" 0 to 6 Note 1 00182 * POST_FILE "path/file.html" NULL "myfile.txt" 0 to 6 Note 1 00183 * POST "path/file.html" NULL "hello there!" 0 to 6 Note 1 00184 * 00185 * Note 1: httpCustomPar is only applicable when httpContentType = HTTP_CONTENT_USER_DEFINED. 00186 * 00187 * The server to which this command is directed must have previously been 00188 * set with a call to httpSetPar(). If the server requires TLS (i.e. "HTTPS"), 00189 * then set that up with httpSetPar() also (HTTP_SECURE). 00190 * 00191 * rspFile may be left as NULL as the server response will be returned in buf. 00192 * Alternatively, a rspFile may be given (e.g. "myresponse.txt") and this can 00193 * later be read from the modem file system using readFile(). 00194 * 00195 * @param httpProfile the HTTP profile identifier. 00196 * @param httpCmd the HTTP command. 00197 * @param httpPath the path of resource on the HTTP server. 00198 * @param rspFile the local modem file where the server 00199 * response will be stored, use NULL for 00200 * don't care. 00201 * @param sendStr the filename or string to be sent 00202 * to the HTTP server with the command request. 00203 * @param httpContentType the HTTP Content-Type identifier. 00204 * @param httpCustomPar the parameter for a user defined HTTP Content-Type. 00205 * @param buf the buffer to read into. 00206 * @param len the size of the buffer to read into. 00207 * @param read_size Zero initialized variable address 00208 * @return NULL if successful, otherwise a pointer to 00209 * a Error struct containing the error class and error 00210 * code, see section Appendix A.B of 00211 * u-blox-ATCommands_Manual(UBX-13002752).pdf for details. 00212 */ 00213 Error * httpCommand(int httpProfile, HttpCmd httpCmd, const char* httpPath, 00214 const char* rspFile, const char* sendStr, 00215 int httpContentType, const char* httpCustomPar, 00216 char* buf, int len, int *read_size = NULL); 00217 00218 /********************************************************************** 00219 * PUBLIC: FTP 00220 **********************************************************************/ 00221 00222 /** FTP configuration parameters (reference to FTP control +UFTP). 00223 */ 00224 typedef enum { 00225 FTP_IP_ADDRESS = 0, 00226 FTP_SERVER_NAME = 1, 00227 FTP_USER_NAME = 2, 00228 FTP_PASSWORD = 3, 00229 FTP_ACCOUNT = 4, 00230 FTP_INACTIVITY_TIMEOUT = 5, 00231 FTP_MODE = 6, 00232 FTP_SERVER_PORT = 7, 00233 FTP_SECURE = 8, 00234 NUM_FTP_OP_CODES 00235 } FtpOpCode; 00236 00237 /** Type of FTP Command. 00238 */ 00239 typedef enum { 00240 FTP_LOGOUT = 0, 00241 FTP_LOGIN = 1, 00242 FTP_DELETE_FILE = 2, 00243 FTP_RENAME_FILE = 3, 00244 FTP_GET_FILE = 4, 00245 FTP_PUT_FILE = 5, 00246 FTP_GET_DIRECT = 6, 00247 FTP_PUT_DIRECT = 7, 00248 FTP_CD = 8, 00249 FTP_MKDIR = 10, 00250 FTP_RMDIR = 11, 00251 FTP_FILE_INFO = 13, 00252 FTP_LS = 14, 00253 FTP_FOTA_FILE = 100 00254 } FtpCmd; 00255 00256 /** Set the timeout for FTP operations. 00257 * 00258 * @param timeout -1 blocking, else non-blocking timeout in milliseconds. 00259 * @return true if successful, otherwise false. 00260 */ 00261 bool ftpSetTimeout(int timeout); 00262 00263 /** Reset the FTP configuration back to defaults. 00264 */ 00265 void ftpResetPar(); 00266 00267 /** Set FTP parameters. 00268 * 00269 * This should be called as many times as is necessary 00270 * to set all the possible parameters (FtpOpCode). 00271 * 00272 * See section 27.1 of u-blox-ATCommands_Manual(UBX-13002752).pdf 00273 * for full details. By example: 00274 * 00275 * ftpOpCode ftpInPar 00276 * FTP_IP_ADDRESS "145.33.18.10" (the target FTP server IP address) 00277 * FTP_SERVER_NAME "www.ftpserver.com" (the target FTP server name) 00278 * FTP_USER_NAME "my_username" 00279 * FTP_PASSWORD "my_password" 00280 * FTP_ACCOUNT "my_account" (not required by most FTP servers) 00281 * FTP_INACTIVITY_TIMEOUT "60" (the default is 0, which means no timeout) 00282 * FTP_MODE "0" for active, "1" for passive (the default is 0) 00283 * FTP_SERVER_PORT "25" (default is port 21) 00284 * FTP_SECURE "0" for no security, "1" for SFTP (the default is 0) 00285 * 00286 * @param ftpOpCode the FTP operation code. 00287 * @param ftpInPar the FTP input parameter. 00288 * @return true if successful, false otherwise. 00289 */ 00290 bool ftpSetPar(FtpOpCode ftpOpCode, const char * ftpInPar); 00291 00292 /** Perform an FTP command. 00293 * 00294 * Connect() must have been called previously to establish a data 00295 * connection. 00296 * 00297 * See section 27.2 of u-blox-ATCommands_Manual(UBX-13002752).pdf 00298 * for full details. By example, it works like this: 00299 * 00300 * ftpCmd file1 file2 buf len offset 00301 * FTP_LOGOUT N/A N/A N/A N/A N/A 00302 * FTP_LOGIN N/A N/A N/A N/A N/A 00303 * FTP_DELETE_FILE "the_file" N/A N/A N/A N/A 00304 * FTP_RENAME_FILE "old_name" "new_name" N/A N/A N/A 00305 * FTP_GET_FILE "the_file" Note 1 N/A N/A 0 - 1 (Notes 2 & 3) 00306 * FTP_PUT_FILE "the_file" Note 1 N/A N/A 0 - 65535 (Notes 2 & 4 & 5) 00307 * FTP_CD "dir1\dir2" N/A N/A N/A N/A 00308 * FTP_MKDIR "newdir" N/A N/A N/A N/A 00309 * FTP_RMDIR "dir" N/A N/A N/A N/A 00310 * FTP_FILE_INFO "the_path" N/A Note 6 N/A 00311 * FTP_LS "the_path" N/A Note 6 N/A 00312 * FTP_FOTA_FILE "the_file" N/A Note 7 N/A 00313 * 00314 * Note 1: for this case, file2 is the name that the file should be 00315 * given when it arrives (in the modem file system for a GET, at the FTP 00316 * server for a PUT); if set to NULL then file1 is used. 00317 * Note 2: the file will placed into the modem file system for the 00318 * GET case (and can be read with readFile()), or must already be in the 00319 * modem file system, (can be written using writeFile()) for the PUT case. 00320 * Note 3: if offset is 1 then, where supported, the FTP GET 00321 * will be continued from the point it previously stopped. 00322 * Note 4: if the file already exists in the modem file system some 00323 * modems will return an error. It is up to the caller to ensure that 00324 * the file does not exist before the FTP PUT operation. 00325 * Note 5: where supported, offset is the position in the file to continue 00326 * the FTP PUT from. 00327 * Note 6: buf should point to the location where the file info 00328 * or directory listing is to be stored and len should be the maximum 00329 * length that can be stored. 00330 * Note 7: a hex string representing the MD5 sum of the FOTA file will be 00331 * stored at buf; len must be at least 32 as an MD5 sum is 16 bytes. 00332 * FTP_FOTA_FILE is not supported on SARA-U2. 00333 * Note 8: FTP_GET_DIRECT and FTP_PUT_DIRECT are not supported by 00334 * this driver. 00335 * 00336 * @param ftpCmd the FTP command. 00337 * @param file1 the first file name if required (NULL otherwise). 00338 * @param file2 the second file name if required (NULL otherwise). 00339 * @param buf pointer to a buffer, required for FTP_DIRECT mode 00340 * and FTP_LS only. 00341 * @param len the size of buf. 00342 * @param continue if true then attempt to continue a download that 00343 * was previously interrupted. 00344 * @return NULL if successful, otherwise a pointer to 00345 * a Error struct containing the error class and error 00346 * code, see section Appendix A.B of 00347 * u-blox-ATCommands_Manual(UBX-13002752).pdf for details. 00348 */ 00349 Error *ftpCommand(FtpCmd ftpCmd, const char* file1 = NULL, const char* file2 = NULL, 00350 char* buf = NULL, int len = 0, int offset = 0); 00351 00352 /********************************************************************** 00353 * PUBLIC: Cell Locate 00354 **********************************************************************/ 00355 00356 /** Which form of Cell Locate sensing to use. 00357 */ 00358 typedef enum { 00359 CELL_LAST, 00360 CELL_GNSS, 00361 CELL_LOCATE, 00362 CELL_HYBRID 00363 } CellSensType; 00364 00365 /** Types of Cell Locate response. 00366 */ 00367 typedef enum { 00368 CELL_DETAILED = 1, 00369 CELL_MULTIHYP = 2 00370 } CellRespType; 00371 00372 /** Cell Locate data. 00373 */ 00374 typedef struct { 00375 volatile bool validData; //!< Flag for indicating if data is valid. 00376 volatile struct tm time; //!< GPS Timestamp. 00377 volatile float longitude; //!< Estimated longitude, in degrees. 00378 volatile float latitude; //!< Estimated latitude, in degrees. 00379 volatile int altitude; //!< Estimated altitude, in meters^2. 00380 volatile int uncertainty; //!< Maximum possible error, in meters. 00381 volatile int speed; //!< Speed over ground m/s^2. 00382 volatile int direction; //!< Course over ground in degrees. 00383 volatile int verticalAcc; //!< Vertical accuracy, in meters^2. 00384 volatile CellSensType sensor; //!< Sensor used for last calculation. 00385 volatile int svUsed; //!< number of satellite used. 00386 } CellLocData; 00387 00388 /** Configure the Cell Locate TCP aiding server. 00389 * 00390 * Connect() must have been called previously to establish 00391 * a data connection. 00392 * 00393 * @param server_1 host name of the primary MGA server. 00394 * @param server_2 host name of the secondary MGA server. 00395 * @param token authentication token for MGA server access. 00396 * @param days the number of days into the future the off-line 00397 * data for the u-blox 7. 00398 * @param period the number of weeks into the future the off-line 00399 * data for u-blox M8. 00400 * @param resolution resolution of off-line data for u-blox M8: 1 every 00401 * day, 0 every other day. 00402 * @return true if the request is successful, otherwise false. 00403 */ 00404 bool cellLocSrvTcp(const char* token, const char* server_1 = "cell-live1.services.u-blox.com", 00405 const char* server_2 = "cell-live2.services.u-blox.com", 00406 int days = 14, int period = 4, int resolution = 1); 00407 00408 /** Configure Cell Locate UDP aiding server. 00409 * 00410 * Connect() must have been called previously to establish 00411 * a data connection. 00412 * 00413 * @param server_1 host name of the primary MGA server. 00414 * @param port server port. 00415 * @param latency expected network latency in seconds from 0 to 10000 milliseconds. 00416 * @param mode Assist Now management, mode of operation: 00417 * 0 data downloaded at GNSS power up, 00418 * 1 automatically kept alive, manual download. 00419 * @return true if the request is successful, otherwise false. 00420 */ 00421 bool cellLocSrvUdp(const char* server_1 = "cell-live1.services.u-blox.com", 00422 int port = 46434, int latency = 1000, int mode = 0); 00423 00424 /** Configure Cell Locate location sensor. 00425 * 00426 * @param scanMode network scan mode: 0 normal, 1 deep scan. 00427 * @return true if the request is successful, otherwise false. 00428 */ 00429 bool cellLocConfig(int scanMode); 00430 00431 /** Request a one-shot Cell Locate. 00432 * 00433 * This function is non-blocking, the result is retrieved using cellLocGetxxx. 00434 * 00435 * Note: none of the CellLocate methods switch on the GNSS receiver chip. 00436 * That should be done by instantiating the GnssSerial or GnssI2C classes and 00437 * calling the init() method. 00438 * 00439 * Note: during the location process, unsolicited result codes will be returned 00440 * by the modem indicating progress and potentially flagging interesting errors. 00441 * In order to see these errors, instantiate this class with debugOn set to true. 00442 * 00443 * @param sensor sensor selection. 00444 * @param timeout timeout period in seconds (1 - 999). 00445 * @param accuracy target accuracy in meters (1 - 999999). 00446 * @param type detailed or multi-hypothesis. 00447 * @param hypothesis maximum desired number of responses from CellLocate (up to 16), 00448 * must be 1 if type is CELL_DETAILED. 00449 * @return true if the request is successful, otherwise false. 00450 */ 00451 bool cellLocRequest(CellSensType sensor, int timeout, int accuracy, 00452 CellRespType type = CELL_DETAILED, int hypothesis = 1); 00453 00454 /** Get a position record. 00455 * 00456 * @param data pointer to a CellLocData structure where the location will be put. 00457 * @param index of the position to retrieve. 00458 * @return true if data has been retrieved and copied, false otherwise. 00459 */ 00460 bool cellLocGetData(CellLocData *data, int index = 0); 00461 00462 /** Get the number of position records received. 00463 * 00464 * @return number of position records received. 00465 */ 00466 int cellLocGetRes(); 00467 00468 /** Get the number of position records expected to be received. 00469 * 00470 * @return number of position records expected to be received. 00471 */ 00472 int cellLocGetExpRes(); 00473 00474 protected: 00475 00476 /********************************************************************** 00477 * PROTECTED: HTTP 00478 **********************************************************************/ 00479 00480 /** Check for timeout. 00481 */ 00482 #define TIMEOUT(t, ms) ((ms != TIMEOUT_BLOCKING) && (ms < t.read_ms())) 00483 00484 /** Check for a valid profile. 00485 */ 00486 #define IS_PROFILE(p) (((p) >= 0) && (((unsigned int) p) < (sizeof(_httpProfiles)/sizeof(_httpProfiles[0]))) \ 00487 && (_httpProfiles[p].modemHandle != HTTP_PROF_UNUSED)) 00488 00489 /** Management structure for HTTP profiles. 00490 * 00491 * It is possible to have up to 4 different HTTP profiles (LISA-C200, LISA-U200 and SARA-G350) having: 00492 * 00493 * @param handle the current HTTP profile is in handling state or not (default value is HTTP_ERROR). 00494 * @param timeout the timeout for the current HTTP command. 00495 * @param pending the status for the current HTTP command (in processing state or not). 00496 * @param cmd the code for the current HTTP command. 00497 * @param result the result for the current HTTP command once processed. 00498 */ 00499 typedef struct { 00500 int modemHandle; 00501 int timeout; 00502 volatile bool pending; 00503 volatile int cmd; 00504 volatile int result; 00505 Error httpError; 00506 } HttpProfCtrl; 00507 00508 /** The HTTP profile storage. 00509 */ 00510 HttpProfCtrl _httpProfiles[4]; 00511 00512 /** Callback to capture the response to an HTTP command. 00513 */ 00514 void UUHTTPCR_URC(); 00515 00516 /** Find a profile with a given handle. If no handle is given, find the next 00517 * free profile. 00518 * 00519 * @param modemHandle the handle of the profile to find. 00520 * @return the profile handle or negative if not found/created. 00521 */ 00522 int findProfile(int modemHandle = HTTP_PROF_UNUSED); 00523 00524 /** Helper function to get a HTTP command as a text string, useful 00525 * for debug purposes. 00526 * 00527 * @param httpCmdCode the HTTP command. 00528 * @return HTTP command in string format. 00529 */ 00530 const char* getHttpCmd(HttpCmd httpCmd); 00531 00532 /********************************************************************** 00533 * PROTECTED: FTP 00534 **********************************************************************/ 00535 00536 /** Unused FTP op code marker. 00537 */ 00538 #define FTP_OP_CODE_UNUSED -1 00539 00540 /** The FTP timeout in milliseconds. 00541 */ 00542 int _ftpTimeout; 00543 00544 /** A place to store the FTP op code for the last result. 00545 */ 00546 volatile int _lastFtpOpCodeResult; 00547 00548 /** A place to store the last FTP result. 00549 */ 00550 volatile int _lastFtpResult; 00551 00552 /** A place to store the last FTP op code for data response. 00553 */ 00554 volatile int _lastFtpOpCodeData; 00555 00556 /** A place to store data returns from an FTP operation. 00557 */ 00558 char * _ftpBuf; 00559 00560 /** The length of FTP data that can be stored (at _ftpBuf). 00561 */ 00562 int _ftpBufLen; 00563 00564 /** storage for the last FTP error 00565 */ 00566 Error _ftpError; 00567 00568 /** Callback to capture the result of an FTP command. 00569 */ 00570 void UUFTPCR_URC(); 00571 00572 /** Callback to capture data returned from an FTP command. 00573 */ 00574 void UUFTPCD_URC(); 00575 00576 /** Helper function to get an FTP command as a text string, useful 00577 * for debug purposes. 00578 * 00579 * @param ftpCmdCode the FTP command. 00580 * @return FTP command in string format. 00581 */ 00582 const char * getFtpCmd(FtpCmd ftpCmd); 00583 00584 /********************************************************************** 00585 * PROTECTED: Cell Locate 00586 **********************************************************************/ 00587 00588 /** The maximum number of hypotheses 00589 */ 00590 #define CELL_MAX_HYP (16 + 1) 00591 00592 /** Received positions. 00593 */ 00594 volatile int _locRcvPos; 00595 00596 /** Expected positions. 00597 */ 00598 volatile int _locExpPos; 00599 00600 /** The Cell Locate data. 00601 */ 00602 CellLocData _loc[CELL_MAX_HYP]; 00603 00604 /** Buffer for the URC to work with 00605 */ 00606 char urcBuf[128]; 00607 00608 /** Callback to capture +UULOCIND. 00609 */ 00610 void UULOCIND_URC(); 00611 00612 /** Callback to capture +UULOC. 00613 */ 00614 void UULOC_URC(); 00615 }; 00616 00617 #endif // _UBLOX_AT_CELLULAR_INTERFACE_EXT_ 00618
Generated on Tue Jul 12 2022 21:43:58 by 1.7.2