/* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* GPS detection state structures. These need to be in a separate header to prevent a circular dependency between AP_GPS and the backend drivers. These structures are allocated as a single block in AP_GPS during driver detection, then freed once the detection is finished. Each GPS driver needs to implement a static _detect() function which uses this state information to detect if the attached GPS is of the specific type that it handles. */ #include "AP_GPS_config.h" #if AP_GPS_NMEA_ENABLED struct NMEA_detect_state { uint8_t step; uint8_t ck; }; #endif #if AP_GPS_SIRF_ENABLED struct SIRF_detect_state { uint16_t checksum; uint8_t step, payload_length, payload_counter; }; #endif #if AP_GPS_UBLOX_ENABLED struct UBLOX_detect_state { uint8_t payload_length, payload_counter; uint8_t step; uint8_t ck_a, ck_b; }; #endif #if AP_GPS_ERB_ENABLED struct ERB_detect_state { uint8_t payload_length, payload_counter; uint8_t step; uint8_t ck_a, ck_b; }; #endif #if AP_GPS_SBP_ENABLED struct SBP_detect_state { enum { WAITING = 0, GET_TYPE = 1, GET_SENDER = 2, GET_LEN = 3, GET_MSG = 4, GET_CRC = 5 } state:8; uint16_t msg_type; uint8_t n_read; uint8_t msg_len; uint16_t crc_so_far; uint16_t crc; uint8_t heartbeat_buff[4]; }; #endif #if AP_GPS_SBP2_ENABLED struct SBP2_detect_state { enum { WAITING = 0, GET_TYPE = 1, GET_SENDER = 2, GET_LEN = 3, GET_MSG = 4, GET_CRC = 5 } state:8; uint16_t msg_type; uint8_t n_read; uint8_t msg_len; uint16_t crc_so_far; uint16_t crc; uint8_t heartbeat_buff[4]; }; #endif