Example #1
0
func (b *DiscoveredDeviceInfo) explorePeripheral(p gatt.Peripheral) error {
	ss, err := p.DiscoverServices(nil)
	if err != nil {
		log.Printf("Failed to discover services, err: %s\n", err)
		return err
	}

	for _, s := range ss {
		// msg := "Service: " + s.UUID().String()
		// if len(s.Name()) > 0 {
		// 	msg += " (" + s.Name() + ")"
		// }
		// log.Println(msg)

		// Discovery characteristics
		cs, err := p.DiscoverCharacteristics(nil, s)
		if err != nil {
			log.Printf("Failed to discover characteristics, err: %s\n", err)
			continue
		}

		for _, c := range cs {
			// msg := "  Characteristic  " + c.UUID().String()
			// if len(c.Name()) > 0 {
			// 	msg += " (" + c.Name() + ")"
			// }
			// msg += "\n    properties    " + c.Properties().String()
			// log.Println(msg)

			// Discovery descriptors
			_, err := p.DiscoverDescriptors(nil, c)
			if err != nil {
				log.Printf("Failed to discover descriptors, err: %s\n", err)
				continue
			}

			// for _, d := range ds {
			// 	msg := "  Descriptor      " + d.UUID().String()
			// 	if len(d.Name()) > 0 {
			// 		msg += " (" + d.Name() + ")"
			// 	}
			// 	log.Println(msg)
			// }

			id, _ := normalizeHex(c.UUID().String())
			b.characteristics[id] = c
		}
		b.ready = true
	}

	return nil
}