transfer method

List<int> transfer(
  1. List<int> data,
  2. bool reuseBuffer
)

Shifts out data, while shifting in the data to the result buffer. If reuseBuffer is true, data will be used for the result buffer, for false a new buffer will be created.

Returns a List<int> result buffer.

Implementation

List<int> transfer(List<int> data, bool reuseBuffer) {
  // ignore: avoid_init_to_null
  Pointer<Uint8> outPtr = nullptr;
  var inPtr = malloc<Uint8>(data.length);
  try {
    var index = 0;
    for (var v in data) {
      inPtr[index++] = v;
    }
    if (!reuseBuffer) {
      outPtr = malloc<Uint8>(data.length);
      _checkError(_nativeTransfer(_spiHandle, inPtr, outPtr, data.length));
    } else {
      _checkError(_nativeTransfer(_spiHandle, inPtr, inPtr, data.length));
    }

    var length = data.length;
    if (reuseBuffer) {
      for (var i = 0; i < data.length; ++i) {
        data[i] = inPtr[i];
      }
      return data;
    } else {
      List<int> result = List<int>.filled(length, 0);
      for (var i = 0; i < length; ++i) {
        result[i] = outPtr[i];
      }
      return result;
    }
  } finally {
    if (inPtr != nullptr) {
      malloc.free(inPtr);
    }
    if (outPtr != nullptr) {
      malloc.free(outPtr);
    }
  }
}