57 #define DVB_DATA_BLOCK_ID 0x44564220 59 #define WIRELESS_ESSID_MAX 33 60 #define WIRELESS_PASSWORD_MAX 64 63 #define DBG(X) STB_SPDebugWrite X 80 BOOLEAN nvm_first_boot;
81 BOOLEAN nvm_standby_powersave;
83 E_STB_AV_ASPECT_MODE nvm_aspect_mode;
84 E_STB_AV_SOURCES nvm_scart_input_type;
85 U8BIT nvm_primary_audio_lang_entry;
86 U8BIT nvm_secondary_audio_lang_entry;
87 ADB_AUDIO_TYPE nvm_audio_type;
88 U8BIT nvm_standby_state;
89 BOOLEAN nvm_searching;
90 U8BIT nvm_parental_lock;
91 U8BIT nvm_ics_parental_lock;
92 U16BIT nvm_system_pin_no;
93 BOOLEAN nvm_aerial_power_on;
94 U32BIT nvm_country_code;
96 U8BIT nvm_uhf_channel;
97 E_STB_AV_ASPECT_RATIO nvm_aspect_ratio;
98 E_STB_AV_SOURCES nvm_tv_scart_type;
99 U8BIT nvm_wakeup_volume;
100 E_STB_AV_VIDEO_FORMAT hdmi_resolution;
101 E_NET_IF_TYPE nvm_net_if_type;
102 E_STB_IP_MODE nvm_ip_mode;
103 U32BIT nvm_ip_address;
104 U32BIT nvm_subnet_mask;
105 U32BIT nvm_gateway_ip;
107 U8BIT nvm_essid[WIRELESS_ESSID_MAX];
108 U8BIT nvm_essid_password[WIRELESS_PASSWORD_MAX];
110 E_STB_DIGITAL_AUDIO_TYPE nvm_spdif_output;
111 U16BIT nvm_lip_sync_adjustment;
112 U8BIT nvm_target_region_depth;
113 U32BIT nvm_target_region_country;
114 U8BIT nvm_target_region_primary;
115 U8BIT nvm_target_region_secondary;
116 U16BIT nvm_target_region_tertiary;
118 U16BIT nvm_ota_last_update_srch;
119 U16BIT nvm_last_chan_srch;
120 U32BIT nvm_last_eit_update;
121 E_VIEW_REC_PREF nvm_watch_hd;
122 E_VIEW_REC_PREF nvm_record_hd;
123 U16BIT nvm_timeshift_buffer_size;
124 E_SUBTITLE_TYPE nvm_subtitle_type;
125 U16BIT nvm_background_search_start;
126 U16BIT nvm_background_search_end;
127 BOOLEAN nvm_service_search_enabled;
128 BOOLEAN nvm_ssu_search_enabled;
129 U16BIT nvm_live_service_lcn;
130 U8BIT nvm_primary_text_lang;
131 U8BIT nvm_secondary_text_lang;
132 E_STB_DIGITAL_AUDIO_TYPE nvm_hdmi_audio_output;
133 U16BIT nvm_eit_sched_limit;
134 BOOLEAN nvm_prefer_hd_audio;
135 U16BIT nvm_pvr_notify_time;
136 S32BIT nvm_record_start_padding;
137 S32BIT nvm_record_end_padding;
139 #ifdef COMMON_INTERFACE 140 U8BIT cicam_id0_0[4];
141 U8BIT cicam_id0_1[4];
143 U32BIT pin0_used_time;
144 U8BIT cicam_id1_0[4];
145 U8BIT cicam_id1_1[4];
147 U32BIT pin1_used_time;
148 U8BIT cicam_id2_0[4];
149 U8BIT cicam_id2_1[4];
151 U32BIT pin2_used_time;
152 U8BIT cicam_id3_0[4];
153 U8BIT cicam_id3_1[4];
155 U32BIT pin3_used_time;
168 U8BIT checksum[
sizeof(U16BIT)];
179 AV_SOURCE_VCR_COMPOSITE,
182 ADB_AUDIO_TYPE_UNDEFINED,
193 AV_SOURCE_ENCODER_RGB,
233 #ifdef COMMON_INTERFACE 258 {(
void *)&(current_data.nvm_first_boot), (
void *)&(default_data.nvm_first_boot),
sizeof(BOOLEAN)},
259 {(
void *)&(current_data.nvm_standby_powersave), (
void *)&(default_data.nvm_standby_powersave),
sizeof(BOOLEAN)},
260 {(
void *)&(current_data.nvm_volume), (
void *)&(default_data.nvm_volume),
sizeof(U8BIT)},
261 {(
void *)&(current_data.nvm_aspect_mode), (
void *)&(default_data.nvm_aspect_mode),
sizeof(E_STB_AV_ASPECT_MODE)},
262 {(
void *)&(current_data.nvm_scart_input_type), (
void *)&(default_data.nvm_scart_input_type),
sizeof(E_STB_AV_SOURCES)},
263 {(
void *)&(current_data.nvm_primary_audio_lang_entry), (
void *)&(default_data.nvm_primary_audio_lang_entry),
sizeof(U8BIT)},
264 {(
void *)&(current_data.nvm_secondary_audio_lang_entry), (
void *)&(default_data.nvm_secondary_audio_lang_entry),
sizeof(U8BIT)},
265 {(
void *)&(current_data.nvm_audio_type), (
void *)&(default_data.nvm_audio_type),
sizeof(ADB_AUDIO_TYPE)},
266 {(
void *)&(current_data.nvm_standby_state), (
void *)&(default_data.nvm_standby_state),
sizeof(U8BIT)},
267 {(
void *)&(current_data.nvm_searching), (
void *)&(default_data.nvm_searching),
sizeof(BOOLEAN)},
268 {(
void *)&(current_data.nvm_parental_lock), (
void *)&(default_data.nvm_parental_lock),
sizeof(U8BIT)},
269 {(
void *)&(current_data.nvm_ics_parental_lock), (
void *)&(default_data.nvm_ics_parental_lock),
sizeof(U8BIT)},
270 {(
void *)&(current_data.nvm_system_pin_no), (
void *)&(default_data.nvm_system_pin_no),
sizeof(U16BIT)},
271 {(
void *)&(current_data.nvm_aerial_power_on), (
void *)&(default_data.nvm_aerial_power_on),
sizeof(BOOLEAN)},
272 {(
void *)&(current_data.nvm_country_code), (
void *)&(default_data.nvm_country_code),
sizeof(U32BIT)},
273 {(
void *)&(current_data.nvm_region_id), (
void *)&(default_data.nvm_region_id),
sizeof(U8BIT)},
274 {(
void *)&(current_data.nvm_uhf_channel), (
void *)&(default_data.nvm_uhf_channel),
sizeof(U8BIT)},
275 {(
void *)&(current_data.nvm_aspect_ratio), (
void *)&(default_data.nvm_aspect_ratio),
sizeof(E_STB_AV_ASPECT_RATIO)},
276 {(
void *)&(current_data.nvm_tv_scart_type), (
void *)&(default_data.nvm_tv_scart_type),
sizeof(E_STB_AV_SOURCES)},
277 {(
void *)&(current_data.nvm_wakeup_volume), (
void *)&(default_data.nvm_wakeup_volume),
sizeof(U8BIT)},
278 {(
void *)&(current_data.hdmi_resolution), (
void *)&(default_data.hdmi_resolution),
sizeof(E_STB_AV_VIDEO_FORMAT)},
279 {(
void *)&(current_data.nvm_net_if_type), (
void *)&(default_data.nvm_net_if_type),
sizeof(E_NET_IF_TYPE)},
280 {(
void *)&(current_data.nvm_ip_mode), (
void *)&(default_data.nvm_ip_mode),
sizeof(E_STB_IP_MODE)},
281 {(
void *)&(current_data.nvm_ip_address), (
void *)&(default_data.nvm_ip_address),
sizeof(U32BIT)},
282 {(
void *)&(current_data.nvm_subnet_mask), (
void *)&(default_data.nvm_subnet_mask),
sizeof(U32BIT)},
283 {(
void *)&(current_data.nvm_gateway_ip), (
void *)&(default_data.nvm_gateway_ip),
sizeof(U32BIT)},
284 {(
void *)&(current_data.nvm_dns_ip), (
void *)&(default_data.nvm_dns_ip),
sizeof(U32BIT)},
285 {(
void *)&(current_data.nvm_essid), (
void *)&(default_data.nvm_essid),
sizeof(current_data.nvm_essid)},
286 {(
void *)&(current_data.nvm_essid_password), (
void *)&(default_data.nvm_essid_password),
sizeof(current_data.nvm_essid_password)},
287 {(
void *)&(current_data.nvm_ad_volume), (
void *)&(default_data.nvm_ad_volume),
sizeof(U8BIT)},
288 {(
void *)&(current_data.nvm_spdif_output), (
void *)&(default_data.nvm_spdif_output),
sizeof(E_STB_DIGITAL_AUDIO_TYPE)},
289 {(
void *)&(current_data.nvm_lip_sync_adjustment), (
void *)&(default_data.nvm_lip_sync_adjustment),
sizeof(U16BIT)},
290 {(
void *)&(current_data.nvm_target_region_depth), (
void *)&(default_data.nvm_target_region_depth),
sizeof(U8BIT)},
291 {(
void *)&(current_data.nvm_target_region_country), (
void *)&(default_data.nvm_target_region_country),
sizeof(U32BIT)},
292 {(
void *)&(current_data.nvm_target_region_primary), (
void *)&(default_data.nvm_target_region_primary),
sizeof(U8BIT)},
293 {(
void *)&(current_data.nvm_target_region_secondary), (
void *)&(default_data.nvm_target_region_secondary),
sizeof(U8BIT)},
294 {(
void *)&(current_data.nvm_target_region_tertiary), (
void *)&(default_data.nvm_target_region_tertiary),
sizeof(U16BIT)},
295 {(
void *)&(current_data.nvm_ota_type), (
void *)&(default_data.nvm_ota_type),
sizeof(U8BIT)},
296 {(
void *)&(current_data.nvm_ota_last_update_srch), (
void *)&(default_data.nvm_ota_last_update_srch),
sizeof(U16BIT)},
297 {(
void *)&(current_data.nvm_last_chan_srch), (
void *)&(default_data.nvm_last_chan_srch),
sizeof(U16BIT)},
298 {(
void *)&(current_data.nvm_last_eit_update), (
void *)&(default_data.nvm_last_eit_update),
sizeof(U32DHMS)},
299 {(
void *)&(current_data.nvm_watch_hd), (
void *)&(default_data.nvm_watch_hd),
sizeof(E_VIEW_REC_PREF)},
300 {(
void *)&(current_data.nvm_record_hd), (
void *)&(default_data.nvm_record_hd),
sizeof(E_VIEW_REC_PREF)},
301 {(
void *)&(current_data.nvm_timeshift_buffer_size), (
void *)&(default_data.nvm_timeshift_buffer_size),
sizeof(U16BIT)},
302 {(
void *)&(current_data.nvm_subtitle_type), (
void *)&(default_data.nvm_subtitle_type),
sizeof(E_SUBTITLE_TYPE)},
303 {(
void *)&(current_data.nvm_background_search_start), (
void *)&(default_data.nvm_background_search_start),
sizeof(U16BIT)},
304 {(
void *)&(current_data.nvm_background_search_end), (
void *)&(default_data.nvm_background_search_end),
sizeof(U16BIT)},
305 {(
void *)&(current_data.nvm_service_search_enabled), (
void *)&(default_data.nvm_service_search_enabled),
sizeof(BOOLEAN)},
306 {(
void *)&(current_data.nvm_ssu_search_enabled), (
void *)&(default_data.nvm_ssu_search_enabled),
sizeof(BOOLEAN)},
307 {(
void *)&(current_data.nvm_live_service_lcn), (
void *)&(default_data.nvm_live_service_lcn),
sizeof(U16BIT)},
308 {(
void *)&(current_data.nvm_primary_text_lang), (
void *)&(default_data.nvm_primary_text_lang),
sizeof(U8BIT)},
309 {(
void *)&(current_data.nvm_secondary_text_lang), (
void *)&(default_data.nvm_secondary_text_lang),
sizeof(U8BIT)},
310 {(
void *)&(current_data.nvm_hdmi_audio_output), (
void *)&(default_data.nvm_hdmi_audio_output),
sizeof(E_STB_DIGITAL_AUDIO_TYPE)},
311 {(
void *)&(current_data.nvm_eit_sched_limit), (
void *)&(default_data.nvm_eit_sched_limit),
sizeof(U16BIT)},
312 {(
void *)&(current_data.nvm_prefer_hd_audio), (
void *)&(default_data.nvm_prefer_hd_audio),
sizeof(BOOLEAN)},
313 {(
void *)&(current_data.nvm_pvr_notify_time), (
void *)&(default_data.nvm_pvr_notify_time),
sizeof(U16BIT)},
314 {(
void *)&(current_data.nvm_record_start_padding), (
void *)&(default_data.nvm_record_start_padding),
sizeof(S32BIT)},
315 {(
void *)&(current_data.nvm_record_end_padding), (
void *)&(default_data.nvm_record_end_padding),
sizeof(S32BIT)},
316 #ifdef COMMON_INTERFACE
317 {(
void *)&(current_data.cicam_id0_0[0]), (
void *)&(default_data.cicam_id0_0[0]),
sizeof(U8BIT[4])},
318 {(
void *)&(current_data.cicam_id0_1[0]), (
void *)&(default_data.cicam_id0_1[0]),
sizeof(U8BIT[4])},
319 {(
void *)&(current_data.cicam_pin0), (
void *)&(default_data.cicam_pin0),
sizeof(S32BIT)},
320 {(
void *)&(current_data.pin0_used_time), (
void *)&(default_data.pin0_used_time),
sizeof(U32DHMS)},
321 {(
void *)&(current_data.cicam_id1_0[0]), (
void *)&(default_data.cicam_id1_0[0]),
sizeof(U8BIT[4])},
322 {(
void *)&(current_data.cicam_id1_1[0]), (
void *)&(default_data.cicam_id1_1[0]),
sizeof(U8BIT[4])},
323 {(
void *)&(current_data.cicam_pin1), (
void *)&(default_data.cicam_pin1),
sizeof(S32BIT)},
324 {(
void *)&(current_data.pin1_used_time), (
void *)&(default_data.pin1_used_time),
sizeof(U32DHMS)},
325 {(
void *)&(current_data.cicam_id2_0[0]), (
void *)&(default_data.cicam_id2_0[0]),
sizeof(U8BIT[4])},
326 {(
void *)&(current_data.cicam_id2_1[0]), (
void *)&(default_data.cicam_id2_1[0]),
sizeof(U8BIT[4])},
327 {(
void *)&(current_data.cicam_pin2), (
void *)&(default_data.cicam_pin2),
sizeof(S32BIT)},
328 {(
void *)&(current_data.pin2_used_time), (
void *)&(default_data.pin2_used_time),
sizeof(U32DHMS)},
329 {(
void *)&(current_data.cicam_id3_0[0]), (
void *)&(default_data.cicam_id3_0[0]),
sizeof(U8BIT[4])},
330 {(
void *)&(current_data.cicam_id3_1[0]), (
void *)&(default_data.cicam_id3_1[0]),
sizeof(U8BIT[4])},
331 {(
void *)&(current_data.cicam_pin3), (
void *)&(default_data.cicam_pin3),
sizeof(S32BIT)},
332 {(
void *)&(current_data.pin3_used_time), (
void *)&(default_data.pin3_used_time),
sizeof(U32DHMS)}
336 static BOOLEAN nvmdata_is_initialised;
337 static BOOLEAN nvm_data_has_changed;
342 static BOOLEAN VerifyNvmChecksum(
void);
343 static U16BIT ComputeNvmChecksum(
void);
344 static void SaveNvmData(
void);
361 static BOOLEAN VerifyNvmChecksum(
void)
363 BOOLEAN verify_status;
364 U16BIT temp_checksum;
366 FUNCTION_START(VerifyNvmChecksum);
368 ASSERT(nvmdata_is_initialised == TRUE);
370 temp_checksum = (current_data.checksum[0] << 8) | current_data.checksum[1];
372 if (temp_checksum == ComputeNvmChecksum())
374 verify_status = TRUE;
378 verify_status = FALSE;
381 FUNCTION_FINISH(VerifyNvmChecksum);
383 return verify_status;
397 static U16BIT ComputeNvmChecksum(
void)
401 U32BIT num_nvmdata_bytes;
404 FUNCTION_START(ComputeNvmChecksum);
406 nvmdata_ptr = (U8BIT *)¤t_data;
407 num_nvmdata_bytes = (U32BIT)(current_data.checksum - nvmdata_ptr);
417 while (num_nvmdata_bytes > 0)
420 nvmdata += (*nvmdata_ptr);
427 FUNCTION_FINISH(ComputeNvmChecksum);
443 static void SaveNvmData(
void)
445 U16BIT temp_checksum;
447 FUNCTION_START(SaveNvmData);
449 if (nvm_data_has_changed)
451 temp_checksum = ComputeNvmChecksum();
452 current_data.checksum[0] = temp_checksum >> 8;
453 current_data.checksum[1] = temp_checksum & 0xff;
455 DBG((
"SaveNvmData: saving dvb data"));
460 nvm_data_has_changed = FALSE;
463 FUNCTION_FINISH(SaveNvmData);
479 (
DBA_DataBlockRead(DVB_DATA_BLOCK_ID, (U8BIT *)¤t_data,
sizeof(current_data)) !=
sizeof(current_data)))
482 DBG((
"APP_NvmInitialise: Using defaults"));
486 nvmdata_is_initialised = TRUE;
487 nvm_data_has_changed = FALSE;
489 if (!VerifyNvmChecksum())
491 DBG((
"APP_NvmInitialise CRC ERROR, RESTORING DEFAULTS\n"));
505 memcpy(¤t_data, &default_data,
sizeof(
S_NVM_DATA));
506 nvm_data_has_changed = TRUE;
508 DBG((
"APP_NvmRestoreDefaults: restoring defaults"));
521 U32BIT default_item_value = 0;
526 if (nvm_item < NUM_ITEMS_NVM)
528 switch (field_definition[nvm_item].field_size)
532 default_item_value = (U32BIT)(*((U8BIT *)field_definition[nvm_item].def_ptr));
537 default_item_value = (U32BIT)(*((U16BIT *)field_definition[nvm_item].def_ptr));
542 default_item_value = (U32BIT)(*((U32BIT *)field_definition[nvm_item].def_ptr));
554 return(default_item_value);
564 U32BIT nvm_item_value = 0;
569 if (nvm_item < NUM_ITEMS_NVM)
571 switch (field_definition[nvm_item].field_size)
575 nvm_item_value = (U32BIT)(*((U8BIT *)field_definition[nvm_item].field_ptr));
580 nvm_item_value = (U32BIT)(*((U16BIT *)field_definition[nvm_item].field_ptr));
585 nvm_item_value = (U32BIT)(*((U32BIT *)field_definition[nvm_item].field_ptr));
597 return(nvm_item_value);
612 if (nvm_item < NUM_ITEMS_NVM)
614 ASSERT(field_definition[nvm_item].field_size ==
sizeof(U8BIT*));
615 nvm_item_ptr = (U8BIT*)field_definition[nvm_item].field_ptr;
623 return(nvm_item_ptr);
634 void APP_NvmSave(E_NVM_ITEMS nvm_item, U32BIT new_value, BOOLEAN write_to_flash_now)
636 U32BIT nvm_item_value;
641 if (nvm_item < NUM_ITEMS_NVM)
643 DBG((
"APP_NvmSave: nvm_item = 0x%x, write_now=%s", nvm_item, write_to_flash_now ?
"TRUE" :
"FALSE"));
644 switch (field_definition[nvm_item].field_size)
649 nvm_item_value = (U32BIT)(*((U8BIT *)field_definition[nvm_item].field_ptr));
652 if (nvm_item_value != new_value)
654 *((U8BIT *)field_definition[nvm_item].field_ptr) = (U8BIT)new_value;
655 nvm_data_has_changed = TRUE;
659 if (write_to_flash_now == TRUE)
668 nvm_item_value = (U32BIT)(*((U16BIT *)field_definition[nvm_item].field_ptr));
671 if (nvm_item_value != new_value)
673 *((U16BIT *)field_definition[nvm_item].field_ptr) = (U16BIT)new_value;
674 nvm_data_has_changed = TRUE;
678 if (write_to_flash_now == TRUE)
687 nvm_item_value = (U32BIT)(*((U32BIT *)field_definition[nvm_item].field_ptr));
690 if (nvm_item_value != new_value)
692 *((U32BIT *)field_definition[nvm_item].field_ptr) = (U32BIT)new_value;
693 nvm_data_has_changed = TRUE;
697 if (write_to_flash_now == TRUE)
729 if (nvm_item < NUM_ITEMS_NVM)
731 ASSERT(field_definition[nvm_item].field_size ==
sizeof(U8BIT*));
732 DBG((
"APP_NvmSaveString: nvm_item = %s, write_now=%s", str_ptr, write_to_flash_now ?
"TRUE" :
"FALSE"));
733 nvm_item_ptr = (U8BIT *)field_definition[nvm_item].field_ptr;
734 if (strcmp((
char *)nvm_item_ptr, (
char *)str_ptr) != 0)
736 strncpy((
char *)nvm_item_ptr, (
char *)str_ptr, field_definition[nvm_item].field_size);
737 nvm_data_has_changed = TRUE;
739 if (write_to_flash_now == TRUE)
753 DBG((
"APP_NvmSaveAllNow"));
Application configuration.
Header file - macros and function prototypes for public use.
Header file for NVM data handling functions.
U32BIT DBA_DataBlockSize(U32BIT data_block_id)
Returns the number of bytes available for the given data block.
void APP_NvmSaveAllNow(void)
Saves DVB values immediately.
void APP_NvmSaveString(E_NVM_ITEMS nvm_item, U8BIT *str_ptr, BOOLEAN write_to_flash_now)
Sets the current value for the given DVB setting.
Header file - Function prototypes for A/V control.
BOOLEAN DBA_DataBlockWrite(U32BIT data_block_id, U8BIT *data, U32BIT num_bytes)
Writes a block of data into the database from the given buffer.
void APP_NvmRestoreDefaults(void)
Resets the DVB's settings to factory defaults.
Header file - Function prototypes for A/V control.
U8BIT * APP_NvmReadString(E_NVM_ITEMS nvm_item)
Returns pointer to current string for the given DVB setting.
U32BIT APP_NvmReadDefault(E_NVM_ITEMS nvm_item)
Returns the factory default value for the given DVB setting.
Debug functions header file.
Header file - macros and function prototypes for public use.
Header file - macros and function prototypes for public use.
Database access defines, structures and public functions.
Contains the initialise functions for IP.
U32BIT DBA_DataBlockRead(U32BIT data_block_id, U8BIT *data, U32BIT num_bytes)
Read a block of data from the database into the given buffer.
System Wide Global Technical Data Type Definitions.
U32BIT APP_NvmRead(E_NVM_ITEMS nvm_item)
Returns the current value for the given DVB setting.
void APP_NvmInitialise(void)
Initialises the DVB core's NVM data.
Header file - Function prototypes for heap memory.
U32BIT APP_NvmGetDvbSize(void)
Returns the size in bytes the DVB module uses to save its settings.
void DBA_LockDatabase(void)
Locks the database to prevent access from other threads or processes.
void DBA_UnlockDatabase(void)
Unlocks the database to allow other threads or processes to access it.
void APP_NvmSave(E_NVM_ITEMS nvm_item, U32BIT new_value, BOOLEAN write_to_flash_now)
Sets the current value for the given DVB setting.
Application database access functions.
Header file - macros and function prototypes for public use.