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