1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-21 11:54:15 +01:00

LP-190: Moved openlrsstatus UAVO to OPLinkStatus

This commit is contained in:
Brian Webb 2016-06-26 09:44:28 -07:00
parent dc17bd9ad8
commit 021eb21008
10 changed files with 29 additions and 43 deletions

View File

@ -43,7 +43,7 @@
#include "openlrs.h" #include "openlrs.h"
#include "flightstatus.h" #include "flightstatus.h"
#include "flightbatterystate.h" #include "flightbatterystate.h"
#include "openlrsstatus.h" #include "oplinkstatus.h"
#include "pios_rfm22b_regs.h" #include "pios_rfm22b_regs.h"
@ -56,7 +56,8 @@ static void rfmSetCarrierFrequency(struct pios_openlrs_dev *openlrs_dev, uint32_
static uint8_t rfmGetRSSI(struct pios_openlrs_dev *openlrs_dev); static uint8_t rfmGetRSSI(struct pios_openlrs_dev *openlrs_dev);
static void to_rx_mode(struct pios_openlrs_dev *openlrs_dev); static void to_rx_mode(struct pios_openlrs_dev *openlrs_dev);
static void tx_packet(struct pios_openlrs_dev *openlrs_dev, uint8_t *pkt, uint8_t size); static void tx_packet(struct pios_openlrs_dev *openlrs_dev, uint8_t *pkt, uint8_t size);
static OpenLRSStatusData openlrs_status;
static OPLinkStatusData oplink_status;
static struct pios_openlrs_dev *pios_openlrs_alloc(); static struct pios_openlrs_dev *pios_openlrs_alloc();
static bool pios_openlrs_validate(struct pios_openlrs_dev *openlrs_dev); static bool pios_openlrs_validate(struct pios_openlrs_dev *openlrs_dev);
@ -858,8 +859,8 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
openlrs_dev->lastPacketTimeUs = timeUs; openlrs_dev->lastPacketTimeUs = timeUs;
openlrs_dev->numberOfLostPackets = 0; openlrs_dev->numberOfLostPackets = 0;
openlrs_status.LinkQuality <<= 1; oplink_status.LinkQuality <<= 1;
openlrs_status.LinkQuality |= 1; oplink_status.LinkQuality |= 1;
if ((openlrs_dev->rx_buf[0] & 0x3e) == 0x00) { if ((openlrs_dev->rx_buf[0] & 0x3e) == 0x00) {
// This flag indicates receiving PPM data // This flag indicates receiving PPM data
@ -890,7 +891,7 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
// Flag to indicate ever got a link // Flag to indicate ever got a link
openlrs_dev->link_acquired |= true; openlrs_dev->link_acquired |= true;
openlrs_status.FailsafeActive = OPENLRSSTATUS_FAILSAFEACTIVE_INACTIVE; oplink_status.LinkState = OPLINKSTATUS_LINKSTATE_CONNECTED;
openlrs_dev->beacon_armed = false; // when receiving packets make sure beacon cannot emit openlrs_dev->beacon_armed = false; // when receiving packets make sure beacon cannot emit
// When telemetry is enabled we ack packets and send info about FC back // When telemetry is enabled we ack packets and send info about FC back
@ -914,7 +915,7 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
tx_buf[0] |= (0x37 + bytes); tx_buf[0] |= (0x37 + bytes);
} else { } else {
// tx_buf[0] lowest 6 bits left at 0 // tx_buf[0] lowest 6 bits left at 0
tx_buf[1] = openlrs_status.LastRSSI; tx_buf[1] = oplink_status.RSSI;
if (FlightBatteryStateHandle()) { if (FlightBatteryStateHandle()) {
FlightBatteryStateData bat; FlightBatteryStateData bat;
FlightBatteryStateGet(&bat); FlightBatteryStateGet(&bat);
@ -928,7 +929,7 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
} }
tx_buf[4] = (openlrs_dev->lastAFCCvalue >> 8); tx_buf[4] = (openlrs_dev->lastAFCCvalue >> 8);
tx_buf[5] = openlrs_dev->lastAFCCvalue & 0xff; tx_buf[5] = openlrs_dev->lastAFCCvalue & 0xff;
tx_buf[6] = countSetBits(openlrs_status.LinkQuality & 0x7fff); tx_buf[6] = countSetBits(oplink_status.LinkQuality & 0x7fff);
} }
} }
@ -949,7 +950,7 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
if ((openlrs_dev->numberOfLostPackets < openlrs_dev->hopcount) && (PIOS_DELAY_GetuSSince(openlrs_dev->lastPacketTimeUs) > (getInterval(&openlrs_dev->bind_data) + packet_timeout_us))) { if ((openlrs_dev->numberOfLostPackets < openlrs_dev->hopcount) && (PIOS_DELAY_GetuSSince(openlrs_dev->lastPacketTimeUs) > (getInterval(&openlrs_dev->bind_data) + packet_timeout_us))) {
DEBUG_PRINTF(2, "OLRS WARN: Lost packet: %d\r\n", openlrs_dev->numberOfLostPackets); DEBUG_PRINTF(2, "OLRS WARN: Lost packet: %d\r\n", openlrs_dev->numberOfLostPackets);
// we lost packet, hop to next channel // we lost packet, hop to next channel
openlrs_status.LinkQuality <<= 1; oplink_status.LinkQuality <<= 1;
openlrs_dev->willhop = 1; openlrs_dev->willhop = 1;
if (openlrs_dev->numberOfLostPackets == 0) { if (openlrs_dev->numberOfLostPackets == 0) {
openlrs_dev->linkLossTimeMs = timeMs; openlrs_dev->linkLossTimeMs = timeMs;
@ -961,7 +962,7 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
} else if ((openlrs_dev->numberOfLostPackets >= openlrs_dev->hopcount) && (PIOS_DELAY_GetuSSince(openlrs_dev->lastPacketTimeUs) > (getInterval(&openlrs_dev->bind_data) * openlrs_dev->hopcount))) { } else if ((openlrs_dev->numberOfLostPackets >= openlrs_dev->hopcount) && (PIOS_DELAY_GetuSSince(openlrs_dev->lastPacketTimeUs) > (getInterval(&openlrs_dev->bind_data) * openlrs_dev->hopcount))) {
DEBUG_PRINTF(2, "ORLS WARN: Trying to resync\r\n"); DEBUG_PRINTF(2, "ORLS WARN: Trying to resync\r\n");
// hop slowly to allow resync with TX // hop slowly to allow resync with TX
openlrs_status.LinkQuality = 0; oplink_status.LinkQuality = 0;
openlrs_dev->willhop = 1; openlrs_dev->willhop = 1;
openlrs_dev->lastPacketTimeUs = timeUs; openlrs_dev->lastPacketTimeUs = timeUs;
} }
@ -972,10 +973,10 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
#endif /* PIOS_LED_LINK */ #endif /* PIOS_LED_LINK */
if (openlrs_dev->failsafeDelay && if (openlrs_dev->failsafeDelay &&
(openlrs_status.FailsafeActive == OPENLRSSTATUS_FAILSAFEACTIVE_INACTIVE) && (oplink_status.LinkState == OPLINKSTATUS_LINKSTATE_CONNECTED) &&
((timeMs - openlrs_dev->linkLossTimeMs) > ((uint32_t)openlrs_dev->failsafeDelay))) { ((timeMs - openlrs_dev->linkLossTimeMs) > ((uint32_t)openlrs_dev->failsafeDelay))) {
DEBUG_PRINTF(2, "Failsafe activated: %d %d\r\n", timeMs, openlrs_dev->linkLossTimeMs); DEBUG_PRINTF(2, "Failsafe activated: %d %d\r\n", timeMs, openlrs_dev->linkLossTimeMs);
openlrs_status.FailsafeActive = OPENLRSSTATUS_FAILSAFEACTIVE_ACTIVE; oplink_status.LinkState = OPLINKSTATUS_LINKSTATE_DISCONNECTED;
// failsafeApply(); // failsafeApply();
openlrs_dev->nextBeaconTimeMs = (timeMs + 1000UL * openlrs_dev->beacon_period) | 1; // beacon activating... openlrs_dev->nextBeaconTimeMs = (timeMs + 1000UL * openlrs_dev->beacon_period) | 1; // beacon activating...
} }
@ -1030,18 +1031,18 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
} }
// Update UAVO // Update UAVO
OpenLRSStatusSet(&openlrs_status); OPLinkStatusSet(&oplink_status);
} }
uint8_t PIOS_OpenLRS_RSSI_Get(void) uint8_t PIOS_OpenLRS_RSSI_Get(void)
{ {
if (openlrs_status.FailsafeActive == OPENLRSSTATUS_FAILSAFEACTIVE_ACTIVE) { if (oplink_status.LinkState != OPLINKSTATUS_LINKSTATE_CONNECTED) {
return 0; return 0;
} else { } else {
OpenLRSData openlrs_data; OpenLRSData openlrs_data;
OpenLRSGet(&openlrs_data); OpenLRSGet(&openlrs_data);
uint16_t LQ = openlrs_status.LinkQuality & 0x7fff; uint16_t LQ = oplink_status.LinkQuality & 0x7fff;
// count number of 1s in LinkQuality // count number of 1s in LinkQuality
LQ = LQ - ((LQ >> 1) & 0x5555); LQ = LQ - ((LQ >> 1) & 0x5555);
LQ = (LQ & 0x3333) + ((LQ >> 2) & 0x3333); LQ = (LQ & 0x3333) + ((LQ >> 2) & 0x3333);
@ -1052,12 +1053,12 @@ uint8_t PIOS_OpenLRS_RSSI_Get(void)
switch (openlrs_data.RSSI_Type) { switch (openlrs_data.RSSI_Type) {
case OPENLRS_RSSI_TYPE_COMBINED: case OPENLRS_RSSI_TYPE_COMBINED:
if ((uint8_t)LQ == 15) { if ((uint8_t)LQ == 15) {
return (uint8_t)((openlrs_status.LastRSSI >> 1) + 128); return (uint8_t)((oplink_status.RSSI >> 1) + 128);
} else { } else {
return LQ * 9; return LQ * 9;
} }
case OPENLRS_RSSI_TYPE_RSSI: case OPENLRS_RSSI_TYPE_RSSI:
return openlrs_status.LastRSSI; return oplink_status.RSSI;
case OPENLRS_RSSI_TYPE_LINKQUALITY: case OPENLRS_RSSI_TYPE_LINKQUALITY:
return (uint8_t)(LQ << 4); return (uint8_t)(LQ << 4);
@ -1143,7 +1144,7 @@ int32_t PIOS_OpenLRS_Init(uint32_t *openlrs_id, uint32_t spi_id,
openlrs_dev->openlrs_rcvr_id = 0; openlrs_dev->openlrs_rcvr_id = 0;
OpenLRSInitialize(); OpenLRSInitialize();
OpenLRSStatusInitialize(); OPLinkStatusInitialize();
DEBUG_PRINTF(2, "OpenLRS UAVOs Initialized\r\n"); DEBUG_PRINTF(2, "OpenLRS UAVOs Initialized\r\n");
OpenLRSData binding; OpenLRSData binding;
OpenLRSGet(&binding); OpenLRSGet(&binding);
@ -1257,9 +1258,9 @@ static void pios_openlrs_task(void *parameters)
// We timed out to sample RSSI // We timed out to sample RSSI
if (openlrs_dev->numberOfLostPackets < 2) { if (openlrs_dev->numberOfLostPackets < 2) {
openlrs_dev->lastRSSITimeUs = openlrs_dev->lastPacketTimeUs; openlrs_dev->lastRSSITimeUs = openlrs_dev->lastPacketTimeUs;
openlrs_status.LastRSSI = rfmGetRSSI(openlrs_dev); // Read the RSSI value oplink_status.RSSI = rfmGetRSSI(openlrs_dev); // Read the RSSI value
// DEBUG_PRINTF(3, "Sampled RSSI: %d %d\r\n", openlrs_status.LastRSSI, delay); // DEBUG_PRINTF(3, "Sampled RSSI: %d %d\r\n", oplink_status.RSSI, delay);
} }
} else { } else {
// We timed out because packet was missed // We timed out because packet was missed

View File

@ -191,7 +191,7 @@ static void PIOS_oplinkrcvr_Supervisor(uint32_t oplinkrcvr_id)
static uint8_t PIOS_OPLinkRCVR_Quality_Get(__attribute__((unused)) uint32_t oplinkrcvr_id) static uint8_t PIOS_OPLinkRCVR_Quality_Get(__attribute__((unused)) uint32_t oplinkrcvr_id)
{ {
uint8_t oplink_quality; uint16_t oplink_quality;
OPLinkStatusLinkQualityGet(&oplink_quality); OPLinkStatusLinkQualityGet(&oplink_quality);

View File

@ -129,7 +129,6 @@ UAVOBJSRCFILENAMES += perfcounter
UAVOBJSRCFILENAMES += systemidentsettings UAVOBJSRCFILENAMES += systemidentsettings
UAVOBJSRCFILENAMES += systemidentstate UAVOBJSRCFILENAMES += systemidentstate
UAVOBJSRCFILENAMES += openlrs UAVOBJSRCFILENAMES += openlrs
UAVOBJSRCFILENAMES += openlrsstatus
UAVOBJSRCFILENAMES += rfm22breceiver UAVOBJSRCFILENAMES += rfm22breceiver
UAVOBJSRC = $(foreach UAVOBJSRCFILE,$(UAVOBJSRCFILENAMES),$(FLIGHT_UAVOBJ_DIR)/$(UAVOBJSRCFILE).c ) UAVOBJSRC = $(foreach UAVOBJSRCFILE,$(UAVOBJSRCFILENAMES),$(FLIGHT_UAVOBJ_DIR)/$(UAVOBJSRCFILE).c )

View File

@ -812,8 +812,9 @@ void PIOS_Board_Init(void)
break; break;
case HWSETTINGS_RM_MAINPORT_DEBUGCONSOLE: case HWSETTINGS_RM_MAINPORT_DEBUGCONSOLE:
#if defined(PIOS_INCLUDE_DEBUG_CONSOLE) #if defined(PIOS_INCLUDE_DEBUG_CONSOLE)
PIOS_Board_configure_com(&pios_usart_main_cfg, 0, PIOS_COM_DEBUGCONSOLE_TX_BUF_LEN, &pios_usart_com_driver, &pios_com_debug_id); {
PIOS_COM_ChangeBaud(pios_com_debug_id, 28800); PIOS_Board_configure_com(&pios_usart_main_cfg, 0, PIOS_COM_DEBUGCONSOLE_TX_BUF_LEN, &pios_usart_com_driver, &pios_com_debug_id);
}
#endif /* PIOS_INCLUDE_DEBUG_CONSOLE */ #endif /* PIOS_INCLUDE_DEBUG_CONSOLE */
break; break;
case HWSETTINGS_RM_MAINPORT_COMBRIDGE: case HWSETTINGS_RM_MAINPORT_COMBRIDGE:

View File

@ -431,7 +431,7 @@ static const struct pios_exti_cfg pios_exti_rfm22b_cfg __exti_config = {
}, },
}; };
const struct pios_rfm22b_cfg pios_rfm22b_rm2_cfg = { const struct pios_rfm22b_cfg pios_rfm22b_cfg = {
.spi_cfg = &pios_spi_telem_flash_cfg, .spi_cfg = &pios_spi_telem_flash_cfg,
.exti_cfg = &pios_exti_rfm22b_cfg, .exti_cfg = &pios_exti_rfm22b_cfg,
.RFXtalCap = 0x7f, .RFXtalCap = 0x7f,
@ -441,7 +441,7 @@ const struct pios_rfm22b_cfg pios_rfm22b_rm2_cfg = {
const struct pios_rfm22b_cfg *PIOS_BOARD_HW_DEFS_GetRfm22Cfg(__attribute__((unused)) uint32_t board_revision) const struct pios_rfm22b_cfg *PIOS_BOARD_HW_DEFS_GetRfm22Cfg(__attribute__((unused)) uint32_t board_revision)
{ {
return &pios_rfm22b_rm2_cfg; return &pios_rfm22b_cfg;
} }
#endif /* PIOS_INCLUDE_RFM22B */ #endif /* PIOS_INCLUDE_RFM22B */
@ -483,7 +483,7 @@ static const struct pios_exti_cfg pios_exti_openlrs_cfg __exti_config = {
const struct pios_openlrs_cfg pios_openlrs_cfg = { const struct pios_openlrs_cfg pios_openlrs_cfg = {
.spi_cfg = &pios_spi_telem_flash_cfg, .spi_cfg = &pios_spi_telem_flash_cfg,
.exti_cfg = &pios_exti_rfm22b_cfg, .exti_cfg = &pios_exti_openlrs_cfg,
.gpio_direction = GPIO0_TX_GPIO1_RX, .gpio_direction = GPIO0_TX_GPIO1_RX,
}; };

View File

@ -129,7 +129,6 @@ UAVOBJSRCFILENAMES += perfcounter
UAVOBJSRCFILENAMES += systemidentsettings UAVOBJSRCFILENAMES += systemidentsettings
UAVOBJSRCFILENAMES += systemidentstate UAVOBJSRCFILENAMES += systemidentstate
UAVOBJSRCFILENAMES += openlrs UAVOBJSRCFILENAMES += openlrs
UAVOBJSRCFILENAMES += openlrsstatus
UAVOBJSRCFILENAMES += rfm22breceiver UAVOBJSRCFILENAMES += rfm22breceiver
UAVOBJSRC = $(foreach UAVOBJSRCFILE,$(UAVOBJSRCFILENAMES),$(FLIGHT_UAVOBJ_DIR)/$(UAVOBJSRCFILE).c ) UAVOBJSRC = $(foreach UAVOBJSRCFILE,$(UAVOBJSRCFILENAMES),$(FLIGHT_UAVOBJ_DIR)/$(UAVOBJSRCFILE).c )

View File

@ -797,7 +797,7 @@ void PIOS_Board_Init(void)
if (oplinkSettings.MaxRFPower != OPLINKSETTINGS_MAXRFPOWER_0) { if (oplinkSettings.MaxRFPower != OPLINKSETTINGS_MAXRFPOWER_0) {
if (openlrs) { if (openlrs) {
#if defined(PIOS_INCLUDE_OPENLRS_RCVR) #if defined(PIOS_INCLUDE_OPENLRS_RCVR)
const struct pios_openlrs_cfg *openlrs_cfg = PIOS_BOARD_HW_DEFS_GetOpenLRSCfg(bdinfo->board_rev); const struct pios_openlrs_cfg *openlrs_cfg = PIOS_BOARD_HW_DEFS_GetOpenLRSCfg();
uint32_t openlrs_id; uint32_t openlrs_id;
PIOS_OpenLRS_Init(&openlrs_id, PIOS_RFM22_SPI_PORT, 0, openlrs_cfg); PIOS_OpenLRS_Init(&openlrs_id, PIOS_RFM22_SPI_PORT, 0, openlrs_cfg);

View File

@ -104,7 +104,6 @@ UAVOBJS = \
$${UAVOBJ_XML_DIR}/nedaccel.xml \ $${UAVOBJ_XML_DIR}/nedaccel.xml \
$${UAVOBJ_XML_DIR}/objectpersistence.xml \ $${UAVOBJ_XML_DIR}/objectpersistence.xml \
$${UAVOBJ_XML_DIR}/openlrs.xml \ $${UAVOBJ_XML_DIR}/openlrs.xml \
$${UAVOBJ_XML_DIR}/openlrsstatus.xml \
$${UAVOBJ_XML_DIR}/oplinkreceiver.xml \ $${UAVOBJ_XML_DIR}/oplinkreceiver.xml \
$${UAVOBJ_XML_DIR}/oplinksettings.xml \ $${UAVOBJ_XML_DIR}/oplinksettings.xml \
$${UAVOBJ_XML_DIR}/oplinkstatus.xml \ $${UAVOBJ_XML_DIR}/oplinkstatus.xml \

View File

@ -1,13 +0,0 @@
<xml>
<object name="OpenLRSStatus" singleinstance="true" settings="false" category="System">
<description>OpenLRS link status.</description>
<field name="LastRSSI" units="" type="uint8" elements="1"/>
<field name="LinkQuality" units="" type="uint16" elements="1"/>
<field name="FailsafeActive" units="function" type="enum" elements="1" options="Inactive,Active" defaultvalue="Inactive"/>
<access gcs="readonly" flight="readwrite"/>
<telemetrygcs acked="false" updatemode="manual" period="0"/>
<telemetryflight acked="false" updatemode="throttled" period="500"/>
<logging updatemode="manual" period="0"/>
</object>
</xml>

View File

@ -18,7 +18,7 @@
<field name="Resets" units="" type="uint8" elements="1" defaultvalue="0"/> <field name="Resets" units="" type="uint8" elements="1" defaultvalue="0"/>
<field name="Timeouts" units="" type="uint8" elements="1" defaultvalue="0"/> <field name="Timeouts" units="" type="uint8" elements="1" defaultvalue="0"/>
<field name="RSSI" units="dBm" type="int8" elements="1" defaultvalue="0"/> <field name="RSSI" units="dBm" type="int8" elements="1" defaultvalue="0"/>
<field name="LinkQuality" units="" type="uint8" elements="1" defaultvalue="0"/> <field name="LinkQuality" units="" type="uint16" elements="1" defaultvalue="0"/>
<field name="TXRate" units="Bps" type="uint16" elements="1" defaultvalue="0"/> <field name="TXRate" units="Bps" type="uint16" elements="1" defaultvalue="0"/>
<field name="RXRate" units="Bps" type="uint16" elements="1" defaultvalue="0"/> <field name="RXRate" units="Bps" type="uint16" elements="1" defaultvalue="0"/>
<field name="TXSeq" units="" type="uint16" elements="1" defaultvalue="0"/> <field name="TXSeq" units="" type="uint16" elements="1" defaultvalue="0"/>