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 }