Modifying UBlox Code to change Power Management Settings

I’m trying to change AP_GPS_UBLOX to enable the “Full Power” setting on my Neo M8C-0-10. This setting will enable a markedly faster time-to-first-fix at the expense of a few milliamps of current. To enable it, I believe I need to send the message
0x06 0x86 0x08 0x00 [CK_A] [CK_B] to the connected port. This message, defined in the UBlox documentation on page 210, is a message of class UBX-CFG-PMS that sets the “Power Setup Value” to Full Power.

I’d like to modify the code in a way that preserves the intended style of AP_GPS_UBLOX.cpp. I believe that the best way to do this is to add a new case to the case statement inside request_next_config() which invokes a function that sends the relevant message with _send_message.

However, when I did this, it prevented the _unconfigured_messages bitmask from ever being entirely cleared. Before I spend more time debugging, I want to ask the community for help to make sure I understand how this driver is supposed to work. As I understand it,

  • the function _request_next_config() checks which configuration items listed in the enumeration config_step have not yet been done. If it finds an unconfigured item, it requests a message from the GPS device to check the GPS’ current value for this item
  • the GPS’ response is parsed by _parse_gps(). If a configuration (CFG) message is found with a value that needs to be changed, then _parse_gps invokes the function which reconfigures this item, for instance configure_message_rate
  • after an item is successfully configured, the corresponding bit in the bitmask _unconfigured_messages is wiped
  • for some reason, this process of continually checking the GPS’s configuration continues ad infinitum, even when the bits in _unconfigured_messages are fully wiped. The function _request_next_message is always called from the UBlox read() function, and the function internal counter _next_message continually loops throughout its entire range.

Is this a correct understanding? Are there important parts of the function of this driver that I am missing? Is there a source of documentation that people like me could use to understand this code and better interface with their UBlox devices?

Thank you,
Tim