--- 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 <stdbool.h>
 #include <wordexp.h>
 
+#include <ctype.h>
+
 #include <glib.h>
 
 #include "src/shared/shell.h"
@@ -146,12 +148,30 @@
 		dbus_message_iter_get_basic(&iter, &name);
 	else
 		name = "<unknown>";
-
+#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,
