亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? spcomm.pas

?? 串口調試用程序
?? PAS
?? 第 1 頁 / 共 4 頁
字號:
          if PostThreadMessage( WriteThread.ThreadID, PWM_COMMWRITE,
                                WPARAM(dwSizeofDataToWrite), LPARAM(Buffer) ) then
          begin
               FSendDataEmpty := False;
               Result := True;
               Exit
          end
     end;

     Result := False
end; {TComm.WriteCommData}

//
//  FUNCTION: GetModemState
//
//  PURPOSE: Read the state of modem input pin right now
//
//  PARAMETERS:
//     none
//
//  RETURN VALUE:
//
//     A DWORD variable containing one or more of following codes:
//
//     Value       Meaning
//     ----------  -----------------------------------------------------------
//     MS_CTS_ON   The CTS (clear-to-send) signal is on.
//     MS_DSR_ON   The DSR (data-set-ready) signal is on.
//     MS_RING_ON  The ring indicator signal is on.
//     MS_RLSD_ON  The RLSD (receive-line-signal-detect) signal is on.
//
//     If this comm have bad handle or not yet opened, the return value is 0
//
//  COMMENTS:
//
//    This member function calls GetCommModemStatus and return its value.
//    Before calling this member function, you must have a successful
//    'StartOpen' call.
//
//
function TComm.GetModemState : DWORD;
var
   dwModemState : DWORD;
begin
     if not GetCommModemStatus( hCommFile, dwModemState ) then
        Result := 0
     else
         Result := dwModemState
end;


(******************************************************************************)
//  TComm PROTECTED METHODS
(******************************************************************************)

//
//  FUNCTION: CloseReadThread
//
//  PURPOSE: Close the Read Thread.
//
//  PARAMETERS:
//    none
//
//  RETURN VALUE:
//    none
//
//  COMMENTS:
//
//    Closes the Read thread by signaling the CloseEvent.
//    Purges any outstanding reads on the comm port.
//
//    Note that terminating a thread leaks memory.
//    Besides the normal leak incurred, there is an event object
//    that doesn't get closed.  This isn't worth worrying about
//    since it shouldn't happen anyway.
//
//
procedure TComm.CloseReadThread;
begin
     // If it exists...
     if ReadThread <> nil then
     begin
          // Signal the event to close the worker threads.
          SetEvent( hCloseEvent );

          // Purge all outstanding reads
          PurgeComm( hCommFile, PURGE_RXABORT + PURGE_RXCLEAR );

          // Wait 10 seconds for it to exit.  Shouldn't happen.
          if (WaitForSingleObject(ReadThread.Handle, 10000) = WAIT_TIMEOUT) then
             ReadThread.Terminate;
          ReadThread.Free;
          ReadThread := nil
     end
end; {TComm.CloseReadThread}

//
//  FUNCTION: CloseWriteThread
//
//  PURPOSE: Closes the Write Thread.
//
//  PARAMETERS:
//    none
//
//  RETURN VALUE:
//    none
//
//  COMMENTS:
//
//    Closes the write thread by signaling the CloseEvent.
//    Purges any outstanding writes on the comm port.
//
//    Note that terminating a thread leaks memory.
//    Besides the normal leak incurred, there is an event object
//    that doesn't get closed.  This isn't worth worrying about
//    since it shouldn't happen anyway.
//
//
procedure TComm.CloseWriteThread;
begin
     // If it exists...
     if WriteThread <> nil then
     begin
          // Signal the event to close the worker threads.
          SetEvent(hCloseEvent);

          // Purge all outstanding writes.
          PurgeComm(hCommFile, PURGE_TXABORT + PURGE_TXCLEAR);
          FSendDataEmpty := True;

          // Wait 10 seconds for it to exit.  Shouldn't happen.
          if WaitForSingleObject( WriteThread.Handle, 10000 ) = WAIT_TIMEOUT then
             WriteThread.Terminate;
          WriteThread.Free;
          WriteThread := nil
     end
end; {TComm.CloseWriteThread}

procedure TComm.ReceiveData(Buffer: PChar; BufferLength: Word);
begin
     if Assigned(FOnReceiveData) then
        FOnReceiveData( self, Buffer, BufferLength )
end;

procedure TComm.ReceiveError( EvtMask : DWORD );
begin
     if Assigned(FOnReceiveError) then
        FOnReceiveError( self, EvtMask )
end;

procedure TComm.ModemStateChange( ModemEvent : DWORD );
begin
     if Assigned(FOnModemStateChange) then
        FOnModemStateChange( self, ModemEvent )
end;

procedure TComm.RequestHangup;
begin
     if Assigned(FOnRequestHangup) then
        FOnRequestHangup( Self )
end;

procedure TComm._SendDataEmpty;
begin
     if Assigned(FOnSendDataEmpty) then
        FOnSendDataEmpty( self )
end;

(******************************************************************************)
//  TComm PRIVATE METHODS
(******************************************************************************)

procedure TComm.CommWndProc( var msg: TMessage );
begin
     case msg.msg of
          PWM_GOTCOMMDATA:
          begin
               ReceiveData( PChar(msg.LParam), msg.WParam );
               LocalFree( msg.LParam )
          end;
          PWM_RECEIVEERROR:    ReceiveError( msg.LParam );
          PWM_MODEMSTATECHANGE:ModemStateChange( msg.LParam );
          PWM_REQUESTHANGUP:   RequestHangup;
          PWM_SENDDATAEMPTY:   _SendDataEmpty
     end
end;

procedure TComm._SetCommState;
var
   dcb:            Tdcb;
   commprop:       TCommProp;
   fdwEvtMask:     DWORD;
begin
     // Configure the comm settings.
     // NOTE: Most Comm settings can be set through TAPI, but this means that
     //       the CommFile will have to be passed to this component.

     GetCommState( hCommFile, dcb );
     GetCommProperties( hCommFile, commprop );
     GetCommMask( hCommFile, fdwEvtMask );

     // fAbortOnError is the only DCB dependancy in TapiComm.
     // Can't guarentee that the SP will set this to what we expect.
     {dcb.fAbortOnError := False; NOT VALID}

     dcb.BaudRate := FBaudRate;

     dcb.Flags := 1;         // Enable fBinary

     if FParityCheck then
        dcb.Flags := dcb.Flags or 2;          // Enable parity check

     // setup hardware flow control

     if FOutx_CtsFlow then
        dcb.Flags := dcb.Flags or 4;

     if FOutx_DsrFlow then
        dcb.Flags := dcb.Flags or 8;

     if FDtrControl = DtrEnable then
        dcb.Flags := dcb.Flags or $10
     else if FDtrControl = DtrHandshake then
          dcb.Flags := dcb.Flags or $20;

     if FDsrSensitivity then
        dcb.Flags := dcb.Flags or $40;

     if FTxContinueOnXoff then
        dcb.Flags := dcb.Flags or $80;

     if FOutx_XonXoffFlow then
        dcb.Flags := dcb.Flags or $100;

     if FInx_XonXoffFlow then
        dcb.Flags := dcb.Flags or $200;

     if FReplaceWhenParityError then
        dcb.Flags := dcb.Flags or $400;

     if FIgnoreNullChar then
        dcb.Flags := dcb.Flags or $800;

     if FRtsControl = RtsEnable then
        dcb.Flags := dcb.Flags or $1000
     else if FRtsControl = RtsHandshake then
          dcb.Flags := dcb.Flags or $2000
     else if FRtsControl = RtsTransmissionAvailable then
          dcb.Flags := dcb.Flags or $3000;

     dcb.XonLim := FXonLimit;
     dcb.XoffLim := FXoffLimit;

     dcb.ByteSize := Ord( FByteSize ) + 5;
     dcb.Parity := Ord( FParity );
     dcb.StopBits := Ord( FStopBits );

     dcb.XonChar := FXonChar;
     dcb.XoffChar := FXoffChar;

     dcb.ErrorChar := FReplacedChar;

     SetCommState( hCommFile, dcb )
end;

procedure TComm._SetCommTimeout;
var
   commtimeouts:   TCommTimeouts;
begin
     GetCommTimeouts( hCommFile, commtimeouts );

     // The CommTimeout numbers will very likely change if you are
     // coding to meet some kind of specification where
     // you need to reply within a certain amount of time after
     // recieving the last byte.  However,  If 1/4th of a second
     // goes by between recieving two characters, its a good
     // indication that the transmitting end has finished, even
     // assuming a 1200 baud modem.

     commtimeouts.ReadIntervalTimeout         := FReadIntervalTimeout;
     commtimeouts.ReadTotalTimeoutMultiplier  := FReadTotalTimeoutMultiplier;
     commtimeouts.ReadTotalTimeoutConstant    := FReadTotalTimeoutConstant;
     commtimeouts.WriteTotalTimeoutMultiplier := FWriteTotalTimeoutMultiplier;
     commtimeouts.WriteTotalTimeoutConstant   := FWriteTotalTimeoutConstant;

     SetCommTimeouts( hCommFile, commtimeouts );
end;

procedure TComm.SetBaudRate( Rate : DWORD );
begin
     if Rate = FBaudRate then
        Exit;

     FBaudRate := Rate;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetParityCheck( b : Boolean );
begin
     if b = FParityCheck then
        Exit;

     FParityCheck := b;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetOutx_CtsFlow( b : Boolean );
begin
     if b = FOutx_CtsFlow then
        Exit;

     FOutx_CtsFlow := b;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetOutx_DsrFlow( b : Boolean );
begin
     if b = FOutx_DsrFlow then
        Exit;

     FOutx_DsrFlow := b;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetDtrControl( c : TDtrControl );
begin
     if c = FDtrControl then
        Exit;

     FDtrControl := c;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetDsrSensitivity( b : Boolean );
begin
     if b = FDsrSensitivity then
        Exit;

     FDsrSensitivity := b;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetTxContinueOnXoff( b : Boolean );
begin
     if b = FTxContinueOnXoff then
        Exit;

     FTxContinueOnXoff := b;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetOutx_XonXoffFlow( b : Boolean );
begin
     if b = FOutx_XonXoffFlow then
        Exit;

     FOutx_XonXoffFlow := b;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetInx_XonXoffFlow( b : Boolean );
begin
     if b = FInx_XonXoffFlow then
        Exit;

     FInx_XonXoffFlow := b;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetReplaceWhenParityError( b : Boolean );
begin
     if b = FReplaceWhenParityError then
        Exit;

     FReplaceWhenParityError := b;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetIgnoreNullChar( b : Boolean );
begin
     if b = FIgnoreNullChar then
        Exit;

     FIgnoreNullChar := b;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetRtsControl( c : TRtsControl );
begin
     if c = FRtsControl then
        Exit;

     FRtsControl := c;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetXonLimit( Limit : WORD );
begin
     if Limit = FXonLimit then
        Exit;

     FXonLimit := Limit;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetXoffLimit( Limit : WORD );
begin
     if Limit = FXoffLimit then
        Exit;

     FXoffLimit := Limit;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetByteSize( Size : TByteSize );
begin
     if Size = FByteSize then
        Exit;

     FByteSize := Size;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetParity( p : TParity );
begin
     if p = FParity then
        Exit;

     FParity := p;

     if hCommFile <> 0 then
        _SetCommState
end;

procedure TComm.SetStopBits( Bits : TStopBits );
begin
     if Bits = FStopBits then
        Exit;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美蜜桃一区二区三区| 久久国产剧场电影| 国产无一区二区| 日韩一区二区免费视频| 97se亚洲国产综合自在线| 亚洲成人第一页| 国产成人精品免费网站| 国内外成人在线视频| 欧美aⅴ一区二区三区视频| 91女厕偷拍女厕偷拍高清| 国产精品自产自拍| 国内精品第一页| 精品一二三四区| 精品一区二区在线看| 另类欧美日韩国产在线| 激情欧美一区二区三区在线观看| 日韩av一区二区三区四区| 亚洲一区二区三区爽爽爽爽爽| 一区二区三区在线看| 亚洲激情自拍视频| 一区二区三区在线免费观看| 国产精品乱码一区二区三区软件| 久久精品一区二区三区不卡牛牛| 7777精品伊人久久久大香线蕉的| 91美女视频网站| 91久久久免费一区二区| 另类小说欧美激情| 亚洲最大成人综合| 久久精品久久99精品久久| 成人毛片在线观看| 91视频国产资源| 精品国内片67194| 亚洲欧美偷拍三级| 国产成人综合在线播放| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产一区二区三区精品欧美日韩一区二区三区 | 国产精品伊人色| 欧美r级在线观看| 亚洲免费高清视频在线| 免费视频一区二区| 国产一区二区三区免费在线观看| 91国偷自产一区二区三区观看 | 久久蜜臀中文字幕| 在线中文字幕一区二区| 午夜精品aaa| 国产一区在线观看麻豆| 国产中文字幕精品| 韩日av一区二区| 亚洲欧美在线视频观看| 亚洲bt欧美bt精品777| 激情文学综合丁香| 国产精品18久久久久久久网站| 一本大道久久精品懂色aⅴ| 久久亚洲综合av| 国产午夜精品一区二区| 亚洲一级在线观看| 国产精品主播直播| 51精品国自产在线| 久久―日本道色综合久久| 国产精品久久久久久久久图文区| 天天亚洲美女在线视频| 亚洲国产乱码最新视频| 国产成人亚洲综合a∨猫咪| 欧美日韩和欧美的一区二区| 中文字幕亚洲综合久久菠萝蜜| 欧美日本韩国一区二区三区视频| 日韩理论片一区二区| 激情六月婷婷久久| 日韩专区中文字幕一区二区| 国产精品1024| 欧美一区二区啪啪| 亚洲国产美女搞黄色| www.一区二区| 欧美精品18+| 亚洲一区二区美女| 99久久99精品久久久久久| 国产亚洲欧美色| 乱中年女人伦av一区二区| 免费一级欧美片在线观看| 欧美日韩成人一区| 亚洲一区二区在线免费观看视频| 9i看片成人免费高清| 国产精品午夜春色av| 国产一区欧美一区| 91精品国产综合久久国产大片| 亚洲卡通欧美制服中文| 成人午夜在线播放| 日韩免费视频线观看| 亚洲综合在线视频| 成人黄色综合网站| 久久综合中文字幕| 欧美一区二区三区免费大片| 日韩av在线播放中文字幕| 欧美日韩一区视频| 欧美一级专区免费大片| 91成人国产精品| 日韩一区二区三区电影| 国产成人aaaa| 国产成人精品免费一区二区| 中文字幕亚洲区| 欧美另类一区二区三区| 水蜜桃久久夜色精品一区的特点| 日韩视频一区二区三区在线播放 | av成人老司机| 国产精品你懂的| 一本久久精品一区二区| 欧美精品一区男女天堂| 国内精品嫩模私拍在线| 综合久久给合久久狠狠狠97色| 91啪亚洲精品| 亚洲理论在线观看| 色国产综合视频| 蜜臀av一区二区在线观看| 亚洲精品一区在线观看| 成人久久视频在线观看| 综合色天天鬼久久鬼色| 日韩欧美国产一区在线观看| 国产精品视频九色porn| 91.成人天堂一区| 亚洲bt欧美bt精品| 精品福利在线导航| 91一区二区在线| 天堂影院一区二区| 欧美激情一区二区三区全黄| 欧美日韩性生活| 中文av一区二区| 成人教育av在线| 天堂一区二区在线| wwwwww.欧美系列| 国产盗摄一区二区| 亚洲欧美欧美一区二区三区| 欧美精品一区二区三区高清aⅴ | 99re这里都是精品| 一区二区三区精品视频| 欧美www视频| 欧美唯美清纯偷拍| 成人黄色大片在线观看| 日韩成人一级大片| 国产精品免费看片| 欧美精三区欧美精三区| 国产嫩草影院久久久久| 欧美三级电影一区| 成人精品免费网站| 日韩中文字幕不卡| 一区二区三区高清在线| 国产偷国产偷亚洲高清人白洁| 91精品国产手机| 91精品综合久久久久久| 欧美日韩精品久久久| 欧美日韩一区国产| 国产乱码精品1区2区3区| 国产揄拍国内精品对白| 韩国v欧美v亚洲v日本v| 国产一区二区视频在线| 国产一区二区三区最好精华液| 狠狠色综合日日| 国产精品一区二区在线播放| 国产美女精品人人做人人爽| 极品美女销魂一区二区三区| 久久爱另类一区二区小说| 伦理电影国产精品| 国产综合久久久久久鬼色| 国产一区二区三区四区五区美女| 国产在线乱码一区二区三区| 国产一区二区三区电影在线观看| 国产一区二区美女| 欧美综合一区二区三区| 欧美色综合影院| 欧美一区二区三区性视频| 精品久久久久久久人人人人传媒| 久久久久久久av麻豆果冻| 久久精品亚洲精品国产欧美kt∨| 国产精品久久精品日日| 亚洲自拍偷拍图区| 激情综合网激情| 成人午夜视频在线观看| 欧美色偷偷大香| 精品国产电影一区二区| 亚洲欧洲性图库| 亚洲高清一区二区三区| 蜜臀av一区二区| 波多野结衣的一区二区三区| 欧美三级电影精品| 久久久亚洲精品石原莉奈| 亚洲人成人一区二区在线观看| 日韩激情在线观看| 成人av在线看| 在线观看欧美精品| 制服丝袜中文字幕亚洲| 久久久影视传媒| 亚洲啪啪综合av一区二区三区| 色诱亚洲精品久久久久久| 91精品国产美女浴室洗澡无遮挡| 欧美精品一区二区三区高清aⅴ | 美女高潮久久久| 国产一区91精品张津瑜| 欧美日产在线观看| 国产精品久久久久久久岛一牛影视 | aaa亚洲精品一二三区| 制服丝袜国产精品|