gobot.io/x/gobot/v2@v2.1.0/platforms/ble/generic_access_driver.go (about)

     1  package ble
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/binary"
     6  	"log"
     7  
     8  	"gobot.io/x/gobot/v2"
     9  )
    10  
    11  // GenericAccessDriver represents the Generic Access Service for a BLE Peripheral
    12  type GenericAccessDriver struct {
    13  	name       string
    14  	connection gobot.Connection
    15  	gobot.Eventer
    16  }
    17  
    18  // NewGenericAccessDriver creates a GenericAccessDriver
    19  func NewGenericAccessDriver(a BLEConnector) *GenericAccessDriver {
    20  	n := &GenericAccessDriver{
    21  		name:       gobot.DefaultName("GenericAccess"),
    22  		connection: a,
    23  		Eventer:    gobot.NewEventer(),
    24  	}
    25  
    26  	return n
    27  }
    28  
    29  // Connection returns the Driver's Connection to the associated Adaptor
    30  func (b *GenericAccessDriver) Connection() gobot.Connection { return b.connection }
    31  
    32  // Name returns the Driver name
    33  func (b *GenericAccessDriver) Name() string { return b.name }
    34  
    35  // SetName sets the Driver name
    36  func (b *GenericAccessDriver) SetName(n string) { b.name = n }
    37  
    38  // adaptor returns BLE adaptor for this device
    39  func (b *GenericAccessDriver) adaptor() BLEConnector {
    40  	return b.Connection().(BLEConnector)
    41  }
    42  
    43  // Start tells driver to get ready to do work
    44  func (b *GenericAccessDriver) Start() (err error) {
    45  	return
    46  }
    47  
    48  // Halt stops driver (void)
    49  func (b *GenericAccessDriver) Halt() (err error) { return }
    50  
    51  // GetDeviceName returns the device name for the BLE Peripheral
    52  func (b *GenericAccessDriver) GetDeviceName() string {
    53  	c, err := b.adaptor().ReadCharacteristic("2a00")
    54  	if err != nil {
    55  		log.Println(err)
    56  		return ""
    57  	}
    58  
    59  	buf := bytes.NewBuffer(c)
    60  	val := buf.String()
    61  	return val
    62  }
    63  
    64  // GetAppearance returns the appearance string for the BLE Peripheral
    65  func (b *GenericAccessDriver) GetAppearance() string {
    66  	c, err := b.adaptor().ReadCharacteristic("2a01")
    67  	if err != nil {
    68  		log.Println(err)
    69  		return ""
    70  	}
    71  
    72  	buf := bytes.NewBuffer(c)
    73  
    74  	var val uint16
    75  	binary.Read(buf, binary.LittleEndian, &val)
    76  	return appearances[val]
    77  }
    78  
    79  var appearances = map[uint16]string{
    80  	0:    "Unknown",
    81  	1024: "Generic Glucose Meter",
    82  	1088: "Generic: Running Walking Sensor",
    83  	1089: "Running Walking Sensor: In-Shoe",
    84  	1090: "Running Walking Sensor: On-Shoe",
    85  	1091: "Running Walking Sensor: On-Hip",
    86  	1152: "Generic: Cycling",
    87  	1153: "Cycling: Cycling Computer",
    88  	1154: "Cycling: Speed Sensor",
    89  	1155: "Cycling: Cadence Sensor",
    90  	1156: "Cycling: Power Sensor",
    91  	1157: "Cycling: Speed and Cadence Sensor",
    92  	128:  "Generic Computer",
    93  	192:  "Generic Watch",
    94  	193:  "Watch: Sports Watch",
    95  	256:  "Generic Clock",
    96  	3136: "Generic: Pulse Oximeter",
    97  	3137: "Fingertip Pulse",
    98  	3138: "Wrist Worn",
    99  	320:  "Generic Display",
   100  	3200: "Generic: Weight Scale",
   101  	384:  "Generic Remote Control",
   102  	448:  "Generic Eye-glasses",
   103  	512:  "Generic Tag",
   104  	5184: "Generic: Outdoor Sports Activity",
   105  	5185: "Location Display Device",
   106  	5186: "Location and Navigation Display Device",
   107  	5187: "Location Pod",
   108  	5188: "Location and Navigation Pod",
   109  	576:  "Generic Keyring",
   110  	64:   "Generic Phone",
   111  	640:  "Generic Media Player",
   112  	704:  "Generic Barcode Scanner",
   113  	768:  "Generic Thermometer",
   114  	769:  "Thermometer: Ear",
   115  	832:  "Generic Heart rate Sensor",
   116  	833:  "Heart Rate Sensor: Heart Rate Belt",
   117  	896:  "Generic Blood Pressure",
   118  	897:  "Blood Pressure: Arm Blood",
   119  	898:  "Blood Pressure: Wrist Blood",
   120  	960:  "Human Interface Device (HID)",
   121  	961:  "Keyboard",
   122  	962:  "Mouse",
   123  	963:  "Joystick",
   124  	964:  "Gamepad",
   125  	965:  "Digitizer Tablet",
   126  	966:  "Card Reader",
   127  	967:  "Digital Pen",
   128  	968:  "Barcode Scanner",
   129  }