[spi] Return error when timer runs out instead of quietly fail

Bug: 29625330

Change-Id: I5567363e9111f0879784707bc681685ddbd0d91e
diff --git a/firmware/src/spi.c b/firmware/src/spi.c
index fb28d47..afa58a3 100644
--- a/firmware/src/spi.c
+++ b/firmware/src/spi.c
@@ -23,6 +23,14 @@
 #include <spi_priv.h>
 #include <timer.h>
 
+#define INFO_PRINT(fmt, ...) do { \
+        osLog(LOG_INFO, "%s " fmt, "[spi]", ##__VA_ARGS__); \
+    } while (0);
+
+#define ERROR_PRINT(fmt, ...) do { \
+        osLog(LOG_ERROR, "%s " fmt, "[spi] ERROR:", ##__VA_ARGS__); \
+    } while (0);
+
 struct SpiDeviceState {
     struct SpiDevice dev;
 
@@ -109,10 +117,14 @@
     } else {
         size_t i = state->currentBuf++;
 
-        if (state->packets[i].delay > 0)
-            timTimerSet(state->packets[i].delay, 0, 50, spiDelayCallback, state, true);
-        else
+        if (state->packets[i].delay > 0) {
+            if (!timTimerSet(state->packets[i].delay, 0, 50, spiDelayCallback, state, true)) {
+                ERROR_PRINT("Cannot do delayed spi, timer depleted\n");
+                spiMasterDone(state, -ENOMEM); // should be out of timer; out of mem is close enough
+            }
+        } else {
             spiMasterNext(state);
+        }
     }
 }