+ if (NULL == my->unicens) return;
+ Ucs_ReportTimeout(my->unicens);
+}
+
+bool UCSI_SendAmsMessage(UCSI_Data_t *my, uint16_t msgId, uint16_t targetAddress, uint8_t *pPayload, uint32_t payloadLen)
+{
+ Ucs_AmsTx_Msg_t *msg;
+ Ucs_Return_t result;
+ assert(MAGIC == my->magic);
+ if (NULL == my->unicens) return false;
+ msg = Ucs_AmsTx_AllocMsg(my->unicens, payloadLen);
+ if (NULL == msg) return false;
+ if (0 != payloadLen)
+ {
+ assert(NULL != msg->data_ptr);
+ memcpy(msg->data_ptr, pPayload, payloadLen);
+ }
+ msg->custom_info_ptr = NULL;
+ msg->data_size = payloadLen;
+ msg->destination_address = targetAddress;
+ msg->llrbc = 10;
+ msg->msg_id = msgId;
+ result = Ucs_AmsTx_SendMsg(my->unicens, msg, NULL);
+ if (UCS_RET_SUCCESS != result)
+ Ucs_AmsTx_FreeUnusedMsg(my->unicens, msg);
+ return UCS_RET_SUCCESS == result;
+}
+
+bool UCSI_GetAmsMessage(UCSI_Data_t *my, uint16_t *pMsgId, uint16_t *pSourceAddress, uint8_t **pPayload, uint32_t *pPayloadLen)
+{
+ Ucs_AmsRx_Msg_t *msg;
+ assert(MAGIC == my->magic);
+ if (NULL == my->unicens || NULL == pPayload || NULL == pPayloadLen) return false;
+ msg = Ucs_AmsRx_PeekMsg(my->unicens);
+ if (NULL == msg) return false;
+ *pMsgId = msg->msg_id;
+ *pSourceAddress = msg->source_address;
+ *pPayload = msg->data_ptr;
+ *pPayloadLen = msg->data_size;
+ return true;
+}
+
+void UCSI_ReleaseAmsMessage(UCSI_Data_t *my)
+{
+ assert(MAGIC == my->magic);
+ if (NULL == my->unicens) return;
+ Ucs_AmsRx_ReleaseMsg(my->unicens);
+}
+
+bool UCSI_SetRouteActive(UCSI_Data_t *my, uint16_t routeId, bool isActive)
+{
+ uint16_t i;
+ UnicensCmdEntry_t entry;
+ assert(MAGIC == my->magic);
+ if (NULL == my || NULL == my->uniInitData.mgr.routes_list_ptr) return false;
+ for (i = 0; i < my->uniInitData.mgr.routes_list_size; i++)
+ {
+ Ucs_Rm_Route_t *route = &my->uniInitData.mgr.routes_list_ptr[i];
+ if (route->route_id != routeId)
+ continue;
+ entry.cmd = UnicensCmd_RmSetRoute;
+ entry.val.RmSetRoute.routePtr = route;
+ entry.val.RmSetRoute.isActive = isActive;
+ return EnqueueCommand(my, &entry);
+ }
+ return false;
+}
+
+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);