From 4ed16fb51c4edd0fcd808d26a574c0189a904e46 Mon Sep 17 00:00:00 2001 From: Silvano Seva Date: Mon, 15 Mar 2021 15:05:18 +0100 Subject: [PATCH] Enabled measurement of volume level on MD-UV3x0 --- platform/drivers/ADC/ADC1_MDx.c | 9 +++++---- platform/drivers/ADC/ADC1_MDx.h | 6 +++--- platform/drivers/baseband/radio_MD3x0.c | 2 +- platform/targets/MD-UV380/hwconfig.h | 1 + platform/targets/MD-UV380/platform.c | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/platform/drivers/ADC/ADC1_MDx.c b/platform/drivers/ADC/ADC1_MDx.c index a0bab820..dc82492b 100644 --- a/platform/drivers/ADC/ADC1_MDx.c +++ b/platform/drivers/ADC/ADC1_MDx.c @@ -24,7 +24,7 @@ /* * The sample buffer is structured as follows: * - * | vbat | rssi | vox | vol | + * | vbat | vol | rssi | vox | * * NOTE: we are forced to allocate it through a malloc in order to make it be * in the "large" 128kB RAM. This because the linker script maps the .data and @@ -48,8 +48,8 @@ void adc1_init() * - PB0: RSSI level */ gpio_setMode(AIN_VBAT, INPUT_ANALOG); - #if defined(PLATFORM_MD3x0) gpio_setMode(AIN_VOLUME, INPUT_ANALOG); + #if defined(PLATFORM_MD3x0) gpio_setMode(AIN_MIC, INPUT_ANALOG); gpio_setMode(AIN_RSSI, INPUT_ANALOG); #endif @@ -85,8 +85,9 @@ void adc1_init() | (3 << 10) /* CH3, vox level on PA3 */ | (0 << 15); /* CH0, volume potentiometer level on PA0 */ #else - ADC1->SQR1 = 0; /* Convert one channel */ - ADC1->SQR3 |= (1 << 0); /* CH1, battery voltage on PA1 */ + ADC1->SQR1 = 1 << 20; /* Convert two channel */ + ADC1->SQR3 |= (1 << 0) /* CH1, battery voltage on PA1 */ + | (0 << 15); /* CH0, volume potentiometer level on PA0 */ #endif /* DMA2 Stream 0 configuration: diff --git a/platform/drivers/ADC/ADC1_MDx.h b/platform/drivers/ADC/ADC1_MDx.h index 017d2182..a4a49629 100644 --- a/platform/drivers/ADC/ADC1_MDx.h +++ b/platform/drivers/ADC/ADC1_MDx.h @@ -49,9 +49,9 @@ void adc1_terminate(); /** * Get current measurement of a given channel, mapped as below: * - channel 0: battery voltage - * - channel 1: RSSI level - * - channel 2: vox level - * - channel 3: volume level + * - channel 1: volume level + * - channel 2: RSSI level + * - channel 3: vox level * * NOTE: the mapping above DOES NOT correspond to the physical ADC channel * mapping! diff --git a/platform/drivers/baseband/radio_MD3x0.c b/platform/drivers/baseband/radio_MD3x0.c index 9870f9a6..6739d5e0 100644 --- a/platform/drivers/baseband/radio_MD3x0.c +++ b/platform/drivers/baseband/radio_MD3x0.c @@ -290,7 +290,7 @@ float radio_getRssi(const freq_t rxFreq) if(rxFreq < 401035000) offset_index = 0; if(rxFreq > 479995000) offset_index = 8; - float rssi_mv = adc1_getMeasurement(1); + float rssi_mv = adc1_getMeasurement(2); float rssi_dbm = (rssi_mv - rssi_offset[offset_index]) / rssi_gain; return rssi_dbm; } diff --git a/platform/targets/MD-UV380/hwconfig.h b/platform/targets/MD-UV380/hwconfig.h index b3425860..fb1eef18 100644 --- a/platform/targets/MD-UV380/hwconfig.h +++ b/platform/targets/MD-UV380/hwconfig.h @@ -72,6 +72,7 @@ #define RED_LED GPIOE,1 /* Analog inputs */ +#define AIN_VOLUME GPIOA,0 #define AIN_VBAT GPIOA,1 /* Channel selection rotary encoder */ diff --git a/platform/targets/MD-UV380/platform.c b/platform/targets/MD-UV380/platform.c index 0dd7aa3f..9cbd7d3b 100644 --- a/platform/targets/MD-UV380/platform.c +++ b/platform/targets/MD-UV380/platform.c @@ -147,7 +147,7 @@ float platform_getMicLevel() float platform_getVolumeLevel() { - return 0.0f; + return adc1_getMeasurement(1); } uint8_t platform_getChSelector()