コード例 #1
0
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;
}
コード例 #2
0
/**@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;
    }
}
コード例 #3
0
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;
}