diff --git a/Config.h b/Config.h index 9d62604..a0e249f 100644 --- a/Config.h +++ b/Config.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2017,2018,2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -84,5 +84,7 @@ // Use the D-Star and DMR LEDs for POCSAG // #define USE_ALTERNATE_POCSAG_LEDS -#endif +// Use the D-Star and YSF LEDs for FM +// #define USE_ALTERNATE_FM_LEDS +#endif diff --git a/IO.cpp b/IO.cpp index 93a8109..a26b6d1 100644 --- a/IO.cpp +++ b/IO.cpp @@ -169,23 +169,33 @@ void CIO::selfTest() delayInt(250); setP25Int(true); +#if !defined(USE_ALTERNATE_NXDN_LEDS) delayInt(250); setNXDNInt(true); +#endif +#if !defined(USE_ALTERNATE_POCSAG_LEDS) delayInt(250); setPOCSAGInt(true); +#endif +#if !defined(USE_ALTERNATE_FM_LEDS) delayInt(250); setFMInt(true); delayInt(250); setFMInt(false); +#endif +#if !defined(USE_ALTERNATE_POCSAG_LEDS) delayInt(250); setPOCSAGInt(false); +#endif +#if !defined(USE_ALTERNATE_NXDN_LEDS) delayInt(250); setNXDNInt(false); +#endif delayInt(250); setP25Int(false); diff --git a/IO.h b/IO.h index 1fea082..68ada02 100644 --- a/IO.h +++ b/IO.h @@ -120,6 +120,7 @@ private: void setP25Int(bool on); void setNXDNInt(bool on); void setPOCSAGInt(bool on); + void setFMInt(bool on); void delayInt(unsigned int dly); }; diff --git a/IODue.cpp b/IODue.cpp index 569c6e4..b2aec0a 100644 --- a/IODue.cpp +++ b/IODue.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2017,2018,2020 by Jonathan Naylor G4KLX * Copyright (C) 2015 by Jim Mclaughlin KI6ZUM * Copyright (C) 2016 by Colin Durbridge G4EML * @@ -35,6 +35,7 @@ #define PIN_P25 19 #define PIN_NXDN 20 #define PIN_POCSAG 4 +#define PIN_FM 5 #define ADC_CHER_Chan (1<<7) // ADC on Due pin A0 - Due AD7 - (1 << 7) #define ADC_ISR_EOC_Chan ADC_ISR_EOC7 #define ADC_CDR_Chan 7 @@ -50,6 +51,7 @@ #define PIN_P25 6 #define PIN_NXDN 5 #define PIN_POCSAG 4 +#define PIN_FM 3 #define ADC_CHER_Chan (1<<13) // ADC on Due pin A11 - Due AD13 - (1 << 13) #define ADC_ISR_EOC_Chan ADC_ISR_EOC13 #define ADC_CDR_Chan 13 @@ -67,6 +69,7 @@ #define PIN_P25 6 #define PIN_NXDN 5 #define PIN_POCSAG 4 +#define PIN_FM 3 #define ADC_CHER_Chan (1<<7) // ADC on Due pin A0 - Due AD7 - (1 << 7) #define ADC_ISR_EOC_Chan ADC_ISR_EOC7 #define ADC_CDR_Chan 7 @@ -107,6 +110,9 @@ void CIO::initInt() #if !defined(USE_ALTERNATE_POCSAG_LEDS) pinMode(PIN_POCSAG, OUTPUT); #endif +#if !defined(USE_ALTERNATE_POCSAG_LEDS) + pinMode(PIN_FM, OUTPUT); +#endif #endif } @@ -258,10 +264,19 @@ void CIO::setPOCSAGInt(bool on) #endif } +void CIO::setFMInt(bool on) +{ +#if defined(USE_ALTERNATE_FM_LEDS) + digitalWrite(PIN_DSTAR, on ? HIGH : LOW); + digitalWrite(PIN_YSF, on ? HIGH : LOW); +#else + digitalWrite(PIN_FM, on ? HIGH : LOW); +#endif +} + void CIO::delayInt(unsigned int dly) { delay(dly); } #endif - diff --git a/IOSTM.cpp b/IOSTM.cpp index 9139953..1d565fe 100644 --- a/IOSTM.cpp +++ b/IOSTM.cpp @@ -1,7 +1,7 @@ /* * Copyright (C) 2016 by Jim McLaughlin KI6ZUM * Copyright (C) 2016,2017,2018 by Andy Uribe CA6JAU - * Copyright (C) 2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2017,2018,2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -42,8 +42,8 @@ POCSAG PB12 output CN10 Pin16 MDSTAR PC4 output CN10 Pin34 MDMR PC5 output CN10 Pin6 -MYSF PC2 output CN7 Pin35 -MP25 PC3 output CN7 Pin37 +MYSF PC2 output CN7 Pin35 +MP25 PC3 output CN7 Pin37 MNXDN PC6 output CN10 Pin4 MPOCSAG PC8 output CN10 Pin2 @@ -1438,6 +1438,23 @@ void CIO::setPOCSAGInt(bool on) #endif } +void CIO::setFMInt(bool on) +{ +#if defined(USE_ALTERNATE_FM_LEDS) + GPIO_WriteBit(PORT_DSTAR, PIN_DSTAR, on ? Bit_SET : Bit_RESET); + GPIO_WriteBit(PORT_YSF, PIN_YSF, on ? Bit_SET : Bit_RESET); +#if defined(MODE_PINS) && defined(STM32F4_NUCLEO_MORPHO_HEADER) && (defined(STM32F4_NUCLEO) || defined(STM32F722_RPT_HAT)) + GPIO_WriteBit(PORT_MDSTAR, PIN_MDSTAR, on ? Bit_SET : Bit_RESET); + GPIO_WriteBit(PORT_MYSF, PIN_MYSF, on ? Bit_SET : Bit_RESET); +#endif +#else + GPIO_WriteBit(PORT_FM, PIN_FM, on ? Bit_SET : Bit_RESET); +#if defined(MODE_PINS) && defined(STM32F4_NUCLEO_MORPHO_HEADER) && (defined(STM32F4_NUCLEO) || defined(STM32F722_RPT_HAT)) + GPIO_WriteBit(PORT_MFM, PIN_MFM, on ? Bit_SET : Bit_RESET); +#endif +#endif +} + // Simple delay function for STM32 // Example from: http://thehackerworkshop.com/?p=1209 void CIO::delayInt(unsigned int dly) diff --git a/IOSTM_CMSIS.cpp b/IOSTM_CMSIS.cpp index ce498d4..e3763b4 100644 --- a/IOSTM_CMSIS.cpp +++ b/IOSTM_CMSIS.cpp @@ -1,7 +1,7 @@ /* * Copyright (C) 2016 by Jim McLaughlin KI6ZUM * Copyright (C) 2016, 2017 by Andy Uribe CA6JAU - * Copyright (C) 2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2017,2018,2020 by Jonathan Naylor G4KLX * Copyright (C) 2017 by Wojciech Krutnik N0CALL * * This program is free software; you can redistribute it and/or modify @@ -41,6 +41,7 @@ YSF PB8 output P25 PB9 output NXDN PB10 output POCSAG PB11 output +FM PB12 output RX PB0 analog input (ADC1_8) RSSI PB1 analog input (ADC2_9) @@ -84,6 +85,9 @@ USART1_RXD PA10 input (AF) #define PIN_POCSAG 11 #define PORT_POCSAG GPIOB #define BB_POCSAG *((bitband_t)BITBAND_PERIPH(&PORT_POCSAG->ODR, PIN_POCSAG)) +#define PIN_FM 12 +#define PORT_FM GPIOB +#define BB_FM *((bitband_t)BITBAND_PERIPH(&PORT_FM->ODR, PIN_FM)) #define PIN_RX 0 #define PIN_RX_ADC_CH 8 @@ -154,9 +158,9 @@ void GPIOConfigPin(GPIO_TypeDef *port_ptr, uint32_t pin, uint32_t mode_cnf_value #if defined(STM32F1_POG) void FancyLEDEffect() { - bitband_t foo[] = {&BB_LED, &BB_COSLED, &BB_PTT, &BB_DMR, &BB_DSTAR, &BB_YSF, &BB_P25}; + bitband_t foo[] = {&BB_LED, &BB_COSLED, &BB_PTT, &BB_DMR, &BB_DSTAR, &BB_YSF, &BB_P25, &BB_NXDN, &BB_POCSAG, &BB_FM}; - for(int i=0; i<7; i++){ + for(int i=0; i<10; i++){ *foo[i] = 0x01; } GPIOConfigPin(PORT_USART1_TXD, PIN_USART1_TXD, GPIO_CRL_MODE0_1); @@ -172,12 +176,12 @@ void FancyLEDEffect() *((bitband_t)BITBAND_PERIPH(&PORT_USART1_TXD->ODR, PIN_USART1_TXD)) = 0x01; *foo[0] = 0x01; - for(int i=1; i<7; i++){ + for(int i=1; i<10; i++){ delay(SystemCoreClock/1000*10); *foo[i-1] = 0x00; *foo[i] = 0x01; } - for(int i=5; i>=0; i--){ + for(int i=10; i>=0; i--){ delay(SystemCoreClock/1000*10); *foo[i+1] = 0x00; *foo[i] = 0x01; @@ -228,6 +232,9 @@ static inline void GPIOInit() #if !defined(USE_ALTERNATE_POCSAG_LEDS) GPIOConfigPin(PORT_POCSAG, PIN_POCSAG, GPIO_CRL_MODE0_1); #endif +#if !defined(USE_ALTERNATE_FM_LEDS) + GPIOConfigPin(PORT_FM, PIN_FM, GPIO_CRL_MODE0_1); +#endif GPIOConfigPin(PORT_RX, PIN_RX, 0); #if defined(SEND_RSSI_DATA) @@ -460,6 +467,16 @@ void CIO::setPOCSAGInt(bool on) #endif } +void CIO::setFMInt(bool on) +{ +#if defined(USE_ALTERNATE_FM_LEDS) + BB_DSTAR = !!on; + BB_YSF = !!on; +#else + BB_FM = !!on; +#endif +} + void CIO::delayInt(unsigned int dly) { delay(dly); diff --git a/IOTeensy.cpp b/IOTeensy.cpp index 1d9aa79..aaece08 100644 --- a/IOTeensy.cpp +++ b/IOTeensy.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2016,2017,2018,2020 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -37,9 +37,11 @@ #if defined(__MK20DX256__) #define PIN_NXDN 2 #define PIN_POCSAG 3 +#define PIN_FM 4 #else #define PIN_NXDN 24 #define PIN_POCSAG 25 +#define PIN_FM 26 #endif #define PIN_ADC 5 // A0, Pin 14 #define PIN_RSSI 4 // Teensy 3.5/3.6, A16, Pin 35. Teensy 3.1/3.2, A17, Pin 28 @@ -76,6 +78,9 @@ void CIO::initInt() #if !defined(USE_ALTERNATE_POCSAG_LEDS) pinMode(PIN_POCSAG, OUTPUT); #endif +#if !defined(USE_ALTERNATE_FM_LEDS) + pinMode(PIN_FM, OUTPUT); +#endif #endif } @@ -243,6 +248,16 @@ void CIO::setPOCSAGInt(bool on) #endif } +void CIO::setFMInt(bool on) +{ +#if defined(USE_ALTERNATE_FM_LEDS) + digitalWrite(PIN_DSTAR, on ? HIGH : LOW); + digitalWrite(PIN_YSF, on ? HIGH : LOW); +#else + digitalWrite(PIN_FM, on ? HIGH : LOW); +#endif +} + void CIO::delayInt(unsigned int dly) { delay(dly);