Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 744 → Rev 745

/branches/V0.68d Code Redesign killagreg/uart.c
1,4 → 1,4
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
21,8 → 21,10
#define FALSE 0
#define TRUE 1
 
uint8_t DebugGetAnforderung = 0, DebugDisplayAnforderung = 0, DebugDataAnforderung = 0, GetVersionAnforderung = 0;
//int8_t test __attribute__ ((section (".noinit")));
 
uint8_t DebugGetRequest = 0, DebugDisplayRequest = 0, DebugDataRequest = 0, GetVersionRequest = 0;
 
volatile uint8_t txd_buffer[TXD_BUFFER_LEN];
volatile uint8_t rxd_buffer_locked = FALSE;
volatile uint8_t rxd_buffer[RXD_BUFFER_LEN];
35,7 → 37,7
uint8_t PcAccess = 100;
uint8_t MotorTest[4] = {0,0,0,0};
uint8_t DubWiseKeys[4] = {0,0,0,0};
uint8_t MySlaveAddr;
uint8_t MySlaveAddr = 0;
uint8_t ConfirmFrame;
 
DebugOut_t DebugOut;
218,7 → 220,7
ReceivedBytes = ptr_rxd_buffer; // store number of received bytes
rxd_buffer[ptr_rxd_buffer] = '\r'; // set termination character
// if 2nd byte is an 'R' enable watchdog that will result in an reset
if(rxd_buffer[2] == 'R') wdt_enable(WDTO_250MS); // Reset-Commando
if(rxd_buffer[2] == 'R') {wdt_enable(WDTO_250MS);} // Reset-Commando
}
else
{ // checksum invalid
255,7 → 257,7
 
 
// --------------------------------------------------------------------------
void SendOutData(uint8_t cmd,uint8_t modul, uint8_t *snd, uint8_t len)
void SendOutData(uint8_t cmd,uint8_t module, uint8_t *snd, uint8_t len)
{
uint16_t pt = 0;
uint8_t a,b,c;
262,7 → 264,7
uint8_t ptr = 0;
 
txd_buffer[pt++] = '#'; // Start character
txd_buffer[pt++] = modul; // Address (a=0; b=1,...)
txd_buffer[pt++] = module; // Address (a=0; b=1,...)
txd_buffer[pt++] = cmd; // Command
 
while(len)
280,7 → 282,7
 
 
// --------------------------------------------------------------------------
void Decode64(uint8_t *ptrOut, uint8_t len, uint8_t ptrIn, uint8_t max) // Wohin mit den Daten; Wie lang; Wo im rxd_buffer
void Decode64(uint8_t *ptrOut, uint8_t len, uint8_t ptrIn, uint8_t max)
{
uint8_t a,b,c,d;
uint8_t ptr = 0;
291,7 → 293,7
b = rxd_buffer[ptrIn++] - '=';
c = rxd_buffer[ptrIn++] - '=';
d = rxd_buffer[ptrIn++] - '=';
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden
if(ptrIn > max - 2) break;
 
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
328,7 → 330,7
Decode64((uint8_t *) &ExternControl,sizeof(ExternControl),3,ReceivedBytes);
RemoteButtons |= ExternControl.RemoteButtons;
ConfirmFrame = ExternControl.Frame;
DebugDataAnforderung = 1;
DebugDataRequest = 1;
break;
case 'h':// x-1 display columns
Decode64((uint8_t *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,ReceivedBytes);
335,7 → 337,7
RemoteButtons |= tmp_char_arr2[0];
if(tmp_char_arr2[1] == 255) NurKanalAnforderung = 1;
else NurKanalAnforderung = 0; // keine Displaydaten
DebugDisplayAnforderung = 1;
DebugDisplayRequest = 1;
break;
case 't':// motor test
Decode64((uint8_t *) &MotorTest[0],sizeof(MotorTest),3,ReceivedBytes);
345,10 → 347,10
ConfirmFrame = DubWiseKeys[3];
break;
case 'v': // get version and board release
GetVersionAnforderung = 1;
GetVersionRequest = 1;
break;
case 'g':// get debug data
DebugGetAnforderung = 1;
DebugGetRequest = 1;
break;
case 'q':// get settings
Decode64((uint8_t *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,ReceivedBytes);
404,16 → 406,16
static int16_t Debug_Timer = 0;
if(!txd_complete) return;
 
if(DebugGetAnforderung && txd_complete) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
if(DebugGetRequest && txd_complete) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
{
SendOutData('G',MySlaveAddr,(uint8_t *) &ExternControl,sizeof(ExternControl));
DebugGetAnforderung = 0;
DebugGetRequest = 0;
}
 
if((CheckDelay(Debug_Timer) || DebugDataAnforderung) && txd_complete)
if((CheckDelay(Debug_Timer) || DebugDataRequest) && txd_complete)
{
SendOutData('D',MySlaveAddr,(uint8_t *) &DebugOut,sizeof(DebugOut));
DebugDataAnforderung = 0;
DebugDataRequest = 0;
Debug_Timer = SetDelay(MIN_DEBUG_INTERVALL);
}
if(DebugTextAnforderung != 255) // Texte für die Analogdaten
430,10 → 432,10
ConfirmFrame = 0;
UDR0 = txd_buffer[0];
}
if(DebugDisplayAnforderung && txd_complete)
if(DebugDisplayRequest && txd_complete)
{
LCD_PrintMenu();
DebugDisplayAnforderung = 0;
DebugDisplayRequest = 0;
if(++RemotePollDisplayLine == 4 || NurKanalAnforderung)
{
SendOutData('4',0,(uint8_t *)&PPM_in,sizeof(PPM_in)); // DisplayZeile übertragen
441,10 → 443,10
}
else SendOutData('0' + RemotePollDisplayLine,0,(uint8_t *)&DisplayBuff[20 * RemotePollDisplayLine],20); // DisplayZeile übertragen
}
if(GetVersionAnforderung && txd_complete)
if(GetVersionRequest && txd_complete)
{
SendOutData('V',MySlaveAddr,(uint8_t *) &VersionInfo,sizeof(VersionInfo));
GetVersionAnforderung = 0;
GetVersionRequest = 0;
}
 
}