aboutsummaryrefslogtreecommitdiffstats
path: root/api/gps-service-geolocation-with-states.yml
blob: cd6a03e8fe80ef612ccd23ba92bde367cb0365fd (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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
afbidl: "0.1"

info:
  title: Service for geolocation
  description:
        GPS service reports current WGS84 coordinates from GNSS devices
        via the gpsd application.
  version: "0.1"
  author: AGL
  maintainer: Scott Rifenbark
  homepage: https://doc.automotivelinux.org/...

generators:
    genskel:
        scope: static
        prefix: req_
        postfix: _cb
        init: init_gps
    #same model as book yaml
    doc:
        id: gps-api
        keywords: gps
        author:
        version:
        src_prefix: api-gps
        chapters:
        - name: Abstract
          url: abstract.md
        - name: User Guide
          url: userguide.md

api:
    name: gps

    verbs:

        subscribe:
            description: subscribe to gps/gnss events
            request: $/schemas/subscription-desc
            reply:
                success:
                    schema: $/schemas/none
                    set-state:
                        listening: yes

        unsubscribe:
            description: unsubscribe to gps/gnss events
            request: $/schemas/subscription-desc
            reply:
                success:
                    schema: $/schemas/none
                    set-state:
                        listening: no

        location:
            description: get current gps/gnss coordinates
            request: $/schemas/none
            reply:
                success: $/schemas/location
                _: An error can be returned when the service isn't ready

        record:
            description: |
                Entering *record* mode you must send **{"state": "on"}** with the **record**
                verb which will have a JSON response of **{"filename": "gps_YYYYMMDD_hhmm.log"}**
                pointing to log under *app-data/agl-service-gps*

                Now to enter *replaying* mode you must symlink or copy a GPS dump to
                *app-data/agl-service-gps/recording.log* and restart the service.
                From then on out the previously recorded GPS data will loop infinitely
                which is useful for testing or demonstration purposes.
            request: $/schemas/record/request
            reply:
                success:
                    schema: $/schemas/record/reply
                    set-state:
                        recording: yes
                _: An error can be returned when the service isn't ready

    events:
        location:
            schema: $/schemas/location
            when-state:
                listening: yes

    state-machines:
        listening:
            states: [ no, yes ]
            initial: no
        recording:
            states: [ no, yes ]
            initial: no

# Follow JsonSchema specification (https://json-schema.org/)
schemas:
    subscription-desc:
        title: Description of the event subscribed or unsubscribed
        type: object
        properties:
            value: { enum: [ location ] }
        required: [ value ]

    location:
        title: the location
        type: object
        properties:
            altitude:
                title: the altitude in meters above the normal geoide
                type: number
                minimum: -20000
                maximum: 20000
            latitude:
                title: the latitude in degrees
                type: number
                minimum: -90
                maximum: 90
            longitude:
                title: the longitude in degrees
                type: number
                minimum: -180
                maximum: 180
            speed:
                title: the speed in meter per seconds m/s
                type: number
                minimum: 0
                maximum: 6000
            track:
                title: the heading in degrees
                type: number
                minimum: 0
                maximum: 360
            timestamp:
                title: time stamp of the location as a ISO8601 date
                type: string #ISO8601
                pattern: \d{4,}-[01][0-9]-[0-3][0-9]T[012][0-9]:[0-5][0-9]:[0-5][0-9].*

    record:
        request:
            type: object
            properties:
                state: { const: "on" }
            required: [ state ]

        reply:
            type: object
            properties:
                filename:
                    title: the name of the file that records the data of format gps_YYYYMMDD_hhmm.log
                    type: string
                    pattern: gps_\d{4}\d{2}\d{2}_\d{2}\d{2}.log
            required: [ filename ]

    none:
        title: no value, just null
        const: null