1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-18 22:05:17 +03:00

Merge pull request #1556 from CC-Jeff/master

Passthrough Settings for Castle Creations ESCs
This commit is contained in:
borisbstyle 2016-11-15 00:16:54 +01:00 committed by GitHub
commit ae269db9e2
2 changed files with 31 additions and 7 deletions

View file

@ -23,14 +23,16 @@
typedef enum { typedef enum {
BAUDRATE_NORMAL = 19200, BAUDRATE_NORMAL = 19200,
BAUDRATE_KISS = 38400 BAUDRATE_KISS = 38400,
BAUDRATE_CASTLE = 18880,
} escBaudRate_e; } escBaudRate_e;
typedef enum { typedef enum {
PROTOCOL_SIMONK = 0, PROTOCOL_SIMONK = 0,
PROTOCOL_BLHELI = 1, PROTOCOL_BLHELI = 1,
PROTOCOL_KISS = 2, PROTOCOL_KISS = 2,
PROTOCOL_KISSALL = 3 PROTOCOL_KISSALL = 3,
PROTOCOL_CASTLE = 4,
} escProtocol_e; } escProtocol_e;
#if defined(USE_ESCSERIAL) #if defined(USE_ESCSERIAL)
@ -117,7 +119,7 @@ static void escSerialICConfig(TIM_TypeDef *tim, uint8_t channel, uint16_t polari
void setTxSignalEsc(escSerial_t *escSerial, uint8_t state) void setTxSignalEsc(escSerial_t *escSerial, uint8_t state)
{ {
if((escSerial->mode = PROTOCOL_KISSALL)) if((escSerial->mode == PROTOCOL_KISSALL))
{ {
for (volatile uint8_t i = 0; i < escSerial->outputCount; i++) { for (volatile uint8_t i = 0; i < escSerial->outputCount; i++) {
uint8_t state_temp = state; uint8_t state_temp = state;
@ -334,6 +336,11 @@ serialPort_t *openEscSerial(escSerialPortIndex_e portIndex, serialReceiveCallbac
setTxSignalEsc(escSerial, ENABLE); setTxSignalEsc(escSerial, ENABLE);
serialTimerTxConfigBL(escSerial->txTimerHardware, portIndex, baud); serialTimerTxConfigBL(escSerial->txTimerHardware, portIndex, baud);
} }
else if(mode == PROTOCOL_CASTLE){
escSerialOutputPortConfig(escSerial->rxTimerHardware);
serialTimerTxConfigBL(escSerial->txTimerHardware, portIndex, baud);
serialTimerRxConfigBL(escSerial->rxTimerHardware, portIndex, options);
}
return &escSerial->port; return &escSerial->port;
} }
@ -485,7 +492,7 @@ void processTxStateBL(escSerial_t *escSerial)
//set output //set output
if(escSerial->mode==PROTOCOL_BLHELI) { if(escSerial->mode==PROTOCOL_BLHELI || escSerial->mode==PROTOCOL_CASTLE) {
escSerialOutputPortConfig(escSerial->rxTimerHardware); escSerialOutputPortConfig(escSerial->rxTimerHardware);
} }
return; return;
@ -502,7 +509,7 @@ void processTxStateBL(escSerial_t *escSerial)
escSerial->isTransmittingData = false; escSerial->isTransmittingData = false;
if (isEscSerialTransmitBufferEmpty((serialPort_t *)escSerial)) { if (isEscSerialTransmitBufferEmpty((serialPort_t *)escSerial)) {
if(escSerial->mode==PROTOCOL_BLHELI) if(escSerial->mode==PROTOCOL_BLHELI || escSerial->mode==PROTOCOL_CASTLE)
{ {
escSerialInputPortConfig(escSerial->rxTimerHardware); escSerialInputPortConfig(escSerial->rxTimerHardware);
} }
@ -921,7 +928,18 @@ void escEnablePassthrough(serialPort_t *escPassthroughPort, uint16_t output, uin
pwmDisableMotors(); pwmDisableMotors();
passPort = escPassthroughPort; passPort = escPassthroughPort;
uint32_t escBaudrate = (mode == PROTOCOL_KISS) ? BAUDRATE_KISS : BAUDRATE_NORMAL; uint32_t escBaudrate;
switch (mode) {
case PROTOCOL_KISS:
escBaudrate = BAUDRATE_KISS;
break;
case PROTOCOL_CASTLE:
escBaudrate = BAUDRATE_CASTLE;
break;
default:
escBaudrate = BAUDRATE_NORMAL;
break;
}
if((mode == PROTOCOL_KISS) && (output == 255)){ if((mode == PROTOCOL_KISS) && (output == 255)){
motor_output = 255; motor_output = 255;
@ -982,7 +1000,9 @@ void escEnablePassthrough(serialPort_t *escPassthroughPort, uint16_t output, uin
} }
LED1_OFF; LED1_OFF;
} }
delay(5); if(mode != PROTOCOL_CASTLE){
delay(5);
}
} }
} }

View file

@ -2996,6 +2996,10 @@ static void cliEscPassthrough(char *cmdline)
{ {
mode = 2; mode = 2;
} }
else if(strncasecmp(pch, "cc", strlen(pch)) == 0)
{
mode = 4;
}
else else
{ {
cliShowParseError(); cliShowParseError();