/trunk/GPS.h |
---|
1,6 → 1,7 |
#ifndef __GPS_H |
#define __GPS_H |
#include "ubx.h" |
#include "waypoints.h" |
typedef struct |
10,15 → 11,12 |
s16 Yaw; |
} __attribute__((packed)) GPS_Stick_t; |
extern GPS_Pos_t GPS_HomePosition; |
extern GPS_Pos_t * GPS_pTargetPosition; |
extern Waypoint_t* GPS_pWaypoint; |
extern GPS_Stick_t GPS_Stick; |
void GPS_Navigation(void); |
void GPS_Init(void); |
extern u8 GPS_CopyPosition(GPS_Pos_t * pGPSPosSrc, GPS_Pos_t* pGPSPosTgt); |
void GPS_Navigation(gps_data_t *pGPS_Data, GPS_Stick_t* pGPS_Stick); |
#endif //__GPS_H |
/trunk/Navi-Ctrl.Uv2 |
---|
34,7 → 34,6 |
File 1,1,<.\kml.c><kml.c> |
File 1,1,<.\fifo.c><fifo.c> |
File 1,1,<.\waypoints.c><waypoints.c> |
File 1,1,<.\GPS.c><GPS.c> |
File 1,1,<.\logging.c><logging.c> |
File 1,1,<.\gpx.c><gpx.c> |
File 1,1,<.\mkprotocol.c><mkprotocol.c> |
175,8 → 174,8 |
ALDTADR (0x000000) |
ALDDADR (0x4000000) |
ALDBSSR () |
ALDICLB () |
ALDICDR () |
ALDICLB (nc) |
ALDICDR (./) |
ALDMISC () |
ALDSCAT (.\scripts\flash_str9.ld) |
OPTDL (SARM.DLL)(-cSTR91x)(DARMST9.DLL)(-pSTR910)(SARM.DLL)(-cSTR91x)(TARMST9.DLL)(-pSTR910) |
/trunk/gpx.c |
---|
275,7 → 275,7 |
if(doc == NULL) return(0); |
if((GPSData.Position.Status != INVALID) && (GPS_HomePosition.Status != INVALID)) |
if((GPSData.Position.Status != INVALID) && (NaviData.HomePosition.Status != INVALID)) |
{ |
if(doc->state == GPX_DOC_TRACKSEGMENT_OPENED) |
{ |
298,7 → 298,7 |
sprintf(string, "lon=\"%c%ld.%07ld\">\r\n",u8_1, i32_1, i32_2); |
fputs_(string, doc->file); |
// write <ele> taga |
i32_2 = GPSData.Position.Altitude - GPS_HomePosition.Altitude; |
i32_2 = GPSData.Position.Altitude - NaviData.HomePosition.Altitude; |
if(i32_2 < 0) i32_2 = 0; // avoid negative altitudes in log |
i32_1 = i32_2/1000L; |
i32_2 = i32_2%1000L; |
374,7 → 374,7 |
sprintf(string, "<RCSticks>%d, %d, %d</RCSticks>\r\n", FC.StickNick,FC.StickRoll, FC.StickYaw); |
fputs_(string, doc->file); |
// GPS Sticks as Nick/Roll/Yaw |
sprintf(string, "<GPSSticks>%d, %d, %d</GPSSticks>\r\n", GPS_Stick.Nick, GPS_Stick.Roll, GPS_Stick.Yaw); |
sprintf(string, "<GPSSticks>%d, %d, %d</GPSSticks>\r\n", ToFlightCtrl.GPSStick.Nick, ToFlightCtrl.GPSStick.Roll, ToFlightCtrl.GPSStick.Yaw); |
fputs_(string, doc->file); |
// eof extensions |
/trunk/kml.c |
---|
59,6 → 59,7 |
#include "91x_lib.h" |
#include "kml.h" |
#include "kml_header.h" |
#include "uart1.h" |
//________________________________________________________________________________________________________________________________________ |
303,7 → 304,7 |
if(doc == NULL) return(0); |
if((GPSData.Position.Status != INVALID) && (GPS_HomePosition.Status != INVALID)) |
if((GPSData.Position.Status != INVALID) && (NaviData.HomePosition.Status != INVALID)) |
{ |
if(doc->state == KML_DOC_LINESTRING_OPENED) |
{ |
324,7 → 325,7 |
sprintf(string,"%c%ld.%07ld,",sign, i1, i2); |
fputs_(string, doc->file); |
// calculate relative altitude with respect to the altitude of the home position |
rel_altitude = GPSData.Position.Altitude - GPS_HomePosition.Altitude; |
rel_altitude = GPSData.Position.Altitude - NaviData.HomePosition.Altitude; |
if(rel_altitude < 0) rel_altitude = 0; // avoid negative altitudes in log |
i1 = rel_altitude/1000L; |
i2 = rel_altitude%1000L; |
/trunk/main.c |
---|
63,7 → 63,7 |
#include "uart0.h" |
#include "uart1.h" |
#include "uart2.h" |
#include "GPS.h" |
#include "gps.h" |
#include "i2c.h" |
#include "timer1.h" |
#include "timer2.h" |
296,11 → 296,10 |
if(CheckDelay(TimerCheckError)) |
{ |
TimerCheckError = SetDelay(1000); |
if(CheckDelay(SPI0_Timeout)) GPS_Navigation(); // process the GPS data even if the FC is not connected |
if(CheckDelay(SPI0_Timeout)) GPS_Navigation(&GPSData, &(ToFlightCtrl.GPSStick)); // process the GPS data even if the FC is not connected |
CheckErrors(); |
if(FC.Flags & FCFLAG_FLY) NaviData.FlyingTime++; // we want to count the battery-time |
// else NaviData.FlyingTime = 0; // not the time per flight |
UART1_Request_SendFollowMe = TRUE; |
if(SerialLinkOkay) SerialLinkOkay--; |
if(SerialLinkOkay < 250 - 5) NCFlags |= NC_FLAG_NOSERIALLINK; // 5 seconds timeout for serial communication |
else NCFlags &= ~NC_FLAG_NOSERIALLINK; |
/trunk/main.h |
---|
2,8 → 2,8 |
#define _MAIN_H |
#define VERSION_MAJOR 0 |
#define VERSION_MINOR 18 |
#define VERSION_PATCH 2 |
#define VERSION_MINOR 19 |
#define VERSION_PATCH 0 |
#define VERSION_SERIAL_MAJOR 11 |
#define VERSION_SERIAL_MINOR 0 |
/trunk/menu.c |
---|
244,7 → 244,7 |
break; |
case 7: |
LCD_printfxy(0,0,"Home Position"); |
if(GPS_HomePosition.Status == INVALID) |
if(NaviData.HomePosition.Status == INVALID) |
{ |
LCD_printfxy(0,1," "); |
LCD_printfxy(0,2," Is not set. "); |
252,20 → 252,20 |
} |
else |
{ |
if(GPS_HomePosition.Longitude < 0) sign = '-'; |
if(NaviData.HomePosition.Longitude < 0) sign = '-'; |
else sign = '+'; |
i1 = abs(GPS_HomePosition.Longitude)/10000000L; |
i2 = abs(GPS_HomePosition.Longitude)%10000000L; |
i1 = abs(NaviData.HomePosition.Longitude)/10000000L; |
i2 = abs(NaviData.HomePosition.Longitude)%10000000L; |
LCD_printfxy(0,1,"Lon:%c%03ld.%07ld deg",sign, i1, i2); |
if(GPS_HomePosition.Latitude < 0) sign = '-'; |
if(NaviData.HomePosition.Latitude < 0) sign = '-'; |
else sign = '+'; |
i1 = abs(GPS_HomePosition.Latitude)/10000000L; |
i2 = abs(GPS_HomePosition.Latitude)%10000000L; |
i1 = abs(NaviData.HomePosition.Latitude)/10000000L; |
i2 = abs(NaviData.HomePosition.Latitude)%10000000L; |
LCD_printfxy(0,2,"Lat:%c%03ld.%07ld deg",sign, i1, i2); |
if(GPS_HomePosition.Altitude < 0) sign = '-'; |
if(NaviData.HomePosition.Altitude < 0) sign = '-'; |
else sign = '+'; |
i1 = abs(GPS_HomePosition.Altitude)/1000L; |
i2 = abs(GPS_HomePosition.Altitude)%1000L; |
i1 = abs(NaviData.HomePosition.Altitude)/1000L; |
i2 = abs(NaviData.HomePosition.Altitude)%1000L; |
LCD_printfxy(0,3,"Alt:%c%04ld.%03ld m",sign, i1, i2); |
} |
break; |
/trunk/spi_slave.c |
---|
58,7 → 58,7 |
#include <string.h> |
#include "91x_lib.h" |
#include "led.h" |
#include "GPS.h" |
#include "gps.h" |
#include "uart1.h" |
#include "spi_slave.h" |
#include "i2c.h" |
75,8 → 75,8 |
#define SPI_TXSYNCBYTE2 0x55 |
//communication packets |
volatile FromFlightCtrl_t FromFlightCtrl; |
volatile ToFlightCtrl_t ToFlightCtrl; |
FromFlightCtrl_t FromFlightCtrl; |
ToFlightCtrl_t ToFlightCtrl; |
#define SPI0_TIMEOUT 500 // 500ms |
volatile u32 SPI0_Timeout = 0; |
256,6 → 256,10 |
// set the pointer to the checksum byte in the tx buffer |
Ptr_TxChksum = (u8 *) &(((ToFlightCtrl_t *) &(SPI_TxBuffer[2]))->Chksum); |
ToFlightCtrl.GPSStick.Nick = 0; |
ToFlightCtrl.GPSStick.Roll = 0; |
ToFlightCtrl.GPSStick.Yaw = 0; |
VIC_Config(SSP0_ITLine, VIC_IRQ, PRIORITY_SPI0); |
VIC_ITCmd(SSP0_ITLine, ENABLE); |
276,9 → 280,6 |
VIC_ITCmd(SSP0_ITLine, DISABLE); // disable SPI interrupt |
ToFlightCtrl.CompassHeading = I2C_Heading.Heading; |
DebugOut.Analog[10] = ToFlightCtrl.CompassHeading; |
ToFlightCtrl.GPS_Nick = GPS_Stick.Nick; |
ToFlightCtrl.GPS_Roll = GPS_Stick.Roll; |
ToFlightCtrl.GPS_Yaw = GPS_Stick.Yaw; |
// cycle spi commands |
ToFlightCtrl.Command = SPI_CommandSequence[SPI_CommandCounter++]; |
// restart command cycle at the end |
427,7 → 428,8 |
} |
// every time we got new data from the FC via SPI call the navigation routine |
GPS_Navigation(); |
// and update GPSStick that are returned to FC |
GPS_Navigation(&GPSData, &(ToFlightCtrl.GPSStick)); |
ClearFCFlags = 1; |
if(counter) |
/trunk/spi_slave.h |
---|
2,6 → 2,7 |
#define _SPI_SLAVE_H |
#include "fifo.h" |
#include "gps.h" |
#define SS_PIN GPIO_ReadBit(GPIO2, GPIO_Pin_7) |
53,9 → 54,7 |
typedef struct |
{ |
u8 Command; |
s16 GPS_Nick; |
s16 GPS_Roll; |
s16 GPS_Yaw; |
GPS_Stick_t GPSStick; |
s16 CompassHeading; |
s16 Status; |
u16 BeepTime; |
82,8 → 81,8 |
u8 Hardware; |
} __attribute__((packed)) SPI_Version_t; |
extern volatile FromFlightCtrl_t FromFlightCtrl; |
extern volatile ToFlightCtrl_t ToFlightCtrl; |
extern FromFlightCtrl_t FromFlightCtrl; |
extern ToFlightCtrl_t ToFlightCtrl; |
extern volatile u32 SPI0_Timeout; |
extern SPI_Version_t FC_Version; |
extern fifo_t CompassCalcStateFiFo; |
/trunk/uart1.c |
---|
82,7 → 82,6 |
u32 UART1_AboTimeOut = 0; |
u8 UART1_Request_VersionInfo = FALSE; |
u8 UART1_Request_SendFollowMe = FALSE; |
u8 UART1_Request_ExternalControl= FALSE; |
u8 UART1_Request_Display = FALSE; |
u8 UART1_Request_Display1 = FALSE; |
164,7 → 163,6 |
ExternControl_t ExternControl; |
UART_VersionInfo_t UART_VersionInfo; |
NaviData_t NaviData; |
Waypoint_t FollowMe; |
Data3D_t Data3D; |
u16 Echo; // 2 bytes recieved will be sent back as echo |
738,22 → 736,6 |
MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 'E', NC_ADDRESS, 1, (u8 *)&ErrorMSG, sizeof(ErrorMSG)); |
UART1_Request_ErrorMessage = FALSE; |
} |
else if(UART1_Request_SendFollowMe && (UART1_tx_buffer.Locked == FALSE) && (GPSData.NumOfSats >= 4)) // sending for "Follow me" |
{ |
GPS_CopyPosition(&(GPSData.Position),&(FollowMe.Position)); |
FollowMe.Position.Status = NEWDATA; |
FollowMe.Heading = -1; |
FollowMe.ToleranceRadius = 1; |
FollowMe.HoldTime = 60; |
FollowMe.Event_Flag = 0; |
FollowMe.Index = 1; |
FollowMe.reserve[0] = 0; // reserve |
FollowMe.reserve[1] = 0; // reserve |
FollowMe.reserve[2] = 0; // reserve |
FollowMe.reserve[3] = 0; // reserve |
MKProtocol_CreateSerialFrame(&UART1_tx_buffer, 's', NC_ADDRESS, 1, (u8 *)&FollowMe, sizeof(FollowMe)); |
UART1_Request_SendFollowMe = FALSE; |
} |
UART1_Transmit(); // output pending bytes in tx buffer |
} |