This is an old revision of the document!
The built-in GPS Function is TCP/IP only. If you want to retrieve the GPS NMEA frames over the serial interface of a Netmodule Router you can use this SDK script.
This Script connects to the GPS server via tcp. T
The default serial parameters for GPS are 4800 8N1 (8 databit, no parity, 1 stop bit, no flow controll). This parameter can be configured at the begining of the script. Please use if possible a higher data rate e.g. 115200.
To use this script you need to enable the GNSS Interface on the Router to your needs. Please use the “raw-mode” with this SDK script.
Also assign the serial interface to the SDK
Detailed step by step instructions how to install a sdk script can be found on this wiki page
Please combine this script with the “system-startup” trigger to a job
This script does not need any configuration, but you can define the serial parameter to your needs:
/* Serial Baud Rate 4800, 9600, 19200, 38400, 57600, 115200 */ SER_SPEED=4800; /* number of data bits (5, 6, 7, 8) */ SER_DATABIT=8; /* number of stop bits (1, 2) */ SER_STOPBIT=1; /* parity (0=no parity, 1=odd parity, 2=even parity) */ SER_PARITY=0; /* flow control (0=none, 1=xon/xoff, 2=hardware) */ SER_FLOW=0; /* name of the Serial Interface (Only changed if your device has more then one serial Interface (NB3710) */ DEV = "SERIAL1";
To be sure the script is running you can take a look on the System Log and watch for outputs like:
Apr 23 00:53:41 NB2700 user.info sdkhost[2283]: testrun: starting serial Apr 23 00:53:42 NB2700 user.info sdkhost[2283]: testrun: Connecting to GPS daemon Apr 23 00:53:42 NB2700 user.info sdkhost[2283]: testrun: Requesting raw NMEA stream Apr 23 00:53:42 NB2700 user.info sdkhost[2283]: testrun: Successfully connected to GPS daemon Apr 23 00:53:42 NB2700 user.info sdkhost[2283]: testrun: Processing NMEA data Apr 23 00:53:42 NB2700 user.info sdkhost[2283]: testrun: Unable to send message to via Serial Apr 23 00:54:08 NB2700 user.info sdkhost[2283]: testrun: starting serial Apr 23 00:54:09 NB2700 user.info sdkhost[2283]: testrun: Connecting to GPS daemon Apr 23 00:54:09 NB2700 user.info sdkhost[2283]: testrun: Requesting raw NMEA stream Apr 23 00:54:09 NB2700 user.info sdkhost[2283]: testrun: Successfully connected to GPS daemon Apr 23 00:54:09 NB2700 user.info sdkhost[2283]: testrun: Processing NMEA data
/* DESC: This script sends the local GPS NMEA stream (incl. serial/checksum) to a remote UDP server. * Copyright (C) 2013-2015 NetModule AG, Switzerland */ /* Options to configure by user*/ SER_SPEED = 4800; /* Serial Baud Rate 4800, 9600, 19200, 38400, 57600, 115200 */ SER_DATABIT = 8; /* number of data bits (5, 6, 7, 8) */ SER_STOPBIT = 1; /* number of stop bits (1, 2) */ SER_PARITY = 0; /* parity (0=no parity, 1=odd parity, 2=even parity) */ SER_FLOW = 0; /* flow control (0=none, 1=xon/xoff, 2=hardware) */ DEV = "SERIAL1"; /* name of the Serial Interface */ /* GPS Deamon Parameters */ HOST = "127.0.0.1"; /* local host */ PORT = nb_config_get("gpsd.0.port"); void usage() { nb_syslog("Usage: gps2serial.are"); exit(1); } int start_serial() { /* set attributes */ if ((rc = nb_serial_setattr(DEV, SER_SPEED, SER_DATABIT, SER_STOPBIT, SER_PARITY, SER_FLOW)) != 0) { nb_syslog("ERROR: unable to set serial attributes (rc %d) to %s", rc, DEV); return -1; } /* open serial port */ if ((fd = nb_serial_open(DEV)) < 0) { nb_syslog("ERROR: can't open serial port %s", DEV); return -1; return fd; } int connect_gpsd() /* tries infinetively to connect to gpsd - socket returned */ { while (1) { sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock < 0) nb_syslog("Unable to create socket"); else if (connect(sock, HOST, PORT) < 0){ nb_syslog("Could not connect to GPS daemon"); close(sock); } else { nb_syslog("Successfully connected to GPS daemon"); return sock; } sleep(10); } /* no return */ } nb_syslog("starting serial"); serial_fd = start_serial(); if (serial_fd < 0 ) { nb_syslog("Could not start serial, exiting"); exit(1); } gpsd = connect_gpsd(); nb_syslog("Processing NMEA data"); while (1) { /* wait for socket data */ if ((rv = select(gpsd, 3)) == 0) continue; if (rv < 0) { nb_syslog("Receive failed, re-connecting to GPS daemon"); if ((gpsd = connect_gpsd()) < 0) exit(3); /* can't connect */ continue; } data = recv(gpsd); len = strlen(data); if (write(serial_fd, data, len) != len) nb_syslog("Unable to send message via Serial, data %s, len: %i", data, len); } close(gpsd); close(serial_fd); exit(4);