1 / 28

8. IShell API (2)

8. IShell API (2). 8.1 IShell API 함수 ISHELL_CreateInstance 함수 : Brew 프로그램의 진입점이 되는 함수이다 . 이 함수는 ClassID 를 받아서 새로운 애플릿을 생성하고 해당 애플릿의 이벤트 핸들링 함수를 등록한다. 8. IShell API (2). ISHELL_StartApplet 함수 : 지정한 애플릿을 실행한다. 8. IShell API (2). A 애플릿에서 B 애플릿을 실행시킬 경우의 제어 흐름. (5) 재개

len-griffin
Download Presentation

8. IShell API (2)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 8. IShell API (2) • 8.1 IShell API 함수 • ISHELL_CreateInstance 함수: Brew 프로그램의 진입점이 되는 함수이다. 이 함수는 • ClassID를 받아서 새로운 애플릿을 생성하고 해당 애플릿의 이벤트 핸들링 함수를 • 등록한다. 임베디드 모바일 프로그래밍

  2. 8. IShell API (2) • ISHELL_StartApplet 함수: 지정한 애플릿을 실행한다. 임베디드 모바일 프로그래밍

  3. 8. IShell API (2) • A 애플릿에서 B 애플릿을 실행시킬 경우의 제어 흐름 (5) 재개 EVT_APP_RESUME A (2) 대기상태 EVT_APP_SUSPEND (1) ISHELL_PostEvent(IShell, EEC_SID_B) AEE_Shell ISHELL_HandleEvent (3) B 애플릿 생성 EVT_APP_START (4) B 종료 B 임베디드 모바일 프로그래밍

  4. 8. IShell API (2) • ISHELL_CloseApplet 함수: AEE 셀에 현재 실행되고 있는 애플릿에 대한 종료를 요 • 청하는데 이 메시지가 EVT_APP_STOP 이벤트이다. 임베디드 모바일 프로그래밍

  5. 8. IShell API (2) • ISHELL_ActiveApplet 함수: 현재 실행되고 있는 클래스 ID 정보를 읽어 온다. 임베디드 모바일 프로그래밍

  6. 8. IShell API (2) • ISHELL_SendEvent 함수: 특정 애플릿이나 클래스에 이벤트를 전달한다. 임베디드 모바일 프로그래밍

  7. 8. IShell API (2) • ISHELL_SendEvent 함수의 제어 흐름 A (1) ISHELL_SendEvent(pIShell, B, EVT_USER, wp, dwp) AEE Shell (2) 애플릿 생성, IAPPLET_HandleEvent 함수를 통해서 A가 전송한 EVT_USER 이벤트를 B에게 전달 B (3) EVT_USER 이벤트를 받고, ISHELL_StartApplet을 실행시켜 EVT_USER 이벤트에 대한 결과 처리 임베디드 모바일 프로그래밍

  8. 8. IShell API (2) • ISHELL_PostEvent 함수: 전달한 이벤트를 큐에 저장한 후 나중에 처리할 수 있 • 다. 임베디드 모바일 프로그래밍

  9. 8. IShell API (2) • IShell_PostEvent 함수의 제어 흐름 A (1) ISHELL_PostEvent(pIShell, B, EVT_USER, wp, dwp) AEE Shell (2) 이벤트를 큐에 저장 ISHELL_HandleEvent (3) ISHELL_HandleEvent 함수를 이용해서 큐에 저장된 이벤트 처리 B 임베디드 모바일 프로그래밍

  10. 8. IShell API (2) • 8.2 IShell API 서비스 대화상자, 메시지 박스, 프롬프트 • 대화상자는 컨트롤이 내장된 프레임 • ISHELL_CreateDialog 함수: 대화 상자 생성 임베디드 모바일 프로그래밍

  11. 8. IShell API (2) • ISHELL_EndDialog 함수: 대화 상자 종료 임베디드 모바일 프로그래밍

  12. 8. IShell API (2) • 8.3 대화상자 프로그램 (IShellEx) • 대화상자는 컨트롤이 내장된 프레임 • 대화상자 이벤트 • (1) EVT_DIALOG_INIT • - 대화상자 개체의 매개변수를 확인하면 이 이벤트가 애플릿으로 보내져 초기화 • (2) EVT_DIALOG_START • - 모든 대화상자 컨트롤과 항목이 로드되면 이 이벤트가 애플릿으로 보내지고 화면이 새로 고쳐져 대화 상자가 표시 • (3) EVT_DIALOG_END • 대화상자를 종료 • 예제의 흐름 • (1) 대화상자 메뉴 클릭: ISHELL_CreateDialog 함수 호출 • (2) EVT_DIALOG_INIT, EVT_DIALOG_START 발생 • (3) 대화상자 생성: IDI_LIST_1, IDI_LIST_2 이벤트 발생 • (4) 메뉴 1, 메뉴 2를 선택할 경우 대화상자 종료: ISHELL_EndDialog 함수 호출, • EVT_DIALOG_END 발생 임베디드 모바일 프로그래밍

  13. 8. IShell API (2) • 리소스 구조 • (1) 문자열 • 1 IDS_TEXT_TITLE 대화상자 텍스트 • 2 IDS_TEXT_CONTENT *^^ 대화상자 내용 ^^* • 3 IDS_LISTITEM_1 메뉴1 • 4 IDS_LISTITEM_2 메뉴2 • (2) 대화상자 • 6001 IDD_TEXT_DIALOG 7001 IDC_TEXT IDS_TEXT_TITLE 7002 IDC_SOFTKEY 8001 IDI_LIST_1 IDS_LISTITEM_1 8002 IDI_LIST_2 IDS_LISTITEM_2 임베디드 모바일 프로그래밍

  14. 8. IShell API (2) 임베디드 모바일 프로그래밍

  15. 8. IShell API (2) 임베디드 모바일 프로그래밍

  16. 8. IShell API (2) 임베디드 모바일 프로그래밍

  17. 8. IShell API (2) • 소스 프로그램 (IShellEx.c) • /*=============================================================================== • INCLUDES AND VARIABLE DEFINITIONS • =============================================================================== */ • #include "AEEModGen.h" // Module interface definitions • #include "AEEAppGen.h" // Applet interface definitions • #include "AEEShell.h" // Shell interface definitions • #include "AEEMenu.h" • #include "AEEStdLib.h" • #include "IShellEx_res.h" • #include "IShellEx.bid" • #define APP_RES_FILE "IShellEx.bar" • #define MENU_EVENT_ALARM 401 • #define ALARM_ID 402 • #define MENU_EVENT_DIALOG 403 • typedef struct _CIShellEx • { • AEEApplet a; // 가장 먼저 추가될 멤버 변수 • IMenuCtl * m_pIMenu; • boolean alarmActive; • // Device parameters • //int m_nLineHeight; • AEEDeviceInfo m_dInfo; • } CIShellEx; 임베디드 모바일 프로그래밍

  18. 8. IShell API (2) /*------------------------------------------------------------------- Function Prototypes -------------------------------------------------------------------*/ // IShellExample 애플릿에서 발생하는 이벤트 처리 함수 static boolean IShellEx_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam); static boolean IShellEx_InitAppData(IApplet* pMe); static void IShellEx_FreeAppData(IApplet* pMe); // 1 바이트 문자열을 2 바이트 문자열로 변환 AECHAR* _STR_TO_WSTR(char* pszIn, AECHAR* pDest, int nSize); int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po, void ** ppObj) { *ppObj = NULL; // AEEApplet_New 함수는 이벤트 처리 함수와 애플리케이션에서 사용한 데이 // 터 해지를 담당하는 함수 정보를 애플릿에 알려주는 역할을 한다. 다음은 // IShellExample 애플릿을 생성한다. if(ClsId == AEECLSID_ISHELLEX){ if(AEEApplet_New(sizeof(CIShellEx), ClsId, pIShell,po,(IApplet**)ppObj, (AEEHANDLER)IShellEx_HandleEvent,(PFNFREEAPPDATA)IShellEx_FreeAppData) == TRUE) { // IShellExample 애플릿이 가지는 컨트롤 및 변수 초기화 함수 추가 if (IShellEx_InitAppData((IApplet*)*ppObj) == TRUE) return(AEE_SUCCESS); } } return (EFAILED); } 임베디드 모바일 프로그래밍

  19. 8. IShell API (2) static boolean IShellEx_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam) { CIShellEx * pMe = (CIShellEx *)pi; AEERect rc; AECHAR szBuf[50]; AEEMenuColors mclr; SETAEERECT (&rc, 0, 0, pMe->m_dInfo.cxScreen, pMe->m_dInfo.cyScreen); switch (eCode) { case EVT_APP_START: // 알람 정보를 등록할 메뉴 컨트롤을 생성한다. if(ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_MENUCTL, (void **)&pMe->m_pIMenu) != SUCCESS) { return FALSE; } // 선택된 메뉴의 색상을 설정한다 mclr.wMask = MC_BACK|MC_TEXT|MC_SEL_BACK|MC_SEL_TEXT|MC_SCROLLBAR|MC_SCROLLBAR_FILL|MC_FRAME; mclr.cBack = RGB_WHITE; mclr.cText = RGB_BLACK; //mclr.cSelBack = MAKE_RGB (146, 109, 255); mclr.cSelBack = MAKE_RGB (124, 109, 197); mclr.cSelText = RGB_BLACK; mclr.cFrame = RGB_WHITE; IMENUCTL_SetColors (pMe->m_pIMenu, &mclr); 임베디드 모바일 프로그래밍

  20. 8. IShell API (2) _STR_TO_WSTR("IShell 예제", szBuf, sizeof(szBuf)); IMENUCTL_SetTitle(pMe->m_pIMenu, NULL, 0, szBuf); IMENUCTL_SetRect(pMe->m_pIMenu, &rc); // Add CreateInstance to menu _STR_TO_WSTR("대화상자", szBuf, sizeof(szBuf)); IMENUCTL_AddItem(pMe->m_pIMenu, 0, 0, MENU_EVENT_DIALOG, szBuf, 0); _STR_TO_WSTR("알람 설정", szBuf, sizeof(szBuf)); IMENUCTL_AddItem(pMe->m_pIMenu, 0, 0, MENU_EVENT_ALARM, szBuf, 0); // Activate menu IMENUCTL_SetActive(pMe->m_pIMenu,TRUE); return(TRUE); // 애플릿이 종료될 때 발생하는 이벤트이다. case EVT_APP_STOP: return(TRUE); case EVT_APP_SUSPEND: return TRUE; case EVT_APP_RESUME: if (pMe->m_pIMenu) { IMENUCTL_SetActive(pMe->m_pIMenu,TRUE); IMENUCTL_Redraw(pMe->m_pIMenu); } return TRUE; 대화상자 메뉴 항목 생성 코드 값 임베디드 모바일 프로그래밍

  21. 8. IShell API (2) case EVT_ALARM: ISHELL_StartApplet(pMe->a.m_pIShell, AEECLSID_ISHELLEX); ISHELL_PostEvent(pMe->a.m_pIShell, AEECLSID_ISHELLEX, EVT_COMMAND, ALARM_ID, 0); return TRUE; case EVT_DIALOG_INIT: return TRUE; case EVT_DIALOG_START: return TRUE; case EVT_DIALOG_END: return TRUE; // EVT_KEY 이벤트를 처리하지 않으면 특정 메뉴 아이템을 선택했을 때 원하는 작업을 // 수행할 수 없다. 여기서 발생하는 이벤트를 EVT_COMMAND 로 보내게 된다. // 대화 상자 이벤트 case EVT_KEY: return IMENUCTL_HandleEvent(pMe->m_pIMenu, EVT_KEY, wParam, 0); case EVT_COMMAND: switch(wParam) { case MENU_EVENT_DIALOG: { if (ISHELL_CreateDialog(pMe->a.m_pIShell, APP_RES_FILE, IDD_TEXT_DIALOG, NULL) != AEE_SUCCESS) return FALSE; IShell에게 대화상자 실행 요청 임베디드 모바일 프로그래밍

  22. 8. IShell API (2) else return TRUE; } case IDI_LIST_1: case IDI_LIST_2: { ISHELL_EndDialog(pMe->a.m_pIShell); IMENUCTL_SetActive(pMe->m_pIMenu, TRUE); IMENUCTL_Redraw(pMe->m_pIMenu); return TRUE; } case MENU_EVENT_ALARM: { int nRetVal = EBADPARM; // Initialize return value. // 알람이 발생하기까지의 시간(분) uint32 numMin = 1; // 알람코드로서 다른 알람과 구분하는 역할을 한다. uint16 nUserCode = 4; // 화면을 지우는 함수이다 IDISPLAY_ClearScreen (pMe->a.m_pIDisplay); IMENUCTL_SetProperties(pMe->m_pIMenu, MP_NO_REDRAW); IMENUCTL_SetActive(pMe->m_pIMenu, FALSE); if ((nRetVal = ISHELL_SetAlarm(pMe->a.m_pIShell, AEECLSID_ISHELLEX, nUserCode, numMin)) == SUCCESS) { 메뉴 1, 메뉴 2를 선택할 경우, 대화상자를 종료하고 메인 메뉴로 복귀 메뉴 컨트롤 객체를 활성화, 표시 임베디드 모바일 프로그래밍

  23. 8. IShell API (2) _STR_TO_WSTR("1분 후 알람 발생", szBuf, sizeof(szBuf)); IDISPLAY_DrawText(pMe->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, 0, 0, IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE); IDISPLAY_UpdateEx(pMe->a.m_pIDisplay,TRUE); pMe->alarmActive = TRUE; } else { // 알람 서비스가 실패할 경우 에러 메시지를 띄운다. _STR_TO_WSTR("알람 발생 실패", szBuf, sizeof(szBuf)); IDISPLAY_DrawText(pMe->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, 0, 0, IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE); IDISPLAY_Update (pMe->a.m_pIDisplay); } return TRUE; } case ALARM_ID: // 알람을 잘 받았다는 메시지를 화면에 나타낸다. IDISPLAY_ClearScreen(pMe->a.m_pIDisplay); _STR_TO_WSTR("맛있는 저녁식사 약속", szBuf, sizeof(szBuf)); IDISPLAY_DrawText(pMe->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, 0, 0, IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE); IDISPLAY_Update (pMe->a.m_pIDisplay); return(TRUE); 임베디드 모바일 프로그래밍

  24. 8. IShell API (2) default: return FALSE; } default: break; } return FALSE; } // IShellExample 애플릿 멤버 변수 초기화 함수 static boolean IShellEx_InitAppData(IApplet* pi) { CIShellEx * pMe = (CIShellEx*)pi; // Initialize the MenuCtl pointer to NULL pMe->m_pIMenu = NULL; pMe->alarmActive = FALSE; ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe->m_dInfo); return TRUE; } static void IShellEx_FreeAppData(IApplet* pi) { if (pMe->m_pIMenu != NULL) { 임베디드 모바일 프로그래밍

  25. 8. IShell API (2) // 메뉴 컨트롤 해지하는 함수 IMENUCTL_Release (pMe->m_pIMenu); pMe->m_pIMenu = NULL; } if ((pMe != NULL) && pMe->alarmActive == TRUE) { uint16 nUserCode = 4; // User code which distinguished this alarm. // Since there is only one alarm that is activated in this example we // know the alarm information to deactivate it. ISHELL_CancelAlarm (pMe->a.m_pIShell, AEECLSID_ISHELLEX, nUserCode); pMe->alarmActive = FALSE; } } AECHAR* _STR_TO_WSTR(char* pszIn, AECHAR* pDest, int nSize) { char* psSource = pszIn; char* pcDestin = (char *)pDest; int npszInSize = STRLEN(pszIn); MEMSET(pDest, 0, nSize); for(psSource = pszIn; psSource < (pszIn + npszInSize); psSource++) { if ((*psSource) < 0 || (*psSource) >= 128) 임베디드 모바일 프로그래밍

  26. 8. IShell API (2) { *pcDestin = *psSource; pcDestin += 1; } else { *pcDestin = *psSource; pcDestin += 1; *pcDestin = 0; pcDestin += 1; } } return (AECHAR*)pcDestin; } 임베디드 모바일 프로그래밍

  27. 8. IShell API (2) • 실행 결과 임베디드 모바일 프로그래밍

  28. 8. IShell API (2) 임베디드 모바일 프로그래밍

More Related