62 uint32_t message_cid = U4BE(buffer, 0);
63 handle->
tx_cid = message_cid;
73 handle->
cid = message_cid;
89 handle->
cid = message_cid;
101 if (buffer[0] & 0x80) {
178 if (!handle || !buffer || length < 3) {
182 handle->
error = process_packet(handle, buffer, length);
187 const uint8_t *buffer,
189 uint8_t *tx_packet_buffer,
190 uint16_t tx_packet_buffer_size)
197 LOG_IO(
"Tx : INITIALIZATION PACKET\n");
203 memset(tx_packet_buffer, 0, tx_packet_buffer_size);
206 LOG_IO(
"Tx : CONTINUATION PACKET\n");
209 uint16_t tx_packet_offset = 0;
210 memset(tx_packet_buffer, 0, tx_packet_buffer_size);
214 U4BE_ENCODE(tx_packet_buffer, 0, handle->
tx_cid);
215 tx_packet_offset += 4;
220 tx_packet_buffer[tx_packet_offset++] = cmd | 0x80;
221 U2BE_ENCODE(tx_packet_buffer, tx_packet_offset, length);
222 tx_packet_offset += 2;
231 memcpy(&tx_packet_buffer[tx_packet_offset],
233 tx_packet_buffer_size - tx_packet_offset);
235 tx_packet_offset = tx_packet_buffer_size;
239 memcpy(&tx_packet_buffer[tx_packet_offset],
uint16_t rx_message_buffer_size
uint8_t * rx_message_buffer
uint16_t rx_message_length
uint16_t rx_message_expected_sequence_number
uint16_t tx_message_sequence_number
uint16_t tx_message_offset
u2f_transport_type_t type
uint16_t tx_message_length
uint16_t rx_message_offset
const uint8_t * tx_message_buffer
void U2F_TRANSPORT_tx(u2f_transport_t *handle, uint8_t cmd, const uint8_t *buffer, uint16_t length, uint8_t *tx_packet_buffer, uint16_t tx_packet_buffer_size)
void U2F_TRANSPORT_init(u2f_transport_t *handle, uint8_t type)
void U2F_TRANSPORT_rx(u2f_transport_t *handle, uint8_t *buffer, uint16_t length)
@ U2F_TRANSPORT_TYPE_USB_HID
#define U2F_FORBIDDEN_CID
#define U2F_BROADCAST_CID
@ CTAP1_ERR_INVALID_CHANNEL
@ CTAP1_ERR_INVALID_LENGTH