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

OP-1434 - Add support for OP custom sentences on flight board

This commit is contained in:
Alessio Morale 2014-07-17 20:39:47 +02:00
parent 55557ecd60
commit 397bfdc08b
3 changed files with 62 additions and 2 deletions

View File

@ -40,7 +40,7 @@
#include "gpssettings.h"
#include "taskinfo.h"
#include "hwsettings.h"
#include "auxmagsensor.h"
#include "WorldMagModel.h"
#include "CoordinateConversions.h"
@ -153,6 +153,8 @@ int32_t GPSInitialize(void)
GPSTimeInitialize();
GPSSatellitesInitialize();
HomeLocationInitialize();
AuxMagSensorInitialize();
GPSExtendedStatusInitialize();
updateSettings();
#else

View File

@ -293,6 +293,30 @@ void parse_ubx_nav_pvt(struct UBX_NAV_PVT *pvt, GPSPositionSensorData *GpsPositi
}
#endif
}
void parse_ubx_op_sys(struct UBX_OP_SYSINFO *sysinfo)
{
GPSExtendedStatusData data;
data.FlightTime = sysinfo->flightTime;
data.HeapRemaining = sysinfo->HeapRemaining;
data.IRQStackRemaining = sysinfo->IRQStackRemaining;
data.SysModStackRemaining = sysinfo->SystemModStackRemaining;
data.Options = sysinfo->options;
data.Status = GPSEXTENDEDSTATUS_STATUS_GPSV9;
GPSExtendedStatusSet(&data);
}
void parse_ubx_op_mag(struct UBX_OP_MAG *mag)
{
AuxMagSensorData data;
data.x = mag->x;
data.y = mag->y;
data.z = mag->z;
data.Status = mag->Status;
AuxMagSensorSet(&data);
}
#if !defined(PIOS_GPS_MINIMAL)
void parse_ubx_nav_timeutc(struct UBX_NAV_TIMEUTC *timeutc)
{
@ -401,6 +425,16 @@ uint32_t parse_ubx_message(struct UBXPacket *ubx, GPSPositionSensorData *GpsPosi
#endif
}
break;
case UBX_CLASS_OP_CUST:
switch (ubx->header.id) {
case UBX_ID_SYS:
parse_ubx_op_sys(&ubx->payload.op_sysinfo);
break;
case UBX_ID_MAG:
parse_ubx_op_mag(&ubx->payload.op_mag);
break;
}
break;
}
if (msgtracker.msg_received == ALL_RECEIVED) {

View File

@ -32,6 +32,8 @@
#define UBX_H
#include "openpilot.h"
#include "gpspositionsensor.h"
#include "gpsextendedstatus.h"
#include "auxmagsensor.h"
#include "GPS.h"
@ -41,7 +43,8 @@
// From u-blox6 receiver protocol specification
// Messages classes
#define UBX_CLASS_NAV 0x01
#define UBX_CLASS_NAV 0x01
#define UBX_CLASS_OP_CUST 0x99
// Message IDs
#define UBX_ID_POSLLH 0x02
@ -53,6 +56,8 @@
#define UBX_ID_SVINFO 0x30
#define UBX_ID_PVT 0x07
#define UBX_ID_SYS 0x01
#define UBX_ID_MAG 0x02
// private structures
// Geodetic Position Solution
@ -245,6 +250,23 @@ struct UBX_NAV_SVINFO {
struct UBX_NAV_SVINFO_SV sv[MAX_SVS]; // Repeated 'numCh' times
};
// OP custom messages
struct UBX_OP_SYSINFO {
uint32_t flightTime;
uint32_t HeapRemaining;
uint16_t IRQStackRemaining;
uint16_t SystemModStackRemaining;
uint16_t options;
};
// OP custom messages
struct UBX_OP_MAG {
uint16_t x;
uint16_t y;
uint16_t z;
uint16_t Status;
};
typedef union {
uint8_t payload[0];
struct UBX_NAV_POSLLH nav_posllh;
@ -257,6 +279,8 @@ typedef union {
struct UBX_NAV_TIMEUTC nav_timeutc;
struct UBX_NAV_SVINFO nav_svinfo;
#endif
struct UBX_OP_SYSINFO op_sysinfo;
struct UBX_OP_MAG op_mag;
} UBXPayload;
struct UBXHeader {