/* * This file is part of Cleanflight and Betaflight. * * Cleanflight and Betaflight are free software. You can redistribute * this software and/or modify this software 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. * * Cleanflight and Betaflight are distributed in the hope that they * 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 software. * * If not, see . */ /* * Crossfire constants provided by Team Black Sheep under terms of the 2-Clause BSD License */ #pragma once #include #include #define CRSF_BAUDRATE 420000 enum { CRSF_SYNC_BYTE = 0xC8 }; enum { CRSF_FRAME_SIZE_MAX = 64 }; // 62 bytes frame plus 2 bytes frame header() enum { CRSF_PAYLOAD_SIZE_MAX = CRSF_FRAME_SIZE_MAX - 6 }; typedef enum { CRSF_FRAMETYPE_GPS = 0x02, CRSF_FRAMETYPE_BATTERY_SENSOR = 0x08, CRSF_FRAMETYPE_LINK_STATISTICS = 0x14, CRSF_FRAMETYPE_RC_CHANNELS_PACKED = 0x16, CRSF_FRAMETYPE_ATTITUDE = 0x1E, CRSF_FRAMETYPE_FLIGHT_MODE = 0x21, // Extended Header Frames, range: 0x28 to 0x96 CRSF_FRAMETYPE_DEVICE_PING = 0x28, CRSF_FRAMETYPE_DEVICE_INFO = 0x29, CRSF_FRAMETYPE_PARAMETER_SETTINGS_ENTRY = 0x2B, CRSF_FRAMETYPE_PARAMETER_READ = 0x2C, CRSF_FRAMETYPE_PARAMETER_WRITE = 0x2D, CRSF_FRAMETYPE_COMMAND = 0x32, // MSP commands CRSF_FRAMETYPE_MSP_REQ = 0x7A, // response request using msp sequence as command CRSF_FRAMETYPE_MSP_RESP = 0x7B, // reply with 58 byte chunked binary CRSF_FRAMETYPE_MSP_WRITE = 0x7C, // write with 8 byte chunked binary (OpenTX outbound telemetry buffer limit) CRSF_FRAMETYPE_DISPLAYPORT_CMD = 0x7D, // displayport control command } crsfFrameType_e; enum { CRSF_DISPLAYPORT_SUBCMD_UPDATE = 0x01, // transmit displayport buffer to remote CRSF_DISPLAYPORT_SUBCMD_CLEAR = 0X02, // clear client screen CRSF_DISPLAYPORT_SUBCMD_OPEN = 0x03, // client request to open cms menu CRSF_DISPLAYPORT_SUBCMD_CLOSE = 0x04, // client request to close cms menu CRSF_DISPLAYPORT_SUBCMD_POLL = 0x05, // client request to poll/refresh cms menu }; enum { CRSF_DISPLAYPORT_OPEN_ROWS_OFFSET = 1, CRSF_DISPLAYPORT_OPEN_COLS_OFFSET = 2, }; enum { CRSF_FRAME_GPS_PAYLOAD_SIZE = 15, CRSF_FRAME_BATTERY_SENSOR_PAYLOAD_SIZE = 8, CRSF_FRAME_LINK_STATISTICS_PAYLOAD_SIZE = 10, CRSF_FRAME_RC_CHANNELS_PAYLOAD_SIZE = 22, // 11 bits per channel * 16 channels = 22 bytes. CRSF_FRAME_ATTITUDE_PAYLOAD_SIZE = 6, }; enum { CRSF_FRAME_LENGTH_ADDRESS = 1, // length of ADDRESS field CRSF_FRAME_LENGTH_FRAMELENGTH = 1, // length of FRAMELENGTH field CRSF_FRAME_LENGTH_TYPE = 1, // length of TYPE field CRSF_FRAME_LENGTH_CRC = 1, // length of CRC field CRSF_FRAME_LENGTH_TYPE_CRC = 2, // length of TYPE and CRC fields combined CRSF_FRAME_LENGTH_EXT_TYPE_CRC = 4, // length of Extended Dest/Origin, TYPE and CRC fields combined CRSF_FRAME_LENGTH_NON_PAYLOAD = 4, // combined length of all fields except payload }; enum { CRSF_FRAME_TX_MSP_FRAME_SIZE = 58, CRSF_FRAME_RX_MSP_FRAME_SIZE = 8, CRSF_FRAME_ORIGIN_DEST_SIZE = 2, }; typedef enum { CRSF_ADDRESS_BROADCAST = 0x00, CRSF_ADDRESS_USB = 0x10, CRSF_ADDRESS_TBS_CORE_PNP_PRO = 0x80, CRSF_ADDRESS_RESERVED1 = 0x8A, CRSF_ADDRESS_CURRENT_SENSOR = 0xC0, CRSF_ADDRESS_GPS = 0xC2, CRSF_ADDRESS_TBS_BLACKBOX = 0xC4, CRSF_ADDRESS_FLIGHT_CONTROLLER = 0xC8, CRSF_ADDRESS_RESERVED2 = 0xCA, CRSF_ADDRESS_RACE_TAG = 0xCC, CRSF_ADDRESS_RADIO_TRANSMITTER = 0xEA, CRSF_ADDRESS_CRSF_RECEIVER = 0xEC, CRSF_ADDRESS_CRSF_TRANSMITTER = 0xEE } crsfAddress_e;