static int send_sync_cmd(struct mcap_mcl *mcl, const void *buf, uint32_t size) { int sock; if (mcl->cc == NULL) return -1; sock = g_io_channel_unix_get_fd(mcl->cc); return mcap_send_data(sock, buf, size); }
static gboolean mcap_send_std_opcode(struct mcap_mcl *mcl, void *cmd, uint32_t size, GError **err) { if (mcl->state == MCL_IDLE) { g_set_error(err, MCAP_ERROR, MCAP_ERROR_FAILED, "MCL is not connected"); return FALSE; } if (mcl->req != MCL_AVAILABLE) { g_set_error(err, MCAP_ERROR, MCAP_ERROR_RESOURCE_UNAVAILABLE, "Pending request"); return FALSE; } if (!(mcl->ctrl & MCAP_CTRL_STD_OP)) { g_set_error(err, MCAP_ERROR, MCAP_ERROR_REQUEST_NOT_SUPPORTED, "Remote does not support standard opcodes"); return FALSE; } if (mcl->state == MCL_PENDING) { g_set_error(err, MCAP_ERROR, MCAP_ERROR_INVALID_OPERATION, "Not Std Op. Codes can be sent in PENDING State"); return FALSE; } if (mcap_send_data(g_io_channel_unix_get_fd(mcl->cc), cmd, size) < 0) { g_set_error(err, MCAP_ERROR, MCAP_ERROR_FAILED, "Command can't be sent, write error"); return FALSE; } mcl->lcmd = cmd; mcl->req = MCL_WAITING_RSP; return TRUE; }
static int mcap_send_cmd(struct mcap_mcl *mcl, uint8_t oc, uint8_t rc, uint16_t mdl, uint8_t *data, size_t len) { mcap_rsp *cmd; int sock, sent; if (mcl->cc == NULL) return -1; sock = g_io_channel_unix_get_fd(mcl->cc); cmd = g_malloc(sizeof(mcap_rsp) + len); cmd->op = oc; cmd->rc = rc; cmd->mdl = htons(mdl); if (data && len > 0) memcpy(cmd->data, data, len); sent = mcap_send_data(sock, cmd, sizeof(mcap_rsp) + len); g_free(cmd); return sent; }