因此,本发明的目的是提供双向并行系统。
本发明的另一目的是提供可利用现有PC并行口硬件和电缆的系统。
本发明的又一目的是提供具有主计算机和打印机部分的系统,当配备系统的主计算机或打印机连接到未配备系统的打印机或主计算机时这些部分不中断单向传输。
本发明还有一目的是提供对直接驱动并行口的非运转软件透明的系统。
本发明的再一目的是提供其中主计算机能快速而有效地轮询打印机以看是否存在任何待读数据的系统。
本发明的另一目的是提供不对主计算机施加实时限制的系统。
本发明还有一目的是提供坚固可扩展的系统。
本发明通过经并行接口提供在主计算机与打印机之间有双向通信能力的系统克服了现有技术的缺点和不足。
本发明提供了一种双向计算机和打印机通信系统,包括:
一个正向通信通道和一个控制通道,正向通信通道包含主计算机与所述打印机之间的数据线和状态线,用以在所述主计算机与所述打印机之间传输信号,而控制通道用以在所述计算机与所述打印机之间传输多个控制信号;
用于使所述正向通道转向以便建立反向通道工作以允许从所述打印机到所述主计算机经所述状态线传输数据的装置;
用于控制所述反向通道上从所述打印机到所述主计算机的所述数据传输的装置,其中所述主计算机包含向所述打印机发送信号以请求数据包的装置,而所述打印机包含响应所述请求信号以向主计算机发送指明现用数据包的信号的装置,以及所述主计算机依据该指示信号从状态线中读出所述数据包;和
用于使所述反向通道反转回以重建所述正向通道的装置。
在本发明实施例中,限定由主计算机启动使反向通道转向的装置。在这些实施例以及本发明的其它实施例中,使反向通道反转回来以重建反向通道的装置也限定为由主计算机启动。
在本发明的某些实施例中,正向通道包括在反向通道操作期间用于在打印机与主计算机之间传输数据的状态线。
此外,按照本发明的教导,正向通道可以是在反向通道操作期间用于在打印机与主计算机之间传递控制和状态信息的输入/输出控制通道。
在本发明的实施例中,用于使正向通道转向的装置是主计算机升高有源低第一控制信号(*SLCTin)的装置和打印机降低有源高状态信号(SLCT)的装置。
再有,按照本发明的教导,用于控制数据传输的装置可以是使主计算机请求数据包的装置、使打印机在状态线上指出数据包的装置、以及使主计算机从状态线上读出数据包的装置。在本发明的这些实施例中,数据包可以是半字节数据,主计算机请求半字节数据的装置可以包含一有源低第二控制信号(*STROBE(选通)),打印机在状态线上指出半字节数据的装置可以包含一SLCT信号。在这些实施例中,可通过降低的*STROBE(选通)信号请求低的半字节数据,而通过升高的SLCT信号指出其有待传输;而且,可通过升高的*STROBE信号请求高的半字节数据,并可通过降低的SLCT信号指出其有待传输。
本发明的实施例还包括打印机向主计算机指出有多少数据字节有待于从打印机传输到该主计算机的装置。可设计该装置响应被升高的*SLCTin信号并在SLCT被降低之前起作用。
本发明还通过经并行接口提供主计算机与打印机之间有双向通信能力的方法来克服现有技术的缺点和不足。
本发明提供了一种在并行接口上提供主计算机与打印机之间的双向通信能力的方法,所述主计算机和所述打印机之间具有从所述主计算机到所述打印机传输信号的正向通信通道,该正向通道包含数据线和状态线,其中状态线用于在一反向通道工作期间在所述打印机与所述主计算机之间传输数据,所述方法包括以下步骤:
使所述正向通道转向以便建立反向通道以允许经所述状态线从所述打印机向所述主计算机传输数据;
控制经所述反向通道从所述打印机向所述主计算机的所述数据的传输,其中所述主计算机启动与所述打印机的对话并请求一数据包,所述打印机指出状态线上的数据包,而由所述主计算机从该状态线上读出此数据包;和
使所述反向通道反转回以重建所述正向通道。
在本发明方法的实施例中,可由主计算机启动通道反转步骤之一或二者。
按照本发明,正向通道可包括在反向通道操作期间可用于在打印机与主计算机之间传输数据的状态线。另外,按照本发明,正向通道可以是在反向通道操作期间可用于在打印机与主计算机之间传递控制和状态信息的输入/输出控制通道。
在本发明方法的实施例中,使正向通道转向的步骤可包括主计算机升高*SLCTin信号的步骤和打印机降低SLCT信号的步骤。
再有,按照本发明的教导,控制数据传输的步骤可包括主计算机请求数据包的步骤、打印机在状态线上指出数据包的步骤、以及主计算机从状态线读出数据包的步骤。在本发明方法的这些实施例中,数据包可以是半字节数据。而且,在本发明的方法的这些实施例中,主计算机请求半字节数据的步骤可包含一*STROBE(选通)信号。另外,在本发明方法的这些实施例中打印机指出半字节数据在状态线上的步骤可包含SLCT信号。在上述实施例中,可通过降低的*STROBE(选通)信号请求“低”半字节数据,而通过升高的SLCT信号指出其有待传输;而且,可通过升高的*STROBE信号请求“高”半字节数据并可通过降低的SLCT信号指出其有待传输。
本发明的实施例还可包括打印机向主计算机指出有多少数据字节可从打印机传输到该主计算机的步骤。在本发明方法的这些实施例中,该步骤可在*SLCTin信号升高而SLCT信号降低之前进行。
本发明的其它目的,优点和新特征由以下结合附图的详述将变得更为明显,附图中:
现在参见附图,其中相同或类似元件在这些视图中均以相同标号表示,更具体地是参见图1,其中所示是至此开发的并行打印机适配器。该图1清楚地示出了对本发明的结构和实施重要的一些细节。
首先,特别参见图1,可注意到并行口是计算机的最普通部件之一。这一并行口有四个不同部分:地址译码部分,写逻辑部分,物理输入/输出部分,以及输入/输出至总线的传输部分。通常,并行口的操作如下。
首先,当一特定地址在总线4上时启动地址译码部分2。写逻辑部分6读取总线4上的数据并将它供给物理输入/输出部分8。输入/输出到总线传输部分使在被请求时输入/输出的数据对总线有效。
四地址与
10R或
10W总线线路10、12一起启动并行口。10R和
10W总线线路12、14表示总线上正进行端口输入或输出操作。因为正常存储器读和写不置位与这些线路相关联的引脚,整个卡忽略这些类型的操作。
导线的各种组合允许写和读DB-25接插件14上的状态和数据线。
现参见图2,此处以方块图形式示出了PC并行口接口的硬件和电缆。可看到该接口具有三个寄存器,它们均直接由软件管理。这三个寄存器是数据寄存器24,状态寄存器26,以及控制寄存器28。以下紧接着以各段讨论这三个寄存器24、26、28中的每一个。
数据寄存器24是仅供输出用的8位读/写锁存器。可读该锁存器以确定最近写入它的数据。尽管已提出一些方案让该锁存器用作输入,但这些方案最好也不过是不可靠,最坏情况是硬件毁坏。
状态寄存器26实际上不是一寄存器,而是一未锁完的输入口。术语“状态寄存器”在此是用于防止与术语“端口”的混淆。“读状态寄存器”在此应理解为表示获取状态线的实时样值。
控制寄存器28类似于数据寄存器24,它也是仅用作输出的读/写锁存器。在寄存器28上部的三个未使用位习惯上读作1,但应作为0写回。这防止对利用位5的某些较新的执行过程的误动作。位4实际上不是打印机控制线,它用来允许/禁止中断。
状态和控制线的极性可能是主要混淆。更糟的是,某些线路在该接口反向。良好的命名约定可为操作者节省大量时间并省去麻烦。
有效低信号是由低电压而不是高电压表示的状态。我们假定*ACK信号是有效低的,因为该线上的低电压表示来自打印机的认可。星号(*)是该命名的部分,并用于提醒该信号为有效低。
PC并行口接口使BUSY(忙)信号反向并使所得结果作为状态寄存器26的位7。我们将该位称为~BUSY。否定号(~)表示该信号相对于电缆反相。~*STROBE,~*AUTOLF,以及~*SLCTin信号均是有效低并相对于电缆反相。
应理解某些信号能以一种以上的方式加以引用。例如,说*SLCTin下降相当于说~*SLCTin上升。该协议的讨论通常在信号出现在电缆上时而不是当它出现在PC接口上时加以引用。
混淆的另一可能原因是电缆本身,简单地是因为在图2所示实例中它在PC端具有DB-25插头,而在打印机端具有一Centronics 36-脚插头。例如,标记“引脚K”是含糊的,因为该接插件不是一一对应的。因此,图2是对PC并行口的程序员快速参考指南。它示出了与两接插件引脚号连接的电缆,与导线相关联的信号名称,可由PC访问的寄存器,以及与该接口相连的反相器。
有了以上基础,现详细讨论按照本发明的协议。由于将会变得显而易见的原因,可将该协议称之为“半字节模式反转通道协议”。
通常,数据从主机到打印机的传输通过正向通道来完成。按照本发明的双向协议建立将数据从打印机传输到该主机的反向通道。
正向通道上一次传送一个字节,每字节独立传输。该反向通道是面向对话的;可以单次对话传输任何数量的字节(0与16384之间)。
该对话具有打开序列和关闭序列以达到改变通道方向,即“使通道转向”的目的。这是必要的,因为这两个通道共享其含意取决于有效通道的某些信号。在电缆中不存在足够的信号允许两通道同时有效。图3示出了反向通道协议。
参见图3,可看出主机通过将十六进制01h字节写入数据线启动该对话,然后提高(去激励)*SLCTin信号。01h字节表示通信模式号数。通令模式号数在下文作更为详细的讨论。
打印机通过将半字节数据、循环控制提示置于状态线上然后降低SLCT来响应前述操作。当主机看到SLCT下降,它便读状态线以获得循环控制提示。这也在下面作进一步讨论。该对话现在被打开。
按照本发明的协议中的下一组操作可称为“数据传输循环操作”。在该循环中主机降低*STROBE(选通)以请求一字节的低半字节。当SLCT变高时,主机可从状态线读出该半字节。在图3所示实例中,~BUSY是位3,*ACK是位2,PE是位1,及*ERR是位0。
其次,主机升高*STROBE以请求该字节的高半字节。当SLCT变为低时,主机可从状态线读出这半字节。在图3所示实例中,~BUSY是位7,*ACK是位6,PE是位5,以及*ERR是位4。
相对于循环控制提示,其在前面已简短提到,在开始序列期间,主机从状态线读循环控制提示(在该实例中,~BUSY是位3,*ACK是位2,PE是位1,以及*ERR是位0)。循环控制提示是一四位无符号整数,其设立了能在在新近打开对话中传输的字节数的上限。
如果循环控制提示是0h,则打印机无数据要传送,且主机有责任关闭该对话而不打算传输任何数据。
如果循控制提示不是0h,则以2自乘的幂(循环控制提示-1)计算循环控制极限。下表列出了所有可能组合:
循环控制提示 循环控制极限(字节)
0h 0
1h 1
2h 2
3h 4
4h 8
5h 16
6h 32
7h 64
8h 128
9h 256
Ah 512
Bh 1024(IKB)
Ch 2048(2KB)
DH 4096(4KB)
Eh 8192(8KB)
Fh 16384(16KB)
主机无责任读出所有可用字节。主机可读从0到循环控制极限的任何数量字节。如果主机读到高达该极限,它必须关闭该对话。如果主机仍想要更多数据,它可立即打开另一对话。可能存在或不存在更多的可用数据。
作为一个实例,假定主机想要读80字节的数据。一旦打开对话,主机接收循环控制提示7h,表示它可读不超过64字节。主机读这64个字节,关闭对话,然后打开另一对话。假定这时循环控制提示是6h,表示32个字节是可用的。主机则读16个字节(总共是80)再关闭该对话。
图3所示下一组即最底部的操作涉及关闭对话。当它已读字节数高达循环控制极限时或当它已具有它想要的所有字节时,无论哪一情况先出现,主机的责任是关闭该对话。
主机通过降低*SLCTin,然后等待SLCT变为高关闭对话。主机必须等待SLCT指出状态线此时携带状态信息而非数据。
顺带说来相对于该实例在此提出的半字节模式反向通道协议,应注意到尽管多数打印机每当它们因任何原因变为脱机时降低SLCT,如果打印机将支持在些给出的该实例协议,它不必展现该行为。SLCT信号必须完全用于该协议,而不必用于其它任何事情。当打印机脱机时,它应升高BUSY以防止主机发送数据。
在此适当讨论的涉及本发明的另一主题是协议超时误差。在该协议中有许多地方主机必须无限等待直到信号转变。在这些循环中,可设置定时器来防止暂停。建议的超时周期对等待来自打印机的信号转变的每个循环为2秒。这应给打印机充裕时间以响应,但如果打印机根本不支持该协议则允许迅速通知用户。
如果当该对话打开时主机方面的等待循环超时,主机应努力关闭该对话。如果在关闭对话的同时出现超时,则主机可(用*INIT脉冲)复位打印机以废弃该对话。一旦收到该信号,打印机可能或不可能采取更为激烈的行为,例如取消当前工作。主机在发送*INIT脉冲之前应总是确认*SLCTin为低(有效);如果在*INIT脉冲之后*SLCTin为高,打印机将认为主机试图打开新对话。当反向通道对话仍打开时主机不应试图发送数据。
现在,相对于主机软件,下面给出一些80×86汇编代码段以辅助主机方面驱动器软件的设备。这此代码段不是作为协议说明的部分,而仅打算用来在明显的解决途径可能非常低效的位置提供有效而不太明显的解决途径。
这里给出的第一段涉及读低半字节。当PC读状态寄存器以获得数据的低半字节时,位处于错误次序下。该代码段将这些位正确排序。;;输入:AL具有状态寄存器的内容。数据位为错误次序。数据位b3在; 寄存器的位7,b2在位6,b1在位5,及b0在位3。位4中将总; 是1,因为当读低半字节时,SLCT线为高。; 因此AL具有:[b3 b2 b1 1 b0 X X X];输出:AH具有带正确次序的位的下半字节,上半字节为0。; 因此AH将具有:[0 0 0 0 b3 b2 b1 b0]
Sub AL,08h;将b0移入位4(回想位4为1)
;现在有[b3 b2 b1 b0 X X X X]
shr AL,1;
shr AL,1
shr AL,1
shr AL,1
mov AH,AL;存在AH中供以后用。
此处给出的第二段涉及读高半字节。当PC从状态寄存器读高半字节时,位再次为错误次序。该代码段将它们正确排序并将高半字节与低半字节组合。;;输入:AL为状态寄存器的内容。数据位为错误的次序。数据的位b7
在寄存器的位7,b6在位6,b5在位5,及b4在位3。位4总是0,
因为当读高半字节时,SLCT线为低。; 因此AL为[b7 b6 b5 0 b4 X X X];; AH应具有低半字节:[0 0 0 0 b3 b2 b1 b0];;输出:AL将具有所有位正确排序的字节。; add AL,08h;将b4移入位4(回想b4为0)
;现在具有[b7 b6 b5 b4 X X X X]
and AL,1111 0000b;屏蔽掉无意义的位
or AL,AH;组合半字节以形成完整字节。
第三代码段利用循环控制提示和主机想要的字节数计算待读的字节数。;;输入:BX具有主机想要读的最大字节数。(由主机施加的限制)。;; 在传输循环控制提示时AL具有状态寄存器的值。因为SLCT为; 低,位4将为0。[b3 b2 b1 0 b0 X X X];;输出:CX将具有关闭该对话之前应传输的字节数。;; BX将具有该对话关闭以后主机仍需要的字节数。如BX非0,; 主机应打开另一对话并试图读更多字节。;
add AL,08h;我们现有[b3 b2 b1 b0 X X X X]
mov CL,4
shr AL,CL;现在具有[0 0 0 0 b3 b2 b1 b0]
;AL具有循环控制提示
dec AL ;读任何可用数据?
; 注意这时CX不是0。循环逻辑需要该信息。
js close-dialogue;如果无可用数据关闭对话
mov CL,AL;用循环控制提示作为偏移计数
mov AX,1;用一位计算2'(CL)
shl AX,CL;AX=2'(循环控制提示-1)
; AX具有循环控制极限
; 计算BX和循环控制极限(AX)的最小值
sub AX,BX;CY若BX>AX;AY具有增量
sbb CX,CX;0若无CY,全1若CY
and CX,AX;0或增量
add CX,BX;CX为最小
sab BX,CX;BX>=0
; CX具有传输循环的计数。用循环指令。
; BX具有该循环后主机缺少的字节数。
; 主机需要利用两个嵌套循环,一个用作实际数据传输,另一
;个用作获得足够数据所需的对话以满足主机,或直到对话表
;明不存在更多数据。
;该循环逻辑大约象这样进行:read-loop:
[这里为传输一字节的代码]
[保存CX和BX。]
loop read-loop
;注意这里CX为0…
;主机现在有责任关闭该对话。close-dialogue
[这里为关闭对话的代码。]
[保存CX和BX。]
;如果BX>0,打开另一对话并读更多数据。
or BX,BX
jz xfer-done;如果BX为0,主机满足。
; BX具有主机仍缺少的字节数
; 如果不存在更多可用数据CX为非零。
; 若CX为0,可能存在更多数据。
jcxz open-dialoguexfer-done:
;若BX为0,读出所需字节数。
;若BX>0,读出(N-BX)字节,如果N是所需要的字节数。
至此,仅已讨论了所谓半字节模式反向通道协议。如至此还指出的,半字节模式反向通道协议仅是为双向并行通信设计的一组协议之一。本文件中还公开了其它这种协议。
相对于前面讨论的协议,已指定下列四个通信模式号数:
模式号 协议
0 ID版本协议
1 半字节模式反向通道协议
2 IOCTL写模式
3 用半字节模式反向通道协议的IOCTL读剩余模式号4-255被认为保留供将来用。
相对于打开和关闭通信模式,每个通信模式以相同方式开始和结束。为了打开通信模式,主机将通信模式号置于数据线上然后升高*SLCTin信号。打印机通过降低SLCT信号认可该模式。自该点进行的所有通信必须按照规定协议。如果状态线从它们的标准含意改变,该变化将在SLCT信号下降之前发生。这允许根据通信模式多路传输状态线的含意。
为了关闭通信模式,主机降低并*SLLTin并等待打印机升高SLCT以指出它被关闭。状态线的含义在主机降低*SLCTin之后和打印机升高SLCT之前被恢复。主机在继续之前必须等待SLCT升高以防止可能的竞争状态。
下面描述在此称之为“ID版本协议”的按照本发明的另一协议。
由于双向并行协议是可扩展的,如果主机能判定打印机正使用哪一版本协议,或者如果打印机根本不支持该协议,它是有帮助的。ID版本协议提供该功能。
除了少数非常重要的差异,ID版本协议以与半字节模式反向通道并行协议完全相同的方式工作。首先,通信模式号是零(0)而非一(1)。因此主机必须将十六进制00h置于数据线上以开始。
读回的数据是不变的。循环控制提示始终是2h,因此循环控制极限总是2。总是正好存在两个字节供读出。第一字节为十六进制数5Ah。第二字节是协议的版本号。
要求打印机实现作为整体以版本号指定的协议。部分实现将是不确定的。
为了澄清否则可能模糊的观点:打印机可恢复1作为版本号并仅实现通信模式0和1,其中模式0是由描述该协议的文档版本指定的ID版本协议,而模式1是以相同文档版本规定的反向通道协议,因此保持了向上兼容性。为不具有IOCTL通道的未来打印机提供版本1鉴别。
现在适于较为详细讨论IOCTL通道,从讨议其目的开始。
通常主机系统软件最好或甚至必须向打印机询问详细状态信息,或发送结构命令。但是至打印机的数据流(通常来自不相关的应用程序)不能被非同步地注入它的新命令所中断。同样,主机软件不必为获得状态信息从为应用程序准备的打印机读出数据。为实现这一点,当系统软件需发送状态请求时打印机的数据缓冲器可能被充满。
IOCTL(I/O控制)通道提供用于与打印机通信的单独逻辑通道。该通道正如数据通道是双向的,因此信息可以双向传递。为该通道保留独立缓冲器因此即使当数据缓冲器饱和时仍能传输控制和状态信息。
由打印机定义IOCTL通道上传输的信息格式。实质上,IOCTL通道是用来传输控制和状态信息。一般它不用来发送页面描述或其它数据。数据通道更适于用作该目的。
为从IOCTL通道读出,主机利用与半字节模式反向通道协议正好相同的协议,除了通令模式号为3之外。因此为打开IOCTL通道供读出,主机首先将十六进制数03h置于数据线上并升高*SLCTin,正如在通信模式1下该对话继续。
该通道上读出的信息与用通信模式1读出的数据逻辑分离。如果不存在有待从反向(数据)通道读出的数据,其并非暗示关于是否存在有待从IOCTL通道读出的信息的任何事情。
为写入IOCTL通道,主机必须利用通信模式2。为开始该传输,主机在数据线上写入十六进制数02h,然后升高*SLCTin。然后打印机将IOCTL通道的状态放在该状态线上,并降低SLCT。当主机观察到SLCT变为低时,它得知状态线现在反映的是IOCTL通道而不是数据通道的状态。因此,即使数据通道忙,IOCTL通道或许不忙。
一旦通信模式2被打开,利用数据线BUSY、*STROBE、*ACK及其它状态线、以在数据通道上传输数据的正好相同方式从主机到打印机传输信息。
当将控制信息传输到打印机之后,主机必须关闭通信模式。主机降低*SLCTin而等待SLCT变为高。打印机恢复状态线以反映数据通道的状态,然后升高SLCT。当主机观察到SLCT变为高时完成关闭。
当写数据到IOCTL通道时,通常主机必须等待BUSY,正如标准约定。该等待不受以上相对半字节模式反向通道协议讨论的同样2秒超时限制。这里超时值任主机自行决定。如果主机无耐性继续等待BUSY信号并决定超时,主机首先应试图以正常方式关闭通信模式。
转移到新主题,支持并行打印机通信的标准BIOS INT 17h在功能上是非常有限的。提出下列扩充以允许软件利用新协议而无需重新实现它们。这些扩充仅作为实例提出,以方便有发现的实施而不对其加以限制。
“识别版本”功能提供一种方式告知下列扩展的功能适合于应用。输入:
AX=80A5h返回时:
AX为5A5Ah
BX将具有版本号返回的版本号将对应于描述该协议的适当文档的版本号。该版本号以“H.L.”格式,其中在BH中返回“H”部分,而“L”部分在BL中返回。在适当文档开始处的变动经历应提供关于版本号的附加信息。
理想地,至BIOS扩充的所有未来改变将是可向上兼容的。
“写数据”功能发送缓冲区数据到打印机。输入:
AX=8100h
DX=打印机端口号(对于LPT1到LPT30到2)
CX=要写的字节数
DS:SI→数据缓冲区返回时:
CX包含发送的字节数。
所得代码在AX中。如果AX为0:成功发送
-1:无效打印机端口号或未安装端口。
-2:指定指针是NULL。
-3:超时:原因未知。
-4:超时:大概未连接打印机
-5:超进:接了打印机但可能未打开电源。
“IOCTL写”功能发送-缓冲区的I/O控制信息到打印机。将数据写入IOCTL通道而非数据通道。输入:
AX=8101h
DX=打印机端口号(对于LPT1至LPT3为0到2)
CX=要写的字节数
DS:SI→发送缓冲器返回时:
CX包含发送的字节数。
所得代码在AX中。如果AX为0:成功地发送
-1:无效打印机端口号或未装上端口。
-2:指定的指针为NULL。
-3:超时:原因未知。
-4:超时:大概未连接打印机。
-5:超时:接了打印机但大概未打开电源。
“读数据”功能从打印机读出缓冲器数据。输入:
AX=8200h
DX=打印机端口号(LPT1到LPT3为0到2)
CX=要读的最大字节数
ES:DI→存储输入数据的缓冲区返回时:
CX包含实际读出的字节数。
所得代码在AX中。如果AX为0:成功发送。
-1:无效打印机端口号或端口未安装
-2:指定的指针为NULL。
-3:超时:原因未知。
-4:超时:打印机可能未连接。
-5:超时:接了打印机但可能未通电。
-6:超时:打印机(大概)不支持双向协议。
“IOCTL读”功能从打印机读出一缓冲器I/O控制信息。该数据是从I/O控制通道而非数据通道读出。输入:
AX=8201h
DX=打印机端口号(对应LPTI到LTP3为0到2)
CX=需读的最大字节数
ES:DI-存储输入数据的缓冲区。返回时:
CX包含实际读出的字节数。
所得代码在AX中。如果AX为0:成功地发送。
-1:无效打印机端口号或未装上端口。
-2:指定的指针为NULL。
-3:超时:原因未知。
-4:超时:打印机可能未连接。
-5:超时:连接打印机但可能未通电。
-6:超时:打印机(可能)不支持双向协议。
作为最后的扩充,读/设置写入超时值输入:
AH=83h
AL=0读,1设置
DX=打印机端口号(LPT1到LPT3为0到2)
BX=写入的以秒计超时值。0表示无限(无超时)。故障为0(无
超时)。
CX=IOCTL写的以秒计超时值。故障是0。注意:即使超时值设置为0,来自操作者的Ctrl-Break序列引起超时。注2:该超时值不影响从每一通道读出。
本领域的技术人员现在应理解本发明提供坚固、可扩展并极适合于在主计算机与所附打印机之间操作的双向并行协议。按照本发明的协议可利用现有PC并行口硬件和电缆而对非运转应用软件等透明。而且,按照本发明的协议允许快速轮询而不施加不能预知的实时限制。
本领域技术人员会认识到除了那些特别提到的,对这里所描述的技术可作出多种更改和变型,而实质上不偏离本发明的概念。因此,在所附权利要求书的范围内,可不同于这里的具体描述来实施本发明。