static ucsContextT *ucsContextS;
+STATIC void ucs2_write_i2c_response(void *result_ptr, void *request_ptr);
+
PUBLIC void UcsXml_CB_OnError(const char format[], uint16_t vargsCnt, ...) {
/*AFB_DEBUG (afbIface, format, args); */
va_list args;
0x2Au, /* i2c slave address */
0x03E8u, /* timeout 1000 milliseconds */
tx_payload_sz, /* uint8_t dataLen */
- &tx_payload[0] /* uint8_t *pData */
+ &tx_payload[0], /* uint8_t *pData */
+ ucs2_write_i2c_response,
+ (void*)&request
);
afb_req_success(request,NULL,"done!!!");
OnErrorExit:
return;
}
+
+STATIC void ucs2_write_i2c_response(void *result_ptr, void *request_ptr) {
+
+ if (request_ptr){
+ afb_req *req = (afb_req *)request_ptr;
+ Ucs_I2c_ResultCode_t *res = (Ucs_I2c_ResultCode_t *)result_ptr;
+
+ if (!res) {
+ afb_req_fail(*req, NULL,"failure, result code not provided");
+ }
+ else if (*res != UCS_I2C_RES_SUCCESS){
+ afb_req_fail_f(*req, NULL, "failure, result code: %d", *res);
+ }
+ else {
+ afb_req_success(*req, NULL, "success");
+ }
+ }
+ else {
+ AFB_NOTICE("write_i2c: ambiguous response data");
+ }
+}
UniCmdResult_ERROR_ProcessFinished
} UnicensCmdResult_t;
+/**
+ * \brief Asynchronous callback notifiying a command result
+ * \param result_ptr The asynchronous result of the command
+ * \param request_ptr User reference, typically points to the afb_req
+ * object.
+ */
+typedef void (*Ucsi_ResultCb_t)(void *result_ptr, void *request_ptr);
+
/**
* \brief Internal enum for Unicens Integration
*/
uint16_t timeout;
uint8_t dataLen;
uint8_t data[I2C_WRITE_MAX_LEN];
+
+ Ucsi_ResultCb_t result_fptr;
+ void *request_ptr;
+
} UnicensCmdI2CWrite_t;
/**
* \param timeout - Timeout in milliseconds.
* \param dataLen - Amount of bytes to send via I2C
* \param pData - The payload to be send.
+ * \param result_fptr - Callback function notifying the asynchronous result.
+ * \param request_ptr - User reference which is provided for the asynchronous result.
*
* \return true, if route command was enqueued to Unicens.
*/
bool UCSI_I2CWrite(UCSI_Data_t *pPriv, uint16_t targetAddress, bool isBurst, uint8_t blockCount,
- uint8_t slaveAddr, uint16_t timeout, uint8_t dataLen, uint8_t *pData);
+ uint8_t slaveAddr, uint16_t timeout, uint8_t dataLen, uint8_t *pData,
+ Ucsi_ResultCb_t result_fptr, void *request_ptr);
/**
* \brief Enables or disables a route by the given routeId
}
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)
+ 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);
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);
}