Доброго дня!
Пытаюсь адаптировать библиотеку от Arduino к Raspberry PI (c++ WiringPI)
К примеру, есть такая функция (Arduino):
int16_t ina219GetShuntVoltage(void)
{
uint16_t value;
ina219Read16(INA219_REG_SHUNTVOLTAGE, &value);
return value;
}
Как видите, функция возвращает тип int16_t, внутри функции результат сначала записывается в uint16_t,
код ina219Read16
static void ina219Read16(uint8_t reg, uint16_t *value)
{
// Clear write buffers
uint32_t i;
for ( i = 0; i < I2C_BUFSIZE; i++ )
{
I2CMasterBuffer[i] = 0x00;
}
I2CWriteLength = 2;
I2CReadLength = 2;
I2CMasterBuffer[0] = INA219_ADDRESS; // I2C device address
I2CMasterBuffer[1] = reg; // Command register
// Append address w/read bit
I2CMasterBuffer[2] = INA219_ADDRESS | INA219_READ;
i2cEngine();
// Shift values to create properly formed integer
*value = ((I2CSlaveBuffer[0] << 8) | I2CSlaveBuffer[1]);
}
Тупо делаю у себя так:
int16_t ina219GetShuntVoltage(void)
{
uint16_t value = wiringPiI2CReadReg16(node->fd, INA219_REG_SHUNTVOLTAGE);
return (int16_t)value;
}
Заголовочник wiringPiI2CReadReg16:
int wiringPiI2CReadReg16 (int fd, int reg)
Проблема в том, что делаю я это "тупо" копируя.
Ведь размеры типов в Arduino отличаются.
В общем, мне бы понять, почему сделано так, что результат сначала из uint16_t загоняют в int16_t и как мне сделать правильно, если у меня результат приходит в int.