 /*****************************************************/
 /*          ENTER your network parameters            */
var APN = "";
var USERNAME = "";
var PASSWORD = "";

var CLOUD_SECURE_PROVIDER = "https://maps.googleapis.com";
var CLOUD_PATH = "/maps/api/geocode";
var GOOGLE_API_KEY = "&key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
var GEO_FILTER ="&&result_type=street_address";
 /******************************************************/


 /******************************************************
  * Demo on BRISK L496
  * + C2C board
  *
  * Demo :
  *  Power on the modem
  *  Drive the modem
  *  Connect to cellular network for packet domain
  *  Geolocalization automatically starts 
  *
  *
  * Usage:
  * Load the code to espruino, then, start modem
  *  > QuectelStart() (or QuectelStart(true,false) for debug)
  * When you get an IP address, try the  inverse google maps geocoding API
  *  > sendGeoLoc()
  *
  * Create your positionning tracker, repeating the sending every 20 s for instance
  *  > var i=setInterval(sendGeoLoc, 20000)
   ******************************************************/

var gprs;

function SimSelect() {
  // SELECTING SIM (external slot)
  digitalWrite("A2",0);    //IO18, SIM select 0
  digitalWrite("C8",0);    //IO18
  digitalWrite("G10",0);   //IO18

  digitalWrite("A7",0);    //I08, SIM select 1
  digitalWrite("D10",0);   //IO8
}

function QuectelStart(debug_quectel, debug_at) {
  debug_quectel = debug_quectel || false;
  debug_at = debug_at || false;

  pinMode(D11, "input", true);
  pinMode(D12, "output", true);

  Serial3.setup(115200, { rx: D9, tx : D8, cts: D12 });
  
  SimSelect();

  console.log("Connecting to NW with Quectel UGxx module ... this may take few minutes");
  resetOptions = {
   rst: "A8",
   pwrkey: "A6",
   rst_active_level: 1,
   pwrkey_active_level: 0,
  };
  gprs = require('QUECTEL').connect(Serial3, resetOptions, function(err) {
    console.log("connecting...");
    if (err) throw err;
    setTimeout(doConnect,30000);
  });

  gprs.debug(debug_quectel, debug_at);

  gprs.initflowctrl(true);
  

}

function doConnect() {
  gprs.connect(APN, USERNAME, PASSWORD, function(err) {
    console.log("connected");
    if (err) throw err;
    gprs.getIP(print);

    gprs.geoLocStart(10000);
    

  });
}

function sendGeoLoc() {
  console.log("FreeMem : " + process.memory().free);
  
    var coord="";
  
    gprs.geoLocGet(function(coord) {
          console.log("longitude,latitude = " +coord);
    
          if (coord) {
            console.log("sending ...");

            var latlong = coord.split(",");
          
            var raw_http = CLOUD_SECURE_PROVIDER + CLOUD_PATH +"/json?"+ "latlng="+latlong[1]+","+latlong[0]+ GEO_FILTER + GOOGLE_API_KEY;

                //console.log(raw_command);
                require("http").get(raw_http, function(res) {
                  var contents = "";
                  res.on('data', function(d) { contents += d; });
                  res.on('close', function(d) { 
                        console.log("Connection closed");
                        console.log("full page content ---> "+contents);
                  });
                 });
          }
      });
}

setTimeout(QuectelStart, 100);
