diff --git a/platform/drivers/baseband/interfaces_UV3x0.c b/platform/drivers/baseband/interfaces_UV3x0.c
new file mode 100644
index 00000000..4ed865cb
--- /dev/null
+++ b/platform/drivers/baseband/interfaces_UV3x0.c
@@ -0,0 +1,228 @@
+/***************************************************************************
+ * Copyright (C) 2020 by Federico Amedeo Izzo IU2NUO, *
+ * Niccolò Izzo IU2KIN *
+ * Frederik Saraci IU2NRO *
+ * Silvano Seva IU2KWO *
+ * *
+ * 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 *
+ * the Free Software Foundation; either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, see *
+ ***************************************************************************/
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include "interfaces.h"
+
+void _i2c_start();
+void _i2c_stop();
+void _i2c_ack();
+void _i2c_nack();
+void _i2c_write(uint8_t val);
+uint8_t _i2c_read();
+
+/*
+ * Implementation of AT1846S I2C interface.
+ *
+ * NOTE: on GDx devices the I2C bus is shared between the EEPROM and the AT1846S,
+ * so we have to acquire exclusive ownership before exchanging data
+ */
+
+static const uint8_t devAddr = 0x5C;
+
+void i2c_init()
+{
+ gpio_setMode(I2C_SDA, INPUT);
+ gpio_setMode(I2C_SCL, OUTPUT);
+ gpio_clearPin(I2C_SCL);
+}
+
+void i2c_writeReg16(uint8_t reg, uint16_t value)
+{
+ /*
+ * Beware of endianness!
+ * When writing an AT1846S register, bits 15:8 must be sent first, followed
+ * by bits 7:0.
+ */
+ uint8_t valHi = (value >> 8) & 0xFF;
+ uint8_t valLo = value & 0xFF;
+
+ _i2c_start();
+ _i2c_write(devAddr);
+ _i2c_write(reg);
+ _i2c_write(valHi);
+ _i2c_write(valLo);
+ _i2c_stop();
+}
+
+uint16_t i2c_readReg16(uint8_t reg)
+{
+ uint8_t valHi = 0;
+ uint8_t valLo = 0;
+
+ _i2c_start();
+ _i2c_write(devAddr);
+ _i2c_write(reg);
+ _i2c_start();
+ _i2c_write(devAddr | 0x01);
+ _i2c_read(valHi);
+ _i2c_ack();
+ _i2c_read(valLo);
+ _i2c_nack();
+ _i2c_stop();
+
+ return (valHi << 8) | valLo;
+}
+
+/*
+ * Implementation of HR_C6000 "user" SPI interface.
+ */
+
+void uSpi_init()
+{
+}
+
+uint8_t uSpi_sendRecv(uint8_t val)
+{
+}
+
+/*
+ * Software I2C routine
+ */
+
+void _i2c_start()
+{
+ gpio_setMode(I2C_SDA, OUTPUT);
+
+ gpio_clearPin(I2C_SCL);
+ delayUs(2);
+
+ gpio_setPin(I2C_SDA);
+ delayUs(2);
+
+ gpio_setPin(I2C_SCL);
+ delayUs(2);
+
+ gpio_clearPin(I2C_SDA);
+ delayUs(2);
+
+ gpio_clearPin(I2C_SCL);
+ delayUs(6);
+}
+
+void _i2c_stop()
+{
+ gpio_setMode(I2C_SDA, OUTPUT);
+
+ gpio_clearPin(I2C_SCL);
+ delayUs(2);
+
+ gpio_clearPin(I2C_SDA);
+ delayUs(2);
+
+ gpio_setPin(I2C_SCL);
+ delayUs(2);
+
+ gpio_setPin(I2C_SDA);
+ delayUs(2);
+
+ gpio_clearPin(I2C_SCL);
+ delayUs(2);
+}
+
+void _i2c_ack()
+{
+ gpio_setMode(I2C_SDA, OUTPUT);
+ gpio_clearPin(I2C_SDA);
+
+ gpio_clearPin(I2C_SCL);
+ delayUs(2);
+
+ gpio_setPin(I2C_SCL);
+ delayUs(2);
+
+ gpio_clearPin(I2C_SCL);
+ delayUs(2);
+}
+
+void _i2c_nack()
+{
+ gpio_setMode(I2C_SDA, OUTPUT);
+ gpio_setPin(I2C_SDA);
+
+ gpio_clearPin(I2C_SCL);
+ delayUs(2);
+
+ gpio_setPin(I2C_SCL);
+ delayUs(2);
+
+ gpio_clearPin(I2C_SCL);
+ delayUs(2);
+}
+
+void _i2c_write(uint8_t val)
+{
+ gpio_setMode(I2C_SDA, OUTPUT);
+
+ for(uint8_t i = 0; i < 8; i++)
+ {
+ gpio_clearPin(I2C_SCL);
+ delayUs(1);
+
+ if(val & 0x80)
+ {
+ gpio_setPin(I2C_SDA);
+ }
+ else
+ {
+ gpio_clearPin(I2C_SDA);
+ }
+
+ val <<= 1;
+ delayUs(1);
+ gpio_setPin(I2C_SCL);
+ delayUs(2);
+ }
+
+ /* Clock cycle for slave ACK/NACK */
+ gpio_setMode(I2C_SDA, INPUT_PULL_UP);
+ gpio_clearPin(I2C_SCL);
+ delayUs(2);
+ gpio_setPin(I2C_SCL);
+ delayUs(2);
+ gpio_clearPin(I2C_SCL);
+ delayUs(8);
+}
+
+uint8_t _i2c_read()
+{
+ gpio_setMode(I2C_SDA, INPUT);
+ gpio_clearPin(I2C_SCL);
+
+ uint8_t value = 0;
+ for(uint8_t i = 0; i < 8; i++)
+ {
+ gpio_setPin(I2C_SCL);
+ delayUs(2);
+
+ value <<= 1;
+ value |= gpio_readPin(I2C_SDA);
+
+ gpio_clearPin(I2C_SCL);
+ delayUs(2);
+ }
+
+ return value;
+}
diff --git a/platform/targets/MD-UV380/hwconfig.h b/platform/targets/MD-UV380/hwconfig.h
index a31d10fb..efa25585 100644
--- a/platform/targets/MD-UV380/hwconfig.h
+++ b/platform/targets/MD-UV380/hwconfig.h
@@ -113,6 +113,22 @@
#define GPS_EN GPIOA,9
#define GPS_DATA GPIOA,10
+/* RTX stage control */
+#define VHF_LNA_EN GPIOA,5
+#define UHF_LNA_EN GPIOA,2
+
+/* I2C for AT1846S */
+#define I2C_SDA GPIOC,9
+#define I2C_SCL GPIOA,8
+
+/* HR_C6000 control interface */
+#define DMR_SLEEP GPIOE,6
+#define DMR_CS GPIOE,2
+#define DMR_CLK GPIOE,3
+#define DMR_MOSI GPIOE,4
+#define DMR_MISO GPIOE,5
+
+
/*
* To enable pwm for display backlight dimming uncomment this directive.
*