-
Notifications
You must be signed in to change notification settings - Fork 13.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
gps: extract Septentrio GPS driver into separate module
Having a generic interface over the GPS drivers makes dedicated functionality for each driver harder. Move the Septentrio driver into its own module under the `gnss` driver directory, and let it have its own parameters for only the functionality it requires. This also helps with adding new features because they only need to be implemented for the driver that wants it, simplifying testing.
- Loading branch information
1 parent
df17655
commit 13a1cf1
Showing
11 changed files
with
2,342 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
rsource "*/Kconfig" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
############################################################################ | ||
# | ||
# Copyright (c) 2024 PX4 Development Team. All rights reserved. | ||
# | ||
# Redistribution and use in source and binary forms, with or without | ||
# modification, are permitted provided that the following conditions | ||
# are met: | ||
# | ||
# 1. Redistributions of source code must retain the above copyright | ||
# notice, this list of conditions and the following disclaimer. | ||
# 2. Redistributions in binary form must reproduce the above copyright | ||
# notice, this list of conditions and the following disclaimer in | ||
# the documentation and/or other materials provided with the | ||
# distribution. | ||
# 3. Neither the name PX4 nor the names of its contributors may be | ||
# used to endorse or promote products derived from this software | ||
# without specific prior written permission. | ||
# | ||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS | ||
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED | ||
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | ||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
# POSSIBILITY OF SUCH DAMAGE. | ||
# | ||
############################################################################ | ||
|
||
px4_add_module( | ||
MODULE driver__septentrio | ||
MAIN septentrio | ||
COMPILE_FLAGS | ||
-Wno-stringop-overflow # due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91707 | ||
SRCS | ||
septentrio.cpp | ||
util.cpp | ||
rtcm.cpp | ||
MODULE_CONFIG | ||
module.yaml | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
menuconfig DRIVERS_GNSS_SEPTENTRIO | ||
bool "Septentrio GNSS receivers" | ||
default n | ||
---help--- | ||
Enable support for Septentrio receivers |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
module_name: Septentrio | ||
|
||
serial_config: | ||
- command: septentrio start -d ${SERIAL_DEV} | ||
port_config_param: | ||
name: SEP_PORT_CONFIG | ||
group: Septentrio GNSS Receiver | ||
default: GPS1 | ||
label: GPS Port | ||
|
||
parameters: | ||
- group: Septentrio GNSS Receiver | ||
definitions: | ||
SEP_YAW_OFFS: | ||
description: | ||
short: Heading/Yaw offset for dual antenna GPS | ||
long: | | ||
Heading offset angle for dual antenna GPS setups that support heading estimation. | ||
Set this to 0 if the antennas are parallel to the forward-facing direction | ||
of the vehicle and the rover antenna is in front. | ||
The offset angle increases clockwise. | ||
Set this to 90 if the rover antenna is placed on the | ||
right side of the vehicle and the moving base antenna is on the left side. | ||
type: float | ||
decimal: 3 | ||
default: 0 | ||
min: 0 | ||
max: 360 | ||
unit: deg | ||
reboot_required: true | ||
SEP_SAT_INFO: | ||
description: | ||
short: Enable sat info | ||
long: | | ||
Enable publication of satellite info (ORB_ID(satellite_info)) if possible. | ||
type: boolean | ||
default: 0 | ||
reboot_required: true | ||
SEP_PITCH_OFFS: | ||
description: | ||
short: Pitch offset for dual antenna GPS | ||
long: | | ||
Vertical offsets can be compensated for by adjusting the Pitch offset. | ||
Note that this can be interpreted as the "roll" angle in case the antennas are aligned along the perpendicular axis. | ||
This occurs in situations where the two antenna ARPs may not be exactly at the same height in the vehicle reference frame. | ||
Since pitch is defined as the right-handed rotation about the vehicle Y axis, | ||
a situation where the main antenna is mounted lower than the aux antenna (assuming the default antenna setup) will result in a positive pitch. | ||
type: float | ||
decimal: 3 | ||
default: 0 | ||
min: -90 | ||
max: 90 | ||
unit: deg | ||
reboot_required: true | ||
SEP_DUMP_COMM: | ||
description: | ||
short: Log GPS communication data | ||
long: | | ||
If this is set to 1, all GPS communication data will be published via uORB, | ||
and written to the log file as gps_dump message. | ||
If this is set to 2, the main GPS is configured to output RTCM data, | ||
which is then logged as gps_dump and can be used for PPK. | ||
type: enum | ||
default: 0 | ||
min: 0 | ||
max: 2 | ||
values: | ||
0: Disable | ||
1: Full communication | ||
2: RTCM output (PPK) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
/**************************************************************************** | ||
* | ||
* Copyright (c) 2018 PX4 Development Team. All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
* are met: | ||
* | ||
* 1. Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* 2. Redistributions in binary form must reproduce the above copyright | ||
* notice, this list of conditions and the following disclaimer in | ||
* the documentation and/or other materials provided with the | ||
* distribution. | ||
* 3. Neither the name PX4 nor the names of its contributors may be | ||
* used to endorse or promote products derived from this software | ||
* without specific prior written permission. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS | ||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED | ||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | ||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
* POSSIBILITY OF SUCH DAMAGE. | ||
* | ||
****************************************************************************/ | ||
|
||
#include "rtcm.h" | ||
#include <cstring> | ||
|
||
RTCMParsing::RTCMParsing() | ||
{ | ||
reset(); | ||
} | ||
|
||
RTCMParsing::~RTCMParsing() | ||
{ | ||
delete[] _buffer; | ||
} | ||
|
||
void RTCMParsing::reset() | ||
{ | ||
if (!_buffer) { | ||
_buffer = new uint8_t[RTCM_INITIAL_BUFFER_LENGTH]; | ||
_buffer_len = RTCM_INITIAL_BUFFER_LENGTH; | ||
} | ||
|
||
_pos = 0; | ||
_message_length = _buffer_len; | ||
} | ||
|
||
bool RTCMParsing::addByte(uint8_t b) | ||
{ | ||
if (!_buffer) { | ||
return false; | ||
} | ||
|
||
_buffer[_pos++] = b; | ||
|
||
if (_pos == 3) { | ||
_message_length = (((uint16_t)_buffer[1] & 3) << 8) | (_buffer[2]); | ||
|
||
if (_message_length + 6 > _buffer_len) { | ||
uint16_t new_buffer_len = _message_length + 6; | ||
uint8_t *new_buffer = new uint8_t[new_buffer_len]; | ||
|
||
if (!new_buffer) { | ||
delete[](_buffer); | ||
_buffer = nullptr; | ||
return false; | ||
} | ||
|
||
memcpy(new_buffer, _buffer, 3); | ||
delete[](_buffer); | ||
_buffer = new_buffer; | ||
_buffer_len = new_buffer_len; | ||
} | ||
} | ||
|
||
return _message_length + 6 == _pos; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
/**************************************************************************** | ||
* | ||
* Copyright (c) 2018 PX4 Development Team. All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
* are met: | ||
* | ||
* 1. Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* 2. Redistributions in binary form must reproduce the above copyright | ||
* notice, this list of conditions and the following disclaimer in | ||
* the documentation and/or other materials provided with the | ||
* distribution. | ||
* 3. Neither the name PX4 nor the names of its contributors may be | ||
* used to endorse or promote products derived from this software | ||
* without specific prior written permission. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS | ||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED | ||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | ||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
* POSSIBILITY OF SUCH DAMAGE. | ||
* | ||
****************************************************************************/ | ||
|
||
#pragma once | ||
|
||
#include <cstdint> | ||
|
||
/* RTCM3 */ | ||
#define RTCM3_PREAMBLE 0xD3 | ||
#define RTCM_INITIAL_BUFFER_LENGTH 300 /**< initial maximum message length of an RTCM message */ | ||
|
||
|
||
class RTCMParsing | ||
{ | ||
public: | ||
RTCMParsing(); | ||
~RTCMParsing(); | ||
|
||
/** | ||
* reset the parsing state | ||
*/ | ||
void reset(); | ||
|
||
/** | ||
* add a byte to the message | ||
* @param b | ||
* @return true if message complete (use @message to get it) | ||
*/ | ||
bool addByte(uint8_t b); | ||
|
||
uint8_t *message() const { return _buffer; } | ||
uint16_t messageLength() const { return _pos; } | ||
uint16_t messageId() const { return (_buffer[3] << 4) | (_buffer[4] >> 4); } | ||
|
||
private: | ||
uint8_t *_buffer{nullptr}; | ||
uint16_t _buffer_len{}; | ||
uint16_t _pos{}; ///< next position in buffer | ||
uint16_t _message_length{}; ///< message length without header & CRC (both 3 bytes) | ||
}; |
Oops, something went wrong.