OMX_ERRORTYPE StateTrans( HTEST *hTest, OMX_STATETYPE eState) { OMX_ERRORTYPE ret = OMX_ErrorNone; /* Loaded->Idle */ if(hTest->eState == OMX_StateLoaded && eState == OMX_StateIdle) BackwardTrans(hTest, eState); /* Idle->Loaded */ else if(hTest->eState == OMX_StateIdle && eState == OMX_StateLoaded) BackwardTrans(hTest, eState); /* Exec->Idle */ else if((hTest->eState == OMX_StateExecuting || hTest->eState == OMX_StatePause) && eState == OMX_StateIdle) { hTest->bHoldBuffers = OMX_TRUE; ForwardTrans(hTest, eState); } else ForwardTrans(hTest, eState); /* Idle->Exec/Idle->Pause done */ if(hTest->eState == OMX_StateIdle && (eState == OMX_StateExecuting || eState == OMX_StatePause)) start_data_process(hTest); printf("State trans: [%x] -> [%d] done.\n", hTest->eState, eState); hTest->eState = eState; return OMX_ErrorNone; }
/**@brief Function for processing data written by the peer to the DFU Packet Characteristic. * * @param[in] p_dfu DFU Service Structure. * @param[in] p_evt Pointer to the event received from the S110 SoftDevice. */ static void on_dfu_pkt_write(ble_dfu_t * p_dfu, ble_dfu_evt_t * p_evt) { // The peer has written to the DFU Packet characteristic. Depending on the value of // the current value of the DFU Control Point, the appropriate action is taken. switch (m_pkt_type) { case PKT_TYPE_START: // The peer has written a start packet to the DFU Packet characteristic. start_data_process(p_dfu, p_evt); break; case PKT_TYPE_INIT: // The peer has written an init packet to the DFU Packet characteristic. init_data_process(p_dfu, p_evt); break; case PKT_TYPE_FIRMWARE_DATA: app_data_process(p_dfu, p_evt); break; default: // It is not possible to find out what packet it is. Ignore. Currently there is no // mechanism to notify the DFU Controller about this error condition. break; } }
OMX_ERRORTYPE StateTrans(HTEST *hTest, OMX_STATETYPE eState) { OMX_ERRORTYPE ret = OMX_ErrorNone; OMX_COMPONENTTYPE *hComponent = NULL; OMX_STATETYPE eCurState = OMX_StateInvalid; hComponent = hTest->hComponent; OMX_GetState(hComponent, &eCurState); ret = SendCommand(hTest, OMX_CommandStateSet,eState,NULL, OMX_FALSE); if(ret != OMX_ErrorNone) { printf("State trans to %d failed.\n", eState); return ret; } /* Loaded->Idle */ if(eCurState == OMX_StateLoaded && eState == OMX_StateIdle) Load2Idle(hTest); /* Exec->Idle */ else if(eCurState == OMX_StateExecuting && eState == OMX_StateIdle) hTest->bHoldBuffers = OMX_TRUE; /* Pause->Idle */ else if(eCurState == OMX_StatePause && eState == OMX_StateIdle) hTest->bHoldBuffers = OMX_TRUE; /* Idle->Loaded */ else if(eCurState == OMX_StateIdle && eState == OMX_StateLoaded) Idle2Load(hTest); else printf("Ivalid state trans.\n"); ret = WaitCommand(hTest, OMX_CommandStateSet, eState, NULL); if(ret != OMX_ErrorNone) return ret; printf("State trans: [%x] -> [%d] done.\n", eCurState, eState); /* Idle->Exec/Idle->Pause done */ if(eCurState == OMX_StateIdle && (eState == OMX_StateExecuting || eState == OMX_StatePause)) start_data_process(hTest); return ret; }