/* ******************************************************************************* * INCLUDE ******************************************************************************* */ #include "TemperatureSensor.h" #include "memmap.h" namespace Hardware { namespace Hisilicon { /* ******************************************************************************* * CLASS DEFINE ******************************************************************************* */ #define TSENSOR_CTRL_REG_BASE 0x1102A000 TemperatureSensor::TemperatureSensor(): Sensor(Sensor::Type::TEMPERATURE) { _pRegisters = getRegisters(); _pRegisters->ctrl0 |= (1 << 31) | (1 << 30); _pRegisters->ctrl1 |= (3 << 2); } TemperatureSensor::~TemperatureSensor() { _pRegisters->ctrl0 = 0; releaseRegisters(_pRegisters); } void TemperatureSensor::read(float& value) { uint32_t rval = _pRegisters->ctrl2 & 0x3ff; value = (float)(rval - 117) / 784 * 165 - 40; } TemperatureSensor::Registers* TemperatureSensor::getRegisters() { return (Registers*)memmap(TSENSOR_CTRL_REG_BASE, sizeof(Registers)); } void TemperatureSensor::releaseRegisters(Registers* pRegisters) { memunmap(pRegisters); } } }