code: func (c *firmataI2cConnection) Read(b []byte) (read int, err error) {
  	ret := make(chan []byte)
  
  	if err = c.adaptor.Board.I2cRead(c.address, len(b)); err != nil {
  		return
  	}
  
  	c.adaptor.Board.Once(c.adaptor.Board.Event("I2cReply"), func(data interface{}) {
  		ret <- data.(client.I2cReply).Data
  	})
  
  	result := <-ret
  	copy(b, result)
  
  	read = len(result)
  
  	return
  }
docs: // Read tries to read a full buffer from the i2c device.
  // Returns an empty array if the response from the board has timed out.