+bool UCSI_I2CWrite(UCSI_Data_t *my, uint16_t targetAddress, bool isBurst, uint8_t blockCount,
+ uint8_t slaveAddr, uint16_t timeout, uint8_t dataLen, uint8_t *pData,
+ Ucsi_ResultCb_t result_fptr, void *request_ptr)
+{
+ UnicensCmdEntry_t entry;
+ assert(MAGIC == my->magic);
+ if (NULL == my || NULL == pData || 0 == dataLen) return false;
+ if (dataLen > I2C_WRITE_MAX_LEN) return false;
+ entry.cmd = UnicensCmd_I2CWrite;
+ entry.val.I2CWrite.destination = targetAddress;
+ entry.val.I2CWrite.isBurst = isBurst;
+ entry.val.I2CWrite.blockCount = blockCount;
+ entry.val.I2CWrite.slaveAddr = slaveAddr;
+ entry.val.I2CWrite.timeout = timeout;
+ entry.val.I2CWrite.dataLen = dataLen;
+ entry.val.I2CWrite.result_fptr = result_fptr;
+ entry.val.I2CWrite.request_ptr = request_ptr;
+ memcpy(entry.val.I2CWrite.data, pData, dataLen);
+ return EnqueueCommand(my, &entry);
+}
+
+bool UCSI_SetGpioState(UCSI_Data_t *my, uint16_t targetAddress, uint8_t gpioPinId, bool isHighState)
+{
+ uint16_t mask;
+ UnicensCmdEntry_t entry;
+ assert(MAGIC == my->magic);
+ if (NULL == my) return false;
+ mask = 1 << gpioPinId;
+ entry.cmd = UnicensCmd_GpioWritePort;
+ entry.val.GpioWritePort.destination = targetAddress;
+ entry.val.GpioWritePort.mask = mask;
+ entry.val.GpioWritePort.data = isHighState ? mask : 0;
+ return EnqueueCommand(my, &entry);
+}
+