The implementation of opStart() in sh2.c causes a binary semaphore operated by sh2_hal_block and sh2_hal_unblock to get stuck.
Logic Flow in opStart:
opStart
-> pOp->start() [example: setSensorConfigStart]
-> shtp_sent
-> opTxDone
-> sh2.pOp->txDone [example: setSensorConfigTxDone]
-> opCompleted
-> sh2_hal_unblock();
->sh2_hal_block();
All of the above are in the same thread, and leaves the system in a position where the an operation which calls sh2_hal_block() (e.g. getReportIds) will hang indefinitely