mirror of
https://github.com/polhenarejos/pico-keys-sdk
synced 2026-05-30 01:51:21 +02:00
Introducing BULK commands to reduce bandwidth.
Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
27
src/apdu.c
27
src/apdu.c
@@ -254,3 +254,30 @@ uint16_t apdu_next() {
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int bulk_cmd(int (*cmd)()) {
|
||||||
|
uint8_t *p = apdu.data;
|
||||||
|
uint8_t *rapdu = apdu.rdata;
|
||||||
|
uint16_t rapdu_size = 0;
|
||||||
|
uint8_t *top = apdu.data + apdu.nc;
|
||||||
|
while (p < top) {
|
||||||
|
P1(apdu) = p[0];
|
||||||
|
P2(apdu) = p[1];
|
||||||
|
apdu.nc = p[2];
|
||||||
|
apdu.data = p + 3;
|
||||||
|
*apdu.rdata++ = p[0];
|
||||||
|
*apdu.rdata++ = p[1];
|
||||||
|
*apdu.rdata++ = 0;
|
||||||
|
*apdu.rdata++ = 0;
|
||||||
|
apdu.rlen = 0;
|
||||||
|
cmd();
|
||||||
|
put_uint16_t_be(apdu.rlen, apdu.rdata - 2);
|
||||||
|
put_uint16_t_be(apdu.sw, apdu.rdata + apdu.rlen);
|
||||||
|
rapdu_size += 4 + apdu.rlen + 2;
|
||||||
|
apdu.rdata += apdu.rlen + 2;
|
||||||
|
p += 3 + apdu.nc;
|
||||||
|
}
|
||||||
|
apdu.rlen = rapdu_size;
|
||||||
|
apdu.rdata = rapdu;
|
||||||
|
return SW_OK();
|
||||||
|
}
|
||||||
|
|||||||
@@ -74,5 +74,6 @@ extern uint16_t apdu_process(uint8_t, const uint8_t *buffer, uint16_t buffer_siz
|
|||||||
extern void apdu_finish();
|
extern void apdu_finish();
|
||||||
extern uint16_t apdu_next();
|
extern uint16_t apdu_next();
|
||||||
extern void *apdu_thread(void *);
|
extern void *apdu_thread(void *);
|
||||||
|
extern int bulk_cmd(int (*cmd)());
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user