41 #ifdef INCLUDE_SA_PROFILE 47 void MHEG5NotifyEvent( E_MhegEvent event, U32BIT data );
53 #define INCLUDE_AU_PROFILE 54 #define INCLUDE_NZ_PROFILE 65 UK_KGRP_COLS_ARRS_DIGITS,
66 UK_KGRP_COLS_ARRS_DGTS_PVR,
68 NZ_KGRP_COLS_ARRS_DIGITS,
71 OZ_KGRP_COLS_ARRS_DIGITS,
83 static BOOLEAN Register3Accept(E_MHEG5_KEY key);
86 static BOOLEAN (*inputAcceptFn)(E_MHEG5_KEY key) = Register3Accept;
88 static BOOLEAN promotional_linking_enabled = TRUE;
90 static s_keyMask_t key_mask_values[TOTAL_MHEG5_KEYS] =
127 BOOLEAN key_mask_enable[TOTAL_MHEG5_KEYS];
128 BOOLEAN key_unsupported[TOTAL_MHEG5_KEYS] =
165 static int UserInputEventData[TOTAL_MHEG5_KEYS] =
203 static MHEG5Int key_input_reg;
204 static U32BIT last_keyset = 0;
211 static BOOLEAN Register4Accept(E_MHEG5_KEY key);
212 static BOOLEAN Register5Accept(E_MHEG5_KEY key);
213 static BOOLEAN Register6Accept(E_MHEG5_KEY key);
214 #ifdef INCLUDE_FREESAT 215 static BOOLEAN Register7Accept(E_MHEG5_KEY key);
217 #ifdef INCLUDE_NZ_PROFILE 218 static BOOLEAN Register13Accept(E_MHEG5_KEY key);
219 static BOOLEAN Register14Accept(E_MHEG5_KEY key);
220 static BOOLEAN Register15Accept(E_MHEG5_KEY key);
221 static BOOLEAN Register16Accept(E_MHEG5_KEY key);
223 #ifdef INCLUDE_AU_PROFILE 224 static BOOLEAN Register33Accept(E_MHEG5_KEY key);
225 static BOOLEAN Register34Accept(E_MHEG5_KEY key);
226 static BOOLEAN Register35Accept(E_MHEG5_KEY key);
229 static BOOLEAN IsKeypressInMask(E_MHEG5_KEY key);
232 BOOLEAN NotifyKeyset(
void)
236 switch (key_input_reg)
240 for (key = MHEG5_KEY_UP; key != MHEG5_KEY_0; key++)
242 if (key_mask_enable[key])
244 keyset |= KS_NAVIGATION;
248 for (key = MHEG5_KEY_0; key != MHEG5_KEY_SELECT; key++)
250 if (key_mask_enable[key])
252 keyset |= KS_NUMERIC;
256 if (key_mask_enable[MHEG5_KEY_SELECT])
258 keyset |= KS_NAVIGATION;
260 if (key_mask_enable[MHEG5_KEY_RED])
264 if (key_mask_enable[MHEG5_KEY_GREEN])
268 if (key_mask_enable[MHEG5_KEY_YELLOW])
272 if (key_mask_enable[MHEG5_KEY_BLUE])
276 if (key_mask_enable[MHEG5_KEY_INFO])
280 for (key = MHEG5_KEY_STOP; key != TOTAL_MHEG5_KEYS; key++)
282 if (key_mask_enable[key])
295 keyset |= KS_NUMERIC;
297 keyset |= KS_NAVIGATION;
299 keyset |= KS_RED|KS_GREEN|KS_YELLOW|KS_BLUE;
301 if (last_keyset != keyset)
303 MHEG5NotifyEvent( MHEG_EVENT_KEYSET_CHANGE, keyset );
304 last_keyset = keyset;
322 switch (inputEventRegister)
326 inputAcceptFn = IsKeypressInMask;
342 inputAcceptFn = Register3Accept;
347 inputAcceptFn = Register4Accept;
352 inputAcceptFn = Register5Accept;
357 inputAcceptFn = Register6Accept;
360 #ifdef INCLUDE_FREESAT 365 inputAcceptFn = Register7Accept;
369 inputAcceptFn = Register3Accept;
374 #ifdef INCLUDE_NZ_PROFILE 379 inputAcceptFn = Register13Accept;
383 inputAcceptFn = Register3Accept;
390 inputAcceptFn = Register14Accept;
394 inputAcceptFn = Register4Accept;
401 inputAcceptFn = Register15Accept;
405 inputAcceptFn = Register5Accept;
413 inputAcceptFn = Register16Accept;
417 inputAcceptFn = Register6Accept;
422 #ifdef INCLUDE_AU_PROFILE 427 inputAcceptFn = Register33Accept;
431 inputAcceptFn = Register3Accept;
439 inputAcceptFn = Register34Accept;
443 inputAcceptFn = Register4Accept;
451 inputAcceptFn = Register35Accept;
455 inputAcceptFn = Register5Accept;
461 #ifdef NOTIFY_KEYPRESS_REQ 462 DVB_MhegSetInputRegister(inputEventRegister);
465 key_input_reg = inputEventRegister;
466 MH5GlueAddPostProcessFunc( NotifyKeyset );
477 #ifdef INCLUDE_SA_PROFILE 488 accepted = inputAcceptFn(keyPress);
492 TRACE(TKEYS, (
"No scene for key %d", keyPress))
509 E_MHEG5_KEY ui = params->key;
521 #ifdef INCLUDE_SA_PROFILE 531 MHEG5StartInfoApp(FALSE);
533 case MHEG5_KEY_SELECT:
537 TRACE(TKEYS, (
"No Scene - ignoring key %d", ui));
543 TRACE(TKEYS, (
"No Scene - ignoring key %d", ui))
546 else if (!inputAcceptFn(ui))
549 TRACE(TKEYS, (
"key %d not included in input register", ui))
569 TRACE(TKEYS, (
"got key %d", ui))
581 case MHEG5_KEY_CANCEL:
583 MHEG5sendEvent(application, MHEG5ENGINEEVENT, EE_KEYPRESS_CANCEL );
591 case MHEG5_KEY_GREEN:
593 MHEG5sendEvent(application, MHEG5ENGINEEVENT, EE_KEYPRESS_GREEN );
596 case MHEG5_KEY_YELLOW:
598 MHEG5sendEvent(application, MHEG5ENGINEEVENT, EE_KEYPRESS_YELLOW );
606 #ifndef INCLUDE_FREESAT 625 if (scene->currentInteractible)
627 switch (scene->currentInteractible->clazz)
629 case MHEG5ENTRYFIELD:
643 case MHEG5_KEY_RIGHT:
646 case MHEG5_KEY_SELECT:
647 MHEG5hypertextSELECT(hypertext);
649 case MHEG5_KEY_CANCEL:
650 hypertext->interactible.interactionStatus = MHEG5FALSE;
651 scene->currentInteractible = 0;
652 MHEG5interactibleInteractionCompleted(&hypertext->interactible, (
MHEG5Root *)hypertext);
661 slider = (
MHEG5Slider *)scene->currentInteractible;
670 case MHEG5_KEY_RIGHT:
676 case MHEG5_KEY_SELECT:
678 case MHEG5_KEY_CANCEL:
690 MHEG5displayRedraw((
MHEG5Visible *)scene->currentInteractible );
706 static BOOLEAN Register3Accept(E_MHEG5_KEY key)
710 case MHEG5_KEY_CANCEL:
712 case MHEG5_KEY_GREEN:
713 case MHEG5_KEY_YELLOW:
716 #ifdef INCLUDE_RECORD_KEY 717 case MHEG5_KEY_RECORD:
725 static BOOLEAN Register4Accept(E_MHEG5_KEY key)
729 case MHEG5_KEY_CANCEL:
731 case MHEG5_KEY_GREEN:
732 case MHEG5_KEY_YELLOW:
738 case MHEG5_KEY_RIGHT:
749 case MHEG5_KEY_SELECT:
750 #ifdef INCLUDE_RECORD_KEY 751 case MHEG5_KEY_RECORD:
759 static BOOLEAN Register5Accept(E_MHEG5_KEY key)
763 case MHEG5_KEY_CANCEL:
765 case MHEG5_KEY_GREEN:
766 case MHEG5_KEY_YELLOW:
772 case MHEG5_KEY_RIGHT:
773 case MHEG5_KEY_SELECT:
774 #ifdef INCLUDE_RECORD_KEY 775 case MHEG5_KEY_RECORD:
783 static BOOLEAN Register6Accept(E_MHEG5_KEY key)
787 case MHEG5_KEY_CANCEL:
789 case MHEG5_KEY_GREEN:
790 case MHEG5_KEY_YELLOW:
796 case MHEG5_KEY_RIGHT:
807 case MHEG5_KEY_SELECT:
811 case MHEG5_KEY_PAUSE:
812 case MHEG5_KEY_PLAY_PAUSE:
813 case MHEG5_KEY_SKIP_FWD:
814 case MHEG5_KEY_SKIP_BACK:
815 case MHEG5_KEY_FAST_FWD:
816 case MHEG5_KEY_REWIND:
818 #ifdef INCLUDE_RECORD_KEY 819 case MHEG5_KEY_RECORD:
827 #ifdef INCLUDE_FREESAT 828 static BOOLEAN Register7Accept(E_MHEG5_KEY key)
832 case MHEG5_KEY_CANCEL:
834 case MHEG5_KEY_GREEN:
835 case MHEG5_KEY_YELLOW:
841 case MHEG5_KEY_RIGHT:
852 case MHEG5_KEY_SELECT:
857 case MHEG5_KEY_PAUSE:
858 case MHEG5_KEY_PLAY_PAUSE:
859 case MHEG5_KEY_SKIP_FWD:
860 case MHEG5_KEY_SKIP_BACK:
861 case MHEG5_KEY_FAST_FWD:
862 case MHEG5_KEY_REWIND:
864 #ifdef INCLUDE_RECORD_KEY 865 case MHEG5_KEY_RECORD:
875 #ifdef INCLUDE_NZ_PROFILE 877 static BOOLEAN Register13Accept(E_MHEG5_KEY key)
881 case MHEG5_KEY_CANCEL:
883 case MHEG5_KEY_GREEN:
884 case MHEG5_KEY_YELLOW:
894 static BOOLEAN Register14Accept(E_MHEG5_KEY key)
898 case MHEG5_KEY_CANCEL:
900 case MHEG5_KEY_GREEN:
901 case MHEG5_KEY_YELLOW:
907 case MHEG5_KEY_RIGHT:
918 case MHEG5_KEY_SELECT:
926 static BOOLEAN Register15Accept(E_MHEG5_KEY key)
930 case MHEG5_KEY_CANCEL:
932 case MHEG5_KEY_GREEN:
933 case MHEG5_KEY_YELLOW:
939 case MHEG5_KEY_RIGHT:
940 case MHEG5_KEY_SELECT:
948 static BOOLEAN Register16Accept(E_MHEG5_KEY key)
952 case MHEG5_KEY_CANCEL:
954 case MHEG5_KEY_GREEN:
955 case MHEG5_KEY_YELLOW:
961 case MHEG5_KEY_RIGHT:
972 case MHEG5_KEY_SELECT:
977 case MHEG5_KEY_PAUSE:
978 case MHEG5_KEY_PLAY_PAUSE:
979 case MHEG5_KEY_SKIP_FWD:
980 case MHEG5_KEY_SKIP_BACK:
981 case MHEG5_KEY_FAST_FWD:
982 case MHEG5_KEY_REWIND:
991 #ifdef INCLUDE_AU_PROFILE 993 static BOOLEAN Register33Accept(E_MHEG5_KEY key)
997 case MHEG5_KEY_CANCEL:
999 case MHEG5_KEY_GREEN:
1000 case MHEG5_KEY_YELLOW:
1001 case MHEG5_KEY_BLUE:
1002 case MHEG5_KEY_TEXT:
1003 case MHEG5_KEY_INFO:
1011 static BOOLEAN Register34Accept(E_MHEG5_KEY key)
1015 case MHEG5_KEY_CANCEL:
1017 case MHEG5_KEY_GREEN:
1018 case MHEG5_KEY_YELLOW:
1019 case MHEG5_KEY_BLUE:
1020 case MHEG5_KEY_TEXT:
1022 case MHEG5_KEY_DOWN:
1023 case MHEG5_KEY_LEFT:
1024 case MHEG5_KEY_RIGHT:
1035 case MHEG5_KEY_SELECT:
1036 case MHEG5_KEY_INFO:
1044 static BOOLEAN Register35Accept(E_MHEG5_KEY key)
1048 case MHEG5_KEY_CANCEL:
1050 case MHEG5_KEY_GREEN:
1051 case MHEG5_KEY_YELLOW:
1052 case MHEG5_KEY_BLUE:
1053 case MHEG5_KEY_TEXT:
1055 case MHEG5_KEY_DOWN:
1056 case MHEG5_KEY_LEFT:
1057 case MHEG5_KEY_RIGHT:
1058 case MHEG5_KEY_SELECT:
1059 case MHEG5_KEY_INFO:
1081 MHEG5Bool mask_supported;
1083 mask_supported = MHEG5TRUE;
1087 for (index = 0; index != TOTAL_MHEG5_KEYS; index++)
1089 mask_byte = key_mask_values[index].byte;
1091 if (untested_bits.len > mask_byte)
1093 if (untested_bits.data[mask_byte] & key_mask_values[index].bit)
1096 if (!key_unsupported[index])
1098 mask_supported = MHEG5FALSE;
1102 untested_bits.data[mask_byte] &= ~key_mask_values[index].bit;
1107 for (index = 0; index < untested_bits.len; index++)
1110 if (untested_bits.data[index])
1112 mask_supported = MHEG5FALSE;
1117 #ifdef NOTIFY_KEYSET 1118 MH5GlueAddPostProcessFunc( NotifyKeyset );
1120 return mask_supported;
1123 static BOOLEAN IsKeypressInMask(E_MHEG5_KEY key)
1128 if (scene != NULL && key < TOTAL_MHEG5_KEYS)
1130 in_mask = key_mask_enable[key];
1149 U32BIT byte, key, len;
1150 #ifdef NOTIFY_KEYPRESS_REQ 1151 E_MHEG5_KEY mask[TOTAL_MHEG5_KEYS];
1156 keyMask = key_mask_values;
1157 len = inputEventMask->len;
1158 for (key = 0; key != TOTAL_MHEG5_KEYS; key++, keyMask++)
1160 byte = keyMask->byte;
1161 if ((byte < len) && (keyMask->bit & inputEventMask->data[byte]) != 0)
1163 switch ((E_MHEG5_KEY)key)
1165 case MHEG5_KEY_INFO:
1168 key_mask_enable[key] = TRUE;
1172 key_mask_enable[key] = FALSE;
1178 key_mask_enable[key] = TRUE;
1182 key_mask_enable[key] = FALSE;
1186 key_mask_enable[key] = TRUE;
1188 #ifdef NOTIFY_KEYPRESS_REQ 1189 if (key_mask_enable[key])
1191 mask[count] = (E_MHEG5_KEY)key;
1198 key_mask_enable[key] = FALSE;
1202 #ifdef NOTIFY_KEYPRESS_REQ 1204 DVB_MhegSetInputMask(mask, count);
1218 if ( !MH5GlueIsStarted() )
1220 TRACE(TKEYS | TMHAPI, (
"Keypress( %d ) IGNORED\n", key));
1224 if ( !MH5GlueActiveState() )
1226 TRACE(TKEYS | TMHAPI, (
"Keypress( %d ) IGNORED\n", key));
1232 TRACE(TKEYS | TMHAPI, (
"Keypress( %d ) IGNORED\n", key));
1237 event_msg.data_type = DT_VALUE;
1238 event_msg.data.keypress.key = key;
1239 if (
VQ_PutMsg(&event_msg, PRTY_CRITICAL) != MHERR_OK)
1241 TRACE(TKEYS | TMHAPI, (
"Keypress( %d ) IGNORED\n", key));
1248 void MHEG5PromotionalLinkControl( BOOLEAN isEnabled )
1250 if (promotional_linking_enabled != isEnabled)
1252 promotional_linking_enabled = isEnabled;
1271 return promotional_linking_enabled;
1282 if (key < TOTAL_MHEG5_KEYS)
1284 key_unsupported[key] = TRUE;
1295 if (key < TOTAL_MHEG5_KEYS)
1297 key_unsupported[key] = FALSE;
Implement MHEG5 engine control functions (i.e. start/stop etc)
E_MhegErr VQ_PutMsg(S_MhegMessage *pMsg, E_PRIORITY priority)
Post event or section message on queue. Copies data into queue.
void MHEG5sliderEXIT(MHEG5Slider *slider)
Perform action of exit key on interacting Slider.
Implement the MHEG5 Hypertext Class. The HyperText class is a subclass of the Text class...
void MHEG5_KeySupportDisabled(E_MHEG5_KEY key)
Inform MHEG5 engine that key is not supported by the platform or product. By default MHEG5 engine ass...
BOOLEAN MHEG5_IsPromotionalLinkingEnabled(void)
This function is relevant to PVR products that support NativeApplicationExtension for broadcast-trigg...
void MHEG5sliderUP(MHEG5Slider *slider)
Perform action of up arrow key on interacting Slider.
void DVB_MhegPromotionalLinkControl(BOOLEAN isEnabled)
This function is relevant to PVR products that support NativeApplicationExtension for broadcast-trigg...
MHEG5String MHEG5stringCopy(MHEG5String source)
<Function description>="">
Implement the MHEG5 Slider Class. Slider Class. Defines the behaviour of sliders. Base class: Visible...
void MHEG5stringDestruct(MHEG5String *item)
Destruct a MHEG5String.
void MHEG5setInputEventMask(MHEG5String *inputEventMask)
Change the input mask. This indicates which keypresses the MHEG-5 engine requires to be passed...
void(* F_MSG_PROCESS)(void *data)
Function to Process voyager message.
void MHEG5hypertextUP(MHEG5Hypertext *hypertext)
This file defines the profile for the MHEG engine.
void MHEG5sliderDOWN(MHEG5Slider *slider)
Perform action of down arrow key on interacting Slider.
void MHEG5sliderRIGHT(MHEG5Slider *slider)
Perform action of right arrow key on interacting Slider.
Event handling. Implementation of a combined queue for events and actions. This is the eventsystem wh...
MHEG5Bool MHEG5IsInputMaskSupported(MHEG5String query_mask)
Tell whether the set of keys indicated by the input mask is supported by the receiver (this means tha...
void MHEG5hypertextDOWN(MHEG5Hypertext *hypertext)
BOOLEAN MHEG5_IsKeyNeeded(E_MHEG5_KEY keyPress)
Enquire from MHEG5 engine about whether a key is needed, without actually passing the key to it...
Implementation of the MHEG5 Application Class Defines a set of Ingredient objects, which are shared within an application scope. Base class: Group Subclasses: None Status: Concrete class.
Implementation of the MHEG5 Scene Class Scene Class Defines a set of Ingredient objects to be activat...
MHEG5Bool MH5_SupportMhegProfile(E_MHEG_PROFILE profile)
Return whether Mheg profile (UK, NZ, AU, HK, SA, FREESAT) is currently supported. ...
MHEG5Scene * MHEG5getCurrentScene(void)
<Function description>="">
Key press interface with MHEG5 engine.
void MHEG5sendEvent(MHEG5Root *source, MHEG5EventType event, MHEG5Int data)
Store an event in the asynchronous event queue.
void MHEG5sliderLEFT(MHEG5Slider *slider)
Perform action of left arrow key on interacting Slider.
void MHEG5userInputEvent(S_KeyPressEvent *params)
Process the UserInput from the system. According to the current profile and the UserInputRegister of ...
BOOLEAN MHEG5_NotifyKeyPress(E_MHEG5_KEY key)
Notify MHEG5 engine of a key press. If FALSE is returned, the external application may use the key...
Implement generic MHEG5-display functions - independent from the OSD These are generic functions used...
void MHEG5setInputEventRegister(MHEG5Int inputEventRegister)
Change the input event register. This indicates which keypresses the MHEG-5 engine requires to be pas...
void MHEG5_KeySupportEnabled(E_MHEG5_KEY key)
Key press support is enabled. May be called after the key has been disabled by MHEG5_KeySupportDisabl...
void MHEG5entryfieldUserInput(MHEG5Entryfield *entryfield, E_MHEG5_KEY ui)
Test user input and perform required actions.
Key Press related functionality.
Engine support utility functions for MHEG5.
Implement the MHEG5 EntryField Class. Defines an interaction widget used by the final user to edit an...
MHEG5Application * MHEG5getCurrentApplication(void)
<Function description>="">