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

LP-190: Final testing and bug fixes.

This commit is contained in:
Brian Webb 2016-07-09 14:57:22 -07:00
parent 91ea8966da
commit 0738c8a78a
12 changed files with 62 additions and 48 deletions

View File

@ -190,8 +190,6 @@ static void systemTask(__attribute__((unused)) void *parameters)
oplinkStatus.TXSeq = radio_stats.tx_seq; oplinkStatus.TXSeq = radio_stats.tx_seq;
oplinkStatus.RXSeq = radio_stats.rx_seq; oplinkStatus.RXSeq = radio_stats.rx_seq;
oplinkStatus.LinkState = radio_stats.link_state; oplinkStatus.LinkState = radio_stats.link_state;
} else {
oplinkStatus.LinkState = OPLINKSTATUS_LINKSTATE_DISABLED;
} }
if (radio_stats.link_state == OPLINKSTATUS_LINKSTATE_CONNECTED) { if (radio_stats.link_state == OPLINKSTATUS_LINKSTATE_CONNECTED) {

View File

@ -170,13 +170,13 @@ static int32_t RadioComBridgeStart(void)
} }
// Configure our UAVObjects for updates. // Configure our UAVObjects for updates.
UAVObjConnectQueue(UAVObjGetByID(OPLINKSTATUS_OBJID), data->uavtalkEventQueue, EV_UPDATED | EV_UPDATED_MANUAL | EV_UPDATE_REQ);
UAVObjConnectQueue(UAVObjGetByID(OBJECTPERSISTENCE_OBJID), data->uavtalkEventQueue, EV_UPDATED | EV_UPDATED_MANUAL); UAVObjConnectQueue(UAVObjGetByID(OBJECTPERSISTENCE_OBJID), data->uavtalkEventQueue, EV_UPDATED | EV_UPDATED_MANUAL);
if (data->isCoordinator) { if (data->isCoordinator) {
UAVObjConnectQueue(UAVObjGetByID(OPLINKRECEIVER_OBJID), data->radioEventQueue, EV_UPDATED | EV_UPDATED_MANUAL | EV_UPDATE_REQ); UAVObjConnectQueue(UAVObjGetByID(OPLINKRECEIVER_OBJID), data->radioEventQueue, EV_UPDATED | EV_UPDATED_MANUAL | EV_UPDATE_REQ);
} else { } else {
UAVObjConnectQueue(UAVObjGetByID(OPLINKRECEIVER_OBJID), data->uavtalkEventQueue, EV_UPDATED | EV_UPDATED_MANUAL | EV_UPDATE_REQ); UAVObjConnectQueue(UAVObjGetByID(OPLINKRECEIVER_OBJID), data->uavtalkEventQueue, EV_UPDATED | EV_UPDATED_MANUAL | EV_UPDATE_REQ);
} }
registerObject(OPLinkStatusHandle());
if (data->isCoordinator) { if (data->isCoordinator) {
registerObject(RadioComBridgeStatsHandle()); registerObject(RadioComBridgeStatsHandle());

View File

@ -57,8 +57,6 @@ 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 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);
@ -789,6 +787,9 @@ static void pios_openlrs_setup(struct pios_openlrs_dev *openlrs_dev, bool bind)
printVersion(OPENLRSNG_VERSION); printVersion(OPENLRSNG_VERSION);
#endif #endif
// Get the OPLinkStatus UAVO
OPLinkStatusData oplink_status;
OPLinkStatusGet(&oplink_status);
if (bind) { if (bind) {
oplink_status.LinkState = OPLINKSTATUS_LINKSTATE_BINDING; oplink_status.LinkState = OPLINKSTATUS_LINKSTATE_BINDING;
if (pios_openlrs_bind_receive(openlrs_dev, 0)) { if (pios_openlrs_bind_receive(openlrs_dev, 0)) {
@ -817,6 +818,9 @@ static void pios_openlrs_setup(struct pios_openlrs_dev *openlrs_dev, bool bind)
openlrs_dev->link_acquired = 0; openlrs_dev->link_acquired = 0;
openlrs_dev->lastPacketTimeUs = micros(); openlrs_dev->lastPacketTimeUs = micros();
// Update the OPLinkStatus UAVO
OPLinkStatusSet(&oplink_status);
DEBUG_PRINTF(2, "OpenLRSng RX setup complete\r\n"); DEBUG_PRINTF(2, "OpenLRSng RX setup complete\r\n");
} }
@ -835,6 +839,13 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
to_rx_mode(openlrs_dev); to_rx_mode(openlrs_dev);
} }
// Get the OPLinkStatus UAVO
OPLinkStatusData oplink_status;
OPLinkStatusGet(&oplink_status);
// Update the RSSI
oplink_status.RSSI = openlrs_dev->rssi;
timeUs = micros(); timeUs = micros();
timeMs = millis(); timeMs = millis();
@ -922,7 +933,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] = oplink_status.RSSI; tx_buf[1] = openlrs_dev->rssi;
if (FlightBatteryStateHandle()) { if (FlightBatteryStateHandle()) {
FlightBatteryStateData bat; FlightBatteryStateData bat;
FlightBatteryStateGet(&bat); FlightBatteryStateGet(&bat);
@ -1043,6 +1054,11 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
uint8_t PIOS_OpenLRS_RSSI_Get(void) uint8_t PIOS_OpenLRS_RSSI_Get(void)
{ {
// Get the OPLinkStatus UAVO
OPLinkStatusData oplink_status;
OPLinkStatusGet(&oplink_status);
if (oplink_status.LinkState != OPLINKSTATUS_LINKSTATE_CONNECTED) { if (oplink_status.LinkState != OPLINKSTATUS_LINKSTATE_CONNECTED) {
return 0; return 0;
} else { } else {
@ -1286,9 +1302,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;
oplink_status.RSSI = rfmGetRSSI(openlrs_dev); // Read the RSSI value openlrs_dev->rssi = rfmGetRSSI(openlrs_dev); // Read the RSSI value
// DEBUG_PRINTF(3, "Sampled RSSI: %d %d\r\n", oplink_status.RSSI, delay); // DEBUG_PRINTF(3, "Sampled RSSI: %d %d\r\n", openlrs_dev->RSSI, delay);
} }
} else { } else {
// We timed out because packet was missed // We timed out because packet was missed

View File

@ -602,7 +602,6 @@ void PIOS_RFM22B_SetChannelConfig(uint32_t rfm22b_id, enum rfm22b_datarate datar
if (!PIOS_RFM22B_Validate(rfm22b_dev)) { if (!PIOS_RFM22B_Validate(rfm22b_dev)) {
return; return;
} }
ppm_mode = ppm_mode;
rfm22b_dev->coordinator = coordinator; rfm22b_dev->coordinator = coordinator;
rfm22b_dev->ppm_send_mode = ppm_mode && coordinator; rfm22b_dev->ppm_send_mode = ppm_mode && coordinator;
rfm22b_dev->ppm_recv_mode = ppm_mode && !coordinator; rfm22b_dev->ppm_recv_mode = ppm_mode && !coordinator;

View File

@ -184,6 +184,8 @@ struct pios_openlrs_dev {
uint8_t rx_buf[64]; uint8_t rx_buf[64];
uint8_t tx_buf[9]; uint8_t tx_buf[9];
int8_t rssi;
// Variables from OpenLRS for radio control // Variables from OpenLRS for radio control
uint8_t hopcount; uint8_t hopcount;
uint32_t lastPacketTimeUs; uint32_t lastPacketTimeUs;

View File

@ -268,8 +268,8 @@ void ConfigOPLinkWidget::protocolChanged()
m_oplink->CustomDeviceID->setEnabled(is_coordinator); m_oplink->CustomDeviceID->setEnabled(is_coordinator);
m_oplink->MinimumChannel->setEnabled(is_receiver || is_coordinator); m_oplink->MinimumChannel->setEnabled(is_receiver || is_coordinator);
m_oplink->MaximumChannel->setEnabled(is_receiver || is_coordinator); m_oplink->MaximumChannel->setEnabled(is_receiver || is_coordinator);
m_oplink->MainPort->setEnabled((is_receiver || is_coordinator) && is_oplm); m_oplink->MainPort->setEnabled(is_oplm);
m_oplink->FlexiPort->setEnabled((is_receiver || is_coordinator) && is_oplm); m_oplink->FlexiPort->setEnabled(is_oplm);
m_oplink->VCPPort->setEnabled((is_receiver || is_coordinator) && is_oplm); m_oplink->VCPPort->setEnabled((is_receiver || is_coordinator) && is_oplm);
m_oplink->LinkType->setEnabled(is_enabled && !is_openlrs); m_oplink->LinkType->setEnabled(is_enabled && !is_openlrs);
m_oplink->MaxRFTxPower->setEnabled(is_enabled && !is_openlrs); m_oplink->MaxRFTxPower->setEnabled(is_enabled && !is_openlrs);
@ -346,7 +346,6 @@ void ConfigOPLinkWidget::updateCustomDeviceID()
void ConfigOPLinkWidget::unbind() void ConfigOPLinkWidget::unbind()
{ {
if (settingsUpdated) { if (settingsUpdated) {
// Clear the coordinator ID // Clear the coordinator ID
oplinkSettingsObj->getField("CoordID")->setValue(0); oplinkSettingsObj->getField("CoordID")->setValue(0);
m_oplink->CoordID->setText("0"); m_oplink->CoordID->setText("0");

View File

@ -31,7 +31,7 @@
<access gcs="readonly" flight="readwrite"/> <access gcs="readonly" flight="readwrite"/>
<telemetrygcs acked="false" updatemode="manual" period="0"/> <telemetrygcs acked="false" updatemode="manual" period="0"/>
<telemetryflight acked="false" updatemode="throttled" period="500"/> <telemetryflight acked="false" updatemode="periodic" period="500"/>
<logging updatemode="manual" period="0"/> <logging updatemode="manual" period="0"/>
</object> </object>
</xml> </xml>