101 lines
2.6 KiB
C
101 lines
2.6 KiB
C
/*
|
|
* Copyright (C) OpenTX
|
|
*
|
|
* Based on code named
|
|
* th9x - http://code.google.com/p/th9x
|
|
* er9x - http://code.google.com/p/er9x
|
|
* gruvin9x - http://code.google.com/p/gruvin9x
|
|
*
|
|
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef _CROSSFIRE_H_
|
|
#define _CROSSFIRE_H_
|
|
|
|
#include <inttypes.h>
|
|
#include "dataconstants.h"
|
|
|
|
// Device address
|
|
#define BROADCAST_ADDRESS 0x00
|
|
#define RADIO_ADDRESS 0xEA
|
|
#define MODULE_ADDRESS 0xEE
|
|
|
|
// Frame id
|
|
#define GPS_ID 0x02
|
|
#define BATTERY_ID 0x08
|
|
#define LINK_ID 0x14
|
|
#define CHANNELS_ID 0x16
|
|
#define ATTITUDE_ID 0x1E
|
|
#define FLIGHT_MODE_ID 0x21
|
|
#define PING_DEVICES_ID 0x28
|
|
#define DEVICE_INFO_ID 0x29
|
|
#define REQUEST_SETTINGS_ID 0x2A
|
|
|
|
|
|
struct CrossfireSensor {
|
|
const uint8_t id;
|
|
const uint8_t subId;
|
|
const char * name;
|
|
const TelemetryUnit unit;
|
|
const uint8_t precision;
|
|
};
|
|
|
|
enum CrossfireSensorIndexes {
|
|
RX_RSSI1_INDEX,
|
|
RX_RSSI2_INDEX,
|
|
RX_QUALITY_INDEX,
|
|
RX_SNR_INDEX,
|
|
RX_ANTENNA_INDEX,
|
|
RF_MODE_INDEX,
|
|
TX_POWER_INDEX,
|
|
TX_RSSI_INDEX,
|
|
TX_QUALITY_INDEX,
|
|
TX_SNR_INDEX,
|
|
BATT_VOLTAGE_INDEX,
|
|
BATT_CURRENT_INDEX,
|
|
BATT_CAPACITY_INDEX,
|
|
GPS_LATITUDE_INDEX,
|
|
GPS_LONGITUDE_INDEX,
|
|
GPS_GROUND_SPEED_INDEX,
|
|
GPS_HEADING_INDEX,
|
|
GPS_ALTITUDE_INDEX,
|
|
GPS_SATELLITES_INDEX,
|
|
ATTITUDE_PITCH_INDEX,
|
|
ATTITUDE_ROLL_INDEX,
|
|
ATTITUDE_YAW_INDEX,
|
|
FLIGHT_MODE_INDEX,
|
|
UNKNOWN_INDEX,
|
|
};
|
|
|
|
void processCrossfireTelemetryData(uint8_t data);
|
|
void crossfireSetDefault(int index, uint8_t id, uint8_t subId);
|
|
|
|
#if SPORT_MAX_BAUDRATE < 400000
|
|
const uint32_t CROSSFIRE_BAUDRATES[] = {
|
|
400000,
|
|
115200,
|
|
};
|
|
const uint8_t CROSSFIRE_PERIODS[] = {
|
|
4,
|
|
16,
|
|
};
|
|
#define CROSSFIRE_BAUDRATE CROSSFIRE_BAUDRATES[g_eeGeneral.telemetryBaudrate]
|
|
#define CROSSFIRE_PERIOD CROSSFIRE_PERIODS[g_eeGeneral.telemetryBaudrate]
|
|
#else
|
|
#define CROSSFIRE_BAUDRATE 400000
|
|
#define CROSSFIRE_PERIOD 4 // 4ms
|
|
#endif
|
|
|
|
#define CROSSFIRE_TELEM_MIRROR_BAUDRATE 115200
|
|
|
|
#endif // _CROSSFIRE_H_
|