Network Identity and Time Zone (NITZ) Support (Windows Embedded CE 6.0)
1/6/2010
Support is provided for receiving Network Identity and Time Zone information. Your radio module must be capable of receiving NITZ information from the network. The RIL driver for your radio module must be implemented, or extended, to include the +CTZR (Time Zone Reporting) commands parameter (see 3GPP TS27.007 version 6.8.0 Release 6) and to do the following:
- At device boot-up, RIL driver must enable the time zone update feature (for example, send AT+CTZU=1) and enable time zone reporting (for example, send AT+CTZR=1).
- In response to a call to RIL_GetDevCaps, where the RIL_CAPSTYPE_NITZNOTIFICATION parameter value is passed, the RIL driver must return RIL_CAPS_NITZ_ENABLED or RIL_CAPS_NITZ_DISABLED.
- When the radio sends a time zone change notification (for example, CTZR: <timezone>) the RIL driver must send a RIL notification of RIL_NOTIFY_NITZ and transmit the change information through a RILNITZINFO structure. For more information on RIL_NOTIFY_NITZ, see Notification Miscellaneous Constants.
In the following example the local time is the 23rd of July 2004 13:39:20 (which is UTC (23rd of July 2004 20:39:20) -7 hours). The local time zone would be -8 (UTC-7 hours - 1 hour daylight adjustment)
Example
The network sends the nitz indicator: +CIEV: nitz,"04/07/23,13:39:20",-28,1. The RIL driver will send a notification. The associated RILNITZINFO structure will contain the following data:
typedef struct rilnitzinfo_tag
{
DWORD cbSize; = size
DWORD dwParams; = 7 (0x00000001|0x00000002|0x00000004)
DWORD dwNotificationCode; = 0x00000012 | RIL_NCLASS_MISC
Int TimeZoneOffsetMinutes; = -420 (28 quarters * 15 Minutes)
SYSTEMTIME SysTime; = 2004/07/23 13:39:20:00:000 (as SYSTEMTIME)
Int DaylightSavingOffestMinutes; = 60 (1 hour * 60 Minutes)
} RILNITZINFO, *LP RILNITZINFO;
The dwparams field indicates that the dwNotificationCode, TimeZoneOffsetMinutes and SysTime members contain valid data.
NITZ and Real Time Clock Synchronization at First Boot
When you first boot your device, the Kernel Loader will load the default date of 01/01/03 and start the device's internal clock, activating its tick counter. The real-time clock updates the time according to the logic implemented by the driver. Typically, the time is set to a date that is later and more recent than the default by several years, at least.
If the RIL in your device posts a NITZ that is time-stamped with the initial date of 01/01/03, and is processed after the real-time clock had updated system time to year 2007 or later, then that NITZ will be considered obsolete and will be ignored. To allow the use of this NITZ value, its posting must be delayed after the first boot until the Home Screen has been loaded. Three methods for accomplishing this are detailed below, and will work on both the first and any subsequent boot.
- Implement a one-time application to request a fresh NITZ acquisition. Some networks may not support this method.
- Preserve the NITZ packet in temporary or persistent storage, with an incremental time stamp, such as GetTickCount. When it is entered into the registry, its value is kept current by the added tick count between its reception and posting.
- Start the driver for the real-time clock before starting the RIL driver. This is the recommended approach, because the system clock will be updated with a current and persistent value early in the boot process and the clock itself only requires the BUS driver to function.
Note
You must not wait for an external event directly in the RIL layer. This might cause the system to hang at boot time.