99,9 → 99,7 |
uint8_t PC_Connected = 0; |
uint8_t FC_Connected = 0; |
|
uint8_t MySlaveAddr = MK3MAG_ADDRESS; |
|
|
DebugOut_t DebugOut; |
ExternData_t ExternData; |
ExternControl_t ExternControl; |
226,8 → 224,6 |
UART_VersionInfo.Patch = VERSION_PATCH; |
UART_VersionInfo.Compatible = VERSION_SERIAL_COMPATIBLE; |
|
MySlaveAddr = MK3MAG_ADDRESS; |
|
// Version beim Start ausgeben (nicht schön, aber geht... ) |
USART0_putchar ('\n'); |
USART0_putchar ('C'); |
500,58 → 496,75 |
// if data in the rxd buffer are not locked immediately return |
if(!rxd_buffer_locked) return; |
|
Decode64(); // decode data block in rxd_buffer |
|
switch(rxd_buffer[2]) |
switch(rxd_buffer[1]) // check Slave Address |
{ |
case 'w': // old style |
case 'k':// Attitude info from FC |
memcpy(&ExternData, (uint8_t*)pRxData, sizeof(ExternData)); |
RequestFlags |= RQST_COMPASS_HEADING; |
AttitudeSource = ATTITUDE_SOURCE_UART; |
Orientation = ExternData.Orientation; |
FC_Connected = 255; |
break; |
case MK3MAG_ADDRESS: |
Decode64(); // decode data block in rxd_buffer |
switch(rxd_buffer[2]) // check for CmdID |
{ |
case 'w': // old style |
case 'k': // Attitude info from FC |
memcpy(&ExternData, (uint8_t*)pRxData, sizeof(ExternData)); |
RequestFlags |= RQST_COMPASS_HEADING; |
AttitudeSource = ATTITUDE_SOURCE_UART; |
Orientation = ExternData.Orientation; |
FC_Connected = 255; |
break; |
|
// used only for debug proposes at serial port |
case 'b': // extern control |
memcpy(&ExternControl, (uint8_t*)pRxData, sizeof(ExternControl)); |
#define KEY1 0x01 |
#define KEY2 0x02 |
#define KEY3 0x04 |
#define KEY4 0x08 |
#define KEY5 0x10 |
// use right arrow at display for switching the calstate |
if(ExternControl.RemoteButtons & KEY2) |
{ |
ExternData.CalState++; |
if(ExternData.CalState == 6) ExternData.CalState = 0; |
} |
ConfirmFrame = ExternControl.Frame; |
PC_Connected = 255; |
break; |
default: |
// unsupported command |
break; |
} |
break; // case MK3MAG_ADDRESS: |
|
case 'd': // request for the debug data |
DebugData_Interval = (uint16_t) pRxData[0] * 10; |
if(DebugData_Interval) RequestFlags |= RQST_DEBUG_DATA; |
PC_Connected = 255; |
break; |
default: // any Slave Adress |
Decode64(); // decode data block in rxd_buffer |
switch(rxd_buffer[2]) // check for CmdID |
{ |
case 'b': // extern control |
memcpy(&ExternControl, (uint8_t*)pRxData, sizeof(ExternControl)); |
#define KEY1 0x01 |
#define KEY2 0x02 |
#define KEY3 0x04 |
#define KEY4 0x08 |
#define KEY5 0x10 |
// use right arrow at display for switching the calstate |
if(ExternControl.RemoteButtons & KEY2) |
{ |
ExternData.CalState++; |
if(ExternData.CalState == 6) ExternData.CalState = 0; |
} |
ConfirmFrame = ExternControl.Frame; |
PC_Connected = 255; |
break; |
|
case 'v': // request version and board release |
RequestFlags |= RQST_VERSION_INFO; |
PC_Connected = 255; |
break; |
case 'd': // request for the debug data |
DebugData_Interval = (uint16_t) pRxData[0] * 10; |
if(DebugData_Interval) RequestFlags |= RQST_DEBUG_DATA; |
PC_Connected = 255; |
break; |
|
case 'a':// Labels of the Analog Debug outputs |
RequestDebugLabel = pRxData[0]; |
RequestFlags |= RQST_DEBUG_LABEL; |
PC_Connected = 255; |
break; |
case 'v': // request version and board release |
RequestFlags |= RQST_VERSION_INFO; |
PC_Connected = 255; |
break; |
|
case 'g':// get extern control data |
RequestFlags |= RQST_EXTERN_CTRL; |
PC_Connected = 255; |
break; |
case 'a':// Labels of the Analog Debug outputs |
RequestDebugLabel = pRxData[0]; |
RequestFlags |= RQST_DEBUG_LABEL; |
PC_Connected = 255; |
break; |
|
case 'g':// get extern control data |
RequestFlags |= RQST_EXTERN_CTRL; |
PC_Connected = 255; |
break; |
|
default: |
// unsupported command |
break; |
} |
break; // default: |
} |
// unlock the rxd buffer after processing |
pRxData = 0; |
570,7 → 583,7 |
|
if((RequestFlags & RQST_DEBUG_LABEL) && txd_complete) |
{ |
SendOutData('A', MySlaveAddr, 2, (uint8_t *)&RequestDebugLabel, sizeof(RequestDebugLabel), (uint8_t *) ANALOG_LABEL[RequestDebugLabel], 16); |
SendOutData('A', MK3MAG_ADDRESS, 2, (uint8_t *)&RequestDebugLabel, sizeof(RequestDebugLabel), (uint8_t *) ANALOG_LABEL[RequestDebugLabel], 16); |
RequestDebugLabel = 0xFF; |
RequestFlags &= ~RQST_DEBUG_LABEL; |
} |
577,7 → 590,7 |
|
if(ConfirmFrame && txd_complete) |
{ |
SendOutData('B',MySlaveAddr, 1, (uint8_t *) &ConfirmFrame, sizeof(ConfirmFrame)); |
SendOutData('B', MK3MAG_ADDRESS, 1, (uint8_t *) &ConfirmFrame, sizeof(ConfirmFrame)); |
ConfirmFrame = 0; |
} |
|
584,7 → 597,7 |
if(( (DebugData_Interval && CheckDelay(DebugData_Timer)) || (RequestFlags & RQST_DEBUG_DATA)) && txd_complete) |
{ |
SetDebugValues(); |
SendOutData('D', MySlaveAddr, 1, (uint8_t *) &DebugOut, sizeof(DebugOut)); |
SendOutData('D', MK3MAG_ADDRESS, 1, (uint8_t *) &DebugOut, sizeof(DebugOut)); |
DebugData_Timer = SetDelay(DebugData_Interval); |
RequestFlags &= ~RQST_DEBUG_DATA; |
} |
592,19 → 605,19 |
|
if((RequestFlags & RQST_EXTERN_CTRL) && txd_complete) |
{ |
SendOutData('G',MySlaveAddr, 1, (uint8_t *) &ExternControl,sizeof(ExternControl)); |
SendOutData('G', MK3MAG_ADDRESS, 1, (uint8_t *) &ExternControl,sizeof(ExternControl)); |
RequestFlags &= ~RQST_EXTERN_CTRL; |
} |
|
if((RequestFlags & RQST_COMPASS_HEADING) && txd_complete) |
{ |
SendOutData('K',MySlaveAddr, 1, (uint8_t *) &I2C_Heading, sizeof(I2C_Heading)); |
SendOutData('K', FC_ADDRESS, 1, (uint8_t *) &I2C_Heading, sizeof(I2C_Heading)); // send compass heading to FC |
RequestFlags &= ~RQST_COMPASS_HEADING; |
} |
|
if((RequestFlags & RQST_VERSION_INFO) && txd_complete) |
{ |
SendOutData('V',MySlaveAddr, 1, (uint8_t *) &UART_VersionInfo, sizeof(UART_VersionInfo)); |
SendOutData('V', MK3MAG_ADDRESS, 1, (uint8_t *) &UART_VersionInfo, sizeof(UART_VersionInfo)); |
RequestFlags &= ~RQST_VERSION_INFO; |
} |
} |