summaryrefslogtreecommitdiff
path: root/recipes-navigation/gpsd/gpsd/gpsd-default
blob: 46c64a358fa2cea8f90ca6d582a12a4512b1f281 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
ENABLED="yes"
#GPSD_SOCKET="/var/run/gpsd.sock"
GPSD_SOCKET=""
GPSD_OPTIONS="-n -D 1" 

# Conduit 0.1 GPS devices
GPS_LINE=/dev/gps0
GPS_PPS=/dev/pps0

# Highest speed permitted by uBlox.
GPS_BAUD=115200

# Use this if you must use a specific pps
# that does not exist prior to gpsd running.
# GPS_DEVICES="/dev/gps1 /dev/pps1"

GPS_FIXFILE=/var/run/gpsfix

# GPSD Json TPV object, mode field.
# See: http://www.catb.org/gpsd/gpsd_json.html
#
# 0 Unknown
# 1 No fix
# 2 2D fix
# 3 3D fix
GPSFIX="3"

# U-Blox defaults to 9600.  If the
# default speed is not set before changing
# the baud rate, this does not work
# except right after a boot when the speed
# is 9600 baud.
#
# 115200 baud is preferred to reduce the CPU
# load.  Also, u-blox mode is preferred to
# nmea, as it is more efficient.
#
# We check for U-Blox first, because
# we do not set the baud rate of other
# GPS types.
# 
# This gpsctl does not always work, because
# the line speed might be wrong, so if we
# fail, we change the baud rate and try again.
#
# There should only be two speeds, 115200
# or 9600.
#
# If the line speed is already 115200, we
# should not need to change the baud rate.
#
function SET_GPS_SPEED {
if [[ $(cat /run/config/gpstype) == u-blox ]] ; then
    logger -st gpsd -p daemon.info "Attempting to set baud rate to ${GPS_BAUD}"
    out=$(gpsctl -T 20 -t u-blox -s $GPS_BAUD -b -f $GPS_LINE)
    rslt=$?
    if ((rslt == 0)) && [[ $out =~ ${GPS_BAUD}[[:space:]]baud\. ]] ; then
        logger -st gpsd -p daemon.info "GPS serial port speed is $GPS_BAUD."
        return 0
    fi
    
    if ((rslt != 0)) ; then
        logger -st gpsd -p daemon.warning "Unable to set read the GPS, try again."
        speed=$(stty -F $GPS_LINE)
        if ((speed == GPS_BAUD)) ; then
            stty -F $GPS_LINE 9600
        else
            stty -F $GPS_LINE 115200
        fi
    fi

    out=$(gpsctl -T 20 -t u-blox -s $GPS_BAUD -b -f $GPS_LINE)
    rslt=$?
    if ((rslt == 0)) && [[ $out =~ ${GPS_BAUD}[[:space:]]baud\. ]] ; then
        logger -st gpsd -p daemon.info "GPS serial port speed is $GPS_BAUD."
        return 0
    fi

    if ((rslt != 0)) ; then
        speed=$(stty -F $GPS_LINE)
        if ((speed == GPS_BAUD)) ; then
            stty -F $GPS_LINE 9600
        else
            stty -F $GPS_LINE ${GPS_BAUD}
        fi
    fi
    
    out=$(gpsctl -T 20 -t u-blox -s $GPS_BAUD -b -f $GPS_LINE)
    rslt=$?
    if ((rslt == 0)) && [[ $out =~ ${GPS_BAUD}[[:space:]]baud\. ]] ; then
        logger -st gpsd -p daemon.info "GPS serial port speed is $GPS_BAUD."
        return 0
    fi

    if ((rslt != 0)) ; then
        speed=$(stty -F $GPS_LINE)
        if ((speed == GPS_BAUD)) ; then
            stty -F $GPS_LINE 9600
        else
            stty -F $GPS_LINE ${GPS_BAUD}
        fi
    fi
    out=$(gpsctl -T 20 -t u-blox -s $GPS_BAUD -b -f $GPS_LINE)
    rslt=$?
    if ((rslt == 0)) && [[ $out =~ ${GPS_BAUD}[[:space:]]baud\. ]] ; then
      logger -st gpsd -p daemon.info "GPS serial port speed is $GPS_BAUD."
      return 0
    fi
    logger -st gpsd -p daemon.err "Cannot set GPS serial port speed, speed is $GPS_BAUD."
fi  # End of U-Blox GPS type
}