Subversion Repositories NaviCtrl

Compare Revisions

Ignore whitespace Rev 214 → Rev 215

/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
}