changes.diff 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. --- main_b0.c 2026-01-08 15:04:01.000000000 +0800
  2. +++ main.c 2026-01-12 16:18:24.000000000 +0800
  3. @@ -20,6 +20,8 @@
  4. #include <stdbool.h>
  5. #include <wordexp.h>
  6. +#include <ctype.h>
  7. +
  8. #include <glib.h>
  9. #include "src/shared/shell.h"
  10. @@ -146,12 +148,30 @@
  11. dbus_message_iter_get_basic(&iter, &name);
  12. else
  13. name = "<unknown>";
  14. -
  15. +#if 0
  16. bt_shell_printf("%s%s%s-Device %s %s\n",
  17. description ? "[" : "",
  18. description ? : "",
  19. description ? "] " : "",
  20. address, name);
  21. +#endif
  22. +}
  23. +
  24. +void ble_proc(unsigned char sigType, const unsigned char *buf, size_t len, int vals)
  25. +{
  26. + if(sigType == 1){
  27. + printf("RSSI=%d\n", vals);
  28. + }else if(sigType == 2){
  29. + if(len == 23){
  30. + bt_shell_printf("=SOS key status=0x%02x\n", buf[22]);
  31. + if(buf[22] & 0x01){
  32. + printf("got a sos and bvolt=%d\n", buf[22]>>2 );
  33. + /**********************************************************
  34. + *buf[22]: bit0=sos key value; bit[7-2]/10 = battery voltage
  35. + **********************************************************/
  36. + }
  37. + }
  38. + }else;
  39. }
  40. static void print_fixed_iter(const char *label, const char *name,
  41. @@ -212,8 +232,7 @@
  42. return;
  43. bt_shell_printf("%s%s:\n", label, name);
  44. - bt_shell_hexdump((void *)byte, len * sizeof(*byte));
  45. -
  46. + ble_proc(2, (void *)byte, len * sizeof(*byte), 0);
  47. break;
  48. default:
  49. return;
  50. @@ -231,76 +250,85 @@
  51. const char *valstr;
  52. DBusMessageIter subiter;
  53. char *entry;
  54. + char des_mac[] = "F0:C9:10:01:03:E2";
  55. if (iter == NULL) {
  56. bt_shell_printf("%s%s is nil\n", label, name);
  57. return;
  58. }
  59. - switch (dbus_message_iter_get_arg_type(iter)) {
  60. - case DBUS_TYPE_INVALID:
  61. - bt_shell_printf("%s%s is invalid\n", label, name);
  62. - break;
  63. - case DBUS_TYPE_STRING:
  64. - case DBUS_TYPE_OBJECT_PATH:
  65. - dbus_message_iter_get_basic(iter, &valstr);
  66. - bt_shell_printf("%s%s: %s\n", label, name, valstr);
  67. - break;
  68. - case DBUS_TYPE_BOOLEAN:
  69. - dbus_message_iter_get_basic(iter, &valbool);
  70. - bt_shell_printf("%s%s: %s\n", label, name,
  71. - valbool == TRUE ? "yes" : "no");
  72. - break;
  73. - case DBUS_TYPE_UINT32:
  74. - dbus_message_iter_get_basic(iter, &valu32);
  75. - bt_shell_printf("%s%s: 0x%08x\n", label, name, valu32);
  76. - break;
  77. - case DBUS_TYPE_UINT16:
  78. - dbus_message_iter_get_basic(iter, &valu16);
  79. - bt_shell_printf("%s%s: 0x%04x\n", label, name, valu16);
  80. - break;
  81. - case DBUS_TYPE_INT16:
  82. - dbus_message_iter_get_basic(iter, &vals16);
  83. - bt_shell_printf("%s%s: %d\n", label, name, vals16);
  84. - break;
  85. - case DBUS_TYPE_BYTE:
  86. - dbus_message_iter_get_basic(iter, &byte);
  87. - bt_shell_printf("%s%s: 0x%02x (%d)\n", label, name, byte, byte);
  88. - break;
  89. - case DBUS_TYPE_VARIANT:
  90. - dbus_message_iter_recurse(iter, &subiter);
  91. - print_iter(label, name, &subiter);
  92. - break;
  93. - case DBUS_TYPE_ARRAY:
  94. - dbus_message_iter_recurse(iter, &subiter);
  95. + char* p = strstr(label, des_mac);
  96. - if (dbus_type_is_fixed(
  97. - dbus_message_iter_get_arg_type(&subiter))) {
  98. - print_fixed_iter(label, name, &subiter);
  99. + if( p!= NULL){
  100. + switch (dbus_message_iter_get_arg_type(iter)) {
  101. + case DBUS_TYPE_INVALID:
  102. + bt_shell_printf("%s%s is invalid\n", label, name);
  103. break;
  104. - }
  105. -
  106. - while (dbus_message_iter_get_arg_type(&subiter) !=
  107. - DBUS_TYPE_INVALID) {
  108. + case DBUS_TYPE_STRING:
  109. + case DBUS_TYPE_OBJECT_PATH:
  110. + dbus_message_iter_get_basic(iter, &valstr);
  111. + bt_shell_printf("%s%s: %s\n", label, name, valstr);
  112. + break;
  113. + case DBUS_TYPE_BOOLEAN:
  114. + dbus_message_iter_get_basic(iter, &valbool);
  115. + bt_shell_printf("%s%s: %s\n", label, name, valbool == TRUE ? "yes" : "no");
  116. + break;
  117. + case DBUS_TYPE_UINT32:
  118. + dbus_message_iter_get_basic(iter, &valu32);
  119. + bt_shell_printf("%s%s: 0x%08x\n", label, name, valu32);
  120. + break;
  121. + case DBUS_TYPE_UINT16:
  122. + dbus_message_iter_get_basic(iter, &valu16);
  123. + bt_shell_printf("%s%s: 0x%04x\n", label, name, valu16);
  124. + break;
  125. + case DBUS_TYPE_INT16:
  126. + dbus_message_iter_get_basic(iter, &vals16);
  127. + bt_shell_printf("%s%s:: %d\n", label, name, vals16);
  128. + /*************************************************************
  129. + * Received Signal Strength Indicator
  130. + *************************************************************/
  131. + if(strstr(name, "RSSI") != NULL)
  132. + ble_proc(1, NULL, 0, vals16);
  133. + break;
  134. + case DBUS_TYPE_BYTE:
  135. + dbus_message_iter_get_basic(iter, &byte);
  136. + bt_shell_printf("%s%s: 0x%02x (%d)\n", label, name, byte, byte);
  137. + break;
  138. + case DBUS_TYPE_VARIANT:
  139. + dbus_message_iter_recurse(iter, &subiter);
  140. print_iter(label, name, &subiter);
  141. + break;
  142. + case DBUS_TYPE_ARRAY:
  143. + dbus_message_iter_recurse(iter, &subiter);
  144. +
  145. + if (dbus_type_is_fixed(
  146. + dbus_message_iter_get_arg_type(&subiter))) {
  147. + print_fixed_iter(label, name, &subiter);
  148. + break;
  149. + }
  150. +
  151. + while (dbus_message_iter_get_arg_type(&subiter) !=
  152. + DBUS_TYPE_INVALID) {
  153. + print_iter(label, name, &subiter);
  154. + dbus_message_iter_next(&subiter);
  155. + }
  156. + break;
  157. + case DBUS_TYPE_DICT_ENTRY:
  158. + dbus_message_iter_recurse(iter, &subiter);
  159. + entry = g_strconcat(name, "Key", NULL);
  160. + print_iter(label, entry, &subiter);
  161. + g_free(entry);
  162. +
  163. + entry = g_strconcat(name, "Value", NULL);
  164. dbus_message_iter_next(&subiter);
  165. - }
  166. - break;
  167. - case DBUS_TYPE_DICT_ENTRY:
  168. - dbus_message_iter_recurse(iter, &subiter);
  169. - entry = g_strconcat(name, " Key", NULL);
  170. - print_iter(label, entry, &subiter);
  171. - g_free(entry);
  172. -
  173. - entry = g_strconcat(name, " Value", NULL);
  174. - dbus_message_iter_next(&subiter);
  175. - print_iter(label, entry, &subiter);
  176. - g_free(entry);
  177. - break;
  178. - default:
  179. - bt_shell_printf("%s%s has unsupported type\n", label, name);
  180. - break;
  181. - }
  182. + print_iter(label, entry, &subiter);
  183. + g_free(entry);
  184. + break;
  185. + default:
  186. + bt_shell_printf("%s%s has unsupported type\n", label, name);
  187. + break;
  188. + } //end of ' switch (dbus_message_iter_get_arg_type(iter)) '
  189. + } //end of ' if( p!= NULL) '
  190. }
  191. static void print_property_with_label(GDBusProxy *proxy, const char *name,