func newConn(cp config.NewtmgrConnProfile, readTimeout time.Duration) (Conn, error) { // Based on ConnProfile, instantiate the right type of conn object, that // implements the conn interface. var c Conn switch cp.Type() { case "serial": c = &ConnSerial{} c.SetOICEncoded(false) case "oic_serial": c = &ConnSerial{} c.SetOICEncoded(true) case "ble": c = &ConnBLE{} c.SetOICEncoded(false) case "oic_ble": c = &ConnBLE{} c.SetOICEncoded(true) case "udp": c = &ConnUDP{} c.SetOICEncoded(false) case "oic_udp": c = &ConnUDP{} c.SetOICEncoded(true) default: return nil, util.NewNewtError("Invalid conn profile " + cp.Type() + " not implemented") } if err := c.Open(cp, readTimeout); err != nil { return nil, err } return c, nil }
func (cs *ConnUDP) Open(cp config.NewtmgrConnProfile, readTimeout time.Duration) error { addr, err := net.ResolveUDPAddr("udp", cp.ConnString()) if err != nil { return util.NewNewtError(fmt.Sprintf("Name not resolving: %s", err.Error())) } cs.dst = addr // bind local endpoint to wait for response afterwards s, err := net.ListenUDP("udp", nil) if err != nil { return util.NewNewtError(fmt.Sprintf("UDP conn failed: %s\n", err.Error())) } cs.conn = s return nil }
func (cs *ConnSerial) Open(cp config.NewtmgrConnProfile, readTimeout time.Duration) error { c, err := newSerialConfig(cp.ConnString(), readTimeout) if err != nil { return err } cs.serialChannel, err = serial.OpenPort(c) if err != nil { return util.ChildNewtError(err) } //defer cs.serialChannel.Close() // Most of the reading will be done line by line, use the // bufio.Scanner to do this cs.scanner = bufio.NewScanner(cs.serialChannel) return nil }
func (cb *ConnBLE) Open(cp config.NewtmgrConnProfile, readTimeout time.Duration) error { var err error var DefaultClientOptions = BleOptions deviceName = cp.ConnString() deviceAddress = reverseBytes(cp.DeviceAddress()) log.Debugf("BLE Connection devaddr:%+v", deviceAddress) deviceAddressType = cp.DeviceAddressType() cb.bleDevice, err = gatt.NewDevice(DefaultClientOptions...) if err != nil { return util.NewNewtError(err.Error()) } cb.bleDevice.Handle( gatt.PeripheralDiscovered(onPeriphDiscovered), gatt.PeripheralConnected(onPeriphConnected), gatt.PeripheralDisconnected(onPeriphDisconnected), ) cb.bleDevice.Init(onStateChanged) CharDisc <- true return nil }