ASYNC TRANSMITIMM

From EDM2
Revision as of 21:36, 26 March 2020 by Martini (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

This function transmits byte immediate.

Category
IOCTL_ASYNC (01h)
Function
ASYNC_TRANSMITIMM (44h)

Parameter Packet Format

┌──────────────────────────────────────────────────────┐
│Field                          Length     C Datatype  │
├──────────────────────────────────────────────────────┤
│Character to be Transmitted    BYTE       UCHAR       │
└──────────────────────────────────────────────────────┘

Data Packet Format

None. Packet pointer must be NULL.

Returns

If the call is made with an invalid Data Packet pointer or if there is already another character waiting to be transmitted immediately due to a previous Function 44h request that has not been fulfilled, then a general failure error is reported and this request is ignored. A Transmit Immediate request is considered fulfilled when the character is given to the transmit hardware.

Remarks

If a general failure is not returned, the physical device driver immediately transmits the byte contained in the Parameter Packet subject to the following conditions:

  • If data in the transmit queue is currently being transmitted or waiting to be transmitted, the character to be transmitted immediately is placed at the logical front of the physical device driver transmit queue (not considered in the transmit queue), so that it is the next character to be given to the transmit hardware. If Automatic Receive Flow Control is enabled, then an XON or XOFF character can be placed ahead of the character to be transmitted immediately.
  • This request is always completed immediately (before the character is actually transmitted) even if the character might not be immediately transmitted. If there already is one character waiting to transmit immediately (based on a previous request), then a general failure error is returned. The application must make this request again after there is no character (waiting to transmit immediately) in the device driver transmit queue. ASYNC_GETCOMMSTATUS can be used to determine whether a character is currently waiting to be transmitted immediately.
  • The physical device driver does not immediately transmit the character (waiting to transmit immediately) if the physical device driver is not transmitting characters because of modem control signal output handshaking (see ASYNC_SETDCBINFO) or if the physical device driver is currently transmitting a break.
  • If the physical device driver is not transmitting characters because of Automatic Transmit or Receive Flow Control (XON/XOFF) is enabled, or because it was asked to operate as if an XOFF character had been received (see ASYNC_STOPTRANSMIT), then the physical device driver still transmits a character that is waiting to be transmitted immediately due to this request.
Warning
: If Automatic Transmit or Receive Flow Control is enabled, an application may or may not request that the device driver transmit a character immediately. Otherwise, unexpected results can occur.
  • The Transmit Byte Immediate IOCtl is generally used to manually send XON and XOFF characters.
  • The character waiting to be transmitted immediately is not considered part of the physical device driver transmit queue and is not flushed as a flush request. XON/XOFF characters that are automatically transmitted as the result of Automatic Receive Flow Control might be placed ahead of the character waiting to be transmitted immediately. Applications should not have dependencies on this ordering.
  • If the serial port controller fully supports Extended Hardware Buffering capabilities and the physical device driver is set with Extended Hardware Buffering enabled, then calling this function results in temporarily setting the Transmit Buffer Load Count to 1 (to load the transmit immediate byte). If the physical device driver conditions allow data to be transmitted, then the byte is sent and the device driver then resumes operations with the previously prevailing Transmit Buffer Load Count (as determined by Function 53h).