From 35788b9c1c14706ffa7303087d776de25a81dd4f Mon Sep 17 00:00:00 2001 From: Ryan Turner Date: Sat, 27 Sep 2025 18:32:44 -0500 Subject: [PATCH] HR_C6000: add method to read 16-bit addressed registers Acked-by: Silvano Seva --- platform/drivers/baseband/HR_C6000.h | 26 +++++++++++++++++++++++++- platform/drivers/baseband/HR_Cx000.h | 8 +++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/platform/drivers/baseband/HR_C6000.h b/platform/drivers/baseband/HR_C6000.h index b761fbbe..d368b7d8 100644 --- a/platform/drivers/baseband/HR_C6000.h +++ b/platform/drivers/baseband/HR_C6000.h @@ -103,7 +103,7 @@ private: { uint8_t data[4]; - data[0] = static_cast< uint8_t >(opMode) | 0x40; + data[0] = SPI_FLAGS_EXTD | static_cast< uint8_t >(opMode); data[2] = (addr >> 8) & 0x07; data[1] = addr & 0xFF; data[3] = value; @@ -111,6 +111,30 @@ private: ScopedChipSelect cs(uSpi, uCs); spi_send(uSpi, data, 4); } + + /** + * Read a register with 16-bit address. + * + * @param opMode: "operating mode" specifier, see datasheet for details. + * @param addr: register address. + * @return: value read from the register. + */ + uint8_t readReg16(const C6000_SpiOpModes opMode, const uint16_t addr) + { + uint8_t data[3]; + uint8_t value[1]; + + data[0] = SPI_FLAGS_READ | SPI_FLAGS_EXTD + | static_cast< uint8_t >(opMode); + data[2] = (addr >> 8) & 0x07; + data[1] = addr & 0xFF; + + ScopedChipSelect cs(uSpi, uCs); + spi_send(uSpi, data, sizeof(data)); + spi_receive(uSpi, value, 1); + + return value[0]; + } }; #endif /* HRC6000_H */ diff --git a/platform/drivers/baseband/HR_Cx000.h b/platform/drivers/baseband/HR_Cx000.h index 39319724..a70919df 100644 --- a/platform/drivers/baseband/HR_Cx000.h +++ b/platform/drivers/baseband/HR_Cx000.h @@ -240,7 +240,7 @@ private: uint8_t cmd[3]; uint8_t ret[3]; - cmd[0] = 0x80 | static_cast< uint8_t >(opMode); + cmd[0] = SPI_FLAGS_READ | static_cast< uint8_t >(opMode); cmd[1] = addr; cmd[2] = 0x00; @@ -265,6 +265,12 @@ private: protected: + enum SpiFlags + { + SPI_FLAGS_READ = 0x80, ///< Do a read transaction + SPI_FLAGS_EXTD = 0x40, ///< Use 16-bit addressing (HR_C6000 only) + }; + const struct spiDevice *uSpi; const struct gpioPin uCs; };