From 3c07ec489623e09d8dbfe8c1d97dbdb36f8c8fdb Mon Sep 17 00:00:00 2001 From: "matthias.ringwald" Date: Sat, 10 Apr 2010 10:03:13 +0000 Subject: [PATCH] fixed 0xdb after 0xc00, nicer --- 3rdparty/LogExtension.mm | 45 ++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/3rdparty/LogExtension.mm b/3rdparty/LogExtension.mm index 3bd25314c..905c8c0ff 100644 --- a/3rdparty/LogExtension.mm +++ b/3rdparty/LogExtension.mm @@ -82,26 +82,8 @@ void h5_slip_process( h5_slip_t * sm, uint8_t input, uint8_t in){ switch (sm->state) { case unknown: if (input == 0xc0){ - sm->state = x_c0; - } - break; - case decoding: - switch (input ){ - case 0xc0: - // packet done - type = sm->data[1] & 0x0f; - if (type >= 1 && type <= 4 && sm->length >= 6){ - hci_dump_packet( type, in, &sm->data[4], sm->length-4-2); // -4 header, -2 crc for reliable - } - sm->state = unknown; - break; - case 0xdb: - sm->state = x_db; - break; - default: - sm->data[sm->length] = input; - ++sm->length; - break; + sm->length = 0; + sm->state = x_c0; } break; case x_c0: @@ -112,12 +94,31 @@ void h5_slip_process( h5_slip_t * sm, uint8_t input, uint8_t in){ sm->state = x_db; break; default: - sm->data[0] =input; - sm->length = 1; + sm->data[sm->length] = input; + ++sm->length; sm->state = decoding; break; } break; + case decoding: + switch (input ){ + case 0xc0: + sm->state = unknown; + // packet done - check if valid HCI packet + if (sm->length < 6) break; + type = sm->data[1] & 0x0f; + if (type < 1 || type > 4) break; + hci_dump_packet( type, in, &sm->data[4], sm->length-4-2); // -4 header, -2 crc for reliable + break; + case 0xdb: + sm->state = x_db; + break; + default: + sm->data[sm->length] = input; + ++sm->length; + break; + } + break; case x_db: switch (input) { case 0xdc: