g7ctrl v3.1.0 (march 2015)
**General notes for this release**
This release bring some notable new features:
1. Each connected client can now independently have different connected devices.
In previous releases all clients talked to the same device when issuing
commands and if one client changed the target the other clients were also
changed since the target device was a server setting.
2. The server can now manage several connected devices over USB and the
client can select which of the connected USB devices to talk to.
In addition when a USB device is connected the ID of the device is read
and first after the ID has been successfully read is the device available
3. The last feature that will allow the user to specify a proximity range for
when the location lookup should match an existing address. The proximity is
specified as a new value (in meters) in the config file.
Since the accuracy of the GPS is rarely better than 15 meters it is
un-necessary to send a request to Google if the location is only different
in the last digit or so in the received coordinates. The distance calculation
uses the "Haversine" method (Great circle) to calculate the distance between
4. Summary of new/modified commands introduced in this release
* .target - List/Set device target connected over GPRS
* .usb - List/Set device target connected on a USB port
* .ld - List all connected devices
* -lc - List all connected command clients
* get address - Return approx. street address for current location
* @@CMD(arg1,arg2, ...) New syntax to give non-interactive commands
User visible changes:
- Manual updated to RA13 to cover all new additions in 3.1.0
- A new command "get address" was introduced which will get the latest
location from the device as a street address.
- It is now possible to enter non-interactive commands with the syntax
The syntax is the exact same as how presets are specified. This makes
it faster to enter more complex command for experienced user by bypassing
the question/answer process when using the ordinary command entering process.
This is further documented in the manual.
. The new command ".target" replaces the old ".use" to specify which device
should receive the commands. This targets a device connected over GPRS
- The new server command ".usb" is used to specify which USB port to talk
to in case multiple devices are connected. It is also used to list devices
currently connected on USB
- The ".lc" behavior is modified to only list command connections
- The new server command ".ld" is used to list connected devices over both
USB and GPRS
- Each command client now have an individual connection state so each connected
client can talk to a different device
- Multiple USB devices can be connected and managed
- The device ID of connected devices over USB is read upon connection. NOTE
this also introduces a slight delay which also better indicates the time it
tales for the device to establish a USB serial simulation so the device ID
can be read back. It takes about 20s for the device to set up .
- Added "address_lookup_proximity" config setting to allow setting how close a
cache match must be in order to be considered a match for a cached street address.
- Allow multiple commands in the same string for batch shell processing with
"g7sh -e". Commands are separated with a ";" character
For example: g7sh -e ".ver;db size;db mailcsv;"
Commands with arguments are not yet supported.
- Updated documentation to reflect changes in 3.1.0. Updated troubleshooting
guide and some more code statistics in the technical appendix.
- Some minor esthetic updates:
- Extra blank line in reply after listing preset removed
- Extra blank line in reply after sending mail with exported db removed
- Title in mails sent on on new device connection and events harmonized
- Some minor updates of default values in the config file
- The timeout value for receiving command replies over GPRS was increased
since it sometimes take up to 30s to receive a reply.
- A number of theoretical buffer overruns was fixed (detected by Coverity scan)
- The translation to human readable text would always show "Off" for binary
- The translation of the device error code to human text was incorrect for the
case when the command name was not included in the reply (as the protocol
specification wrongly states it always should be.)
- On some occasions the assumption was made that basename() does not change
its argument (glibc - style since the code is built with _GNU_SOURCE defined).
Unfortunately this is an incorrect assumption if both libgen.h and string.h
is included in the same *.c file even if _GNU_SOURCE is defined!
- If the g7shell was terminated with Ctrl-C then the terminal could be left
in a confused state and require a "reset" due to readline() signal
handling not being properly cleaned up.
- A few minor spelling errors in comments and docs was fixed
Internal changes (visible for developers and packagers):
- The xstrsplitfields() function has changed behavior so that it will
preserve spaces in the split strings.
- Added buffer overrun checks in xstrsplitfields() for extra safety
- The signature for the geodetic distance calculations functions have been
updated to reflect there const'ness
- Renamed worker.[ch] -> socklistener.[ch]
- Some major refactoring in all command methods due to the need to include
the client context which is unique for each command thread.
- A new structure usb_conn_status have ben introduced to keep track of multiple