nanogps2  2.0.0.0
nanogps2.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright (c) 2019, MikroElektronika - www.mikroe.com
4  * All rights reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 
33 // ----------------------------------------------------------------------------
34 
35 #ifndef NANOGPS2_H
36 #define NANOGPS2_H
37 
38 #include "mikrosdk_version.h"
39 
40 #ifdef __GNUC__
41 #if mikroSDK_GET_VERSION < 20800ul
42 #include "rcu_delays.h"
43 #else
44 #include "delays.h"
45 #endif
46 #endif
47 
48 #include "drv_digital_out.h"
49 #include "drv_digital_in.h"
50 #include "drv_uart.h"
51 
52 // -------------------------------------------------------------- PUBLIC MACROS
62 #define NANOGPS2_MAP_MIKROBUS( cfg, mikrobus ) \
63  cfg.tx_pin = MIKROBUS( mikrobus, MIKROBUS_TX ); \
64  cfg.rx_pin = MIKROBUS( mikrobus, MIKROBUS_RX ); \
65  cfg.wkp = MIKROBUS( mikrobus, MIKROBUS_AN ); \
66  cfg.en = MIKROBUS( mikrobus, MIKROBUS_RST ); \
67  cfg.cts = MIKROBUS( mikrobus, MIKROBUS_CS ); \
68  cfg.fon = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
69  cfg.rts = MIKROBUS( mikrobus, MIKROBUS_INT )
70 
76 #define NANOGPS2_RETVAL uint8_t
77 
78 #define NANOGPS2_OK 0x00
79 #define NANOGPS2_INIT_ERROR 0xFF
80 
86 #define NANOGPS2_NEMA_GNGGA 1
87 #define NANOGPS2_NEMA_GPGLL 3
88 #define NANOGPS2_NEMA_GNGGA_NUM_ELEMENT 15
89 #define NANOGPS2_NEMA_GPGLL_NUM_ELEMENT 5
90 
96 #define NANOGPS2_GNGGA_TIME 1
97 #define NANOGPS2_GNGGA_LATITUDE 2
98 #define NANOGPS2_GNGGA_LATITUDE_SIDE 3
99 #define NANOGPS2_GNGGA_LONGITUDE 4
100 #define NANOGPS2_GNGGA_LONGITUDE_SIDE 5
101 #define NANOGPS2_GNGGA_QUALITY_INDICATOR 6
102 #define NANOGPS2_GNGGA_NUMBER_OF_SATELLITES 7
103 #define NANOGPS2_GNGGA_H_DILUTION_OF_POS 8
104 #define NANOGPS2_GNGGA_ALTITUDE 9
105 #define NANOGPS2_GNGGA_ALTITUDE_UNIT 10
106 #define NANOGPS2_GNGGA_GEOIDAL_SEPARATION 11
107 #define NANOGPS2_GNGGA_GEOIDAL_SEPARATION_UNIT 12
108 #define NANOGPS2_GNGGA_TIME_SINCE_LAST_DGPS 13
109 #define NANOGPS2_GNGGA_DGPS_REFERENCE_STATION_ID 14
110 
116 #define NANOGPS2_GPGLL_LATITUDE 1
117 #define NANOGPS2_GPGLL_LATITUDE_SIDE 2
118 #define NANOGPS2_GPGLL_LONGITUDE 3
119 #define NANOGPS2_GPGLL_LONGITUDE_SIDE 4
120 
126 #define NANOGPS2_ERROR_COMMAND_OR_ELEMENT 0xFF
127 #define NANOGPS2_ERROR_START_OR_END_COMMAND 0x8F
128 #define NANOGPS2_ERROR_NEXT_ELEMENT 0x4F
129 #define NANOGPS2_ERROR_CURRENT_ELEMENT 0x2F
130 #define NANOGPS2_NO_ERROR 0x00
131 
137 #define DRV_RX_BUFFER_SIZE 600
138 #define DRV_TX_BUFFER_SIZE 50
139  // End group macro
142 // --------------------------------------------------------------- PUBLIC TYPES
150 typedef struct
151 {
152  // Output pins
153 
154  digital_out_t en;
155  digital_out_t fon;
156  digital_out_t cts;
157 
158  // Input pins
159 
160  digital_in_t wkp;
161  digital_in_t rts;
162 
163  // Modules
164 
165  uart_t uart;
166 
167  char uart_rx_buffer[ DRV_RX_BUFFER_SIZE ];
168  char uart_tx_buffer[ DRV_TX_BUFFER_SIZE ];
169 
170 } nanogps2_t;
171 
175 typedef struct
176 {
177  // Communication gpio pins
178 
179  pin_name_t rx_pin;
180  pin_name_t tx_pin;
181 
182  // Additional gpio pins
183 
184  pin_name_t wkp;
185  pin_name_t en;
186  pin_name_t fon;
187  pin_name_t cts;
188  pin_name_t rts;
189 
190  // static variable
191 
192  uint32_t baud_rate; // Clock speed.
194  uart_data_bits_t data_bit; // Data bits.
195  uart_parity_t parity_bit; // Parity bit.
196  uart_stop_bits_t stop_bit; // Stop bits.
197 
199 
203 typedef uint8_t nanogps2_error_t;
204  // End types group
206 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
207 
213 #ifdef __cplusplus
214 extern "C"{
215 #endif
216 
226 
236 
242 
249 void nanogps2_set_fon_pin_state ( nanogps2_t *ctx, uint8_t state );
250 
257 void nanogps2_set_cts_pin_state ( nanogps2_t *ctx, uint8_t state );
258 
266 
274 
281 void nanogps2_set_en_pin_state ( nanogps2_t *ctx, uint8_t state );
282 
290 void nanogps2_generic_write ( nanogps2_t *ctx, char *data_buf, uint16_t len );
291 
301 int32_t nanogps2_generic_read ( nanogps2_t *ctx, char *data_buf, uint16_t max_len );
302 
314 (
315  char *rsp, uint8_t command,
316  uint8_t element, char *parser_buf
317 );
318 
319 #ifdef __cplusplus
320 }
321 #endif
322 #endif // _NANOGPS2_H_
323  // End public_function group
326 
327 // ------------------------------------------------------------------------- END
nanogps2_t::en
digital_out_t en
Definition: nanogps2.h:154
nanogps2_cfg_t::parity_bit
uart_parity_t parity_bit
Definition: nanogps2.h:195
DRV_RX_BUFFER_SIZE
#define DRV_RX_BUFFER_SIZE
Definition: nanogps2.h:137
nanogps2_error_t
uint8_t nanogps2_error_t
Error type.
Definition: nanogps2.h:203
nanogps2_t::uart
uart_t uart
Definition: nanogps2.h:165
nanogps2_cfg_t::uart_blocking
bool uart_blocking
Definition: nanogps2.h:193
nanogps2_cfg_t::fon
pin_name_t fon
Definition: nanogps2.h:186
nanogps2_cfg_t::tx_pin
pin_name_t tx_pin
Definition: nanogps2.h:180
nanogps2_generic_parser
nanogps2_error_t nanogps2_generic_parser(char *rsp, uint8_t command, uint8_t element, char *parser_buf)
Generic parser function.
nanogps2_t
Click ctx object definition.
Definition: nanogps2.h:151
nanogps2_t::cts
digital_out_t cts
Definition: nanogps2.h:156
nanogps2_generic_write
void nanogps2_generic_write(nanogps2_t *ctx, char *data_buf, uint16_t len)
Generic write function.
nanogps2_cfg_t::en
pin_name_t en
Definition: nanogps2.h:185
nanogps2_cfg_t::stop_bit
uart_stop_bits_t stop_bit
Definition: nanogps2.h:196
nanogps2_cfg_t::baud_rate
uint32_t baud_rate
Definition: nanogps2.h:192
nanogps2_cfg_t::wkp
pin_name_t wkp
Definition: nanogps2.h:184
nanogps2_cfg_t
Click configuration structure definition.
Definition: nanogps2.h:176
nanogps2_get_wkp_pin
uint8_t nanogps2_get_wkp_pin(nanogps2_t *ctx)
Get WKP pin state.
nanogps2_cfg_t::data_bit
uart_data_bits_t data_bit
Definition: nanogps2.h:194
nanogps2_cfg_t::rx_pin
pin_name_t rx_pin
Definition: nanogps2.h:179
nanogps2_set_cts_pin_state
void nanogps2_set_cts_pin_state(nanogps2_t *ctx, uint8_t state)
Generic function for setting cts pin status.
nanogps2_get_rts_pin
uint8_t nanogps2_get_rts_pin(nanogps2_t *ctx)
Get RTS pin state.
nanogps2_cfg_setup
void nanogps2_cfg_setup(nanogps2_cfg_t *cfg)
Config Object Initialization function.
nanogps2_cfg_t::cts
pin_name_t cts
Definition: nanogps2.h:187
nanogps2_set_fon_pin_state
void nanogps2_set_fon_pin_state(nanogps2_t *ctx, uint8_t state)
Generic function for setting fon pin status.
nanogps2_cfg_t::rts
pin_name_t rts
Definition: nanogps2.h:188
DRV_TX_BUFFER_SIZE
#define DRV_TX_BUFFER_SIZE
Definition: nanogps2.h:138
NANOGPS2_RETVAL
#define NANOGPS2_RETVAL
Definition: nanogps2.h:76
nanogps2_t::fon
digital_out_t fon
Definition: nanogps2.h:155
nanogps2_t::wkp
digital_in_t wkp
Definition: nanogps2.h:160
nanogps2_generic_read
int32_t nanogps2_generic_read(nanogps2_t *ctx, char *data_buf, uint16_t max_len)
Generic read function.
nanogps2_t::rts
digital_in_t rts
Definition: nanogps2.h:161
nanogps2_module_wakeup
void nanogps2_module_wakeup(nanogps2_t *ctx)
Wake-up module.
nanogps2_set_en_pin_state
void nanogps2_set_en_pin_state(nanogps2_t *ctx, uint8_t state)
Generic function for setting en pin status.
nanogps2_init
NANOGPS2_RETVAL nanogps2_init(nanogps2_t *ctx, nanogps2_cfg_t *cfg)
Initialization function.