func()

in nmxact/nmble/ble_advertiser.go [181:245]


func (a *Advertiser) Start(cfg AdvertiseCfg) (sesn.Sesn, error) {
	var advData []byte
	var rspData []byte
	var connHandle uint16
	var bl *Listener
	var err error

	fns := []func() error{
		// Convert advertising fields to data.
		func() error {
			advData, err = a.fields(cfg.AdvFields)
			return err
		},

		// Set advertising data.
		func() error {
			return a.setAdvData(advData)
		},

		// Convert response fields to data.
		func() error {
			rspData, err = a.fields(cfg.RspFields)
			return err
		},

		// Set response data.
		func() error {
			return a.setRspData(rspData)
		},

		// Advertise
		func() error {
			connHandle, bl, err = a.advertise(cfg)
			return err
		},
	}

	a.stopChan = make(chan struct{})
	a.stoppedChan = make(chan struct{})

	defer func() {
		a.stopChan = nil
		close(a.stoppedChan)
	}()

	if err := a.bx.AcquireSlave(a); err != nil {
		return nil, err
	}
	defer a.bx.ReleaseSlave()

	for _, fn := range fns {
		// Check for abort before each step.
		select {
		case <-a.stopChan:
			return nil, fmt.Errorf("advertise aborted")
		default:
		}

		if err := fn(); err != nil {
			return nil, err
		}
	}

	return a.buildSesn(cfg, connHandle, bl)
}