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