transfer method
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);
}
}
}