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

Implementation

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

    _checkError(_nativeTransfer(_spiHandle, inPtr, outPtr, data.length));

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