Remove unecessary manual conversion to byte arrays

pull/129/head
Phil Howard 2021-05-17 16:05:09 +01:00
rodzic 77839e2a6a
commit 3e56dfb14c
1 zmienionych plików z 28 dodań i 27 usunięć

Wyświetl plik

@ -162,61 +162,62 @@ namespace pimoroni {
// Write an 8-bit register // Write an 8-bit register
void VL53L1X::writeReg(uint16_t reg, uint8_t value) void VL53L1X::writeReg(uint16_t reg, uint8_t value)
{ {
uint8_t buffer[3] = {(reg >> 8) & 0xFF, reg & 0xFF, value}; alignas(2) struct u16_u32_buffer {
i2c->write_blocking(address, buffer, 3, false); uint16_t reg;
uint8_t value;
} buffer{reg, value};
i2c->write_blocking(address, (uint8_t *)&buffer, 3, false);
} }
// Write a 16-bit register // Write a 16-bit register
void VL53L1X::writeReg16Bit(uint16_t reg, uint16_t value) void VL53L1X::writeReg16Bit(uint16_t reg, uint16_t value)
{ {
uint8_t buffer[4] = {(reg >> 8) & 0xFF, reg & 0xFF, (value >> 8) & 0xFF, value & 0xFF}; uint16_t buffer[2] = {reg, value};
i2c->write_blocking(address, buffer, 4, false); i2c->write_blocking(address, (uint8_t *)buffer, 4, false);
} }
// Write a 32-bit register // Write a 32-bit register
void VL53L1X::writeReg32Bit(uint16_t reg, uint32_t value) void VL53L1X::writeReg32Bit(uint16_t reg, uint32_t value)
{ {
uint8_t buffer[6] = {(reg >> 8) & 0xFF, reg & 0xFF, alignas(2) struct u16_u32_buffer {
(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF}; uint16_t reg;
i2c->write_blocking(address, buffer, 6, false); uint32_t value;
} buffer{reg, value};
i2c->write_blocking(address, (uint8_t *)&buffer, 6, false);
} }
// Read an 8-bit register // Read an 8-bit register
uint8_t VL53L1X::readReg(regAddr reg) uint8_t VL53L1X::readReg(regAddr reg)
{ {
uint8_t regbuf[2] = {((uint8_t)reg >> 8) & 0xFF, (uint8_t)reg & 0xFF};
uint8_t buffer[1];
uint8_t value; uint8_t value;
i2c->write_blocking(address, regbuf, 2, true); // TODO do we need to bswap reg?
i2c->read_blocking(address, buffer, 1, false); i2c->write_blocking(address, (uint8_t *)&reg, 2, true);
value = buffer[0]; i2c->read_blocking(address, &value, 1, false);
return value; return value;
} }
// Read a 16-bit register // Read a 16-bit register
uint16_t VL53L1X::readReg16Bit(uint16_t reg) uint16_t VL53L1X::readReg16Bit(uint16_t reg)
{ {
uint8_t regbuf[2] = {(reg >> 8) & 0xFF, reg & 0xFF};
uint8_t buffer[2];
uint16_t value; uint16_t value;
reg= (reg << 8) + (reg >> 8); // TODO do we need to bswap reg?
i2c->write_blocking(address, regbuf, 2, true); i2c->write_blocking(address, (uint8_t *)&reg, 2, true);
i2c->read_blocking(address, buffer, 2, false); i2c->read_blocking(address, (uint8_t *)&value, 2, false);
value= (buffer[0] << 8) + buffer[1];
return value; // TODO do we need to bswap this return value?
return __bswap16(value);
} }
// Read a 32-bit register // Read a 32-bit register
uint32_t VL53L1X::readReg32Bit(uint16_t reg) uint32_t VL53L1X::readReg32Bit(uint16_t reg)
{ {
uint8_t regbuf[2] = {(reg >> 8) & 0xFF, reg & 0xFF};
uint8_t buffer[4];
uint32_t value; uint32_t value;
reg= (reg << 8) + (reg >> 8); reg= (reg << 8) + (reg >> 8);
i2c->write_blocking(address, regbuf, 2, true); i2c->write_blocking(address, (uint8_t *)&reg, 2, true);
i2c->read_blocking(address, buffer, 4, false); i2c->read_blocking(address, (uint8_t *)&value, 4, false);
value= (buffer[0] << 24) + (buffer[1] << 16) + (buffer[2] << 8) + buffer[3];
return value; // TODO do we need to bswap this return value?
return __bswap32(value);
} }
// set distance mode to Short, Medium, or Long // set distance mode to Short, Medium, or Long
@ -572,9 +573,9 @@ namespace pimoroni {
void VL53L1X::readResults() void VL53L1X::readResults()
{ {
uint16_t reg = RESULT__RANGE_STATUS; uint16_t reg = RESULT__RANGE_STATUS;
uint8_t regbuf[2] = {(reg >> 8) & 0xFF, reg & 0xFF}; // TODO do we need to bswap reg?
uint8_t buffer[17]; uint8_t buffer[17];
i2c->write_blocking(address, regbuf, 2, true); i2c->write_blocking(address, (uint8_t *)&reg, 2, true);
i2c->read_blocking(address, buffer, 17, false); i2c->read_blocking(address, buffer, 17, false);
results.range_status = buffer[0]; results.range_status = buffer[0];