devo programmare alcuni dispositivi plug in che si collegano tramite un bridge USB-i2c alla mia control unit linux.
Da un lato quindi ho un attuatore, ad esempio il led PCA9550 ( https://www.nxp.com/docs/en/data-sheet/PCA9550.pdf? ) e dall'altro ho la mia unità linux.
Questa unita comunica con il bridge attraverso i comandi ioctl
Un esempio di implementazione (ereditata, non fatta da me) è questo:
- Codice: Seleziona tutto
else if (cmd == IOCTL_DEVICE_CMD_I2CWRITE) {
struct device_i2cwrite s_i2cwrite;
s_i2cwrite.deviceaddress = value;
s_i2cwrite.deviceconfiguration = 0x01;
s_i2cwrite.registeraddress = 0x20;
s_i2cwrite.numdata = 4;
s_i2cwrite.data[0] = 0x21;
s_i2cwrite.data[1] = 0x22;
s_i2cwrite.data[2] = 0x23;
s_i2cwrite.data[3] = 0x24;
ioctl(m_fddevice, cmd, &s_i2cwrite);
} else if (cmd == IOCTL_DEVICE_CMD_I2CREAD) {
struct device_i2cread s_i2cread;
ioctl(m_fddevice, cmd, &s_i2cread);
_INF() << "number readed = " << '0' + s_i2cread.numdata;
_INF() << HEX1(s_i2cread.data[0]) << " " << HEX1(s_i2cread.data[1]) << " " << HEX1(s_i2cread.data[2]) << " " << HEX1(s_i2cread.data[3]);
_INF() << '0'+s_i2cread.data[0] << " " << '0'+s_i2cread.data[1] << " " << '0'+s_i2cread.data[2] << " " << '0'+s_i2cread.data[3];
}
ma non ci sto capendo molto su come utilizzarlo :O
suggerimenti ?