bool iotjs_i2c_read(iotjs_i2c_t* i2c) {
  I2C_METHOD_HEADER(i2c);

  uint8_t len = _this->buf_len;
  _this->buf_data = iotjs_buffer_allocate(len);

  IOTJS_ASSERT(len > 0);

  if (iotbus_i2c_read(platform_data->i2c_context, (uint8_t*)_this->buf_data,
                      len) < 0) {
    DLOG("%s: cannot read data", __func__);
    return false;
  }

  return true;
}
bool iotjs_i2c_write(iotjs_i2c_t* i2c) {
  I2C_METHOD_HEADER(i2c);

  uint8_t len = i2c->buf_len;
  IOTJS_ASSERT(len > 0);
  uint8_t* data = (uint8_t*)i2c->buf_data;

  int ret = iotbus_i2c_write(platform_data->i2c_context, data, len);

  IOTJS_RELEASE(i2c->buf_data);

  if (ret < 0) {
    DLOG("%s: cannot write data", __func__);
    return false;
  }
  return true;
}
bool iotjs_i2c_write(iotjs_i2c_t* i2c) {
  I2C_METHOD_HEADER(i2c);

  uint8_t len = _this->buf_len;
  IOTJS_ASSERT(len > 0);
  uint8_t* data = (uint8_t*)_this->buf_data;

  int ret = iotbus_i2c_write(platform_data->i2c_context, data, len);

  if (_this->buf_data != NULL) {
    iotjs_buffer_release(_this->buf_data);
  }

  if (ret < 0) {
    DLOG("%s: cannot write data", __func__);
    return false;
  }
  return true;
}