#include "cc_config.h" #include "cc_type.h" #include "cc_def.h" #include "cc_private.h" #include "cc_api.h" static tDCC_Info p_user_info; #define INFO(i) p_user_info.i static tDCCDDI_SEM p_mtx; static void p_lock(BOOL block) { if(!p_mtx) return; if(block) DCCDDI_TakeSemaphore(p_mtx); else DCCDDI_GiveSemaphore(p_mtx); } void DCC_Init(tDCC_Config *cfg) { static BOOL is_inited=FALSE; if(is_inited) return; p_mtx=DCCDDI_CreateMutexSemaphore("dcc sem"); DCCDDI_Init(); DCCMain_Init(); DCCFront_Init(); DCCExec_Init(); memcpy(&INFO(config), cfg, sizeof(INFO(config))); if(cfg->color_map) { INFO(config).color_map=DCCDDI_Malloc(sizeof(tDCC_ColorMap)); memcpy(INFO(config).color_map, cfg->color_map, sizeof(tDCC_ColorMap)); } else INFO(config).color_map=NULL; DCCMain_SendCmd(eCMD_USER_INIT, 0, (UINT32)&INFO(config), 0); memset(&INFO(pen_attr), DCC_AUTO_SET, sizeof(INFO(pen_attr))); memset(&INFO(win_attr), DCC_AUTO_SET, sizeof(INFO(win_attr))); //Ãʱ⠱⺻°ªÀº ¸ðµÎ 0xff DCCMain_SendCmd(eCMD_USER_SET_ATTR, 0, (UINT32)&INFO(win_attr), (UINT32)&INFO(pen_attr)); is_inited=TRUE; } void DCC_ResetConfig(tDCC_Config *cfg) { p_lock(TRUE); memcpy(&INFO(config), cfg, sizeof(INFO(config))); p_lock(FALSE); DCCMain_SendCmd(eCMD_USER_INIT, 0, (UINT32)&INFO(config), 0); } void DCC_GetConfig(tDCC_Config *cfg) { p_lock(TRUE); *cfg=INFO(config); p_lock(FALSE); } void DCC_GetInfo(tDCC_Info *pinfo) { p_lock(TRUE); *pinfo=p_user_info; p_lock(FALSE); } void DCC_Ready() { p_lock(TRUE); INFO(bready)=TRUE; p_lock(FALSE); } void DCC_Exit() { p_lock(TRUE); INFO(bready)=FALSE; p_lock(FALSE); } BOOL DCC_IsReady() { BOOL is_ready; p_lock(TRUE); is_ready=INFO(bready); p_lock(FALSE); return is_ready; } void DCC_Stop() { p_lock(TRUE); if(INFO(bdisplay_on)) { INFO(bdisplay_on)=FALSE; p_lock(FALSE); DCCExec_ForceDLYRelease(); DCCMain_ResetQueue(); DCCMain_SendCmd(eCMD_USER_SET_SERVICE, 0, eDCC_S_NONE, 0); DCCMain_SendCmd(eCMD_USER_SET_DISPLAY, eDCC_OPT_SYNC, FALSE, 0); } else p_lock(FALSE); } void DCC_Start() { p_lock(TRUE); if( !INFO(bdisplay_on)) { INFO(bdisplay_on)=TRUE; p_lock(FALSE); DCCMain_SendCmd(eCMD_USER_SET_SERVICE, 0, INFO(service), 0); DCCMain_SendCmd(eCMD_USER_SET_DISPLAY, eDCC_OPT_SYNC, TRUE, 0); } else p_lock(FALSE); } BOOL DCC_IsStarted() { BOOL bon; p_lock(TRUE); bon=INFO(bdisplay_on); p_lock(FALSE); return bon; } void DCC_SetService(int service_num) { p_lock(TRUE); INFO(service)=service_num; p_lock(FALSE); DCCMain_SendCmd(eCMD_USER_SET_SERVICE, 0, service_num, 0); if(INFO(service)>=eDCC_S_CC1 && INFO(service)<=eDCC_S_T4) // DCCMain_SendCmd(eCMD_USER_SET_OPTION, 0, FALSE, 0); else DCCMain_SendCmd(eCMD_USER_SET_OPTION, 0, INFO(buser_opt), 0); } tDCC_Service DCC_GetService() { UINT8 service; p_lock(TRUE); service=INFO(service); p_lock(FALSE); return (tDCC_Service)service; } void DCC_SetOption(BOOL b_user_mode) { p_lock(TRUE); INFO(buser_opt)=b_user_mode; p_lock(FALSE); if(INFO(service)>=eDCC_S_CC1 && INFO(service)<=eDCC_S_T4) // DCCMain_SendCmd(eCMD_USER_SET_OPTION, 0, FALSE, 0); else DCCMain_SendCmd(eCMD_USER_SET_OPTION, 0, b_user_mode, 0); //DCCMain_SendCmd(eCMD_USER_SET_OPTION, 0, b_user_mode, 0); // positionÀº option¿¡ µû¶ó Àû¿ë ¿©ºÎ°¡ ¹Ù²îÁö ¾Ê¾Ò¾ú´Âµ¥, ¹Ù²ã¾ß ÇÒ Çʿ伺 »ý±è if(INFO(buser_opt)==FALSE) DCCMain_SendCmd(eCMD_USER_SET_POSITION, 0, 0, 0); else DCCMain_SendCmd(eCMD_USER_SET_POSITION, 0, INFO(win_posx), INFO(win_posy)); } BOOL DCC_GetOption() { BOOL is_user; p_lock(TRUE); is_user=INFO(buser_opt); p_lock(FALSE); return is_user; } void DCC_SetKorean(BOOL b_korean) { p_lock(TRUE); INFO(config).is_korean=b_korean; p_lock(FALSE); DCCMain_SendCmd(eCMD_USER_SET_KOREAN, 0, b_korean, INFO(config).is_unicode); } void DCC_SetKoreanMode(BOOL b_unicode) { p_lock(TRUE); INFO(config).is_unicode=b_unicode; p_lock(FALSE); DCCMain_SendCmd(eCMD_USER_SET_KOREAN, 0, INFO(config).is_korean, b_unicode); } void DCC_SetPenUserAttr(tDCC_PenUserAttr *attr) { p_lock(TRUE); memcpy(&INFO(pen_attr), attr, sizeof(INFO(pen_attr))); p_lock(FALSE); DCCMain_SendCmd(eCMD_USER_SET_ATTR, 0, 0, (UINT32)&INFO(pen_attr)); } void DCC_GetPenUserAttr(tDCC_PenUserAttr *attr) { p_lock(TRUE); memcpy(attr, &INFO(pen_attr), sizeof(*attr)); p_lock(FALSE); } void DCC_GetWinUserAttr(tDCC_WinAttr *attr) { p_lock(TRUE); memcpy(attr, &INFO(win_attr), sizeof(*attr)); p_lock(FALSE); } void DCC_SetWinUserAttr(tDCC_WinAttr *attr) { p_lock(TRUE); memcpy(&INFO(win_attr), attr, sizeof(INFO(win_attr))); p_lock(FALSE); DCCMain_SendCmd(eCMD_USER_SET_ATTR, 0, (UINT32)&INFO(win_attr), 0); } void DCC_MoveWinPosition(int posx, int posy) { p_lock(TRUE); INFO(win_posx)=posx; INFO(win_posy)=posy; p_lock(FALSE); if(INFO(buser_opt)==FALSE) DCCMain_SendCmd(eCMD_USER_SET_POSITION, 0, 0, 0); else DCCMain_SendCmd(eCMD_USER_SET_POSITION, 0, INFO(win_posx), INFO(win_posy)); } void DCC_GetWinPosition(int *posx, int *posy) { p_lock(TRUE); if(posx) *posx=INFO(win_posx); if(posy) *posy=INFO(win_posy); p_lock(FALSE); } void DCC_SetFeeding608(BOOL is_on) { p_lock(TRUE); INFO(is_feeding_608)=is_on; p_lock(FALSE); DCCMain_SendCmd(eCMD_USER_SET_FEEDING, 0, is_on, 0); } BOOL DCC_IsOnFeeding608() { BOOL is_on; p_lock(TRUE); is_on=INFO(is_feeding_608); p_lock(FALSE); return is_on; } BOOL DCC_IsServiceOn(tDCC_Service service) { BOOL is_on; p_lock(TRUE); is_on=DCCFront_IsServiceOn(service); p_lock(FALSE); return is_on; } void DCC_SetSync() { //ÇØ´ç Ccommand°¡ ´Ù ó¸®µÉ ¶§±îÁö ±â´Ù¸² DCCMain_SendCmd(eCMD_SYNC, 0, 0, 0); } void DCC_SetInfoCallback(tDCC_InfoCallback func) { DCCExec_SetCallback(func); DCCFront_SetCallback(func); } #if 0 __Get_Info__() {} #endif #if 0 __Test_Func__() {} #endif void cc_set_scroll(BOOL bUp) { tDCC_WinAttr attr; DCC_SetOption(TRUE); DCC_GetWinUserAttr(&attr); if(bUp) attr.sd=eDCC_D_TPTOBT; else attr.sd=eDCC_D_BTTOTP; DCC_SetWinUserAttr(&attr); }