Assert optional output pins on mode change.

This commit is contained in:
Jonathan Naylor 2016-06-01 09:23:09 +01:00
parent 2e0d0c027c
commit e9ba2e896a
4 changed files with 51 additions and 2 deletions

View File

@ -31,6 +31,9 @@
// Allow the use of the COS line to lockout the modem // Allow the use of the COS line to lockout the modem
// #define USE_COS_AS_LOCKOUT // #define USE_COS_AS_LOCKOUT
// Use pins to output the current mode
// #define ARDUINO_MODE_PINS
// For the original Arduino Due pin layout // For the original Arduino Due pin layout
// #define ARDUINO_DUE_PAPA // #define ARDUINO_DUE_PAPA

43
IO.cpp
View File

@ -51,6 +51,9 @@ const uint16_t DC_OFFSET = 2048U;
#define PIN_COS 52 #define PIN_COS 52
#define PIN_PTT 23 #define PIN_PTT 23
#define PIN_COSLED 22 #define PIN_COSLED 22
#define PIN_DSTAR 132
#define PIN_DMR 133
#define PIN_YSF 134
#define ADC_CHER_Chan (1<<13) // ADC on Due pin A11 - Due AD13 - (1 << 13) (PB20) #define ADC_CHER_Chan (1<<13) // ADC on Due pin A11 - Due AD13 - (1 << 13) (PB20)
#define ADC_ISR_EOC_Chan ADC_ISR_EOC13 #define ADC_ISR_EOC_Chan ADC_ISR_EOC13
#define ADC_CDR_Chan 13 #define ADC_CDR_Chan 13
@ -137,6 +140,13 @@ m_lockout(false)
pinMode(PIN_COSLED, OUTPUT); pinMode(PIN_COSLED, OUTPUT);
pinMode(PIN_LED, OUTPUT); pinMode(PIN_LED, OUTPUT);
pinMode(PIN_COS, INPUT); pinMode(PIN_COS, INPUT);
#if defined(ARDUINO_MODE_PINS)
// Set up the mode output pins
pinMode(PIN_DSTAR, OUTPUT);
pinMode(PIN_DMR, OUTPUT);
pinMode(PIN_YSF, OUTPUT);
#endif
#endif #endif
} }
@ -215,6 +225,8 @@ void CIO::start()
m_count = 0U; m_count = 0U;
m_started = true; m_started = true;
setMode();
} }
void CIO::process() void CIO::process()
@ -227,6 +239,7 @@ void CIO::process()
if (m_modemState == STATE_DMR && m_tx) if (m_modemState == STATE_DMR && m_tx)
dmrTX.setStart(false); dmrTX.setStart(false);
m_modemState = STATE_IDLE; m_modemState = STATE_IDLE;
setMode();
} }
m_watchdog = 0U; m_watchdog = 0U;
@ -433,6 +446,36 @@ void CIO::setDecode(bool dcd)
m_dcd = dcd; m_dcd = dcd;
} }
void CIO::setMode()
{
#if !defined(__MBED__)
#if defined(ARDUINO_MODE_PINS)
switch (m_modemState) {
case STATE_DSTAR:
digitalWrite(PIN_DSTAR, HIGH);
digitalWrite(PIN_DMR, LOW);
digitalWrite(PIN_YSF, LOW);
break;
case STATE_DMR:
digitalWrite(PIN_DSTAR, LOW);
digitalWrite(PIN_DMR, HIGH);
digitalWrite(PIN_YSF, LOW);
break;
case STATE_YSF:
digitalWrite(PIN_DSTAR, LOW);
digitalWrite(PIN_DMR, LOW);
digitalWrite(PIN_YSF, HIGH);
break;
default:
digitalWrite(PIN_DSTAR, LOW);
digitalWrite(PIN_DMR, LOW);
digitalWrite(PIN_YSF, LOW);
break;
}
#endif
#endif
}
void CIO::setParameters(bool rxInvert, bool txInvert, bool pttInvert, uint8_t rxLevel, uint8_t txLevel) void CIO::setParameters(bool rxInvert, bool txInvert, bool pttInvert, uint8_t rxLevel, uint8_t txLevel)
{ {
m_pttInvert = pttInvert; m_pttInvert = pttInvert;

1
IO.h
View File

@ -36,6 +36,7 @@ public:
uint16_t getSpace() const; uint16_t getSpace() const;
void setDecode(bool dcd); void setDecode(bool dcd);
void setMode();
void interrupt(); void interrupt();

View File

@ -315,6 +315,8 @@ void CSerialPort::setMode(MMDVM_STATE modemState)
} }
m_modemState = modemState; m_modemState = modemState;
io.setMode();
} }
void CSerialPort::start() void CSerialPort::start()