Fix combining APDU MSG and keepalive.

Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
Pol Henarejos 2022-09-22 22:52:41 +02:00
parent c23f17107a
commit 988d4e23c2
No known key found for this signature in database
GPG key ID: C0095B7870A4CCD3

View file

@ -309,15 +309,13 @@ int driver_process_usb_packet(uint16_t read) {
}
void send_keepalive() {
ctap_resp = (CTAPHID_FRAME *)usb_get_tx();
ctap_resp = (CTAPHID_FRAME *)(usb_get_tx()+4096);
memset(ctap_resp, 0, sizeof(CTAPHID_FRAME));
ctap_resp->cid = ctap_req->cid;
ctap_resp->init.cmd = CTAPHID_KEEPALIVE;
ctap_resp->init.bcntl = 1;
uint8_t bck = ctap_resp->init.data[0];
ctap_resp->init.data[0] = is_req_button_pending() ? 2 : 1;
hid_write(64);
ctap_resp->init.data[0] = bck;
hid_write_offset(64,4096);
}
void driver_exec_timeout() {
@ -332,7 +330,7 @@ uint8_t *driver_prepare_response() {
}
void driver_exec_finished(size_t size_next) {
if (apdu.sw != 0)
if (thread_type == 2 && apdu.sw != 0)
ctap_error(apdu.sw & 0xff);
else
driver_exec_finished_cont(size_next, 7);