FreeCalypso > hg > fc-magnetite
view src/aci2/bmi/mmiCameraTest.c @ 464:2ba8d9decc30
bmi3: show FreeCalypso fw version in ###520# screen
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 20 Mar 2018 05:54:32 +0000 |
parents | 3c2acfa1a72f |
children |
line wrap: on
line source
/******************************************************************************* CONDAT (UK) ******************************************************************************** This software product is the property of Condat (UK) Ltd and may not be disclosed to any third party without the express permission of the owner. ******************************************************************************** $Project name: Basic MMI $Project code: BMI (6349) $Module: CAMERATEST $File: MmiCameraTest.c $Revision: 1.0 $Author: Texas Instruments France $Date: 25/06/04 ******************************************************************************** Description: This module provides the Camera functionality. ******************************************************************************** $History: MmiCameraTest.c Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg Description: Locosto: MIgration to New LCD APIs Solution: Migrated to New APIs by replacing the old driver APIs with corresponding New LCD APIs Aug 22 2005, xpradipg - LOCOSTO-ENH-31154 Description: Application to test camera Solution: Implemented the camera application with following functionalities preview, snapshot and image saving. 25/06/04 Texas Instruments France original version $End *******************************************************************************/ /******************************************************************************* Include files *******************************************************************************/ #define ENTITY_MFW /* includes */ #include <string.h> #include <stdio.h> #include <stdlib.h> #include "typedefs.h" #include "vsi.h" #include "pei.h" #include "custom.h" #if defined (NEW_FRAME) #include "typedefs.h" #include "vsi.h" #include "pei.h" #include "custom.h" #include "prim.h" #else #include "STDDEFS.H" #include "custom.h" #include "gsm.h" #include "vsi.h" #endif #include "message.h" /* included for aci_cmh.h .... */ #include "aci_cmh.h" /* included for mfw_sat.h, included for MmiDummy.h, included for MmiMenu.h */ #include "mfw_mfw.h" #include "mfw_win.h" #include "mfw_icn.h" /* included for mfw_mnu.h */ #include "mfw_mnu.h" #include "mfw_tim.h" #include "mfw_kbd.h" #include "mfw_sat.h" /* included for MmiDummy.h, included for MmiMenu.h */ #include "mfw_cm.h" #include "mfw_cam.h" #include "MmiBlkLangDB.h" #include "mmiColours.h" #include "MmiDialogs.h" #include "MmiDummy.h" /* included for MmiMenu.h */ #include "MmiLists.h" #include "MmiMenu.h" #include "MmiSoftKeys.h" #include "AUIEditor.h" #include "MmiMain.h" #include "Mmiicons.h" #include "MmiCameraTest.h" #include "MmiWindow.h" #include "MmiCall.h" #include "r2d/r2d.h" /******************************************************************************* internal data *******************************************************************************/ //Events for window #define CT_INIT 0 #define CT_RETURN 1 #define CT_RESUME 2 //Events for editor #define CT_EDITOR_CANCEL 2 #define CT_EDITOR_SELECT 3 //Dialog Screen timeout #define CT_INFO_SCRN_TIMEOUT 1000 //Default Filename of the Jpeg file to be saved. #define CT_DEFAULT_FILENAME "Snapshot" #define CT_FILENAME_EDITOR_INPUT_LEN 45 /* * Structures */ /*camera window structure*/ typedef struct{ T_MMI_CONTROL mmi_control; MfwHnd win; MfwHnd mfwwin; T_MFW_HND optwin; T_MFW_HND infowin; MfwHnd parent; MfwHnd kbd; MfwIcnAttr ct_bitmap; SHORT id; } T_MMI_CT_Win_data; typedef struct { /* administrative data */ T_MMI_CONTROL mmi_control; T_MFW_HND win; SHORT id; T_MFW_HND parent; /* associated handlers */ T_MFW_HND kbd; T_MFW_HND kbd_long; T_MFW_HND menu; } T_MMI_CT_Opt_data; /*editor data structure*/ typedef struct{ T_MMI_CONTROL mmi_control; MfwHnd win; MfwHnd ct_win_editor; UBYTE ct_buffer[CT_FILE_NAME_LENGTH+1]; } T_CT_Editor_Data; //Camera Option Menu Items static const MfwMnuItem Mmi_camera_OPTItems [] = { {0,0,0,(char *)TxtQuality,0,(MenuFunc)M_exeQuality,item_flag_none}, //{0,0,0,(char *)TxtColour,0,(MenuFunc)M_exeColor,item_flag_none}, //{0,0,0,(char *)TxtDigiZoom,0,(MenuFunc)M_exeZoom,item_flag_none}, {0,0,0,(char *)TxtFilename,0,(MenuFunc)mmi_camera_edit_filename,item_flag_none} }; //Camera Option menu Atrributes static const MfwMnuAttr Mmi_camera_OPTAttrib = { &SmsSend_R_OPTArea, MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ -1, /* use default font */ (MfwMnuItem*)Mmi_camera_OPTItems, /* with these items */ sizeof(Mmi_camera_OPTItems)/sizeof(MfwMnuItem), /* number of items */ COLOUR_LIST_SMS, TxtNull, NULL, MNUATTRSPARE }; //Variable to track the different Camera states. extern UBYTE camera_state; //Window Handler for Option window. T_MFW_HND optwin; //Variable to track active Call extern T_call call_data; //Default filename for captured image char new_filename[CT_FILE_NAME_LENGTH] = CT_DEFAULT_FILENAME; UBYTE IsCamInit = FALSE; //Variable to initialise Camil only once. T_MFW_HND digwin1 = NULL; //Window handler for Info Dialog. /******************************************************************************* Local prototypes *******************************************************************************/ int mmi_camera_test_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); T_MFW_HND mmi_camera_test_win_create(T_MFW_HND parent); static int mmi_camera_test_opt_kbd_cb (MfwEvt e, MfwKbd *k); static int mmi_camera_test_opt_mnu_cb (MfwEvt e, MfwMnu *m); void mmi_camera_test_opt_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); int mmi_camera_test_opt_win_cb (MfwEvt evt, MfwHnd win); static int mmi_camera_test_kbd_cntrl (MfwEvt e, MfwKbd *k); static void mmi_camera_test_opt_destroy(MfwHnd own_window); void mmi_camera_test_update_softkeys (int lsk, int rsk); T_MFW_HND mmi_camera_editor_create(T_MFW_HND parent); /******************************************************************************* $Function: mmi_camera_test_show_info $Description: Displays the dialog box $Returns: Dialog window $Arguments: parent -parent window for dialog str1- String to be displayed in dialog str2 -String to be displayed in dialog callback- Callback function *******************************************************************************/ static MfwHnd mmi_camera_test_show_info(T_MFW_HND parent, int str1, int str2, T_VOID_FUNC callback) { T_DISPLAY_DATA display_info; T_MFW_HND win; TRACE_EVENT ("mmi_camera_test_show_info()"); /* ** Create a timed dialog to display the Message . */ dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, str1, str2, COLOUR_STATUS); dlg_initDisplayData_events( &display_info, callback, THREE_SECS, KEY_LEFT | KEY_CLEAR | KEY_HUP/*0*/); win = info_dialog(parent, &display_info); dspl_Enable(1); return win; } /******************************************************************************* $Function: mmi_camera_test_show_saving_info $Description: Displays the Saving dialog box $Returns: Dialog window $Arguments: parent -parent window for dialog callback- Callback function *******************************************************************************/ static MfwHnd mmi_camera_test_show_saving_info(T_MFW_HND parent, T_VOID_FUNC callback) { T_DISPLAY_DATA display_info; T_MFW_HND win; TRACE_EVENT ("mmi_camera_test_show_saving_info()"); dspl_Clear(0,0,SCREEN_SIZE_X-1,SCREEN_SIZE_Y-1 ); dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtSnapSaving,TxtNull, COLOUR_STATUS); dlg_initDisplayData_events( &display_info, callback, FOREVER, KEY_LEFT | KEY_CLEAR | KEY_HUP/*0*/); win = info_dialog(parent, &display_info); //Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg //replaced the flag with the function call, to migrate to the new Lcd APIs dspl_control(DSPL_ACCESS_ENABLE); dspl_Enable(1); return win; } /******************************************************************************* $Function: mmi_camera_test_win_cntrl $Description: This is the dialog control function for the Camera Window. It receives the signals from the MFW and determines what action, if any, to take. $Returns: None $Arguments: win : The pointer to the window handler, so the function can reference the dynamic user data, if any. event : The incoming event value : Generic incoming Parameter, it will be 'event' dependant parameter : Generic incoming Parameter, it will be 'event' dependant *******************************************************************************/ int mmi_camera_test_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_MMI_CT_Win_data * data = (T_MMI_CT_Win_data *)win_data->user; TRACE_EVENT ("mmi_camera_test_exec_cb()"); switch (event) { case CT_INIT: TRACE_EVENT(">> mmi_camera_test_exec_cb(), CT_INIT "); camera_state = CAMERA_STATE_VIEWFINDER; //Create keyboard handler data->kbd = kbd_create (data->win,KEY_ALL,(T_MFW_CB)mmi_camera_test_kbd_cntrl); winShow(data->win); break; case CT_RESUME: break; case CT_RETURN: TRACE_EVENT(">> mmi_camera_test_exec_cb(), CT_RETURN "); winShow(data->win); break; default: TRACE_EVENT(">> mmi_camera_test_exec_cb(), default "); } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: mmi_camera_dialog_cb $Description: Callback for Dialog $Returns:None $Arguments: win - Window Handler identifier - Identifier reason - *******************************************************************************/ void mmi_camera_dialog_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason) { TRACE_FUNCTION ("mmi_camera_dialog_cb()"); switch (reason) { case INFO_TIMEOUT: /* no break; */ case INFO_KCD_HUP: /* no break; */ case INFO_KCD_LEFT: /* no break; */ case INFO_KCD_RIGHT: /* no break; */ case INFO_KCD_CLEAR: if( digwin1) dialog_info_destroy(digwin1); digwin1 = NULL; mmi_camera_test_update_softkeys(TxtSoftOptions,TxtSoftBack); rvf_delay(40); //Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg //replaced the flag with the function call, to migrate to the new Lcd APIs dspl_control(DSPL_ACCESS_DISABLE); mfw_cam_set_viewfinder_mode(); break; } } /******************************************************************************* $Function: mmi_camera_saving_info_cb $Description: Callback for Dialog $Returns:None $Arguments: win - Window Handler identifier - Identifier reason - *******************************************************************************/ void mmi_camera_saving_info_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason) { } /******************************************************************************* $Function: mmi_camera_test_kbd_cntrl $Description: Keyboard event handler for camera window $Returns: status int $Arguments: e - window handle event k - keyboard control block *******************************************************************************/ static int mmi_camera_test_kbd_cntrl (MfwEvt e, MfwKbd *k) { T_MFW_HND win = mfwParent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_MMI_CT_Win_data * data = (T_MMI_CT_Win_data *)win_data->user; TRACE_EVENT ("mmi_camera_test_kbd_cntrl()"); switch (k->code) { case KCD_LEFT: TRACE_EVENT ("mmi_camera_test_kbd_cntrl() KCD_LEFT"); switch (camera_state) { case CAMERA_STATE_SNAPSHOT: TRACE_EVENT ("mmi_camera_test_kbd_cntrl()-CAMERA_STATE_SNAPSHOT"); //call MFW function to save snapshot camera_state = CAMERA_STATE_SAVE; if(mfw_cam_save_snapshot() == MFW_CAM_FAILED) { //Display the error message mmi_camera_test_show_info(win, TxtFailed, TxtNull, (T_VOID_FUNC)mmi_camera_dialog_cb); break; } //Display the Saving Dialog box digwin1 = mmi_camera_test_show_saving_info(win,(T_VOID_FUNC)mmi_camera_saving_info_cb); break; case CAMERA_STATE_VIEWFINDER: TRACE_EVENT ("mmi_camera_test_kbd_cntrl()-CAMERA_STATE_VIEWFINDER"); if(data) { //Disable sensor and display the Options window. mfw_cam_disable_sensor(); rvf_delay(40); //Since MMI is not waiting the callback of disable camera, a delay is given. //Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg //replaced the flag with the function call, to migrate to the new Lcd APIs dspl_control(DSPL_ACCESS_ENABLE); camera_state = CAMERA_STATE_CONFIGURE; mmi_camera_test_opt_start(data->win,(MfwMnuAttr*)&Mmi_camera_OPTAttrib); } break; case CAMERA_STATE_SAVE: TRACE_EVENT ("mmi_camera_test_kbd_cntrl()-CAMERA_STATE_SAVE"); mmi_camera_test_update_softkeys(TxtSoftOptions,TxtSoftBack); mfw_cam_set_viewfinder_mode(); break; } break; case KCD_MNUSELECT: switch (camera_state) { case CAMERA_STATE_VIEWFINDER: TRACE_EVENT ("mmi_camera_test_kbd_cntrl()-CAMERA_STATE_SNAPSHOT"); camera_state = CAMERA_STATE_SNAPSHOT; //Take the Snapshot mfw_cam_take_snapshot(); //Display the softkeys for Snapshot mmi_camera_test_update_softkeys(TxtSoftSnapSave,TxtSoftBack); rvf_delay(40); //Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg //replaced the flag with the function call, to migrate to the new Lcd APIs dspl_control(DSPL_ACCESS_DISABLE); break; } break; case KCD_RIGHT: case KCD_HUP: TRACE_EVENT ("mmi_camera_test_kbd_cntrl() Back"); switch (camera_state) { case CAMERA_STATE_SNAPSHOT: TRACE_EVENT ("mmi_camera_test_kbd_cntrl()-mfw_cam_set_viewfinder_mode snapshot"); camera_state = CAMERA_STATE_VIEWFINDER; //Goback to the Viewfinder Mode mmi_camera_test_update_softkeys(TxtSoftOptions,TxtSoftBack); rvf_delay(40); mfw_cam_set_viewfinder_mode(); break; case CAMERA_STATE_SAVE: TRACE_EVENT ("mmi_camera_test_kbd_cntrl()-mfw_cam_set_viewfinder_mode save"); camera_state = CAMERA_STATE_VIEWFINDER; //Goback to the Viewfinder Mode mmi_camera_test_update_softkeys(TxtSoftOptions,TxtSoftBack); mfw_cam_set_viewfinder_mode(); break; case CAMERA_STATE_VIEWFINDER: TRACE_EVENT ("mmi_camera_test_kbd_cntrl()-CAMERA_STATE_VIEWFINDER"); //Disable the Camera and goto the Application Menu mfw_cam_disable_sensor(); rvf_delay(100); camera_state = CAMERA_STATE_IDLE; //Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg //replaced the flag with the function call, to migrate to the new Lcd APIs dspl_control(DSPL_ACCESS_ENABLE); if(data->win != NULL) { winDelete (data->win); mfwFree((void *)data, sizeof (T_MMI_CT_Win_data)); } break; } break; default: break; } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: mmi_camera_test_win_cb $Description: This function is the windows callback function for the mmi camera Root window. It has no display. $Returns: MFW_EVENT_CONSUMED $Arguments: event - window handle event win - Camera window *******************************************************************************/ int mmi_camera_test_win_cb (MfwEvt evt, MfwHnd win) { T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; T_MMI_CT_Win_data *data = (T_MMI_CT_Win_data *)win_data->user; TRACE_EVENT("mmi_camera_test_win_cb()"); switch (evt) { case MfwWinVisible: /* window is visible */ TRACE_EVENT("mmi_camera_test_win_cb()---MfwWinVisible"); if(camera_state == CAMERA_STATE_IDLE || camera_state == CAMERA_STATE_VIEWFINDER ) { mmi_camera_test_update_softkeys(TxtSoftOptions,TxtSoftBack); rvf_delay(40); mfw_cam_launch_viewfinder_dma(); } break; // Post the SUSPEND event case MfwWinSuspend: /* window is suspended */ TRACE_EVENT("mmi_camera_test_win_cb()-suspend"); break; // Post the RESUME event case MfwWinResume: /* window is resumed */ TRACE_EVENT("mmi_camera_test_win_cb()-resume"); camera_state = CAMERA_STATE_VIEWFINDER; break; case MfwWinFocussed: /* input focus / selected */ TRACE_EVENT("mmi_camera_test_win_cb()-MfwWinFocussed"); case MfwWinDelete: /* window will be deleted */ default: return MFW_EVENT_REJECTED; } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: mmi_camera_test_win_create $Description: This function performs the necessary steps to create the a window to handle the viewfinder related softkeys and the viewfinder bitmaps. It will be removed, or rather remove itself on returning the data to the Mfw. $Returns: T_MFW_HND : Window Handle to the New Window, Null if failed. $Arguments: parent : pointer to the parent window. *******************************************************************************/ T_MFW_HND mmi_camera_test_win_create(T_MFW_HND parent) { T_MMI_CT_Win_data *data; T_MFW_WIN * win; TRACE_EVENT ("mmi_camera_test_win_create()"); data = (T_MMI_CT_Win_data *)mfwAlloc((U16)sizeof(T_MMI_CT_Win_data)); data->win = winCreate(parent, 0, E_WIN_VISIBLE|MfwWinSuspend|MfwWinResume, mmi_camera_test_win_cb); if (data->win == NULL) { /* ** Failed to start : Free Memory, and exit */ mfwFree((U8 *)data, (U16)sizeof(T_MMI_CT_Win_data)); data = NULL; return data; } else { /* ** Setup the Dialog control functions */ data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_camera_test_exec_cb; data->mmi_control.data = data; win = ((T_MFW_HDR *)data->win)->data; win->user = (void *)data; //initialize bitmap data data->ct_bitmap.area.px = 0; data->ct_bitmap.area.py = 0; data->ct_bitmap.area.sx = 175; data->ct_bitmap.area.sy = 220; data->ct_bitmap.icnType = BMP_FORMAT_16BIT_LCD_COLOUR; data->ct_bitmap.iconCol = COLOUR_ICON_XX; scrDrawFilledRect ( data->ct_bitmap.area.px, data->ct_bitmap.area.py, data->ct_bitmap.area.sx, data->ct_bitmap.area.sy, dspl_GetBgdColour() ); //define softkeys displaySoftKeys(TxtSoftOptions,TxtSoftBack); dspl_Enable(1); if(IsCamInit == FALSE) { TRACE_EVENT("Initialising Camil"); mfw_cam_init(); IsCamInit = TRUE; } } return data->win; } /******************************************************************************* $Function: mmi_camera_test_start $Description: create a new camera dialog $Returns: Dialogue info win $Arguments: parent win, display info *******************************************************************************/ T_MFW_HND mmi_camera_test_start (T_MFW_HND parent_win) { T_MFW_HND win; TRACE_FUNCTION("mmi_camera_test_start()"); win = mmi_camera_test_win_create(parent_win); if (win NEQ NULL) { SEND_EVENT (win, CT_INIT, NULL, NULL); } return win; } /******************************************************************************* $Function: mmi_camera_test_launch_view_finder $Description: Create the window which is going to have the viewfinder bitmaps displayed on top of it. $Returns: Always returns MFW_EVENT_CONSUMED (1) $Arguments: m : pointer to the mnu data for the menu which caused this function to be called. i : pointer to the item data from the menu. *******************************************************************************/ GLOBAL int mmi_camera_test_launch_view_finder (MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfw_parent(mfw_header()); TRACE_EVENT("mmi_camera_test_launch_view_finder()"); mmi_camera_test_start(win); return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: mmi_camera_test_opt_start $Description: called when the user press the Option menu in Camera Window $Returns: T_MFW_HND : Window Handle to the New Window, Null if failed. $Arguments: parent_window -parent window handle menuAttr - Menu attributes. *******************************************************************************/ T_MFW_HND mmi_camera_test_opt_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) { T_MFW_HND win; TRACE_FUNCTION ("mmi_camera_test_opt_start()"); optwin = (T_MFW_HND)mmi_camera_test_opt_create (parent_window); if (optwin NEQ NULL) { SEND_EVENT (optwin, CT_INIT, NULL, (void *)menuAttr); } return win; } /******************************************************************************* $Function: mmi_camera_test_opt_win_create $Description: This function performs the necessary steps to create the a window . $Returns: T_MFW_HND : Window Handle to the New Window, Null if failed. $Arguments: parent : pointer to the parent window. *******************************************************************************/ T_MFW_HND mmi_camera_test_opt_create(T_MFW_HND parent) { T_MMI_CT_Opt_data * data = (T_MMI_CT_Opt_data *)ALLOC_MEMORY (sizeof (T_MMI_CT_Opt_data)); T_MFW_WIN * win; TRACE_FUNCTION ("mmi_camera_test_opt_create()"); /* * Create window handler */ data->win = win_create (parent, 0, E_WIN_VISIBLE, (T_MFW_CB)mmi_camera_test_opt_win_cb); if (data->win EQ NULL) { return NULL; } /* * connect the dialog data to the MFW-window */ data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_camera_test_opt_exec_cb; data->mmi_control.data = data; win = ((T_MFW_HDR *)data->win)->data; win->user = (void *)data; data->parent = parent; /* * return window handle */ return data->win; } /******************************************************************************* $Function: mmi_camera_test_opt_win_cb $Description: This function is the windows callback function for the mmi camera option window. $Returns: MFW_EVENT_CONSUMED $Arguments: event - window handle event win - Camera window *******************************************************************************/ int mmi_camera_test_opt_win_cb (MfwEvt evt, MfwHnd win) { TRACE_EVENT("mmi_camera_test_opt_win_cb()"); switch (evt) { case MfwWinVisible: /* window is visible */ displaySoftKeys(TxtSoftSelect,TxtSoftBack); break; case MfwWinFocussed: /* input focus / selected */ case MfwWinDelete: /* window will be deleted */ default: return MFW_EVENT_REJECTED; } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: mmi_camera_test_opt_exec_cb $Description: This is the dialog control function for the Camera Option Window. It receives the signals from the MFW and determines what action, if any, to take. $Returns: None $Arguments: win : The pointer to the window handler, so the function can reference the dynamic user data, if any. event : The incoming event value : Generic incoming Parameter, it will be 'event' dependant parameter : Generic incoming Parameter, it will be 'event' dependant *******************************************************************************/ void mmi_camera_test_opt_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_MMI_CT_Opt_data * data = (T_MMI_CT_Opt_data *)win_data->user; TRACE_FUNCTION ("mmi_camera_test_opt_exec_cb()"); switch (event) { case CT_INIT: TRACE_EVENT(">> mmi_camera_test_opt_exec_cb(), CT_INIT "); /* initialization of administrative data */ data->id = value; data->kbd = kbdCreate(data->win,KEY_ALL, (MfwCb)mmi_camera_test_opt_kbd_cb); data->kbd_long = kbdCreate(data->win,KEY_ALL|KEY_LONG,(MfwCb)mmi_camera_test_opt_kbd_cb); data->menu = mnuCreate(data->win,(MfwMnuAttr *)&Mmi_camera_OPTAttrib, E_MNU_ESCAPE, (MfwCb)mmi_camera_test_opt_mnu_cb); mnuLang(data->menu,mainMmiLng); /* put the (new) dialog window on top of the window stack */ mnuUnhide(data->menu); winShow(data->win); break; case CT_RETURN: TRACE_EVENT(">> mmi_camera_test_opt_exec_cb(), CT_RETURN "); mmi_camera_test_opt_destroy(optwin); mmi_camera_test_update_softkeys(TxtSoftOptions,TxtSoftBack); mfw_cam_launch_viewfinder_dma(); break; default: return; } } /******************************************************************************* $Function: mmi_camera_test_opt_kbd_cb $Description: Keyboard event handler for camera Option window $Returns: execution status $Arguments: e - event id k - keyboard info *******************************************************************************/ static int mmi_camera_test_opt_kbd_cb (MfwEvt e, MfwKbd *k) { T_MFW_HND win = mfwParent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; T_MMI_CT_Opt_data * data = (T_MMI_CT_Opt_data *)win_data->user; TRACE_FUNCTION ("mmi_camera_test_opt_kbd_cb()"); if (e & KEY_LONG) { switch (k->code) { case KCD_HUP: /* back to previous menu */ mnuEscape(data->menu); break; case KCD_RIGHT: /* Power Down */ return MFW_EVENT_REJECTED; /* handled by idle */ default: /* no response to all other keys */ return MFW_EVENT_CONSUMED; } } else { switch (k->code) { case KCD_MNUUP: /* highlight previous entry */ mnuUp(data->menu); break; case KCD_MNUDOWN: /* highlight next entry */ mnuDown(data->menu); break; case KCD_MNUSELECT: case KCD_LEFT: /* activate this entry */ mnuSelect(data->menu); break; case KCD_HUP: /* back to previous menu */ case KCD_RIGHT: /* back to previous menu */ mnuEscape(data->menu); break; default: /* no response to all other keys */ return MFW_EVENT_CONSUMED; } } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: mmi_camera_test_opt_mnu_cb $Description: Menu callback function for the Option window $Returns: Execution status $Arguments: e - event id m - menu handle *******************************************************************************/ static int mmi_camera_test_opt_mnu_cb (MfwEvt e, MfwMnu *m) { T_MFW_HND win = mfwParent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; T_MMI_CT_Opt_data * data = (T_MMI_CT_Opt_data *)win_data->user; TRACE_FUNCTION ("mmi_camera_test_opt_mnu_cb()"); switch (e) { case E_MNU_ESCAPE: /* back to previous menu */ TRACE_EVENT("E_MNU_ESCAPE"); SEND_EVENT (optwin, CT_RETURN, data->id, NULL); camera_state = CAMERA_STATE_VIEWFINDER; break; default: /* in mnuCreate() only E_MNU_ESCAPE has been enabled! */ return MFW_EVENT_REJECTED; } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: mmi_camera_test_opt_destroy $Description: Destroy the Camera Option window $Returns: mfw window handle $Arguments: own_window - current window *******************************************************************************/ static void mmi_camera_test_opt_destroy(MfwHnd own_window) { T_MFW_WIN * win_data; T_MMI_CT_Opt_data * data; TRACE_FUNCTION ("mmi_camera_test_opt_destroy()"); if (own_window) { win_data = ((T_MFW_HDR *)own_window)->data; data = (T_MMI_CT_Opt_data *)win_data->user; if (data) { /* ** Failed to start : Free Memory, and exit */ if(data->kbd != NULL) { kbdDelete (data->kbd); } if(data->kbd_long!= NULL) { kbdDelete (data->kbd_long); } if(data->menu!= NULL) { mnuDelete(data->menu); } // Delete WIN handler win_delete (data->win); // Free Memory FREE_MEMORY ((void *)data, sizeof (T_MMI_CT_Opt_data)); } else { TRACE_EVENT ("mmi_camera_test_opt_destroy() called twice"); } } } /******************************************************************************* $Function: mmi_camera_test_set_quality $Description: Set the Quality factor for the image to be saved. $Returns: Always returns MFW_EVENT_CONSUMED (1) $Arguments: m : pointer to the mnu data for the menu which caused this function to be called. i : pointer to the item data from the menu. *******************************************************************************/ GLOBAL int mmi_camera_test_set_quality (MfwMnu* m, MfwMnuItem* i) { int txtId = TxtStandard; UBYTE qfactor; TRACE_FUNCTION ("mmi_camera_test_set_quality()"); switch (m->lCursor[m->level]) { case 0: txtId = TxtEconomy; qfactor = QUALITY_ECONOMY; break; case 1: txtId = TxtStandard; qfactor = QUALITY_STANDARD; break; case 2: txtId = TxtHigh; qfactor = QUALITY_HIGH; break; default: txtId = TxtStandard; qfactor = QUALITY_STANDARD; break; } //Set the Quality Factor. mfw_cam_set_quality_factor(qfactor); //Display the dialgbox to the user. mmi_camera_test_show_info(0, txtId,TxtNull,NULL); return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: mmi_camera_test_set_color $Description: Set the Color for the Viewfinder $Returns: Always returns MFW_EVENT_CONSUMED (1) $Arguments: m : pointer to the mnu data for the menu which caused this function to be called. i : pointer to the item data from the menu. *******************************************************************************/ GLOBAL int mmi_camera_test_set_color (MfwMnu* m, MfwMnuItem* i) { int txtId; UBYTE blackandwhite; TRACE_FUNCTION ("mmi_camera_test_set_color()"); switch (m->lCursor[m->level]) { case 0: txtId = TxtColor; blackandwhite = FALSE; break; case 1: txtId = TxtSepia; blackandwhite = FALSE; break; case 2: txtId = TxtBlackandWhite; blackandwhite = TRUE; break; case 3: txtId = TxtNegative; blackandwhite = FALSE; break; } mfw_cam_set_viewfinder_param_color(blackandwhite); mmi_camera_test_show_info(0, txtId,TxtNull,NULL); return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: M_exeQuality $Description: This function is called when the user press "Quality" in the Camera Options screen.This function creates and displays the Quality menu in the option screen. $Returns: Execution status $Arguments: m - menu handler i - Menu item selected *******************************************************************************/ int M_exeQuality(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; T_MMI_CT_Opt_data * data = (T_MMI_CT_Opt_data *)win_data->user; TRACE_FUNCTION("M_exeQuality"); bookMenuStart(data->win, qualityMenuAttributes(),0); return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: M_exeColor $Description: This function is called when the user press "Color" in the Camera Options screen.This function creates and displays the Color menu in the option screen. $Returns: Execution status $Arguments: m - menu handler i - Menu item selected *******************************************************************************/ int M_exeColor(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; T_MMI_CT_Opt_data * data = (T_MMI_CT_Opt_data *)win_data->user; TRACE_FUNCTION("M_exeColor"); bookMenuStart(data->win, colorMenuAttributes(),0); return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: M_exeZoom $Description: This function is called when the user press "Zoom" in the Camera Options screen.This function creates and displays the Zoom menu in the option screen. $Returns: Execution status $Arguments: m - menu handler i - Menu item selected *******************************************************************************/ int M_exeZoom(MfwMnu* m, MfwMnuItem* i) { int txtId = TxtDigiZoom; TRACE_FUNCTION("M_exeZoom"); mfw_cam_set_viewfinder_param_zoom(TRUE); mmi_camera_test_show_info(0, txtId,TxtNull,NULL); return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: mmi_filename_editor_cb $Description: This function provides the callback functionality to the editor to rename the default jpeg filename. $Returns: None $Arguments: *******************************************************************************/ static void mmi_filename_editor_cb(T_MFW_HND win, USHORT identifier, SHORT reason) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_CT_Editor_Data* dev_name_data = (T_CT_Editor_Data *)win_data->user; UBYTE * editor_buffer = NULL; SHORT max_edit_size = 0; T_MFW_HND editor_win; T_MFW_HND parent; TRACE_FUNCTION ("mmi_filename_editor_cb()"); editor_buffer = dev_name_data->ct_buffer; max_edit_size =CT_FILENAME_EDITOR_INPUT_LEN; editor_win = dev_name_data->ct_win_editor; parent = dev_name_data->win; switch (reason) { case INFO_KCD_LEFT: { /* ** If there is no string entered, treat this as if it was a "Cancel" */ if (editor_buffer[0] == NULL) { /* ** Send a "Cancel" to the window */ SEND_EVENT(parent, CT_EDITOR_CANCEL, identifier, NULL); } else { //If the file extn is not jpg, send cancel event /* ** Send a "Select" to the window */ SEND_EVENT(parent, CT_EDITOR_SELECT, identifier, NULL); } } break; case INFO_KCD_RIGHT: if (strlen((char *)editor_buffer) == NULL) { /* ** Send a "Cancel" to the window */ SEND_EVENT(parent, CT_EDITOR_CANCEL, identifier, NULL); } break; case INFO_KCD_HUP: /* ** Set the buffer to NULLS */ memset(editor_buffer, 0x00, max_edit_size); /* ** Send a "Cancel" to the window */ SEND_EVENT(parent, CT_EDITOR_CANCEL, identifier, NULL); break; default: /* otherwise no action to be performed */ break; } } /******************************************************************************* $Function: mmi_camera_test_update_softkeys $Description: This function updates only the softkeys region. $Returns: None $Arguments: None *******************************************************************************/ void mmi_camera_test_update_softkeys (int lsk, int rsk) { TRACE_EVENT("mmi_camera_test_update_softkeys"); dspl_SetBgdColour(COL_White); dspl_ClearAll(); displaySoftKeys(lsk,rsk); //Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg //replaced the flag with the function call, to migrate to the new Lcd APIs dspl_control(DSPL_ACCESS_ENABLE); dspl_Enable(1); } /******************************************************************************* $Function: mmi_camera_editor_destroy $Description: Destroy the filename editor window $Returns: mfw window handle $Arguments: own_window - current window *******************************************************************************/ MfwRes mmi_camera_editor_destroy(T_MFW_HND win) { T_MFW_WIN * win_data; T_CT_Editor_Data * data; TRACE_FUNCTION ("mmi_camera_editor_destroy"); if (win == NULL) return MfwResIllHnd; win_data = ((T_MFW_HDR *) win)->data; data = (T_CT_Editor_Data *)win_data->user; /* ** Destroy the Window */ win_delete(data->win); /* ** Free the dynamically allocated memory */ mfwFree((U8 *)data, (U16)sizeof(T_CT_Editor_Data)); return MfwResOk; } /******************************************************************************* $Function: mmi_camera_editor_cntrl $Description: Exec callback function for the edit filename window $Returns: none $Arguments: win - current window event - event id value - unique id parameter - optional data. *******************************************************************************/ void mmi_camera_editor_cntrl (T_MFW_HND win, USHORT event, SHORT value, void * parameter) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_CT_Editor_Data * data = (T_CT_Editor_Data *)win_data->user; T_AUI_EDITOR_DATA editor_data; TRACE_FUNCTION ("mmi_camera_editor_cntrl"); switch (event) { case CT_INIT: #ifdef NEW_EDITOR //Clear the editor buffer memset(&editor_data,'\0',sizeof(editor_data)); // copy the default name in the editor buffer strcpy((char *)data->ct_buffer,CT_DEFAULT_FILENAME); /* ** Initialise the editor */ AUI_edit_SetDefault(&editor_data); AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, data->ct_buffer, CT_FILE_NAME_LENGTH); AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtFilename, NULL); AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack); AUI_edit_SetEvents(&editor_data, 0, TRUE, FOREVER, (T_AUI_EDIT_CB)mmi_filename_editor_cb); data->ct_win_editor = AUI_edit_Start(data->win, &editor_data); #endif break; case CT_EDITOR_CANCEL: /* ** The editor will be destroyed. Reset the Window handler */ data->ct_win_editor = NULL; /* ** Destroy the editor Window */ TRACE_FUNCTION ("mmi_camera_editor_cntrl CT_EDITOR_CANCEL"); mmi_camera_editor_destroy(data->win); SEND_EVENT (optwin, CT_RETURN, NULL, NULL); camera_state = CAMERA_STATE_VIEWFINDER; break; case CT_EDITOR_SELECT: //copy the file name from the editor strcpy(new_filename,(char *)data->ct_buffer); mmi_camera_editor_destroy(data->win); SEND_EVENT (optwin, CT_RETURN, NULL, NULL); camera_state = CAMERA_STATE_VIEWFINDER; break; default: TRACE_FUNCTION ("mmi_camera_editor_cntrl(), Unexpected Event!"); break; } } /******************************************************************************* $Function: mmi_camera_edit_filename $Description: This function is called when the user press Filename in the option menu . $Returns: Execution status $Arguments: m - menu handler i - Menu item selected *******************************************************************************/ GLOBAL int mmi_camera_edit_filename(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfw_parent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_CT_Editor_Data * data = (T_CT_Editor_Data *)(win_data->user); TRACE_FUNCTION ("mmi_camera_edit_filename()"); data->ct_win_editor = (MfwHnd)mmi_camera_editor_create(win); if (data->ct_win_editor != NULL) { SEND_EVENT(data->ct_win_editor, CT_INIT, 0, NULL); } else { TRACE_FUNCTION ("mmi_camera_edit_filename() : Unable to create Editor Win!"); } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: mmi_camera_editor_create $Description: Create a window for editing the image file name to be saved. $Returns: window handle $Arguments: parent - parent window. *******************************************************************************/ T_MFW_HND mmi_camera_editor_create(T_MFW_HND parent) { T_CT_Editor_Data *data; T_MFW_WIN * win; TRACE_FUNCTION ("mmi_camera_editor_create"); data = (T_CT_Editor_Data *)mfwAlloc((U16)sizeof(T_CT_Editor_Data)); if (data == NULL) return data; data->win = winCreate(parent, 0, E_WIN_VISIBLE, NULL); if (data->win == NULL) { /* ** Failed to start : Free Memory, and exit */ mfwFree((U8 *)data, (U16)sizeof(T_CT_Editor_Data)); data = NULL; return data; } else { /* ** Setup the Dialog control functions */ data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_camera_editor_cntrl; data->mmi_control.data = data; win = ((T_MFW_HDR *)data->win)->data; win->user = (void *)data; } return data->win; } /******************************************************************************* $Function: display_saved_image $Description: Displays the Dialog to show the status of save image $Returns: None $Arguments: res - Status of Save Image *******************************************************************************/ void display_saved_image(BOOL res) { if(call_data.win) { dialog_info_destroy(digwin1); digwin1 = NULL; return; } //Sept 15, 2005 REF: LOCOSTO-ENH-34257 - xpradipg //replaced the flag with the function call, to migrate to the new Lcd APIs dspl_control(DSPL_ACCESS_ENABLE); dspl_Clear(0,0,SCREEN_SIZE_X-1,SCREEN_SIZE_Y-1 ); if( res) mmi_camera_test_show_info(digwin1, TxtSaved, TxtNull,(T_VOID_FUNC) mmi_camera_dialog_cb); else mmi_camera_test_show_info(digwin1, TxtFailed, TxtNull,(T_VOID_FUNC) mmi_camera_dialog_cb); }