s32 semaphore_pend(Handle h, u32 timeout) { u8 err; esKRNL_SemPend((__krnl_event_t*)h, (u16)timeout, &err); if(err == 0) return 0; else return -1; }
static s32 ve_wait_intr(void) { u8 err; esKRNL_SemPend(sem_intr, 50, &err); if(err != 0) return -1; else return 0; }
__s32 DRV_scaler_begin(__u32 sel) { __u8 err; esKRNL_SemPend(g_disp_drv.scaler_finished_sem[sel],0x50,&err); if(err == OS_NO_ERR) { return EPDK_OK; } else { __wrn("writeback error\n"); return EPDK_FAIL; } }
static s32 cb_ve_clock_change(u32 cmd, s32 aux) { switch(cmd) { case CLK_CMD_SCLKCHG_REQ: { u8 err; //* request semaphore to check if it can adjust speed now esKRNL_SemPend(sem_ve_clk_adjust, 0, &err); return EPDK_OK; } case CLK_CMD_SCLKCHG_DONE: { //* release semaphore esKRNL_SemPost(sem_ve_clk_adjust); return EPDK_OK; } default: return EPDK_FAIL; } }
/** * 从系统消息队列取消息 */ static void ksrv_msg_thread(void *arg) { __memit_ctr_t *emit = (__memit_ctr_t *)arg; __u8 error; /* 清空按键消息队列 */ while(1) { __u32 usrmsg; //usrmsg = esKSRV_GetLowMsg(); usrmsg = esKSRV_GetMsg(); if( usrmsg == 0 ) break; } while(1) { __u32 usrmsg; __msrv_msg_t *pmsg; __u32 tmp; while(1) { if( esKRNL_TDelReq(OS_PRIO_SELF) == OS_TASK_DEL_REQ ) { esKRNL_TDel(OS_PRIO_SELF); } usrmsg = esKSRV_GetMsg(); // 系统消息队列 if(usrmsg) break; esKRNL_TimeDly(2); } esKRNL_SemPend(emit->p_array_sem, 0, &error); pmsg = get_msg_buf(emit); //eLIBs_memset(pmsg, 0, sizeof(__msrv_msg_t)); esKRNL_SemPost(emit->p_array_sem); if( (usrmsg & 0xffff0000) == KMSG_USR_CLS_KEY) // key 按键消息 { tmp = usrmsg & 0x0000ffff; __msg(" usrmsg = %d \n", tmp); switch (usrmsg) { #if( EPDK_CASE == EPDK_LIVE_BOX ) case KMSG_USR_KEY_POWER: /* standby */ pmsg->type = DSK_MSG_STANDBY; break; case KMSG_USR_KEY_REPEATE: /* 切换到色差输出 */ pmsg->type = DSK_MSG_SWITCH_YPBPR; break; case KMSG_USR_KEY_CLEAR: /* 切换到cvbs输出 */ pmsg->type = DSK_MSG_SWITCH_CVBS; break; case KMSG_USR_KEY_DISPLAY: /* 切换到hdmi输出 */ pmsg->type = DSK_MSG_SWITCH_HDMI; break; case KMSG_USR_KEY_SHIFT: pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_SHIFT; break; case KMSG_USR_KEY_SEL: pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_SEL; break; case KMSG_USR_KEY_NUM4: pmsg->type = DSK_MSG_SWITCH_AUDIO_IF; pmsg->data = AUDIO_DEV_IF_CODEC; break; case KMSG_USR_KEY_NUM5: pmsg->type = DSK_MSG_SWITCH_AUDIO_IF; pmsg->data = AUDIO_DEV_IF_IIS; break; case KMSG_USR_KEY_NUM6: pmsg->type = DSK_MSG_SWITCH_AUDIO_IF; pmsg->data = AUDIO_DEV_IF_SPDIF; break; #endif #if( EPDK_CASE == EPDK_LIVE_TOUCH ) case KMSG_USR_KEY_NUM8: /* hold 按键 */ pmsg->type = DSK_MSG_HOLD; break; case KMSG_USR_KEY_NUM7: // 禁音功能 pmsg->type = DSK_MSG_BAN_VOLUME; pmsg->data = 0; break; #endif case KMSG_USR_KEY_GOTO: pmsg->type = DSK_MSG_APP_EXIT; /* 一键回主界面 */ break; case KMSG_USR_KEY_POWEROFF: // 关机消息 pmsg->type = DSK_MSG_POWER_OFF; break; case KMSG_USR_KEY_NUM9: pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_ESCAPE; break; case KMSG_USR_KEY_VOICE_UP: pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_VADD; break; case KMSG_USR_KEY_VOICE_DOWN: pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_VDEC; break; case KMSG_USR_KEY_UP: pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_UP; break; case KMSG_USR_KEY_DOWN : pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_DOWN; break; case KMSG_USR_KEY_LEFT : pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_LEFT; break; case KMSG_USR_KEY_RIGHT : pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_RIGHT; break; case KMSG_USR_KEY_ENTER: pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_ENTER; break; case KMSG_USR_KEY_RISE: pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_RISE; break; default: continue; } } else /* system 消息 */ { #if 0 if( (usrmsg & 0x0000ffff) == KMSG_USR_SYSTEM_KNOB_KEY )//add by libaiao,2011.11.21 { __u32 ret; // pmsg->type = GUI_MSG_KEY; pmsg->type = DSK_MSG_KNOB_KEY; ret = (usrmsg & KMSG_USR_SYSTEM_FS_PARA_MASK)>>16; // pmsg->data = (usrmsg & KMSG_USR_SYSTEM_FS_PARA_MASK)>>16; if(ret) { pmsg->data =GUI_MSG_KEY_LONGVADD; // pmsg->id = GUI_MSG_KEY_VADD; // eLIBs_printf(" pmsg->data = GUI_MSG_KEY_LONGVADD \n"); } else { // eLIBs_printf(" pmsg->data = GUI_MSG_KEY_LONGVDEC \n"); pmsg->data =GUI_MSG_KEY_LONGVDEC; // pmsg->id = GUI_MSG_KEY_VDEC; } // continue; } else #endif if( (usrmsg & 0x0000ffff) == KMSG_USR_SYSTEM_FS_PLUGIN ) { pmsg->type = DSK_MSG_FS_PART_PLUGIN; pmsg->data = (usrmsg & KMSG_USR_SYSTEM_FS_PARA_MASK)>>16; }
static __s32 key_msg_cb(void *msg) { __msrv_msg_t *pmsg; __u8 error; __u32 i; __input_event_packet_t *pPacket; __input_event_t *pEventFrame; if (msg == NULL) { __msg("invalid argument for call back\n"); return EPDK_FAIL; } __inf("1------------------------------------------------\n"); //dump packet events pPacket = (__input_event_packet_t *)msg; if (pPacket->event_cnt > INPUT_MAX_EVENT_NR) { __msg("invalid event count number\n"); return EPDK_FAIL; } __inf("2------------------------------------------------\n"); for (i = 0; i < pPacket->event_cnt; i++) { pEventFrame = &(pPacket->events[i]); __msg("Event %d: type = %d, code = %d, value = %d\n", i + 1, pEventFrame->type, pEventFrame->code, pEventFrame->value ); if(pEventFrame->type == EV_KEY) { __msg("pEventFrame->type == EV_KEY\n"); esKRNL_SemPend(emit_ctr.p_array_sem, 0, &error); pmsg = get_msg_buf(&emit_ctr); esKRNL_SemPost(emit_ctr.p_array_sem); switch(pEventFrame->code) { case KPAD_SCR_ONOFF: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_SCR_ONOFF; break; } case KPAD_STORE_UP: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_STORE_UP; break; } case KPAD_STORE_UP_PLAY: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_STORE_UP_PLAY; break; } case KPAD_LR: { __wrn("KPAD_LR\n"); pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_LR; break; } case KPAD_MODE: { __wrn("KPAD_MODE\n"); pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_MODE; break; } case KPAD_MENU: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_MENU; __msg("GUI_MSG_KEY_MENU\n"); break; } case KPAD_UP: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_UP; __msg("GUI_MSG_KEY_UP\n"); break; } case KPAD_DOWN: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_DOWN; __msg("GUI_MSG_KEY_DOWN\n"); break; } case KPAD_LEFT: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_LEFT; __msg("GUI_MSG_KEY_LEFT\n"); break; } case KPAD_RIGHT: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_RIGHT; __msg("GUI_MSG_KEY_RIGHT\n"); break; } case KPAD_VOICEUP: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_VADD; __msg("GUI_MSG_KEY_VADD\n"); break; } case KPAD_VOICEDOWN: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_VDEC; __msg("GUI_MSG_KEY_VDEC\n"); break; } case KPAD_ENTER: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_ENTER; __msg("GUI_MSG_KEY_ENTER\n"); break; } case KPAD_REPLACE_ENTER: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_ENTER; __msg("KPAD_REPLACE_ENTER\n"); break; } case KPAD_RETURN: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_ESCAPE; __msg("GUI_MSG_KEY_ESCAPE\n"); break; } case KPAD_POWER: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_POWER; __msg("GUI_MSG_KEY_POWER\n"); break; } case KPAD_PHOTO: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_PHOTO; eLIBs_printf("GUI_MSG_KEY_PHOTO\n"); break; } case KPAD_MUSIC: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_MUSIC; break; } case KPAD_MOVIE: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_MOVIE; break; } case KPAD_PAUSE: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_PAUSE; __msg("GUI_MSG_KEY_PAUSE\n"); break; } case KPAD_SETTING: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_SETTING; break; } case KPAD_FM: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_FM; break; } case KPAD_LINEIN_PLUGIN: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_LINEIN_PLUGIN; break; } case KPAD_LINEIN_PLUGOUT: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_LINEIN_PLUGOUT; break; } case KPAD_CALENDAR: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_CALENDAR; break; } case KPAD_MEDIA_PRE: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_MEDIA_PRE; break; } case KPAD_RECORD: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_RECORD; break; } case KPAD_MEDIA_NEXT: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_MEDIA_NEXT; break; } #ifdef SUPPORT_DIGIT_KEY case KPAD_NUM0: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_NUM0; __msg("GUI_MSG_KEY_NUM0\n"); break; } case KPAD_NUM1: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_NUM1; __msg("GUI_MSG_KEY_NUM1\n"); break; } case KPAD_NUM2: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_NUM2; __msg("GUI_MSG_KEY_NUM2\n"); break; } case KPAD_NUM3: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_NUM3; __msg("GUI_MSG_KEY_NUM3\n"); break; } case KPAD_NUM4: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_NUM4; __msg("GUI_MSG_KEY_NUM4\n"); break; } case KPAD_NUM5: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_NUM5; __msg("GUI_MSG_KEY_NUM5\n"); break; } case KPAD_NUM6: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_NUM6; __msg("GUI_MSG_KEY_NUM6\n"); break; } case KPAD_NUM7: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_NUM7; __msg("GUI_MSG_KEY_NUM7\n"); break; } case KPAD_NUM8: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_NUM8; __msg("GUI_MSG_KEY_NUM8\n"); break; } case KPAD_NUM9: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_NUM9; __msg("GUI_MSG_KEY_NUM9\n"); break; } case KPAD_NUM_CLR: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_NUM_CLEAR; __msg("GUI_MSG_KEY_NUM_CLEAR\n"); break; } #endif case KPAD_IR_LEFT: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_IR_RIGHT; //GUI_MSG_KEY_IR_LEFT; __msg("GUI_MSG_KEY_IR_LEFT\n"); break; } case KPAD_IR_RIGHT: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_IR_RIGHT; __msg("GUI_MSG_KEY_IR_RIGHT\n"); break; } case KPAD_IR_UP: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_IR_UP; __msg("GUI_MSG_KEY_IR_UP\n"); break; } case KPAD_IR_DOWN: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_IR_DOWN; __msg("GUI_MSG_KEY_IR_DOWN\n"); break; } case KPAD_IR_VOICEDOWN: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_IR_VDEC; break; } case KPAD_IR_VOICEUP: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_IR_VADD; break; } case KPAD_MUTE: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_IR_MUTE; break; } case KPAD_IR_POWER: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_IR_POWER; break; } case KPAD_IR_TVOUT: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_IR_TVOUT; __msg("GUI_MSG_KEY_IR_TVOUT\n"); break; } case KPAD_POWEROFF: { pmsg->type = DSK_MSG_POWER_OFF; __msg("GUI_MSG_KEY_POWER_OFF\n"); break; } case KPAD_IR_KOK: { pmsg->type = GUI_MSG_KEY; pmsg->id = GUI_MSG_KEY_IR_KOK; break; } default: break; } pmsg->data = pEventFrame->value; __msg("czp is add......power_off_id = %d\n", DSK_MSG_POWER_OFF); __msg("GUI_MSG_KEY_ val=%d, pmsg->type=%d\n", pmsg->id, pmsg->type); esKRNL_QPost(emit_ctr.psys_msg_queue, pmsg); } } __inf("3------------------------------------------------\n"); return EPDK_TRUE; }
/** * 通过回调函数的方式取触摸屏消息 */ static __s32 tp_msg_cb(void *msg) { __msrv_msg_t *pmsg; __u8 error; __u32 i; __input_event_packet_t *pPacket; __input_event_t *pEventFrame; __input_event_t pEvent_type; __input_event_t pEvent_x; __input_event_t pEvent_y; __input_event_t pEvent_speed_dir; __input_event_t pEvent_speed_val; if (msg == NULL) { __msg("invalid argument for call back\n"); return EPDK_FAIL; } /* dump packet events */ pPacket = (__input_event_packet_t *)msg; if (pPacket->event_cnt <= 0 || pPacket->event_cnt > INPUT_MAX_EVENT_NR) { __msg("invalid event count number\n"); return EPDK_FAIL; } //__inf("\n------------------------------------------------\n"); for (i = 0; i < pPacket->event_cnt; i++) { pEventFrame = &(pPacket->events[i]); /*__inf("Event %d: type = %d, code = %d, value = %d\n", i + 1, pEventFrame->type, pEventFrame->code, pEventFrame->value );*/ if(pEventFrame->type == EV_ABS) { if(pEventFrame->code == ABS_MISC) { eLIBs_memcpy(&pEvent_type, pEventFrame, sizeof(__input_event_t)); } else if(pEventFrame->code == ABS_X) { eLIBs_memcpy(&pEvent_x, pEventFrame, sizeof(__input_event_t)); } else if(pEventFrame->code == ABS_Y) { eLIBs_memcpy(&pEvent_y, pEventFrame, sizeof(__input_event_t)); } else if(pEventFrame->code == ABS_RUDDER) { eLIBs_memcpy(&pEvent_speed_dir, pEventFrame, sizeof(__input_event_t)); } else if(pEventFrame->code == ABS_BRAKE) { eLIBs_memcpy(&pEvent_speed_val, pEventFrame, sizeof(__input_event_t)); } } else if(pEventFrame->type == EV_SYN) { break; } } //__inf("\n------------------------------------------------\n"); esKRNL_SemPend(emit_ctr.p_array_sem, 0, &error); pmsg = get_msg_buf(&emit_ctr); esKRNL_SemPost(emit_ctr.p_array_sem); pmsg->type = GUI_MSG_TOUCH; switch( pEvent_type.value) { case EV_TP_PRESS_START: { pmsg->id = GUI_MSG_TOUCH_DOWN; pmsg->data = (pEvent_y.value<<16) + pEvent_x.value; pmsg->reserved = (pEvent_speed_dir.value<<16) + pEvent_speed_val.value; last_touch_action = GUI_MSG_TOUCH_DOWN; break; } case EV_TP_PRESS_MOVE: pmsg->id = GUI_MSG_TOUCH_MOVE; pmsg->data = (pEvent_y.value<<16) + pEvent_x.value; pmsg->reserved = (pEvent_speed_dir.value<<16) + pEvent_speed_val.value; last_touch_action = GUI_MSG_TOUCH_MOVE; break; case EV_TP_PINCH_IN: pmsg->id = GUI_MSG_TOUCH_ZOOMIN; pmsg->data = (pEvent_y.value<<16) + pEvent_x.value; pmsg->reserved = (pEvent_speed_dir.value<<16) + pEvent_speed_val.value; last_touch_action = GUI_MSG_TOUCH_ZOOMIN; break; case EV_TP_PINCH_OUT: pmsg->id = GUI_MSG_TOUCH_ZOOMOUT; pmsg->data = (pEvent_y.value<<16) + pEvent_x.value; pmsg->reserved = (pEvent_speed_dir.value<<16) + pEvent_speed_val.value; last_touch_action = GUI_MSG_TOUCH_ZOOMOUT; break; case EV_TP_PRESS_HOLD: pmsg->id = last_touch_action; pmsg->data = (pEvent_y.value<<16) + pEvent_x.value; pmsg->reserved = (pEvent_speed_dir.value<<16) + pEvent_speed_val.value; break; case EV_TP_ACTION_NULL: case EV_TP_ACTION_CLICK: case EV_TP_ACTION_DOWN: case EV_TP_ACTION_UP: case EV_TP_ACTION_LEFT: case EV_TP_ACTION_RIGHT: case EV_TP_ACTION_ANTICLOCKWISE: case EV_TP_ACTION_CLOCKWISE: case EV_TP_ACTION_LD2RU: case EV_TP_ACTION_RU2LD: case EV_TP_ACTION_LU2RD: case EV_TP_ACTION_RD2LU: pmsg->id = GUI_MSG_TOUCH_UP; pmsg->data = (pEvent_y.value<<16) + pEvent_x.value; pmsg->reserved = (pEvent_speed_dir.value<<16) + pEvent_speed_val.value; break; default: __msg("cannot identify message: %x\n", pEvent_type.value); return EPDK_FALSE; } __msg("------------------------------------------------\n"); __msg("pmsg->type = %d, pmsg->id = %d\n", pmsg->type, pmsg->id); __msg("x = %d, y = %d\n", LOSWORD(pmsg->data), HISWORD(pmsg->data)); __msg("------------------------------------------------\n"); esKRNL_QPost(emit_ctr.psys_msg_queue, pmsg); return EPDK_TRUE; }