|
|
|
@ -17,6 +17,7 @@
|
|
|
|
|
* under the License.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include "host/ble_monitor.h"
|
|
|
|
|
|
|
|
|
|
#if BLE_MONITOR
|
|
|
|
@ -28,13 +29,14 @@
|
|
|
|
|
#include <stdarg.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <inttypes.h>
|
|
|
|
|
#include <libs/mynewt-nimble/porting/nimble/include/os/os_cputime.h>
|
|
|
|
|
#include "os/os.h"
|
|
|
|
|
#include "log/log.h"
|
|
|
|
|
#if MYNEWT_VAL(BLE_MONITOR_UART)
|
|
|
|
|
#include "uart/uart.h"
|
|
|
|
|
#endif
|
|
|
|
|
#if MYNEWT_VAL(BLE_MONITOR_RTT)
|
|
|
|
|
#include "rtt/SEGGER_RTT.h"
|
|
|
|
|
#include "SEGGER_RTT.h"
|
|
|
|
|
#endif
|
|
|
|
|
#include "ble_hs_priv.h"
|
|
|
|
|
#include "ble_monitor_priv.h"
|
|
|
|
@ -236,7 +238,7 @@ monitor_write_header(uint16_t opcode, uint16_t len)
|
|
|
|
|
hdr.flags = 0;
|
|
|
|
|
|
|
|
|
|
/* Use uptime for timestamp */
|
|
|
|
|
ts = os_get_uptime_usec();
|
|
|
|
|
ts = os_cputime_ticks_to_usecs(os_cputime_get32());
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* btsnoop specification states that fields of extended header must be
|
|
|
|
@ -266,6 +268,17 @@ btmon_write(FILE *instance, const char *bp, size_t n)
|
|
|
|
|
return n;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct File_methods
|
|
|
|
|
{
|
|
|
|
|
size_t (*write)(FILE* instance, const char *bp, size_t n);
|
|
|
|
|
size_t (*read)(FILE* instance, char *bp, size_t n);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct File
|
|
|
|
|
{
|
|
|
|
|
const struct File_methods *vmt;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static FILE *btmon = (FILE *) &(struct File) {
|
|
|
|
|
.vmt = &(struct File_methods) {
|
|
|
|
|
.write = btmon_write,
|
|
|
|
@ -276,7 +289,7 @@ static FILE *btmon = (FILE *) &(struct File) {
|
|
|
|
|
static void
|
|
|
|
|
drops_tmp_cb(struct ble_npl_event *ev)
|
|
|
|
|
{
|
|
|
|
|
ble_npl_mutex_pend(&lock, OS_TIMEOUT_NEVER);
|
|
|
|
|
ble_npl_mutex_pend(&lock, portMAX_DELAY);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* There's no "nop" in btsnoop protocol so we just send empty system note
|
|
|
|
@ -345,7 +358,7 @@ ble_monitor_init(void)
|
|
|
|
|
int
|
|
|
|
|
ble_monitor_send(uint16_t opcode, const void *data, size_t len)
|
|
|
|
|
{
|
|
|
|
|
ble_npl_mutex_pend(&lock, OS_TIMEOUT_NEVER);
|
|
|
|
|
ble_npl_mutex_pend(&lock, portMAX_DELAY);
|
|
|
|
|
|
|
|
|
|
monitor_write_header(opcode, len);
|
|
|
|
|
monitor_write(data, len);
|
|
|
|
@ -367,7 +380,7 @@ ble_monitor_send_om(uint16_t opcode, const struct os_mbuf *om)
|
|
|
|
|
om_tmp = SLIST_NEXT(om_tmp, om_next);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ble_npl_mutex_pend(&lock, OS_TIMEOUT_NEVER);
|
|
|
|
|
ble_npl_mutex_pend(&lock, portMAX_DELAY);
|
|
|
|
|
|
|
|
|
|
monitor_write_header(opcode, length);
|
|
|
|
|
|
|
|
|
@ -429,7 +442,7 @@ ble_monitor_log(int level, const char *fmt, ...)
|
|
|
|
|
|
|
|
|
|
ulog.ident_len = sizeof(id);
|
|
|
|
|
|
|
|
|
|
ble_npl_mutex_pend(&lock, OS_TIMEOUT_NEVER);
|
|
|
|
|
ble_npl_mutex_pend(&lock, portMAX_DELAY);
|
|
|
|
|
|
|
|
|
|
monitor_write_header(BLE_MONITOR_OPCODE_USER_LOGGING,
|
|
|
|
|
sizeof(ulog) + sizeof(id) + len + 1);
|
|
|
|
|