Share via


Network Identity and Time Zone (NITZ) Support

A version of this page is also available for

Windows Embedded CE 6.0 R3

4/8/2010

Support is provided for receiving Network Identity and Time Zone information. Your radio module must be able to receive 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 about RIL_NOTIFY_NITZ, see Notification Miscellaneous Constants.

Note

Your code must not call SetSystemTime or SetLocalTime between the time that the RIL driver sends a RIL_NOTIFY_NITZ notification and the Windows Mobile operating system (OS) processes the notification. This could cause a race condition between the time requests and the RIL driver's NITZ information might not be processed.

Example

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)

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 is loaded. Three methods for doing this are described 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, such as waiting for the Home Screen to load completely. This might cause the system to hang at boot time and never load the Home Screen.

See Also

Reference

Concepts

RIL Driver