Skip to content

Commit 1f0ca7f

Browse files
committed
Add RC pin as brake pin
1 parent 9b473db commit 1f0ca7f

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

DCCRMT.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,4 +399,25 @@ bool RMTChannel::addPin(byte pin, bool inverted) {
399399
bool RMTChannel::addPin(pinpair pins) {
400400
return addPin(pins.pin) && addPin(pins.invpin, true);
401401
}
402+
// and we can not yet take away what we giweth
403+
bool RMTChannel::addRCPin(int16_t brakePin) {
404+
bool inverted = false;
405+
if (brakePin<0) {
406+
inverted = true;
407+
brakePin = -brakePin;
408+
}
409+
if (brakePin == UNUSED_PIN)
410+
return true;
411+
// now we can work with brakePin
412+
DIAG(F("Adding RC pin %d %s"), brakePin, inverted ? "inverted" : "");
413+
gpio_num_t gpioNum = (gpio_num_t)(brakePin);
414+
esp_err_t err;
415+
PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpioNum], PIN_FUNC_GPIO);
416+
err = gpio_set_direction(gpioNum, GPIO_MODE_OUTPUT);
417+
if (err != ESP_OK) return false;
418+
gpio_matrix_out(gpioNum, PWM0_OUT0A_IDX, inverted, 0);
419+
if (err != ESP_OK) return false;
420+
return true;
421+
422+
}
402423
#endif //ESP32

DCCRMT.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class RMTChannel {
3535
RMTChannel(pinpair pins, bool isMain);
3636
bool addPin(byte pin, bool inverted=0);
3737
bool addPin(pinpair pins);
38+
bool addRCPin(int16_t brakePin); // signed (inverted or not)
3839
void IRAM_ATTR RMTinterrupt();
3940
void RMTprefill();
4041
//int RMTfillData(dccPacket packet);

DCCWaveformRMT.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,9 @@ void DCCWaveform::begin() {
5454
//DIAG(F("new MAIN channel with pins %d %d"), p.pin, p.invpin);
5555
rmtMainChannel = new RMTChannel(p, true); /* create new main channel */
5656
}
57-
// int8_t brakePin = md->getBrakePinSigned();
58-
// rmtMainChannel->addRC
57+
int16_t brakePin = md->getBrakePinSigned();
58+
// if RC and so on XXX
59+
rmtMainChannel->addRCPin(brakePin);
5960
}
6061
MotorDriver *md = TrackManager::getProgDriver();
6162
if (md) {

0 commit comments

Comments
 (0)