Skip to content

Commit

Permalink
move enums into class and add more specific poll results
Browse files Browse the repository at this point in the history
  • Loading branch information
EricPedley committed Feb 14, 2024
1 parent 81692b4 commit 9a58e82
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 32 deletions.
34 changes: 17 additions & 17 deletions gps_ubxm8_i2c/gps.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,53 +7,53 @@

GPS::GPS() {
packetReader = UBXPacketReader();
state = GPSState::REQUEST_NOT_SENT;
state = GPS::State::REQUEST_NOT_SENT;
}

const GPSState GPS::getState() {
const GPS::State GPS::getState() {
return state;
}

const GPSPollResult GPS::pollUpdate(I2C_HandleTypeDef* i2c) {
if(state == GPSState::REQUEST_NOT_SENT) {
const GPS::PollResult GPS::pollUpdate(I2C_HandleTypeDef* i2c) {
if(state == GPS::State::REQUEST_NOT_SENT) {
uint8_t message[4] = {0x01, 0x07, 0x00, 0x00};
sendUBX(message, 4, &hi2c3);
state = GPSState::POLLING_RESPONSE;
state = GPS::State::POLLING_RESPONSE;
}

if(state == GPSState::POLLING_RESPONSE) {
if(state == GPS::State::POLLING_RESPONSE) {
uint8_t lenBytes[2];
uint16_t dataLen = 0;
uint8_t buffer[I2C_BUFFER_SIZE];

HAL_StatusTypeDef dataLenReadStatus = HAL_I2C_Mem_Read(i2c, 0x42 << 1, 0xFD, 1, lenBytes, 2, 100);
if(dataLenReadStatus != HAL_OK) {
return GPSPollResult::DATA_LEN_POLL_FAILED;
return GPS::PollResult::DATA_LEN_POLL_FAILED;
}

dataLen = lenBytes[0] << 8 | lenBytes[1];
if(dataLen==0) {
return GPSPollResult::NO_DATA;
return GPS::PollResult::NO_DATA;
}

if(dataLen > I2C_BUFFER_SIZE) {
dataLen = I2C_BUFFER_SIZE;
}
HAL_StatusTypeDef rcvStatus = HAL_I2C_Master_Receive(i2c, 0x42 << 1, buffer, dataLen, 100);
if(rcvStatus != HAL_OK) {
return GPSPollResult::DATA_RECEIVE_I2C_FAILED;
return GPS::PollResult::DATA_RECEIVE_I2C_FAILED;
}

if(packetReader.isInProgress()) {
for(uint16_t i = 0; i<dataLen; i++) {
UBXPacketUpdateResult res = packetReader.update(buffer[i]);
if(res == UBXPacketUpdateResult::CHECKSUM_FAILED) {
packetReader.reset();
return GPSPollResult::DATA_RECEIVE_CHECKSUM_FAILED;
return GPS::PollResult::DATA_RECEIVE_CHECKSUM_FAILED;
}
if(packetReader.isComplete()) {
state = GPSState::RESPONSE_READY;
return GPSPollResult::POLL_OK;
state = GPS::State::RESPONSE_READY;
return GPS::PollResult::POLL_FINISHED;
}
}
} else {
Expand All @@ -64,28 +64,28 @@ const GPSPollResult GPS::pollUpdate(I2C_HandleTypeDef* i2c) {
UBXPacketUpdateResult res = packetReader.update(buffer[i]);
if(res != UBXPacketUpdateResult::UPDATE_OK) {
packetReader.reset();
return GPSPollResult::DATA_RECEIVE_CHECKSUM_FAILED;
return GPS::PollResult::DATA_RECEIVE_CHECKSUM_FAILED;
}
i++;
}
}
}

if(packetReader.isComplete()) {
state = GPSState::RESPONSE_READY;
return GPSPollResult::POLL_OK;
state = GPS::State::RESPONSE_READY;
return GPS::PollResult::POLL_FINISHED;
}
}
}

return GPSPollResult::POLL_OK;
return GPS::PollResult::RECEIVE_IN_PROGRESS;
}

const UBX_NAV_PVT_PAYLOAD GPS::getSolution() {
return *(UBX_NAV_PVT_PAYLOAD*)packetReader.getPayload();
}

void GPS::reset() {
state = GPSState::REQUEST_NOT_SENT;
state = GPS::State::REQUEST_NOT_SENT;
packetReader.reset();
}
31 changes: 16 additions & 15 deletions gps_ubxm8_i2c/gps.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,30 +4,31 @@
#include "ubxMessages.h"
#include <i2c.h>

enum class GPSState {
REQUEST_NOT_SENT,
POLLING_RESPONSE,
RESPONSE_READY
};

enum class GPSPollResult {
POLL_OK,
NO_DATA,
DATA_LEN_POLL_FAILED,
DATA_RECEIVE_I2C_FAILED,
DATA_RECEIVE_CHECKSUM_FAILED
};

class GPS {
public:
enum class State {
REQUEST_NOT_SENT,
POLLING_RESPONSE,
RESPONSE_READY
};
enum class PollResult {
POLL_FINISHED,
NO_DATA,
DATA_LEN_POLL_FAILED,
DATA_RECEIVE_I2C_FAILED,
DATA_RECEIVE_CHECKSUM_FAILED,
RECEIVE_IN_PROGRESS
};
GPS();
const GPSState getState();
const GPSPollResult pollUpdate(I2C_HandleTypeDef* i2c);
const State getState();
const PollResult pollUpdate(I2C_HandleTypeDef* i2c);
const UBX_NAV_PVT_PAYLOAD getSolution();
void reset();

private:
UBXPacketReader packetReader;
GPSState state;
State state;
};

0 comments on commit 9a58e82

Please sign in to comment.