39 unsigned baudrate = 0;
42 _driver.reset(
new GPSDriverAshtech(&callbackTrampoline,
this, &_sensorGps, &_satelliteInfo));
46 _driver.reset(
new GPSDriverSBF(&callbackTrampoline,
this, &_sensorGps, &_satelliteInfo, _config.
headingOffsetDeg));
49 const GPSDriverUBX::Settings settings{
55 .heading_offset = 0.0f,
56 .uart2_baudrate = 57600,
58 .jam_det_sensitivity_hi =
false,
59 .mode = GPSDriverUBX::UBXMode::Normal,
61 _driver.reset(
new GPSDriverUBX(GPSDriverUBX::Interface::UART, &callbackTrampoline,
this, &_sensorGps, &_satelliteInfo, settings));
65 _driver.reset(
new GPSDriverFemto(&callbackTrampoline,
this, &_sensorGps, &_satelliteInfo));
70 qCWarning(GPSDriverLog) <<
"Unsupported GPS type:" <<
static_cast<int>(_type);
78 _driver->setSurveyInSpecs(
static_cast<uint32_t
>(_config.
surveyInAccMeters * 10000.0),
82 GPSHelper::GPSConfig gpsConfig{};
83 gpsConfig.output_mode = GPSHelper::OutputMode::RTCM;
85 if (_driver->configure(baudrate, gpsConfig) != 0) {
86 qCWarning(GPSDriverLog) <<
"Driver configuration failed for type" <<
static_cast<int>(_type);
91 (void) memset(&_sensorGps, 0,
sizeof(_sensorGps));
117 switch (
static_cast<GPSCallbackType
>(type)) {
118 case GPSCallbackType::readDeviceData: {
120 memcpy(&timeoutMs, data1,
sizeof(timeoutMs));
121 return _transport.
read(
static_cast<uint8_t *
>(data1), data2, timeoutMs);
123 case GPSCallbackType::writeDeviceData:
124 return _transport.
write(
static_cast<const uint8_t *
>(data1), data2);
125 case GPSCallbackType::setBaudrate:
126 return _transport.
setBaudrate(
static_cast<unsigned>(data2)) ? 0 : -1;
127 case GPSCallbackType::gotRTCMMessage:
129 _sinks.
onRTCM(QByteArray(
static_cast<const char *
>(data1), data2));
132 case GPSCallbackType::surveyInStatus:
134 const SurveyInStatus *
const status =
static_cast<const SurveyInStatus *
>(data1);
141 out.
valid = status->flags & 0x01;
142 out.
active = (status->flags >> 1) & 0x01;
146 case GPSCallbackType::setClock:
virtual int write(const uint8_t *buffer, int length)=0
Write length bytes. Returns bytes written, or -1 on error.