mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-23 00:05:28 +03:00
Added support for nrf24 id to support permanent binding
This commit is contained in:
parent
bec10bd591
commit
ad2bcee53a
3 changed files with 18 additions and 12 deletions
|
@ -653,9 +653,11 @@ const clivalue_t valueTable[] = {
|
|||
#endif
|
||||
#ifdef USE_RX_NRF24
|
||||
{ "nrf24rx_protocol", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &masterConfig.rxConfig.nrf24rx_protocol, .config.lookup = { TABLE_NRF24_RX }, 0 },
|
||||
{ "nrf24rx_id", VAR_UINT32 | MASTER_VALUE, &masterConfig.rxConfig.nrf24rx_id, .config.minmax = { 0, 0 }, 0 },
|
||||
#endif
|
||||
{ "spektrum_sat_bind", VAR_UINT8 | MASTER_VALUE, &masterConfig.rxConfig.spektrum_sat_bind, .config.minmax = { SPEKTRUM_SAT_BIND_DISABLED, SPEKTRUM_SAT_BIND_MAX}, 0 },
|
||||
|
||||
#ifdef TELEMETRY
|
||||
{ "telemetry_switch", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &masterConfig.telemetryConfig.telemetry_switch, .config.lookup = { TABLE_OFF_ON }, 0 },
|
||||
{ "telemetry_inversion", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &masterConfig.telemetryConfig.telemetry_inversion, .config.lookup = { TABLE_OFF_ON }, 0 },
|
||||
{ "frsky_default_lattitude", VAR_FLOAT | MASTER_VALUE, &masterConfig.telemetryConfig.gpsNoFixLatitude, .config.minmax = { -90.0, 90.0 }, 0 },
|
||||
|
@ -664,6 +666,7 @@ const clivalue_t valueTable[] = {
|
|||
{ "frsky_unit", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &masterConfig.telemetryConfig.frsky_unit, .config.lookup = { TABLE_UNIT }, 0 },
|
||||
{ "frsky_vfas_precision", VAR_UINT8 | MASTER_VALUE, &masterConfig.telemetryConfig.frsky_vfas_precision, .config.minmax = { FRSKY_VFAS_PRECISION_LOW, FRSKY_VFAS_PRECISION_HIGH }, 0 },
|
||||
{ "hott_alarm_sound_interval", VAR_UINT8 | MASTER_VALUE, &masterConfig.telemetryConfig.hottAlarmSoundInterval, .config.minmax = { 0, 120 }, 0 },
|
||||
#endif
|
||||
|
||||
{ "battery_capacity", VAR_UINT16 | MASTER_VALUE, &masterConfig.batteryConfig.batteryCapacity, .config.minmax = { 0, 20000 }, 0 },
|
||||
{ "vbat_scale", VAR_UINT8 | MASTER_VALUE, &masterConfig.batteryConfig.vbatscale, .config.minmax = { VBAT_SCALE_MIN, VBAT_SCALE_MAX }, 0 },
|
||||
|
@ -742,12 +745,16 @@ const clivalue_t valueTable[] = {
|
|||
|
||||
{ "acc_hardware", VAR_UINT8 | MASTER_VALUE, &masterConfig.acc_hardware, .config.minmax = { 0, ACC_MAX }, 0 },
|
||||
|
||||
#ifdef BARO
|
||||
{ "baro_use_median_filter", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &masterConfig.barometerConfig.use_median_filtering, .config.lookup = { TABLE_OFF_ON }, 0 },
|
||||
{ "baro_hardware", VAR_UINT8 | MASTER_VALUE, &masterConfig.baro_hardware, .config.minmax = { 0, BARO_MAX }, 0 },
|
||||
#endif
|
||||
|
||||
#ifdef MAG
|
||||
{ "mag_hardware", VAR_UINT8 | MASTER_VALUE, &masterConfig.mag_hardware, .config.minmax = { 0, MAG_MAX }, 0 },
|
||||
{ "mag_declination", VAR_INT16 | PROFILE_VALUE, &masterConfig.profile[0].mag_declination, .config.minmax = { -18000, 18000 }, 0 },
|
||||
{ "mag_hold_rate_limit", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].pidProfile.mag_hold_rate_limit, .config.minmax = { MAG_HOLD_RATE_LIMIT_MIN, MAG_HOLD_RATE_LIMIT_MAX }, 0 },
|
||||
#endif
|
||||
|
||||
{ "p_pitch", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].pidProfile.P8[PITCH], .config.minmax = { 0, 200 }, 0 },
|
||||
{ "i_pitch", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].pidProfile.I8[PITCH], .config.minmax = { 0, 200 }, 0 },
|
||||
|
@ -2448,7 +2455,8 @@ static void cliSet(char *cmdline)
|
|||
value = atoi(eqptr);
|
||||
valuef = fastA2F(eqptr);
|
||||
|
||||
if (valuef >= valueTable[i].config.minmax.min && valuef <= valueTable[i].config.minmax.max) { // note: compare float value
|
||||
if ((valuef >= valueTable[i].config.minmax.min && valuef <= valueTable[i].config.minmax.max) // note: compare float value
|
||||
|| (valueTable[i].config.minmax.min == 0 && valueTable[i].config.minmax.max == 0)) { // setting both min and max to zero allows full range
|
||||
|
||||
if ((valueTable[i].type & VALUE_TYPE_MASK) == VAR_FLOAT)
|
||||
tmp.float_value = valuef;
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
* H8_3D Protocol
|
||||
* No auto acknowledgment
|
||||
* Payload size is 20, static
|
||||
* Data rate is 1Kbps
|
||||
* Data rate is 1Mbps
|
||||
* Bind Phase
|
||||
* uses address {0xab,0xac,0xad,0xae,0xaf}, converted by XN297 to {0x41, 0xbd, 0x42, 0xd4, 0xc2}
|
||||
* hops between 4 channels
|
||||
|
@ -80,7 +80,6 @@ STATIC_UNIT_TESTED uint8_t payloadSize;
|
|||
|
||||
#define CRC_LEN 2
|
||||
#define RX_TX_ADDR_LEN 5
|
||||
//STATIC_UNIT_TESTED uint8_t rxTxAddr[RX_TX_ADDR_LEN] = {0xc4, 0x57, 0x09, 0x65, 0x21};
|
||||
STATIC_UNIT_TESTED uint8_t rxTxAddrXN297[RX_TX_ADDR_LEN] = {0x41, 0xbd, 0x42, 0xd4, 0xc2}; // converted XN297 address
|
||||
#define TX_ID_LEN 4
|
||||
STATIC_UNIT_TESTED uint8_t txId[TX_ID_LEN];
|
||||
|
@ -250,7 +249,7 @@ nrf24_received_t h8_3dDataReceived(uint8_t *payload)
|
|||
return ret;
|
||||
}
|
||||
|
||||
void h8_3dNrf24Init(nrf24_protocol_t protocol, uint32_t nrf24_id)
|
||||
void h8_3dNrf24Init(nrf24_protocol_t protocol, const uint32_t *nrf24rx_id)
|
||||
{
|
||||
UNUSED(protocol);
|
||||
protocolState = STATE_BIND;
|
||||
|
@ -261,11 +260,11 @@ void h8_3dNrf24Init(nrf24_protocol_t protocol, uint32_t nrf24_id)
|
|||
NRF24L01_WriteReg(NRF24L01_06_RF_SETUP, NRF24L01_06_RF_SETUP_RF_DR_1Mbps | NRF24L01_06_RF_SETUP_RF_PWR_n12dbm);
|
||||
// RX_ADDR for pipes P1-P5 are left at default values
|
||||
NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, rxTxAddrXN297, RX_TX_ADDR_LEN);
|
||||
if (nrf24_id == 0) {
|
||||
if (nrf24rx_id == NULL || *nrf24rx_id == 0) {
|
||||
h8_3dRfChannelIndex = H8_3D_RF_BIND_CHANNEL_START;
|
||||
NRF24L01_SetChannel(H8_3D_RF_BIND_CHANNEL_START);
|
||||
} else {
|
||||
h8_3dSetBound((uint8_t*)&nrf24_id);
|
||||
h8_3dSetBound((uint8_t*)nrf24rx_id);
|
||||
}
|
||||
|
||||
payloadSize = H8_3D_PROTOCOL_PAYLOAD_SIZE + CRC_LEN; // payload + 2 bytes CRC
|
||||
|
@ -277,6 +276,6 @@ void h8_3dNrf24Init(nrf24_protocol_t protocol, uint32_t nrf24_id)
|
|||
void h8_3dInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig)
|
||||
{
|
||||
rxRuntimeConfig->channelCount = RC_CHANNEL_COUNT;
|
||||
h8_3dNrf24Init((nrf24_protocol_t)rxConfig->nrf24rx_protocol, 0);
|
||||
h8_3dNrf24Init((nrf24_protocol_t)rxConfig->nrf24rx_protocol, &rxConfig->nrf24rx_id);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -220,18 +220,18 @@ nrf24_received_t refDataReceived(uint8_t *payload)
|
|||
return ret;
|
||||
}
|
||||
|
||||
void refNrf24Init(nrf24_protocol_t protocol, uint32_t nrf24_id)
|
||||
void refNrf24Init(nrf24_protocol_t protocol, const uint32_t *nrf24rx_id)
|
||||
{
|
||||
UNUSED(protocol);
|
||||
|
||||
NRF24L01_Initialize(BV(NRF24L01_00_CONFIG_EN_CRC) | BV( NRF24L01_00_CONFIG_CRCO)); // sets PWR_UP, EN_CRC, CRCO - 2 byte CRC
|
||||
NRF24L01_Setup();
|
||||
|
||||
if (nrf24_id == 0) {
|
||||
if (nrf24rx_id == NULL || *nrf24rx_id == 0) {
|
||||
protocolState = STATE_BIND;
|
||||
NRF24L01_SetChannel(REF_RF_BIND_CHANNEL);
|
||||
} else {
|
||||
memcpy(rxTxAddr, (uint8_t*)nrf24_id, sizeof(uint32_t));
|
||||
memcpy(rxTxAddr, nrf24rx_id, sizeof(uint32_t));
|
||||
rxTxAddr[4] = 0xD2;
|
||||
refSetBound();
|
||||
}
|
||||
|
@ -246,8 +246,7 @@ void refNrf24Init(nrf24_protocol_t protocol, uint32_t nrf24_id)
|
|||
void refInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig)
|
||||
{
|
||||
rxRuntimeConfig->channelCount = RC_CHANNEL_COUNT;
|
||||
//refNrf24Init((nrf24_protocol_t)rxConfig->nrf24rx_protocol, rxConfig->nrf24rx_id);
|
||||
refNrf24Init((nrf24_protocol_t)rxConfig->nrf24rx_protocol, 0);
|
||||
refNrf24Init((nrf24_protocol_t)rxConfig->nrf24rx_protocol, &rxConfig->nrf24rx_id);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue