/* * Payload is the HCP message data only. Instruction will be prepended. * Guarantees that cb will be called upon completion or timeout delay * counted from the moment the cmd is sent to the transport.
*/ int nfc_hci_hcp_message_tx(struct nfc_hci_dev *hdev, u8 pipe,
u8 type, u8 instruction, const u8 *payload, size_t payload_len,
data_exchange_cb_t cb, void *cb_context, unsignedlong completion_delay)
{ struct nfc_dev *ndev = hdev->ndev; struct hci_msg *cmd; const u8 *ptr = payload; int hci_len, err; bool firstfrag = true;
/* Only the last fragment will have the cb bit set to 1 */
packet = (struct hcp_packet *)skb->data;
packet->header = pipe; if (firstfrag) {
firstfrag = false;
packet->message.header = HCP_HEADER(type, instruction);
} else {
packet->message.header = *ptr++;
} if (ptr) {
memcpy(packet->message.data, ptr, data_link_len - 1);
ptr += data_link_len - 1;
}
/* This is the last fragment, set the cb bit */ if (hci_len == 0)
packet->header |= ~NFC_HCI_FRAGMENT;
skb_queue_tail(&cmd->msg_frags, skb);
}
mutex_lock(&hdev->msg_tx_mutex);
if (hdev->shutting_down) {
err = -ESHUTDOWN;
mutex_unlock(&hdev->msg_tx_mutex); goto out_skb_err;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.