#include "max1227.h"

#include <cstring>

void max1227::prepareExternallyClockedSingleChannelRead(uint8_t *spiBuf, uint8_t channel,
                                                        size_t &sz) {
  spiBuf[0] = buildConvByte(ScanModes::N_ONCE, channel, false);
  spiBuf[1] = 0x00;
  spiBuf[2] = 0x00;
  sz = 3;
}

void max1227::prepareExternallyClockedRead0ToN(uint8_t *spiBuf, uint8_t n, size_t &sz) {
  for (uint8_t idx = 0; idx <= n; idx++) {
    spiBuf[idx * 2] = buildConvByte(ScanModes::N_ONCE, idx, false);
    spiBuf[idx * 2 + 1] = 0x00;
  }
  spiBuf[(n + 1) * 2] = 0x00;
  sz += (n + 1) * 2 + 1;
}

void max1227::prepareExternallyClockedTemperatureRead(uint8_t *spiBuf, size_t &sz) {
  spiBuf[0] = buildConvByte(ScanModes::N_ONCE, 0, true);
  std::memset(spiBuf + 1, 0, 24);
  sz += 25;
}

float max1227::getTemperature(int16_t temp) { return static_cast<float>(temp) * 0.125; }