along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
+#define _CPTT GPIO_Pin_10
#define LED_PWR GPIO_Pin_12
#define LED_PTT GPIO_Pin_13
#define LED_RT GPIO_Pin_14
/* output pins */
- GPIO_InitStruct.GPIO_Pin = LED_PWR | LED_PTT | LED_RT | LED_ERR;
+ GPIO_InitStruct.GPIO_Pin = LED_PWR | LED_PTT | LED_RT | LED_ERR | _CPTT;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; /* we have our own external pull ups */
GPIO_Init(GPIOD, &GPIO_InitStruct);
- }
+}
void led_pwr(int state) {
if (state)
GPIOD->ODR &= ~(1 << 15);
}
+void not_cptt(int state) {
+ if (state)
+ GPIOD->ODR |= (1 << 10);
+ else
+ GPIOD->ODR &= ~(1 << 10);
+}
+
int switch_ptt(void) {
return GPIOD->IDR & (1 << 7);
}
short adc8k[FREEDV_NSAMPLES];\r
short dac8k[FDMDV_OS_TAPS_8K+FREEDV_NSAMPLES];\r
\r
- int nin, nout, i;\r
+ int nin, nout, i, analog_mode;\r
\r
/* init all the drivers for various peripherals */\r
\r
adc_open(4*ADC_BUF_SZ);\r
f = freedv_open(FREEDV_MODE_1600);\r
\r
- /* LEDs into a known state */\r
-\r
- //led_pwr(1); led_ptt(0); led_rt(0); led_err(0);\r
+ /* put outputs into a known state */\r
\r
+ led_pwr(1); led_ptt(0); led_rt(0); led_err(0); not_cptt(1);\r
\r
/* clear filter memories */\r
\r
adc16k[i] = 0.0;\r
for(i=0; i<FDMDV_OS_TAPS_8K; i++)\r
dac8k[i] = 0.0;\r
- \r
+\r
+ analog_mode = 1;\r
+\r
while(1) {\r
\r
+ if (switch_select()) {\r
+ if (analog_mode)\r
+ analog_mode = 0;\r
+ else\r
+ analog_mode = 1;\r
+ }\r
+\r
if (switch_ptt()) {\r
\r
/* Transmit -------------------------------------------------------------------------*/\r
fdmdv_16_to_8_short(adc8k, &adc16k[FDMDV_OS_TAPS_16K], FREEDV_NSAMPLES);\r
\r
freedv_tx(f, &dac8k[FDMDV_OS_TAPS_8K], adc8k);\r
- //for(i=0; i<FREEDV_NSAMPLES; i++)\r
- // dac8k[FDMDV_OS_TAPS_8K+i] = adc8k[i];\r
+ \r
+ /* force analog bypass when select down */\r
+ \r
+ if (analog_mode) {\r
+ for(i=0; i<FREEDV_NSAMPLES; i++)\r
+ dac8k[FDMDV_OS_TAPS_8K+i] = adc8k[i];\r
+ }\r
\r
fdmdv_8_to_16_short(dac16k, &dac8k[FDMDV_OS_TAPS_8K], FREEDV_NSAMPLES); \r
\r
dac1_write(dac16k, FREEDV_NSAMPLES_16K);\r
\r
- led_ptt(1); led_rt(0); led_err(0);\r
+ led_ptt(1); led_rt(0); led_err(0); not_cptt(0);\r
GPIOE->ODR &= ~(1 << 3);\r
}\r
\r
\r
/* Receive --------------------------------------------------------------------------*/\r
\r
+ not_cptt(1); led_ptt(0); \r
+\r
/* ADC1 is the demod in signal from the radio rx, DAC2 is the SM1000 speaker */\r
\r
- nin = freedv_nin(f); \r
- nout = nin;\r
- f->total_bit_errors = 0;\r
+ if (analog_mode) {\r
\r
- if (adc1_read(&adc16k[FDMDV_OS_TAPS_16K], 2*nin) == 0) {\r
- GPIOE->ODR = (1 << 3);\r
- fdmdv_16_to_8_short(adc8k, &adc16k[FDMDV_OS_TAPS_16K], nin);\r
- nout = freedv_rx(f, &dac8k[FDMDV_OS_TAPS_8K], adc8k);\r
- //for(i=0; i<FREEDV_NSAMPLES; i++)\r
- // dac8k[FDMDV_OS_TAPS_8K+i] = 0;\r
- fdmdv_8_to_16_short(dac16k, &dac8k[FDMDV_OS_TAPS_8K], nout); \r
- dac2_write(dac16k, 2*nout);\r
- led_ptt(0); led_rt(f->fdmdv_stats.sync); led_err(f->total_bit_errors);\r
- GPIOE->ODR &= ~(1 << 3);\r
+ /* force analog bypass when select down */\r
+\r
+ if (adc1_read(&adc16k[FDMDV_OS_TAPS_16K], FREEDV_NSAMPLES_16K) == 0) {\r
+ fdmdv_16_to_8_short(adc8k, &adc16k[FDMDV_OS_TAPS_16K], FREEDV_NSAMPLES);\r
+ for(i=0; i<FREEDV_NSAMPLES; i++)\r
+ dac8k[FDMDV_OS_TAPS_8K+i] = adc8k[i];\r
+ fdmdv_8_to_16_short(dac16k, &dac8k[FDMDV_OS_TAPS_8K], FREEDV_NSAMPLES); \r
+ dac2_write(dac16k, FREEDV_NSAMPLES_16K);\r
+ led_rt(0); led_err(0);\r
+ }\r
+ }\r
+ else {\r
+\r
+ /* regular DV mode */\r
+\r
+ nin = freedv_nin(f); \r
+ nout = nin;\r
+ f->total_bit_errors = 0;\r
+\r
+\r
+ if (adc1_read(&adc16k[FDMDV_OS_TAPS_16K], 2*nin) == 0) {\r
+ GPIOE->ODR = (1 << 3);\r
+ fdmdv_16_to_8_short(adc8k, &adc16k[FDMDV_OS_TAPS_16K], nin);\r
+ nout = freedv_rx(f, &dac8k[FDMDV_OS_TAPS_8K], adc8k);\r
+ fdmdv_8_to_16_short(dac16k, &dac8k[FDMDV_OS_TAPS_8K], nout); \r
+ dac2_write(dac16k, 2*nout);\r
+ led_rt(f->fdmdv_stats.sync); led_err(f->total_bit_errors);\r
+ GPIOE->ODR &= ~(1 << 3);\r
+ }\r
}\r
\r
}\r