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; };