int MediaSrvDestroy(HANDLE hmedia) #endif { PMEDIA_OBJECT obj; int playback; kMutexWait(hMediaMutex); // 获取音频对象 obj = (PMEDIA_OBJECT)HandleGet(hmedia, MEDIA_MAGIC); if(obj == NULL) { kdebug(mod_media, PRINT_ERROR, "CLOSE NULL: 0x%x\n", hmedia); kMutexRelease(hMediaMutex); return -1; } kdebug(mod_media, PRINT_INFO, "CLOSE: 0x%x\n", hmedia); // 结束当前正在录放的音频任务 playback = obj->Cb.MediaClose(obj->Media, 1); obj = (PMEDIA_OBJECT)HandleGet(hmedia, MEDIA_MAGIC); if(obj == NULL) { kdebug(mod_media, PRINT_ERROR, "CLOSE NULL NULL: 0x%x\n", hmedia); kMutexRelease(hMediaMutex); return -1; } obj->Cb.MediaDestroy(obj->Media); // 释放当前节点 ListRemove(&obj->Link); HandleDestroy(hmedia, MEDIA_MAGIC); if(obj->MediaInfo) kfree(obj->MediaInfo); kfree(obj); // 启动下一个等待任务 if(!ListEmpty(&MediaObjList)) { obj = ListEntry(ListFirst(&MediaObjList), MEDIA_OBJECT, Link); if(playback && (obj->Mode == MEDIA_MODE_WAIT)) { if(obj->Cb.MediaOpen(obj->Media) < 0) { HandleDestroy(obj->Header.Handle, MEDIA_MAGIC); if(obj->MediaInfo) kfree(obj->MediaInfo); kfree(obj); } } } kMutexRelease(hMediaMutex); return 0; }
void HttpHandler::HandleRequest(const HttpRequest* req, HttpResponse* resp) { switch (req->Method()) { case HttpRequest::METHOD_HEAD: HandleHead(req, resp); break; case HttpRequest::METHOD_GET: HandleGet(req, resp); break; case HttpRequest::METHOD_POST: HandlePost(req, resp); break; case HttpRequest::METHOD_PUT: HandlePut(req, resp); break; case HttpRequest::METHOD_DELETE: HandleDelete(req, resp); break; case HttpRequest::METHOD_OPTIONS: HandleOptions(req, resp); break; case HttpRequest::METHOD_TRACE: HandleTrace(req, resp); break; case HttpRequest::METHOD_CONNECT: HandleConnect(req, resp); break; default: MethodNotAllowed(req, resp); break; } }
int MediaSrvGetName(HANDLE hmedia, char *name, int max) #endif { PMEDIA_OBJECT obj; int ret; kMutexWait(hMediaMutex); obj = (PMEDIA_OBJECT)HandleGet(hmedia, MEDIA_MAGIC); if(obj == NULL) { kMutexRelease(hMediaMutex); return -1; } ret = kstrlen(obj->MediaInfo); if(ret <= max) { kstrcpy(name, obj->MediaInfo); } else { kmemcpy(name, obj->MediaInfo, max); ret = max; } kMutexRelease(hMediaMutex); return ret; }
int MediaSrvCtrl(HANDLE hmedia, int ctl, DWORD *param, int *size) #endif { PMEDIA_OBJECT obj; int ret; // 检查是否设置全局音量 if((hmedia == NULL) && (param != NULL)) { // kprintf("MediaSrvCtrl: ctl = %x\n",ctl); switch(ctl & 0xf00) { case MEDIA_CTRL_OVOLUME_SET: DacSetGloalVolume((int)*param, ctl & 0xff); break; case MEDIA_CTRL_OVOLUME_GET: *param = DacGetGloalVolume(ctl & 0xff); break; case MEDIA_CTRL_HEADPHONE_IN: *param = DacIsHeadphoneIn(); break; #ifdef CONFIG_DECODE_MIDI_ENABLE case MEDIA_CTRL_MIDI_DIRECT: kdebug(mod_media, PRINT_NOTICE, "MediaSrvCtrl: param = %s, size = %d\n",(BYTE*)param,*size); SetMidiWtdDirect((BYTE*)param,*size); break; #endif default: return -1; } return 0; } kMutexWait(hMediaMutex); obj = (PMEDIA_OBJECT)HandleGet(hmedia, MEDIA_MAGIC); if(obj == NULL) { kMutexRelease(hMediaMutex); return -1; } ret = obj->Cb.MediaCtrl(obj->Media, ctl, param, size); kMutexRelease(hMediaMutex); return ret; }
void HandleRequest() { char* token; short keep_processing = 1; int offset; DebugPrint("Received request %s" _C_ recv_buffer); token = FirstToken(); while (token != 0 && keep_processing) { switch (to_request(token)) { case ACTIVITY: HandleActivity(); break; case COMMAND: // COMMAND HandleCommand(); break; case EXIT: // EXIT HandleQuit(); break; case GET: // GET HandleGet(); break; case KILL: HandleKill(); break; case LISPGET: // LISPGET {STATE | GAMEINFO | MAPINFO} HandleLispGet(); break; case MAP: // Load new map if (HandleNewMap()) { LastPausedCycle = 0; keep_processing = 0; } break; case PING: // PING HandlePing(); break; case QUIT: // QUIT HandleQuit(); break; case RESTART: // RESTART / RESET HandleRestart(); LastPausedCycle = 0; keep_processing = 0; break; case SPEED: // SPEED HandleSpeed(); break; case TRANSITION: // TRANSITION HandleTransition(); keep_processing = 0; break; case VIDEO: // VIDEO HandleVideo(); break; case WRITE: HandleWrite(); break; case CYCLE: HandleGetCycle(); break; case Z: HandleRandomSeed(); break; default: SendResponseMessage("Unknown command.\n", 3); } token = NextToken(); } // Bring pending commands to the front of recv_buffer if (token != 0) { offset = token + strlen(token) - temp_buffer; temp_buffer[offset] = recv_buffer[offset]; strcpy(recv_buffer, token); } else memset(recv_buffer, 0, RECV_BUFFER_SIZE); // Clear the command buffer }