Jackistang преди 4 години
родител
ревизия
5da819673b
променени са 4 файла, в които са добавени 95 реда и са изтрити 0 реда
  1. 1 0
      SConscript
  2. 18 0
      include/hm_dump.h
  3. 4 0
      porting/nimble/nimble.c
  4. 72 0
      src/hm_dump.c

+ 1 - 0
SConscript

@@ -8,6 +8,7 @@ src = Split('''
     src/hci_transport_h4.c
     src/hci_transport_h4_uart.c
     src/chipset.c
+    src/hm_dump.c
     porting/init.c
 ''')
 

+ 18 - 0
include/hm_dump.h

@@ -0,0 +1,18 @@
+#ifndef HM_DUMP_H
+#define HM_DUMP_H
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void hm_dump_out(uint8_t type, uint8_t *data);
+
+extern void hm_dump_in(uint8_t type, uint8_t *data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* HM_DUMP_H */

+ 4 - 0
porting/nimble/nimble.c

@@ -2,6 +2,7 @@
 #include "hm_hci_transport_h4.h"
 #include "hm_hci_transport_h4_uart.h"
 #include "hm_chipset.h"
+#include "hm_dump.h"
 
 /* nimble header */
 #include "nimble/ble.h"
@@ -35,6 +36,7 @@ static rt_thread_t nimble_tid;
 
 int ble_hci_trans_hs_cmd_tx(uint8_t *cmd)
 {
+    hm_dump_out(1, cmd);
     if (hci_trans_h4_send(HCI_TRANS_H4_TYPE_CMD, cmd)) {
         hci_trans_h4_send_free(cmd);
         return BLE_ERR_UNKNOWN_HCI_CMD;
@@ -169,10 +171,12 @@ static void hm_nimble_thread_entry(void *args)
 
         switch (type) {
         case HCI_TRANS_H4_TYPE_EVT: {
+            hm_dump_in(4, recv);
             ble_hci_uart_rx_cmd_cb(recv, ble_hci_uart_rx_cmd_arg);
             break;
         }
         case HCI_TRANS_H4_TYPE_ACL: {
+            hm_dump_in(2, recv);
             struct os_mbuf *om = ble_hci_trans_acl_buf_alloc();
             uint16_t packet_len = 4 + ((uint16_t)recv[2] | (uint16_t)recv[3] << 8);
             RT_ASSERT(packet_len <= 255);

+ 72 - 0
src/hm_dump.c

@@ -0,0 +1,72 @@
+#include <rtthread.h>
+
+static void hm_dump(uint8_t in, uint8_t type, uint8_t *data, uint16_t len)
+{
+    rt_kprintf("[0000-00-00 00:00:00.000] ");
+
+    switch (type) {
+    case 1:
+        rt_kprintf("CMD ");
+        break;
+    case 2:
+        rt_kprintf("ACL ");
+        break;
+    case 3:
+        rt_kprintf("SCO ");
+        break;
+    case 4:
+        rt_kprintf("EVT ");
+        break;
+    default:
+        break;
+    }
+
+    if (in) {
+        rt_kprintf("<= ");
+    } else {
+        rt_kprintf("=> ");
+    }
+
+    uint8_t *cur = data;
+    uint8_t *end = data + len-1;
+    while (cur <= end) {
+        rt_kprintf("%02x ", *cur);
+        cur++;
+    }
+    rt_kprintf("\n");
+}
+
+void hm_dump_out(uint8_t type, uint8_t *data)
+{
+    uint16_t len = 0;
+
+    switch (type) {
+    case 1:
+        len = data[2] + 3;
+        break;
+    case 2:
+        len = ((uint16_t)data[2] | (uint16_t)data[3] << 8) + 4;
+        break;
+    default:
+        break;
+    }
+    hm_dump(0, type, data, len);
+}
+
+void hm_dump_in(uint8_t type, uint8_t *data)
+{
+    uint16_t len = 0;
+
+    switch (type) {
+    case 2:
+        len = ((uint16_t)data[2] | (uint16_t)data[3] << 8) + 4;
+        break;
+    case 4:
+        len = data[1] + 2;
+    default:
+        break;
+    }
+
+    hm_dump(1, type, data, len);
+}
+