--- main_b0.c 2026-01-08 15:04:01.000000000 +0800 +++ main.c 2026-01-12 16:18:24.000000000 +0800 @@ -20,6 +20,8 @@ #include #include +#include + #include #include "src/shared/shell.h" @@ -146,12 +148,30 @@ dbus_message_iter_get_basic(&iter, &name); else name = ""; - +#if 0 bt_shell_printf("%s%s%s-Device %s %s\n", description ? "[" : "", description ? : "", description ? "] " : "", address, name); +#endif +} + +void ble_proc(unsigned char sigType, const unsigned char *buf, size_t len, int vals) +{ + if(sigType == 1){ + printf("RSSI=%d\n", vals); + }else if(sigType == 2){ + if(len == 23){ + bt_shell_printf("=SOS key status=0x%02x\n", buf[22]); + if(buf[22] & 0x01){ + printf("got a sos and bvolt=%d\n", buf[22]>>2 ); + /********************************************************** + *buf[22]: bit0=sos key value; bit[7-2]/10 = battery voltage + **********************************************************/ + } + } + }else; } static void print_fixed_iter(const char *label, const char *name, @@ -212,8 +232,7 @@ return; bt_shell_printf("%s%s:\n", label, name); - bt_shell_hexdump((void *)byte, len * sizeof(*byte)); - + ble_proc(2, (void *)byte, len * sizeof(*byte), 0); break; default: return; @@ -231,76 +250,85 @@ const char *valstr; DBusMessageIter subiter; char *entry; + char des_mac[] = "F0:C9:10:01:03:E2"; if (iter == NULL) { bt_shell_printf("%s%s is nil\n", label, name); return; } - switch (dbus_message_iter_get_arg_type(iter)) { - case DBUS_TYPE_INVALID: - bt_shell_printf("%s%s is invalid\n", label, name); - break; - case DBUS_TYPE_STRING: - case DBUS_TYPE_OBJECT_PATH: - dbus_message_iter_get_basic(iter, &valstr); - bt_shell_printf("%s%s: %s\n", label, name, valstr); - break; - case DBUS_TYPE_BOOLEAN: - dbus_message_iter_get_basic(iter, &valbool); - bt_shell_printf("%s%s: %s\n", label, name, - valbool == TRUE ? "yes" : "no"); - break; - case DBUS_TYPE_UINT32: - dbus_message_iter_get_basic(iter, &valu32); - bt_shell_printf("%s%s: 0x%08x\n", label, name, valu32); - break; - case DBUS_TYPE_UINT16: - dbus_message_iter_get_basic(iter, &valu16); - bt_shell_printf("%s%s: 0x%04x\n", label, name, valu16); - break; - case DBUS_TYPE_INT16: - dbus_message_iter_get_basic(iter, &vals16); - bt_shell_printf("%s%s: %d\n", label, name, vals16); - break; - case DBUS_TYPE_BYTE: - dbus_message_iter_get_basic(iter, &byte); - bt_shell_printf("%s%s: 0x%02x (%d)\n", label, name, byte, byte); - break; - case DBUS_TYPE_VARIANT: - dbus_message_iter_recurse(iter, &subiter); - print_iter(label, name, &subiter); - break; - case DBUS_TYPE_ARRAY: - dbus_message_iter_recurse(iter, &subiter); + char* p = strstr(label, des_mac); - if (dbus_type_is_fixed( - dbus_message_iter_get_arg_type(&subiter))) { - print_fixed_iter(label, name, &subiter); + if( p!= NULL){ + switch (dbus_message_iter_get_arg_type(iter)) { + case DBUS_TYPE_INVALID: + bt_shell_printf("%s%s is invalid\n", label, name); break; - } - - while (dbus_message_iter_get_arg_type(&subiter) != - DBUS_TYPE_INVALID) { + case DBUS_TYPE_STRING: + case DBUS_TYPE_OBJECT_PATH: + dbus_message_iter_get_basic(iter, &valstr); + bt_shell_printf("%s%s: %s\n", label, name, valstr); + break; + case DBUS_TYPE_BOOLEAN: + dbus_message_iter_get_basic(iter, &valbool); + bt_shell_printf("%s%s: %s\n", label, name, valbool == TRUE ? "yes" : "no"); + break; + case DBUS_TYPE_UINT32: + dbus_message_iter_get_basic(iter, &valu32); + bt_shell_printf("%s%s: 0x%08x\n", label, name, valu32); + break; + case DBUS_TYPE_UINT16: + dbus_message_iter_get_basic(iter, &valu16); + bt_shell_printf("%s%s: 0x%04x\n", label, name, valu16); + break; + case DBUS_TYPE_INT16: + dbus_message_iter_get_basic(iter, &vals16); + bt_shell_printf("%s%s:: %d\n", label, name, vals16); + /************************************************************* + * Received Signal Strength Indicator + *************************************************************/ + if(strstr(name, "RSSI") != NULL) + ble_proc(1, NULL, 0, vals16); + break; + case DBUS_TYPE_BYTE: + dbus_message_iter_get_basic(iter, &byte); + bt_shell_printf("%s%s: 0x%02x (%d)\n", label, name, byte, byte); + break; + case DBUS_TYPE_VARIANT: + dbus_message_iter_recurse(iter, &subiter); print_iter(label, name, &subiter); + break; + case DBUS_TYPE_ARRAY: + dbus_message_iter_recurse(iter, &subiter); + + if (dbus_type_is_fixed( + dbus_message_iter_get_arg_type(&subiter))) { + print_fixed_iter(label, name, &subiter); + break; + } + + while (dbus_message_iter_get_arg_type(&subiter) != + DBUS_TYPE_INVALID) { + print_iter(label, name, &subiter); + dbus_message_iter_next(&subiter); + } + break; + case DBUS_TYPE_DICT_ENTRY: + dbus_message_iter_recurse(iter, &subiter); + entry = g_strconcat(name, "Key", NULL); + print_iter(label, entry, &subiter); + g_free(entry); + + entry = g_strconcat(name, "Value", NULL); dbus_message_iter_next(&subiter); - } - break; - case DBUS_TYPE_DICT_ENTRY: - dbus_message_iter_recurse(iter, &subiter); - entry = g_strconcat(name, " Key", NULL); - print_iter(label, entry, &subiter); - g_free(entry); - - entry = g_strconcat(name, " Value", NULL); - dbus_message_iter_next(&subiter); - print_iter(label, entry, &subiter); - g_free(entry); - break; - default: - bt_shell_printf("%s%s has unsupported type\n", label, name); - break; - } + print_iter(label, entry, &subiter); + g_free(entry); + break; + default: + bt_shell_printf("%s%s has unsupported type\n", label, name); + break; + } //end of ' switch (dbus_message_iter_get_arg_type(iter)) ' + } //end of ' if( p!= NULL) ' } static void print_property_with_label(GDBusProxy *proxy, const char *name,