OMX_ERRORTYPE port_enable(HTEST *hTest, OMX_U32 nPortIndex) { OMX_ERRORTYPE ret = OMX_ErrorNone; OMX_COMPONENTTYPE *hComponent; OMX_U32 i; hComponent = hTest->hComponent; ret = SendCommand(hTest, OMX_CommandPortEnable, nPortIndex, NULL, OMX_FALSE); if(ret != OMX_ErrorNone) return ret; prepare_port_buffers(hTest, nPortIndex); WaitCommand(hTest, OMX_CommandPortEnable, nPortIndex, NULL); hTest->bHoldBuffers = OMX_FALSE; for(i=0; i<hTest->nBufferHdr[nPortIndex]; i++) { if(hTest->PortDir[nPortIndex] == OMX_DirOutput) { OMX_FillThisBuffer(hTest->hComponent, hTest->pBufferHdr[nPortIndex][i]); } } printf("port enable done.\n"); return OMX_ErrorNone; }
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; }
OMX_ERRORTYPE port_disable(HTEST *hTest, OMX_U32 nPortIndex) { OMX_COMPONENTTYPE *hComponent; OMX_ERRORTYPE ret = OMX_ErrorNone; hComponent = hTest->hComponent; ret = SendCommand(hTest, OMX_CommandPortDisable, nPortIndex, NULL, OMX_FALSE); if(ret != OMX_ErrorNone) return ret; hTest->bHoldBuffers = OMX_TRUE; free_port_buffers(hTest, nPortIndex); WaitCommand(hTest, OMX_CommandPortDisable, nPortIndex, NULL); printf("port disbale done.\n"); return OMX_ErrorNone; }
OMX_ERRORTYPE SendCommand( HTEST *hTest, OMX_COMMANDTYPE Cmd, OMX_U32 nParam1, OMX_PTR pCmdData, OMX_BOOL bSync) { OMX_ERRORTYPE ret = OMX_ErrorNone; OMX_HANDLETYPE hComponent = hTest->hComponent; hTest->sCmdDone.eEvent = OMX_EventMax; hTest->bError = OMX_FALSE; ret = OMX_SendCommand(hComponent, Cmd, nParam1, pCmdData); if(ret != OMX_ErrorNone && ret != OMX_ErrorNotComplete) return ret; if(bSync == OMX_TRUE) WaitCommand(hTest, Cmd, nParam1, pCmdData); return OMX_ErrorNone; }
void FtpConnHandler::HandleConnection(fasmio::runtime_env::ITCPSocket* sock, const char* addr) { if (NULL == (sock_ = sock)) return; if (!SendMessage(220, "Greeting %s", addr)) return; // wait for USER, user name ignored while (true) { if (!WaitCommand()) return; if (last_cmd_ != CMD_USER) { if (!SendMessage(530, "Please login with USER and PASS.")) return; continue; } break; } if (!SendMessage(331, "Please specify the password.")) return; // wait for PASS, the password will dropped immediately while (true) { if (!WaitCommand()) return; if (last_cmd_ != CMD_PASS) { if (!SendMessage(530, "Please login with USER and PASS.")) return; continue; } break; } if (!SendMessage(230, "Login successful.")) return; // command main loop while (true) { if (!WaitCommand()) return; if (last_cmd_ == CMD_QUIT) { SendMessage(221, "Goodbye"); break; } for (unsigned i=0; i<sizeof(commands)/sizeof(commands[0]); ++i) { if (commands[i].cmd == last_cmd_) { if (!((this->*(commands[i].cmd_handler))())) return; break; } } } }