diff options
author | Peng Xu <pengxu@google.com> | 2016-07-07 11:56:01 -0700 |
---|---|---|
committer | gitbuildkicker <android-build@google.com> | 2016-07-21 16:17:25 -0700 |
commit | fe673380aeae5fabbe3ec981f2f3aaadc578d588 (patch) | |
tree | 45a71331bc31d33beaa702efd847d1c0d3e624d3 | |
parent | 2f784aec07f9932f25a1915e0390ed59b1a4cfe6 (diff) | |
download | contexthub-fe673380aeae5fabbe3ec981f2f3aaadc578d588.tar.gz |
[spi] Return error when timer runs out instead of quietly failandroid-cts-7.0_r9android-cts-7.0_r8android-cts-7.0_r7android-cts-7.0_r6android-cts-7.0_r5android-cts-7.0_r4android-cts-7.0_r33android-cts-7.0_r32android-cts-7.0_r31android-cts-7.0_r30android-cts-7.0_r3android-cts-7.0_r29android-cts-7.0_r28android-cts-7.0_r27android-cts-7.0_r26android-cts-7.0_r25android-cts-7.0_r24android-cts-7.0_r23android-cts-7.0_r22android-cts-7.0_r21android-cts-7.0_r20android-cts-7.0_r2android-cts-7.0_r19android-cts-7.0_r18android-cts-7.0_r17android-cts-7.0_r16android-cts-7.0_r15android-cts-7.0_r14android-cts-7.0_r13android-cts-7.0_r12android-cts-7.0_r11android-cts-7.0_r10android-cts-7.0_r1android-7.0.0_r9android-7.0.0_r8android-7.0.0_r7android-7.0.0_r6android-7.0.0_r5android-7.0.0_r4android-7.0.0_r36android-7.0.0_r35android-7.0.0_r34android-7.0.0_r33android-7.0.0_r32android-7.0.0_r31android-7.0.0_r30android-7.0.0_r3android-7.0.0_r29android-7.0.0_r28android-7.0.0_r27android-7.0.0_r24android-7.0.0_r21android-7.0.0_r19android-7.0.0_r17android-7.0.0_r15android-7.0.0_r14android-7.0.0_r13android-7.0.0_r12android-7.0.0_r11android-7.0.0_r10android-7.0.0_r1nougat-releasenougat-mr0.5-releasenougat-cts-releasenougat-bugfix-release
Bug: 29625330
Change-Id: I5567363e9111f0879784707bc681685ddbd0d91e
-rw-r--r-- | firmware/src/spi.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/firmware/src/spi.c b/firmware/src/spi.c index fb28d47a..afa58a3e 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 @@ void spiMasterRxTxDone(struct SpiDevice *dev, int err) } 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); + } } } |