Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 130 → Rev 243

/branches/GPS_BETA_chris2798_hallo2/uart.c
3,10 → 3,6
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// +
// + GPS read out:
// + modified Version of the Pitschu Brushless Ufo - (c) Peter Schulten, Mülheim, Germany
// + only for non-profit use
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
42,8 → 38,6
#define GPS_CKA 7
#define GPS_CKB 8
 
//gpsInfo_t gpsPoints[5]; // stored position to fly to (currently only 1 target supported)
//gpsInfo_t *gpsTarget; // points to one of the targets
gpsInfo_t actualPos; // measured position (last gps record)
 
#define SYNC_CHAR1 0xb5
50,12 → 44,9
#define SYNC_CHAR2 0x62
 
#define CLASS_NAV 0x01
#define MSGID_POSECEF 0x01
#define MSGID_STATUS 0x03
//#define MSGID_POSLLH 0x02
#define MSGID_VELECEF 0x11
//#define MSGID_POSUTM 0x08
//#define MSGID_VELNED 0x12
#define MSGID_POSUTM 0x08
#define MSGID_VELNED 0x12
 
 
 
70,19 → 61,7
uint8_t packetStatus;
} NAV_STATUS_t;
 
/*
typedef struct {
unsigned long ITOW; // time of week
long LON; // longitude in 1e-07 deg
long LAT; // lattitude
long HEIGHT; // height in mm
long HMSL; // height above mean sea level im mm
unsigned long Hacc; // horizontal accuracy in mm
unsigned long Vacc; // vertical accuracy in mm
uint8_t packetStatus;
} NAV_POSLLH_t;
 
 
typedef struct {
unsigned long ITOW; // time of week
long EAST; // cm UTM Easting
106,35 → 85,11
unsigned long CAcc; // deg Course / Heading Accuracy Estimate
uint8_t packetStatus;
} NAV_VELNED_t;
*/
 
typedef struct {
unsigned long ITOW; // ms GPS Millisecond Time of Week
long ECEF_X; // ecef x / cm
long ECEF_Y; // ecef y / cm
long ECEF_Z; // ecef z / cm
unsigned long Pacc; // Abweichung
uint8_t packetStatus;
} NAV_POSECEF_t ;
 
typedef struct {
unsigned long ITOW; // ms GPS Millisecond Time of Week
long ECEFVX; // ecef x velocity cm/s
long ECEFVY; // ecef y velocity cm/s
long ECEFVZ; // ecef z velocity cm/s
unsigned long SAcc; // Abweichung
uint8_t packetStatus;
} NAV_VELECEF_t;
 
 
NAV_STATUS_t navStatus;
NAV_POSECEF_t navPosECEF;
NAV_VELECEF_t navVelECEF;
NAV_POSUTM_t navPosUtm;
NAV_VELNED_t navVelNed;
 
//NAV_POSLLH_t navPosLlh;
//NAV_POSUTM_t navPosUtm;
//NAV_VELECEF avVelNed;
 
volatile char *ubxP, *ubxEp, *ubxSp; // pointers to packet currently transfered
volatile uint8_t CK_A, CK_B; // UBX checksum bytes
volatile unsigned short msgLen;
181,14 → 136,6
{
 
 
if (navPosECEF.packetStatus == 1) // valid packet
{
actualPos.x = navPosECEF.ECEF_X; //ECEF X in cm
actualPos.y = navPosECEF.ECEF_Y; //ECEF Y in cm
actualPos.z = navPosECEF.ECEF_Z; //ECEF Z in cm
navPosECEF.packetStatus = 0;
}
 
if (navStatus.packetStatus == 1) // valid packet
{
195,39 → 142,25
actualPos.state = navStatus.GPSfix;
navStatus.packetStatus = 0;
}
if (navVelECEF.packetStatus == 1) // valid packet
{
actualPos.vx = navVelECEF.ECEFVX; //ECEF VEL X in cm/s
actualPos.vy = navVelECEF.ECEFVY; //ECEF VEL Y in cm/s
actualPos.vz = navVelECEF.ECEFVZ; //ECEF VEL Z in cm/s
navVelECEF.packetStatus = 0;
}
/*
 
if (navPosUtm.packetStatus == 1) // valid packet
{
actualPos.northing = navPosUtm.NORTH; ///10; // in 10cm;
actualPos.northing = navPosUtm.NORTH; ///10;
actualPos.easting = navPosUtm.EAST; //10;
actualPos.altitude = navPosUtm.ALT; //10;
navPosUtm.packetStatus = 0;
}
 
 
if (navPosLlh.packetStatus == 1)
navPosLlh.packetStatus = 0;
if (navVelNed.packetStatus == 1){
actualPos.velNorth = navVelNed.VEL_N;
actualPos.velEast = navVelNed.VEL_E;
actualPos.velDown = navVelNed.VEL_D;
navVelNed.packetStatus = 0;}
 
navPosLlh and navVelNed currently not used
*/
if (actualPos.state == 2){ROT_ON; gps_new=1;} //-> Rot blinkt mit 4Hz wenn GPS 2D-Fix
else if (actualPos.state == 3){GRN_OFF; gps_new=1;} //-> Grün blinkt mit 4Hz wenn GPS 3D-Fix
}
 
if (actualPos.state != 0){ROT_ON;} //-> Rot blinkt mit 4Hz wenn GPS Signal brauchbar
 
}
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
240,10 → 173,7
 
SioTmp = UDR;
uint8_t c;
uint8_t c;
uint8_t re;
 
re = (UCSR0A & (_B1(FE0) | _B1(DOR0))); // any error occured ?
296,26 → 226,6
ubxSp = (char*)&navStatus.packetStatus;
ignorePacket = navStatus.packetStatus;
break;
case MSGID_POSECEF:
ubxP = (char*)&navPosECEF;
ubxEp = (char*)(&navPosECEF + sizeof(NAV_POSECEF_t));
ubxSp = (char*)&navPosECEF.packetStatus;
ignorePacket = navPosECEF.packetStatus;
break;
case MSGID_VELECEF:
ubxP = (char*)&navVelECEF;
ubxEp = (char*)(&navVelECEF + sizeof(NAV_VELECEF_t));
ubxSp = (char*)&navVelECEF.packetStatus;
ignorePacket = navVelECEF.packetStatus;
break;
/*
case MSGID_POSLLH:
ubxP = (char*)&navPosLlh;
ubxEp = (char*)(&navPosLlh + sizeof(NAV_POSLLH_t));
ubxSp = (char*)&navPosLlh.packetStatus;
ignorePacket = navPosLlh.packetStatus;
break;
case MSGID_POSUTM:
ubxP = (char*)&navPosUtm;
ubxEp = (char*)(&navPosUtm + sizeof(NAV_POSUTM_t));
328,8 → 238,8
ubxSp = (char*)&navVelNed.packetStatus;
ignorePacket = navVelNed.packetStatus;
break;
*/
default:
ignorePacket = 1;
ubxSp = (char*)0;
379,13 → 289,8
GPSscanData (); //Test kann ggf. wieder gelöscht werden!
}
GPSscanData ();
 
 
if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{
402,7 → 307,7
NeuerDatensatzEmpfangen = 1;
AnzahlEmpfangsBytes = buf_ptr;
RxdBuffer[buf_ptr] = '\r';
if(/*(RxdBuffer[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando
if(RxdBuffer[2] == 'R') wdt_enable(WDTO_250MS); // Reset-Commando
}
}
else
449,6 → 354,7
}
 
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
521,7 → 427,7
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2], DebugIn.Analog[i]);
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2 + 1], DebugIn.Analog[i] >> 8);
}*/
RemoteTasten |= DebugIn.RemoteTasten;
//RemoteTasten |= DebugIn.RemoteTasten;
DebugDataAnforderung = 1;
break;
 
616,8 → 522,6
//fdevopen (uart_putchar, 0);
//sbi(PORTD,4);
Debug_Timer = SetDelay(200);
gpsState = GPS_EMPTY;
}
 
//---------------------------------------------------------------------------------------------
643,8 → 547,12
{
Menu();
DebugDisplayAnforderung = 0;
if(++dis_zeile == 4) dis_zeile = 0;
SendOutData('0' + dis_zeile,0,&DisplayBuff[20 * dis_zeile],20); // DisplayZeile übertragen
if(++dis_zeile == 4)
{
SendOutData('4',0,&PPM_in,sizeof(PPM_in)); // DisplayZeile übertragen
dis_zeile = -1;
}
else SendOutData('0' + dis_zeile,0,&DisplayBuff[20 * dis_zeile],20); // DisplayZeile übertragen
}
if(GetVersionAnforderung && UebertragungAbgeschlossen)
{