#define GPS_DEV_SLOW_UPDATE_RATE (10)
#define GPS_DEV_HIGH_UPDATE_RATE (1)
-static void gps_dev_init(int fd);
-static void gps_dev_deinit(int fd);
-static void gps_dev_start(int fd);
-static void gps_dev_stop(int fd);
-
/*****************************************************************/
/*****************************************************************/
/***** *****/
}
-static void
-nmea_reader_set_callback( NmeaReader* r, gps_location_callback cb )
-{
- r->callback = cb;
- if (cb != NULL && r->fix.flags != 0) {
- D("%s: sending latest fix to new callback", __FUNCTION__);
- r->callback( &r->fix );
- r->fix.flags = 0;
- }
-}
-
-
static int
nmea_reader_update_time( NmeaReader* r, Token tok )
{
}
-static int
-epoll_deregister( int epoll_fd, int fd )
-{
- int ret;
- do {
- ret = epoll_ctl( epoll_fd, EPOLL_CTL_DEL, fd, NULL );
- } while (ret < 0 && errno == EINTR);
- return ret;
-}
-
-
/* this is the main thread, it waits for commands from gps_state_start/stop and,
* when started, messages from the QEMU GPS daemon. these are simple NMEA sentences
* that must be parsed to be converted into GPS fixes sent to the framework
int fd = events[ne].data.fd;
if (fd == control_fd) {
- char cmd = 255;
+ char cmd = -1;
int ret;
D("GPS control fd event");
do {
/*****************************************************************/
/*****************************************************************/
-static void gps_dev_power(int state)
-{
- return;
-}
-
-
-static void gps_dev_send(int fd, char *msg)
-{
- int i, n, ret;
-
- i = strlen(msg);
-
- n = 0;
-
- do {
-
- ret = write(fd, msg + n, i - n);
-
- if (ret < 0 && errno == EINTR) {
- continue;
- }
-
- n += ret;
-
- } while (n < i);
-}
-
-
-static unsigned char gps_dev_calc_nmea_csum(char *msg)
-{
- unsigned char csum = 0;
- int i;
-
- for (i = 1; msg[i] != '*'; ++i) {
- csum ^= msg[i];
- }
-
- return csum;
-}
-
-
-static void gps_dev_set_nmea_message_rate(int fd, char *msg, int rate)
-{
- char buff[50];
- int i;
-
- sprintf(buff, "$PUBX,40,%s,%d,%d,%d,0*", msg, rate, rate, rate);
-
- i = strlen(buff);
-
- sprintf((buff + i), "%02x\r\n", gps_dev_calc_nmea_csum(buff));
-
- gps_dev_send(fd, buff);
-
- D("GPS sent to device: %s", buff);
-}
-
-
-static void gps_dev_set_baud_rate(int fd, int baud)
-{
- char buff[50];
- int i, u;
-
- for (u = 0; u < 3; ++u) {
-
- sprintf(buff, "$PUBX,41,%d,0003,0003,%d,0*", u, baud);
-
- i = strlen(buff);
-
- sprintf((buff + i), "%02x\r\n", gps_dev_calc_nmea_csum(buff));
-
- gps_dev_send(fd, buff);
-
- D("Sent to device: %s", buff);
-
- }
-}
-
-
-static void gps_dev_set_message_rate(int fd, int rate)
-{
-
- unsigned int i;
-
- char *msg[] = {
- "GGA", "GLL", "VTG",
- "GSA", "GSV", "RMC"
- };
-
- for (i = 0; i < sizeof(msg)/sizeof(msg[0]); ++i) {
- gps_dev_set_nmea_message_rate(fd, msg[i], rate);
- }
-
- return;
-}
-
-
-static void gps_dev_init(int fd)
-{
- gps_dev_power(1);
-
- return;
-}
-
-
-static void gps_dev_deinit(int fd)
-{
- gps_dev_power(0);
-}
-
-
-static void gps_dev_start(int fd)
-{
- // Set full message rate
- gps_dev_set_message_rate(fd, GPS_DEV_HIGH_UPDATE_RATE);
-
- D("GPS dev start initiated");
-}
-
-
-static void gps_dev_stop(int fd)
-{
- // Set slow message rate
- gps_dev_set_message_rate(fd, GPS_DEV_SLOW_UPDATE_RATE);
-
- D("GPS dev stop initiated");
-}
-
static int open_gps(const struct hw_module_t* module, char const* name, struct hw_device_t** device)
{
**
** Copyright 2006, The Android Open Source Project
** Copyright 2009, Michael Trimarchi <michael@panicking.kicks-ass.org>
-** Copyright 2011, Eduardo José Tagle <ejtagle@tutopia.com>
+** Copyright 2011, Eduardo José Tagle <ejtagle@tutopia.com>
**
** This program is free software; you can redistribute it and/or modify it under
** the terms of the GNU General Public License as published by the Free
return;
}
-static unsigned char calc_nmea_csum(char *msg)
-{
- unsigned char csum = 0;
- int i;
-
- for (i = 1; msg[i] != '*'; ++i) {
- csum ^= msg[i];
- }
-
- return csum;
-}
-
/*****************************************************************/
/*****************************************************************/
}
-static void dev_set_nmea_message_rate(int fd,const char *msg, int rate)
-{
-
- char buff[50];
- int i;
-
- sprintf(buff, "$PUBX,40,%s,%d,%d,%d,0*", msg, rate, rate, rate);
-
- i = strlen(buff);
-
- sprintf((buff + i), "%02x\r\n", calc_nmea_csum(buff));
-
- serial_write(fd, buff);
-
- D("gps sent to device: %s", buff);
-
- return;
-
-}
-
-static void dev_set_message_rate(int fd, int rate)
-{
-
- unsigned int i;
- static const char *msg[] = {
- "GGA", "GLL", "ZDA",
- "VTG", "GSA", "GSV",
- "RMC"
- };
-
- for (i = 0; i < sizeof(msg)/sizeof(msg[0]); ++i) {
- dev_set_nmea_message_rate(fd, msg[i], rate);
- }
-
- return;
-}
-
static void dev_start(int fd)
{
}
-static int epoll_deregister( int epoll_fd, int fd )
-{
- int ret;
- do {
- ret = epoll_ctl( epoll_fd, EPOLL_CTL_DEL, fd, NULL );
- } while (ret < 0 && errno == EINTR);
- return ret;
-}
-
static void gps_nmea_thread_cb( GpsState* state )
{
D("%s()", __FUNCTION__ );
if (fd == control_fd)
{
- char cmd = 255;
+ char cmd = -1;
int ret;
D("gps control fd event");
do {
agps_conn_open,
agps_conn_closed,
agps_conn_failed,
- agps_set_server
+ agps_set_server,
+ 0
};
.version_minor = 0,
.id = GPS_HARDWARE_MODULE_ID,
.name = "GPS Module",
- .author = "Eduardo José Tagle",
+ .author = "Eduardo José Tagle",
.methods = &gps_module_methods,
};