2015-08-28 17:05:39 -06:00
|
|
|
/*
|
|
|
|
* Author: Jon Trulson <jtrulson@ics.com>
|
|
|
|
* Copyright (c) 2015 Intel Corporation.
|
|
|
|
*
|
2019-07-30 19:41:32 -07:00
|
|
|
* This program and the accompanying materials are made available under the
|
|
|
|
* terms of the The MIT License which is available at
|
|
|
|
* https://opensource.org/licenses/MIT.
|
2015-08-28 17:05:39 -06:00
|
|
|
*
|
2019-07-30 19:41:32 -07:00
|
|
|
* SPDX-License-Identifier: MIT
|
2015-08-28 17:05:39 -06:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include <iostream>
|
2017-08-30 15:00:29 -07:00
|
|
|
|
2016-09-13 12:12:50 -07:00
|
|
|
#include "gprs.hpp"
|
2017-08-30 15:00:29 -07:00
|
|
|
#include "upm_utilities.h"
|
2015-08-28 17:05:39 -06:00
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
using namespace upm;
|
|
|
|
|
2017-08-30 15:00:29 -07:00
|
|
|
void
|
|
|
|
printUsage(char* progname)
|
2015-08-28 17:05:39 -06:00
|
|
|
{
|
2017-08-30 15:00:29 -07:00
|
|
|
cout << "Usage: " << progname << " [AT command]" << endl;
|
|
|
|
cout << endl;
|
|
|
|
|
|
|
|
cout << "If an argument is supplied on the command line, that argument is" << endl;
|
|
|
|
cout << "sent to the module and the response is printed out." << endl;
|
|
|
|
cout << endl;
|
|
|
|
cout << "If no argument is used, then the manufacturer and the current" << endl;
|
|
|
|
cout << "saved profiles are queried and the results printed out." << endl;
|
|
|
|
cout << endl;
|
|
|
|
cout << endl;
|
2015-08-28 17:05:39 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
// simple helper function to send a command and wait for a response
|
2017-08-30 15:00:29 -07:00
|
|
|
void
|
|
|
|
sendCommand(upm::GPRS& sensor, string cmd)
|
2015-08-28 17:05:39 -06:00
|
|
|
{
|
2017-08-30 15:00:29 -07:00
|
|
|
// commands need to be terminated with a carriage return
|
|
|
|
cmd += "\r";
|
|
|
|
|
|
|
|
sensor.writeDataStr(cmd);
|
|
|
|
|
|
|
|
// wait up to 1 second
|
|
|
|
if (sensor.dataAvailable(1000)) {
|
|
|
|
cout << "Returned: " << sensor.readDataStr(1024) << endl;
|
|
|
|
} else {
|
|
|
|
cerr << "Timed out waiting for response" << endl;
|
2015-08-28 17:05:39 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-08-30 15:00:29 -07:00
|
|
|
int
|
|
|
|
main(int argc, char** argv)
|
2015-08-28 17:05:39 -06:00
|
|
|
{
|
2017-08-30 15:00:29 -07:00
|
|
|
//! [Interesting]
|
2015-08-28 17:05:39 -06:00
|
|
|
|
2017-08-30 15:00:29 -07:00
|
|
|
// Instantiate a GPRS Module on UART 0
|
|
|
|
upm::GPRS sensor(0);
|
2015-08-28 17:05:39 -06:00
|
|
|
|
2017-08-30 15:00:29 -07:00
|
|
|
// Set the baud rate, 19200 baud is the default.
|
2017-09-28 18:23:28 -07:00
|
|
|
if (sensor.setBaudRate(19200) != 0) {
|
2017-08-30 15:00:29 -07:00
|
|
|
cerr << "Failed to set tty baud rate" << endl;
|
|
|
|
return 1;
|
2015-08-28 17:05:39 -06:00
|
|
|
}
|
|
|
|
|
2017-08-30 15:00:29 -07:00
|
|
|
printUsage(argv[0]);
|
2015-08-28 17:05:39 -06:00
|
|
|
|
2017-08-30 15:00:29 -07:00
|
|
|
if (argc > 1) {
|
|
|
|
cout << "Sending command line argument (" << argv[1] << ")..." << endl;
|
|
|
|
sendCommand(sensor, argv[1]);
|
|
|
|
} else {
|
|
|
|
// query the module manufacturer
|
|
|
|
cout << "Querying module manufacturer (AT+CGMI)..." << endl;
|
|
|
|
sendCommand(sensor, "AT+CGMI");
|
2015-08-28 17:05:39 -06:00
|
|
|
|
2017-08-30 15:00:29 -07:00
|
|
|
upm_delay(1);
|
2015-08-28 17:05:39 -06:00
|
|
|
|
2017-08-30 15:00:29 -07:00
|
|
|
// query the saved profiles
|
|
|
|
cout << "Querying the saved profiles (AT&V)..." << endl;
|
|
|
|
sendCommand(sensor, "AT&V");
|
2015-08-28 17:05:39 -06:00
|
|
|
|
2017-08-30 15:00:29 -07:00
|
|
|
// A comprehensive list is available from the datasheet at:
|
|
|
|
// http://www.seeedstudio.com/wiki/images/7/72/AT_Commands_v1.11.pdf
|
2015-08-28 17:05:39 -06:00
|
|
|
}
|
|
|
|
|
2017-08-30 15:00:29 -07:00
|
|
|
//! [Interesting]
|
2015-08-28 17:05:39 -06:00
|
|
|
|
2017-08-30 15:00:29 -07:00
|
|
|
return 0;
|
|
|
|
}
|