|
|
以下是测试打印机状态(kylix写的),打印都正常,就是isready不行,大家帮看看
print(s)就是往串口写字符串,win32代码正常,linux下我写的有什么问题?
- function TComPrinter.IsReady: boolean;
- {$IFDEF Win32}
- var
- dStart: DWORD;
- s: string;
- dwErrors, dwRead: DWORD;
- comstat: PComStat;
- Data: Shortint;
- begin
- result := false;
- if Copy(LowerCase(PrintCfg.Name), 1, 3) = 'mdt' then
- begin
- StopCom;
- StartCom;
- iniPrinter;
- end;
- s := PrintCfg.GetRealCmd(PrintCfg.ChkStatus);
- new(comstat);
- try
- dStart := GetTickCount;
- while true do
- begin
- if ClearCommError(hCommFile, dwErrors, comstat) then
- if not (fCtlHold in comstat.Flags) then
- break;
- if (GetTickCount - dStart) > 100 then
- exit;
- end;
- if not Print(s) then
- exit;
- while true do
- begin
- ClearCommError(hCommFile, dwErrors, comstat);
- if comstat.cbInQue > 0 then
- break;
- if (GetTickCount - dStart) > 200 then
- exit;
- end;
- Data := 0;
- if not ReadFile(hCommFile, Data, 1, dwRead, nil) then
- begin
- ClearCommError(hCommFile, dwErrors, comstat);
- exit;
- end;
- finally
- Dispose(comstat);
- end;
- if Copy(LowerCase(PrintCfg.Name), 1, 3) = 'mdt' then
- Result := Data = strtoint('$' + PrintCfg.PaperErr)
- else
- result := (Data and strtoint('$' + PrintCfg.PaperErr)) = 0;
- end;
- {$ENDIF}
- {$IFDEF Linux}
- var
- s:string;
- Data:Shortint;
- tpstart, tpend: timeval;
- timeuse: real;
- begin
- // result:=true;
- // exit;
- result := false;
- if Copy(LowerCase(PrintCfg.Name), 1, 3) = 'mdt' then
- begin
- StopCom;
- StartCom;
- iniPrinter;
- end;
- s := PrintCfg.GetRealCmd(PrintCfg.ChkStatus);
- if not Print(s) then
- exit;
- gettimeofday(tpstart, nil);
- while __read(hCommFile,Data,1)<1 do
- begin
- gettimeofday(tpend, nil);
- timeuse := 1000000 * (tpend.tv_sec - tpstart.tv_sec) +
- tpend.tv_usec - tpstart.tv_usec;
- timeuse := timeuse / 1000000;
- if timeuse>200 then
- exit;
- end;
- if Copy(LowerCase(PrintCfg.Name), 1, 3) = 'mdt' then
- Result := Data = strtoint('$' + PrintCfg.PaperErr)
- else
- result := (Data and strtoint('$' + PrintCfg.PaperErr)) = 0;
- end;
- {$ENDIF}
复制代码 |
|