libgps_core.c
Functions:-The client interface library for the gpsd daemon.
Notes based on code of Mon Apr 5 21:38:06 2010 -0400
struct gps_data_t *gps_open(const char *host, const char *port)
Open a connection to a gps daemon.Try to
get a gps_data_t structure. If it fails, return
a NULL.Test for a specified host and/or port number,
using defaults if nothing is specified in the command line
invocation.Try to connect to the now defined socket; on
error, release the resources and return NULL. On success, initialise
an internal struct gps_data_t and return
the pointer to it.
struct gps_data_t *gps_open_r(const char *host, const char *port, struct gps_data_t *gpsdata)
Variant of gps_open() for when
re-entrancy is required. Initializes storage passed by the
caller.
int gps_close(struct gps_data_t *gpsdata)
Close the fd associated with the
gps_data_t structure and stash the
result.If there is a device id stored, NULL it and the
associated path.If the device list has any data in it,
free this and mark the number of available devices as
invalid.Free the gps_data_t
structure itself and return the stashed close()
result.
static void gps_unpack(char *buf, struct gps_data_t *gpsdata)
Keep looping through the data in
buf for JSON objects. Each time one is found,
analyze it and unpack it into the struct pointed at by gpsdata,
setting the gpsdata->set mask appropriately to indicate which data
is validThis function is intended for GPSD internal use
only and should not be considered a stable part oof the
API.
int gps_poll(struct gps_data_t *gpsdata)
Poll the daemon and if there is no data or an error,
return -1.If there is something to read, clear the
buffer, note the time as the received data time and the online time,
then unpack the data.If profiling is active, use the
received data time, the fix time and the present time to calculate
the decode time and the client receipt time.
int gps_send(struct gps_data_t *gpsdata, const char *fmt, ... )
Gather up the instructions to a
gpsd instance for information to return
and write them to the device.If the write fails, return
-1. This entry point is deprecated in favor of
gps_stream()
bool gps_waiting(struct gps_data_t *gpsdata)
Return a boolean indicating whether input data is waiting on
the daemon socket. Does not block.
int gps_stream(struct gps_data_t *gpsdata, unsigned int, void *d)
Set watch and policy flags. This evaluates the flag mask passed
as the second argument, composes a corresponding command in the GPSD
write protocol, and ships it to the daemon.
The following three functions are guarded by an #ifdef so they only compile if it is required to be able to test the library and set up a command line exerciser interface.
static void data_dump(struct gps_data_t *collect, time_t now)
A data dumper used when debugging. It outputs data according to the command line input data.
static void dumpline(struct gps_data_t *ud UNUSED, char *buf, size_t ulen UNUSED, int level UNUSED)
A simple call to UNIX puts().
int main(int argc, char *argv[])
A simple command line parser and endless loop to exercise the daemon when debugging.