code: func NewHCI(opts ...Option) (*HCI, error) {
  	h := &HCI{
  		id: -1,
  
  		chCmdPkt:  make(chan *pkt),
  		chCmdBufs: make(chan []byte, 8),
  		sent:      make(map[int]*pkt),
  
  		evth: map[int]handlerFn{},
  		subh: map[int]handlerFn{},
  
  		muConns:      &sync.Mutex{},
  		conns:        make(map[uint16]*Conn),
  		chMasterConn: make(chan *Conn),
  		chSlaveConn:  make(chan *Conn),
  
  		done: make(chan bool),
  	}
  	h.params.init()
  	if err := h.Option(opts...); err != nil {
  		return nil, errors.Wrap(err, "can't set options")
  	}
  
  	return h, nil
  }
docs: // NewHCI returns a hci device.