code: function(opts) {
    opts = opts || {};
  
    this.options = {
      debug: opts.debug || false,
      board: opts.board || 'uno',
      port: opts.port || '',
      manualReset: opts.manualReset || false
    };
  
    // this here checks for 3 conditions:
    // if debug option is simply true, we want to fall back to default debug function
    // if a custom debug function is passed in, we want to assign debug to be that
    // if debug option is false, then run debug as a no-op
    if (this.options.debug === true) {
      this.debug = console.log.bind(console);
    } else if (typeof this.options.debug === 'function') {
      this.debug = this.options.debug;
    } else {
      this.debug = function() {};
    }
  
    if (typeof this.options.board === 'string') {
      this.options.board = boards[this.options.board];
    } else if (typeof this.options.board === 'object') {
      this.options.board = this.options.board;
    }
  
    if (this.options.board && !this.options.board.manualReset) {
      this.options.board.manualReset = this.options.manualReset;
    }
  
    this.connection = new Connection(this.options);
  
    if (this.options.board) {
      var Protocol = protocols[this.options.board.protocol] || function() {};
  
      this.protocol = new Protocol({
        board: this.options.board,
        connection: this.connection,
        debug: this.debug
      });
    }
  }
docs: Constructor
  
  @param {object} opts - options for consumer to pass in