* From: https://github.com/meshtastic/firmware/blob/f81d3b045dd1b7e3ca7870af3da915ff4399ea98/src/gps/GPS.cpp */
| 98 | * From: https://github.com/meshtastic/firmware/blob/f81d3b045dd1b7e3ca7870af3da915ff4399ea98/src/gps/GPS.cpp |
| 99 | */ |
| 100 | GpsModel probe(::Device* uart) { |
| 101 | // Close all NMEA sentences, valid for L76K, ATGM336H (and likely other AT6558 devices) |
| 102 | uart_controller_write_bytes(uart, (const uint8_t*)"$PCAS03,0,0,0,0,0,0,0,0,0,0,,,0,0*02\r\n", 40, 500); |
| 103 | kernel::delayMillis(20); |
| 104 | |
| 105 | // Close NMEA sequences on Ublox |
| 106 | uart_controller_write_bytes(uart, (const uint8_t*)"$PUBX,40,GLL,0,0,0,0,0,0*5C\r\n", 29, 500); |
| 107 | uart_controller_write_bytes(uart, (const uint8_t*)"$PUBX,40,GSV,0,0,0,0,0,0*59\r\n", 29, 500); |
| 108 | uart_controller_write_bytes(uart, (const uint8_t*)"$PUBX,40,VTG,0,0,0,0,0,0*5E\r\n", 29, 500); |
| 109 | kernel::delayMillis(20); |
| 110 | |
| 111 | // Unicore UFirebirdII Series: UC6580, UM620, UM621, UM670A, UM680A, or UM681A |
| 112 | PROBE_SIMPLE(uart, "UC6580", "$PDTINFO", "UC6580", GpsModel::UC6580, 500); |
| 113 | PROBE_SIMPLE(uart, "UM600", "$PDTINFO", "UM600", GpsModel::UC6580, 500); |
| 114 | PROBE_SIMPLE(uart, "ATGM336H", "$PCAS06,1*1A", "$GPTXT,01,01,02,HW=ATGM336H", GpsModel::ATGM336H, 500); |
| 115 | |
| 116 | /* ATGM332D series (-11(GPS), -21(BDS), -31(GPS+BDS), -51(GPS+GLONASS), -71-0(GPS+BDS+GLONASS)) |
| 117 | based on AT6558 */ |
| 118 | PROBE_SIMPLE(uart, "ATGM332D", "$PCAS06,1*1A", "$GPTXT,01,01,02,HW=ATGM332D", GpsModel::ATGM336H, 500); |
| 119 | |
| 120 | /* Airoha (Mediatek) AG3335A/M/S, A3352Q, Quectel L89 2.0, SimCom SIM65M */ |
| 121 | uart_controller_write_bytes(uart, (const uint8_t*)"$PAIR062,2,0*3C\r\n", 17, 500); // GSA OFF to reduce volume |
| 122 | uart_controller_write_bytes(uart, (const uint8_t*)"$PAIR062,3,0*3D\r\n", 17, 500); // GSV OFF to reduce volume |
| 123 | uart_controller_write_bytes(uart, (const uint8_t*)"$PAIR513*3D\r\n", 13, 500); // save configuration |
| 124 | PROBE_SIMPLE(uart, "AG3335", "$PAIR021*39", "$PAIR021,AG3335", GpsModel::AG3335, 500); |
| 125 | PROBE_SIMPLE(uart, "AG3352", "$PAIR021*39", "$PAIR021,AG3352", GpsModel::AG3352, 500); |
| 126 | PROBE_SIMPLE(uart, "LC86", "$PQTMVERNO*58", "$PQTMVERNO,LC86", GpsModel::AG3352, 500); |
| 127 | |
| 128 | PROBE_SIMPLE(uart, "L76K", "$PCAS06,0*1B", "$GPTXT,01,01,02,SW=", GpsModel::MTK, 500); |
| 129 | |
| 130 | // Close all NMEA sentences, valid for L76B MTK platform (Waveshare Pico GPS) |
| 131 | uart_controller_write_bytes(uart, (const uint8_t*)"$PMTK514,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*2E\r\n", 51, 500); |
| 132 | kernel::delayMillis(20); |
| 133 | |
| 134 | PROBE_SIMPLE(uart, "L76B", "$PMTK605*31", "Quectel-L76B", GpsModel::MTK_L76B, 500); |
| 135 | PROBE_SIMPLE(uart, "PA1616S", "$PMTK605*31", "1616S", GpsModel::MTK_PA1616S, 500); |
| 136 | |
| 137 | auto ublox_result = ublox::probe(uart); |
| 138 | if (ublox_result != GpsModel::Unknown) { |
| 139 | return ublox_result; |
| 140 | } else { |
| 141 | LOGGER.warn("No GNSS Module"); |
| 142 | return GpsModel::Unknown; |
| 143 | } |
| 144 | } |
| 145 | |
| 146 | } // namespace tt::hal::gps |
no test coverage detected