Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.sbin/btconfig fiddle with printing of "Class of Device" ...



details:   https://anonhg.NetBSD.org/src/rev/f4e1e9407ce0
branches:  trunk
changeset: 748000:f4e1e9407ce0
user:      plunky <plunky%NetBSD.org@localhost>
date:      Thu Oct 08 19:31:41 2009 +0000

description:
fiddle with printing of "Class of Device" values
  - pass the class of device octet stream to the function
  - only print where the format is known (we only know format #0)
  - use language from the Baseband Assigned numbers document
  - use bit numbers from the Baseband Assigned numbers document
  - add Health device major class

(only these changes this time :)

diffstat:

 usr.sbin/btconfig/btconfig.c |  108 +++++++++++++++++++++++++-----------------
 1 files changed, 63 insertions(+), 45 deletions(-)

diffs (212 lines):

diff -r 85080454f25f -r f4e1e9407ce0 usr.sbin/btconfig/btconfig.c
--- a/usr.sbin/btconfig/btconfig.c      Thu Oct 08 19:29:42 2009 +0000
+++ b/usr.sbin/btconfig/btconfig.c      Thu Oct 08 19:31:41 2009 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: btconfig.c,v 1.19 2009/10/08 19:29:42 plunky Exp $ */
+/* $NetBSD: btconfig.c,v 1.20 2009/10/08 19:31:41 plunky Exp $ */
 
 /*-
  * Copyright (c) 2006 Itronix Inc.
@@ -33,7 +33,7 @@
 
 #include <sys/cdefs.h>
 __COPYRIGHT("@(#) Copyright (c) 2006 Itronix, Inc.  All rights reserved.");
-__RCSID("$NetBSD: btconfig.c,v 1.19 2009/10/08 19:29:42 plunky Exp $");
+__RCSID("$NetBSD: btconfig.c,v 1.20 2009/10/08 19:31:41 plunky Exp $");
 
 #include <sys/ioctl.h>
 #include <sys/param.h>
@@ -67,7 +67,8 @@
 void print_val(const char *, const char **, int);
 void print_info(int);
 void print_stats(void);
-void print_class(const char *);
+void print_class(const char *, uint8_t *);
+void print_class0(void);
 void print_voice(int);
 void tag(const char *);
 void print_features(const char *, uint8_t, uint8_t *);
@@ -713,8 +714,7 @@
        }
 
        load_value(HCI_CMD_READ_UNIT_CLASS, buf, HCI_CLASS_SIZE);
-       class = (buf[2] << 16) | (buf[1] << 8) | (buf[0]);
-       print_class("\t");
+       print_class("\tclass:", buf);
 
        load_value(HCI_CMD_READ_LOCAL_NAME, buf, HCI_UNIT_NAME_SIZE);
        printf("\tname: \"%s\"\n", buf);
@@ -934,30 +934,39 @@
 }
 
 void
-print_class(const char *str)
+print_class(const char *str, uint8_t *uclass)
 {
-       int major, minor;
+
+       class = (uclass[2] << 16) | (uclass[1] << 8) | uclass[0];
+       width = printf("%s [0x%06x]", str, class);
 
-       major = (class & 0x1f00) >> 8;
-       minor = (class & 0x00fc) >> 2;
+       switch(__SHIFTOUT(class, __BITS(0, 1))) {
+       case 0: print_class0();         break;
+       default:                        break;
+       }
 
-       width = printf("%sclass: [0x%6.6x]", str, class);
+       tag(NULL);
+}
 
-       switch (major) {
+void
+print_class0(void)
+{
+
+       switch (__SHIFTOUT(class, __BITS(8, 12))) {
        case 1: /* Computer */
-               switch (minor) {
-               case 1: tag("Desktop");                         break;
-               case 2: tag("Server");                          break;
+               switch (__SHIFTOUT(class, __BITS(2, 7))) {
+               case 1: tag("Desktop workstation");             break;
+               case 2: tag("Server-class computer");           break;
                case 3: tag("Laptop");                          break;
-               case 4: tag("Handheld");                        break;
-               case 5: tag("Palm Sized");                      break;
-               case 6: tag("Wearable");                        break;
+               case 4: tag("Handheld PC/PDA");                 break;
+               case 5: tag("Palm Sized PC/PDA");               break;
+               case 6: tag("Wearable computer");               break;
+               default: tag("Computer");                       break;
                }
-               tag("Computer");
                break;
 
        case 2: /* Phone */
-               switch (minor) {
+               switch (__SHIFTOUT(class, __BITS(2, 7))) {
                case 1: tag("Cellular Phone");                  break;
                case 2: tag("Cordless Phone");                  break;
                case 3: tag("Smart Phone");                     break;
@@ -969,7 +978,7 @@
 
        case 3: /* LAN */
                tag("LAN");
-               switch ((minor & 0x38) >> 3) {
+               switch (__SHIFTOUT(class, __BITS(5, 7))) {
                case 0: tag("[Fully available]");               break;
                case 1: tag("[1-17% utilised]");                break;
                case 2: tag("[17-33% utilised]");               break;
@@ -982,7 +991,7 @@
                break;
 
        case 4: /* Audio/Visual */
-               switch (minor) {
+               switch (__SHIFTOUT(class, __BITS(2, 7))) {
                case 1: tag("Wearable Headset");                break;
                case 2: tag("Hands-free Audio");                break;
                case 4: tag("Microphone");                      break;
@@ -1004,7 +1013,7 @@
                break;
 
        case 5: /* Peripheral */
-               switch (minor & 0x0f) {
+               switch (__SHIFTOUT(class, __BITS(2, 5))) {
                case 1: tag("Joystick");                        break;
                case 2: tag("Gamepad");                         break;
                case 3: tag("Remote Control");                  break;
@@ -1014,20 +1023,20 @@
                default: tag("Peripheral");                     break;
                }
 
-               if (minor & 0x10) tag("Keyboard");
-               if (minor & 0x20) tag("Mouse");
+               if (class & __BIT(6)) tag("Keyboard");
+               if (class & __BIT(7)) tag("Mouse");
                break;
 
        case 6: /* Imaging */
-               if (minor & 0x20) tag("Printer");
-               if (minor & 0x10) tag("Scanner");
-               if (minor & 0x08) tag("Camera");
-               if (minor & 0x04) tag("Display");
-               if ((minor & 0x3c) == 0) tag("Imaging");
+               if (class & __BIT(4)) tag("Display");
+               if (class & __BIT(5)) tag("Camera");
+               if (class & __BIT(6)) tag("Scanner");
+               if (class & __BIT(7)) tag("Printer");
+               if ((class & __BITS(4, 7)) == 0) tag("Imaging");
                break;
 
        case 7: /* Wearable */
-               switch (minor) {
+               switch (__SHIFTOUT(class, __BITS(2, 7))) {
                case 1: tag("Wrist Watch");                     break;
                case 2: tag("Pager");                           break;
                case 3: tag("Jacket");                          break;
@@ -1038,7 +1047,7 @@
                break;
 
        case 8: /* Toy */
-               switch (minor) {
+               switch (__SHIFTOUT(class, __BITS(2, 7))) {
                case 1: tag("Robot");                           break;
                case 2: tag("Vehicle");                         break;
                case 3: tag("Doll / Action Figure");            break;
@@ -1048,20 +1057,32 @@
                }
                break;
 
+       case 9: /* Health */
+               switch (__SHIFTOUT(class, __BITS(2, 7))) {
+               case 1: tag("Blood Pressure Monitor");          break;
+               case 2: tag("Thermometer");                     break;
+               case 3: tag("Weighing Scale");                  break;
+               case 4: tag("Glucose Meter");                   break;
+               case 5: tag("Pulse Oximeter");                  break;
+               case 6: tag("Heart/Pulse Rate Monitor");        break;
+               case 7: tag("Health Data Display");             break;
+               default: tag("Health");                         break;
+               }
+               break;
+
        default:
                break;
        }
 
-       if (class & 0x002000)   tag("<Limited Discoverable>");
-       if (class & 0x010000)   tag("<Positioning>");
-       if (class & 0x020000)   tag("<Networking>");
-       if (class & 0x040000)   tag("<Rendering>");
-       if (class & 0x080000)   tag("<Capturing>");
-       if (class & 0x100000)   tag("<Object Transfer>");
-       if (class & 0x200000)   tag("<Audio>");
-       if (class & 0x400000)   tag("<Telephony>");
-       if (class & 0x800000)   tag("<Information>");
-       tag(NULL);
+       if (class & __BIT(13))  tag("<Limited Discoverable>");
+       if (class & __BIT(16))  tag("<Positioning>");
+       if (class & __BIT(17))  tag("<Networking>");
+       if (class & __BIT(18))  tag("<Rendering>");
+       if (class & __BIT(19))  tag("<Capturing>");
+       if (class & __BIT(20))  tag("<Object Transfer>");
+       if (class & __BIT(21))  tag("<Audio>");
+       if (class & __BIT(22))  tag("<Telephony>");
+       if (class & __BIT(23))  tag("<Information>");
 }
 
 void
@@ -1128,10 +1149,7 @@
                &nep, sizeof(nep));
 
        printf("   : name \"%s\"\n", nep.name);
-
-       class = (r->uclass[2] << 16) | (r->uclass[1] << 8) | (r->uclass[0]);
-       print_class("   : ");
-
+       print_class("   : class", r->uclass);
        printf("   : page scan rep mode 0x%02x\n", r->page_scan_rep_mode);
        printf("   : clock offset %d\n", le16toh(r->clock_offset));
 



Home | Main Index | Thread Index | Old Index