Transmit from previously acquired DMA buffer.
284 {
286 return fl::task::Error("Device not initialized");
287 }
288
289 if (!buffer.ok()) {
290 return fl::task::Error("Invalid buffer");
291 }
292
293
294 if (!
pImpl->hw_backend) {
295 FL_WARN(
"SPI Device: No hardware controller available");
296 return fl::task::Error("No hardware controller");
297 }
298
299
300 SpiHwBase* hw =
pImpl->hw_backend.get();
301
302
303 TransmitMode mode = async ? TransmitMode::ASYNC : TransmitMode::SYNC;
304 bool success = hw->transmit(mode);
305
306 if (!success) {
307 FL_WARN(
"SPI Device: Transmission failed");
308 return fl::task::Error("Transmission failed");
309 }
310
311
312 if (!async) {
313 if (!hw->waitComplete()) {
314 FL_WARN(
"SPI Device: Wait for completion failed");
315 return fl::task::Error("Wait for completion failed");
316 }
317 }
318
319 FL_LOG_SPI(
"SPI Device: Transmission started (" << ((async ?
"async" :
"blocking")) <<
")");
321}
bool isReady() const FL_NO_EXCEPT
Check if device is initialized and ready for use.
fl::unique_ptr< Impl > pImpl
#define FL_LOG_SPI(...)
Serial Peripheral Interface (SPI) logging Logs SPI configuration, initialization, and transfers.
constexpr nullopt_t nullopt