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