Previous Next

IrDA Objects

This section describes the OIDs used to query and set the operational characteristics of IrDA (infrared) miniport drivers and/or their NICs. Note that an IrDA miniport driver handles query requests in its MiniportQueryInformation function and set requests in its MiniportSetInformation function.

The IrDA OIDs are defined in ntddndis.h. When building a driver that supports these OIDs, include ntddndis.h.

Length Q S Name
4 O   OID_IRDA_EXTRA_RCV_BOFS

Requests the number of extra Beginning of Frame (BOF) flags required by the NIC's transceiver to synchronize on a receive packet.

4 M M OID_IRDA_LINK_SPEED

If set, requests the miniport driver to set the transmission speed of outgoing frames and possibly to control the speed at which incoming frames are received. If queried, requests the miniport driver to return the current speed at which it transmits outgoing frames or accepts incoming frames.

4 O   OID_IRDA_MAX_RECEIVE_WINDOW_SIZE

Requests the maximum number of incoming frames that the miniport driver's NIC can handle at one time. This number is the maximum receive window size.

4 O   OID_IRDA_MAX_SEND_WINDOW_SIZE

Requests the maximum number of outgoing frames that the miniport driver's NIC can handle at one time. This number is the maximum send window size. The infrared link access protocol (IrLAP) uses this number to limit the number of frames it transmits at one time.

4 O   OID_IRDA_MAX_UNICAST_LIST_SIZE

Requests the maximum number of entries in the miniport driver's UNICAST list, which is a list of devices from which to accept frames. Supported only by Win9x IrDA miniport drivers.

4 M M OID_IRDA_MEDIA_BUSY

If set, requests the miniport driver to monitor for the media-busy condition. If queried, requests the miniport driver to determine if media is currently busy.

4 O O OID_IRDA_RATE_SNIFF

If set, requests the miniport driver to accept frames that are transmitted at any speed. If queried, requests the miniport driver to return its current receive speed. Supported only by Win9x IrDA miniport drivers.

4 O   OID_IRDA_REACQUIRE_HW_RESOURCES

Requests the miniport driver to begin operating with hardware resources that were specified during its initialization. Supported only by Win9x IrDA miniport drivers.

4 M   OID_IRDA_RECEIVING

Requests the miniport driver to indicate whether it is currently receiving a packet. Supported only by Win9x IrDA miniport drivers.

4 O   OID_IRDA_RELEASE_HW_RESOURCES

Requests the miniport driver to release the use of its hardware resources. Supported only by Win9x IrDA miniport drivers.

Arr(4) M   OID_IRDA_SUPPORTED_SPEEDS

Requests the supported speeds at which the miniport driver can transmit outgoing frames and receive incoming frames. IrLAP sets link speed using OID_IRDA_LINK_SPEED with one of the returned values before transmitting packets.

4 M   OID_IRDA_TURNAROUND_TIME

Requests the turnaround time of the NIC's infrared transceiver.

Arr(4) O O OID_IRDA_UNICAST_LIST

If set, requests the miniport driver to only accept frames from addresses of devices in a specified list. If queried, requests the miniport driver to return its current list of devices from which to accept frames. Supported only by Win9x IrDA miniport drivers.


The following topics describe the OIDs that are used to query and set the operational characteristics of IrDA (infrared) miniport drivers and/or their NICs.

OID_IRDA_EXTRA_RCV_BOFS

The OID_IRDA_EXTRA_RCV_BOFS OID is optional for some IrDA miniport drivers. Only IrDA miniport drivers that manage NICs that support link speeds from 2400 bps through 115.2 Kbps (SIR encoding speeds) must support this OID.

The infrared signal itself is sometimes used to establish the timing for the reception of frames. The time required to synchronize with the infrared signal can vary according the type of transceiver hardware. Typically, synchronization is established while a transceiver is receiving Beginning of Frame (BOF) flags. More than one BOF flag may be required in a frame to establish synchronization.

At SIR encoding speeds, sometimes a remote infrared transceiver adds extra BOFs to a frame so that the local infrared transceiver receives the frame properly. The IrDA protocol driver queries OID_IRDA_EXTRA_RCV_BOFS to determine how many extra BOFs the NIC's transceiver requires to synchronize on an incoming frame. During negotiation with a remote station, the IrDA protocol driver communicates this value to the remote transceiver so that the remote transceiver adds the correct number of extra BOFs to each frame that it sends to the local NIC's transceiver.

The OID_IRDA_EXTRA_RCV_BOFS value applies to a frame transmitted at 115.2 Kbps. The extra BOFs required for frames transmitted at slower speeds are scaled from that value. The following table indicates, for a given OID_IRDA_EXTRA_RCV_BOFS value, the derived BOF values for link speeds less than 115.2 Kbps.

Speed Extra BOFs
2400 1 0 0 0 0 0 0 0
9600 4 2 1 0 0 0 0 0
19200 8 4 2 1 0 0 0 0
38400 16 8 4 2 1 0 0 0
57600 24 12 6 3 1 1 0 0
115200 48 24 12 6 3 2 1 0

To determine the OID_IRDA_EXTRA_RCV_BOFS value that a miniport driver should indicate to the IrDA protocol:

  1. Find a link speed supported by the NIC's transceiver in the left-most column.
  2. In that row, find the required number of BOFs for the transceiver at that speed.
  3. Go down that column to the row for 115.2 Kbps. The number of BOFs indicated for 115.2 Kbps is the number of BOFs that the miniport driver should indicate to the IrDA protocol.

For example, if the NIC's transceiver requires 8 extra BOFs at 38400 baud, the miniport driver should indicate an OID_IRDA_EXTRA_RCV_BOFS value of 24 to the IrDA protocol.

If the number of extra BOFs required by the NIC's transceiver is between two values in a table row, choose the higher value. For example, if the transceiver requires 8 extra BOFs at 57600 bps, choose 12 instead of 6 in the row for 57600 bps. In this case, the miniport driver should indicate an OID_IRDA_EXTRA_RCV_BOFS value of 24, which is the corresponding number of extra BOFs required for a receiving a frame at 115.2 Kbps.

Note that extra BOFs are never required for frames transmitted at speeds above 115.2 Kbps.

During negotiation with a remote transceiver, the IrDA protocol also determines the extra number of BOFs required by the remote transceiver. For each packet that it sends to the miniport driver for transmission, the IrDA protocol specifies, as out-of-band data, the extra number of receive BOFs that the miniport driver must add to the beginning of the packet. (For more information, see NDIS_PACKET_OOB_DATA). The miniport driver must add the specified number of extra BOFs to the packet before transmitting it.

OID_IRDA_LINK_SPEED

The OID_IRDA_LINK_SPEED OID specifies the link speed of the NIC's transceiver. Link speed indicates the speed that outgoing frames are transmitted and possibly the speed that incoming frames are received. For information on how to set OID_IRDA_LINK_SPEED to control the speed of incoming frames, see the description of OID_IRDA_RATE_SNIFF. Link speed is set to one of the speeds returned by the miniport driver in response to a previous query of OID_IRDA_SUPPORTED_SPEEDS. The link speed is specified in bits per second (bps).

The specified link speed applies to all frames subsequently transmitted by the miniport driver. The miniport driver may still have frames to transmit at the old link speed (the link speed in effect before the set of OID_IRDA_LINK_SPEED). The miniport driver should transmit these frames at the old link speed. The link speed specified by OID_IRDA_LINK_SPEED applies only to frames sent after the miniport driver is notified of the new link speed.

After the miniport driver starts, it must assume a link speed of 9,600 bps, regardless of the value in OID_IRDA_LINK_SPEED.

OID_IRDA_MAX_RECEIVE_WINDOW_SIZE

The OID_IRDA_MAX_RECEIVE_WINDOW_SIZE OID is optional for IrDA miniport drivers.

This OID requests the maximum number of incoming frames that the miniport driver's NIC can handle at one time. This number is the maximum receive window size. IrLAP is limited by this number when it negotiates with a remote station for the number of frames the remote station will transmit to the miniport driver. The miniport driver typically uses this OID as a patch for hardware that cannot keep up with the infrared signal over a full-sized window of 7 frames. The valid values for this OID are 1-7.

OID_IRDA_MAX_SEND_WINDOW_SIZE

The OID_IRDA_MAX_SEND_WINDOW_SIZE OID is optional for IrDA miniport drivers.

This OID requests the maximum number of outgoing frames that the miniport driver's NIC can handle at one time. This number is the maximum send window size. IrLAP uses this number to limit the number of frames it transmits at one time. The miniport driver typically uses this OID as a patch for hardware that cannot keep up with the infrared signal over a full-sized window of 7 frames. The valid values for this OID are 1-7.

OID_IRDA_MAX_UNICAST_LIST_SIZE

The OID_IRDA_MAX_UNICAST_LIST_SIZE OID is optional for most IrDA miniport drivers. Only Windows® 95/98/Me IrDA miniport drivers that maintain a UNICAST list must support this OID.

This OID requests the maximum number of entries in the miniport driver's UNICAST list. A UNICAST list is a list of the miniport driver's devices from which the miniport driver accepts frames. For more information, see the description of OID_IRDA_UNICAST_LIST.

OID_IRDA_MEDIA_BUSY

The OID_IRDA_MEDIA_BUSY OID requests information about whether the media is busy—that is, whether the miniport driver detects packet traffic.

For a set, the miniport driver can start to monitor the media for a busy condition. IrLAP sets the value of OID_IRDA_MEDIA_BUSY to zero to inform the miniport driver to monitor for a media-busy condition. If the miniport driver detects infrared traffic of any kind, it must:

After the value of OID_IRDA_MEDIA_BUSY is set to nonzero, the miniport driver does not monitor the media for a busy condition again until IrLAP resets OID_IRDA_MEDIA_BUSY to zero.

For a query, the miniport driver determines if media is currently busy. The miniport driver returns a zero value if the media is not busy. The miniport driver returns a nonzero value if the it detects packet traffic.

OID_IRDA_RATE_SNIFF

The OID_IRDA_RATE_SNIFF OID is optional for most IrDA miniport drivers. Only Windows® 95/98/Me IrDA miniport drivers that can accept infrared frames dynamically at any speed must support this OID.

For a set, this OID requests the miniport driver to accept frames transmitted at any speed. If OID_IRDA_RATE_SNIFF has a zero value, the miniport driver should only accept frames transmitted at the speed indicated in OID_IRDA_LINK_SPEED, as set by IrLAP. If OID_IRDA_RATE_SNIFF has a nonzero value, an additional speed parameter must be maintained by the driver. This speed parameter is known as the current receive speed. The miniport driver calls the NdisMIndicateStatus function to indicate a change in its receive speed to IrLAP. In this call, the miniport driver passes NDIS_STATUS_LINK_SPEED_CHANGE in the GeneralStatus parameter and the DWORD for the new speed at which frames are received in the StatusBuffer parameter. After the miniport driver indicates the new receive speed, it does not call NdisMIndicateStatus again until frames arrive at a different speed.

For a query, this OID requests the miniport driver to return its current receive speed.

OID_IRDA_REACQUIRE_HW_RESOURCES

The OID_IRDA_REACQUIRE_HW_RESOURCES OID is optional for IrDA miniport drivers and is supported only by Windows® 95/98/Me IrDA miniport drivers.

This OID requests the miniport driver to begin operating with hardware resources that the miniport driver specifies. After the miniport driver receives this request, it should not make any assumptions about the operating state of its NIC.

The miniport driver should not fail its MiniportInitialize routine solely because it cannot read its configuration. The miniport driver should instead return success and should wait for this request. During initialization, the miniport driver must perform all required initialization other than acquiring its hardware resources.

If the miniport driver is already operating, that is, it already has acquired resources, it should continue using those resources and return NDIS_STATUS_FAILURE for this request.

OID_IRDA_RECEIVING

The OID_IRDA_RECEIVING OID is supported only by Windows® 95/98/Me IrDA miniport drivers.

This OID requests the miniport driver to indicate whether it is currently receiving a frame. If the miniport driver is not currently receiving a frame, it returns a zero to a query of this OID. If the miniport driver is currently receiving a frame, it returns a nonzero value to a query of this OID.

OID_IRDA_RELEASE_HW_RESOURCES

The OID_IRDA_RELEASE_HW_RESOURCES OID is optional for IrDA miniport drivers and is supported only by Windows® 95/98/Me IrDA miniport drivers.

This OID requests the miniport driver to release the use of its hardware resources.

It is the responsibility of the protocol to ensure that there are no outstanding requests or sends to the miniport driver before sending this request. After the protocol sends this request, the miniport driver releases any hardware resources associated with the infrared port and assigns the information to a reply buffer. The miniport driver might also optionally assign a list of hardware ID and compatible identifiers in a PNPID member of the reply buffer. The format of this PNPID member should be a NULL terminated string. For example, a FIR miniport driver that has SHP0001 as an identifier and that also supports running as a COM port might return "SHP0001,*PNP0511" in the PNPID member of the reply buffer.

If the miniport driver has a 16550 compatible mode of operation, it must leave its infrared transceiver in that mode as a result of this request.

If the miniport driver is not operating, that is, it has not already acquired resources, it should return NDIS_STATUS_FAILURE for this request.

OID_IRDA_SUPPORTED_SPEEDS

The OID_IRDA_SUPPORTED_SPEEDS OID requests the miniport driver to return the link speeds that it supports. In response, the miniport driver returns an array of DWORDS, each of which indicates a supported speed at which the miniport driver can transmit outgoing frames and receive incoming frames. IrLAP sets OID_IRDA_LINK_SPEED to one of the supported values before passing send packets to the miniport driver.

OID_IRDA_TURNAROUND_TIME

The OID_IRDA_TURNAROUND_TIME OID requests the miniport driver to return the turnaround time (in microseconds) of its NIC's transceiver. Turnaround time is the time required for the transceiver to recover from a saturated state as the result of transmitting a bit. After the turnaround time has elapsed, the local transceiver can receive a bit transmitted by the remote transceiver.

IrLAP supplies the minimum turnaround time of the local NIC's transceiver to the remote station. After receiving a transmission from the local NIC's transceiver, the transceiver of the remote station must wait the specified minimum turnaround around time before starting a transmission.

OID_IRDA_UNICAST_LIST

The OID_IRDA_UNICAST_LIST OID is optional for most IrDA miniport drivers. Only Windows® 95/98/Me IrDA miniport drivers that maintain a UNICAST list must support this OID.

This OID requests the miniport driver to set or retrieve information in a UNICAST list. A UNICAST list is a list of the miniport driver's devices from which the miniport driver accepts frames. If the miniport driver does not support UNICAST filtering in hardware, it should not support this OID; IrLAP then performs the filtering.

For a set, this OID requests the miniport driver to only accept frames from addresses of devices in the specified UNICAST list.

For a query, this OID requests the miniport driver to return its current list of devices from which to accept frames.

If the UNICAST list is not set or contains zero elements, the miniport driver must accept all valid infrared frames. Because the size of an IrLAP media address is seven bits, the least-significant seven bits of each item in the UNICAST list specifies the address of a device. All other bits are set to zero. If IrLAP attempts to set one or more items in the UNICAST list to values greater than 0x7f, the miniport driver must not use any values in the UNICAST list.