HP Forums

Full Version: How a HP-IL peripheral signals "no more data"
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I am writting a IL peripheral for ILPER (just to learn how it works), and I am facing witn the following problem:

When the peripheral is requested to return data (ENTER [71/75] or INA [41]), if it sends an EOT, this works on 41, but not on the 71/75 who sends indefintelly a SDA command (the device returns EOT Tongue ).
I read in "The HP-IL System" book that a end-Byte exists (0x01xxxxxxxxx). If I use it, its works on 71/75 (but ENTER n;A$ will clear A$), and not on 41; this raises a TRANSMIT ERR.
So my question is: what the good way for peripheral to answer that there is no data available on reading ?
I assume that the functions SPOLL() could be used for checking this (I have implemented a status bit set if data are still available), but, on a simple 75C or 41C, the function does not exists... (INSTAT can do the job and it is present inside the HP82160A module).
What is the best usage to read data with HP-IL peripherals ?

Sorry for my question of "newbie" Smile

Thanks a lot for your help.

So, I have tried with a HP82164A (I have no serial wire, so I cannot send/recv anything on the serial port), and the results are:
  • On 41C, I did a INA; the SDA is answered by a EOT. The ALPHA register is cleared and the hand is back,
  • On 71B/75C, I did a ENTER ':I1';S$; the SDA is answered by EOT, but the cycle continues indefinitelly: SDA EOT SDA EOT SDA EOT ... and I need to push the ATTN/ON button on the both computer to get the hand back.

This is funny to discover that Coconut does not have the same behavior than its big brothers Smile
In fact, for the 75C, the following line needs to be entered to have a behavior like the 41C and accept the EOT as "no more data": ENTER ':i2' USING '!#%,K' ; E$ (75 IO Rom manual at page 26).
For the 71B, this is directed by the flag -23. If set, the EOT is accepted as "no more data".
This is definitively not a question of "newbie" !

To keep it simple: generally the right way for a device to signal no (or no more) data available is to reply with EOT (End of Transmission).
Then, it's up to the controller to decide what to do: if the controller is happy with this reply, the transaction is over (the 41C acts in this way), or if the controller explicitly needs a end of data terminator such as CR/LF, the controller may retry with a new SDA (Send Data).

The HP71B can act in both ways: by default it will do SDA reties until a termination condition is met (CR/LF, END byte or number of bytes), but can also end the transaction like the 41C when an EOT is received, if the flag -23 is set.

Both ways have con and pro: in the one case, the transfer never hangs but may be incomplete and require a new explicit transfer retry; in the other case, the transfer will automatically continue until completion but may hang if the device never send the requested data.

Reference URL's