-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GNSS Drivers #6
Comments
There is no need for UART5 global IT to be enabledTested on the old comms-eqm-software. Findings regarding ITs set up on CubeMXIn the FreeRTOSConfig.h file we have the following defines |
Update: The issue was not the FreeRTOS but the CubeMX configuration (Enable TX and RX swapping) |
Size investigation
Also after each receive you have to run again the following The IDLE only triggers when UART global interrupt is enabled... CHECK this : e3896a8 |
Files
GNSS.hpp, GNSS.cpp
GNSSDefinitions.hpp
GNSSMessage.hpp
Most Recent Branch
comms-eqm-software repo at the branch gnss_eqm
Reports
PeakSat/comms-eqm-software#10
PeakSat/comms-eqm-software#11
PeakSat/comms-eqm-software#13
Chore Tasks
Data Handling
Answer: 460 bytes
Answer: Global UART interrupt ON and disable of HT, TC interrupts after each call of
HAL_UARTEx_ReceiveToIdle_DMA(&huart5, this->incomingMessage, 512);
Note: You could lose some packets if the processing is very slow
The printing of 460 bytes takes around 50ms
Functions that are tested and working
configureNMEATalkerID(TalkerIDType type, Attributes attributes
querySoftwareVersion(GNSSDefinitions::SoftwareType::SystemCode)
gnssReceiver.setFactoryDefaults()
Functions that we should check at GNSS.cpp
configureInterferenceDetection(InterferenceDetectControl control, Attributes attributes)
along withqueryInterferenceDetectionStatus()
. This could be useful to assess the validity of the GNSS data.configureMessageType(ConfigurationType type, Attributes attributes)
. We want NMEA format (I think it is the default but we should double-check it).configureGNSSNavigationMode(NavigationMode mode, Attributes attributes)
. Maybe we will needAirborne
.configureSystemPositionRate(uint8_t rate, Attributes attributes)
. This could be useful for the velocity calculation issue.query1PPSTiming()
Again may be useful for the validity of the GNSS data.configureNMEAStringInterval
useful for the nominal case of 2 or 5 min GNSSconfigureSystemPowerMode
You can enable the powerSave mode (or we can even close it with the mosfet)Notes
For all of the above functions that need to be checked, you can check this function as a reference
GNSSMessage GNSSReceiver::configureNMEATalkerID(TalkerIDType type, Attributes attributes) {
Payload payload;
payload.push_back(GNSSDefinitions::GNSSMessagesID::ConfigureNMEATalkerID);
payload.push_back(static_cast<uint8_t>(type));
payload.push_back(static_cast<uint8_t>(attributes));
return GNSSMessage{GNSSMessagesID::ConfigureNMEATalkerID, static_cast<uint16_t>(payload.size()), payload};
}
A simple workaround to check if you read ACK or NACK is the following
for(uint16_t i = 0 ; i< dmaRxSize; i++){
if(rxDmaBuffer[i] == 132)
LOG_DEBUG << "NACK";
if(rxDmaBuffer[i] == 131)
LOG_DEBUG << "ACK";
}
Tasks for the above functions
Feature Tasks
configureNMEAStringInterval
but for multiple strings (this is very useful when we want the GNSS to send us messages every 2 or 4 min for example)Error Reporting and Error Handling
queryInterferenceDetectionStatus()
returns true or something like thatNote: The parser could help with that...So by having the variables, you should have a check on them to decide if you can trust them or not. For example, if you get the year 1980 while we have 2024 and in orbit 2025 you know that is incorrect.
Other
The text was updated successfully, but these errors were encountered: