VaBuffer Data Capture Example

I am missing something, as I am getting garbage. Also I get a lockup when disconnecting the VaComm

 
Ray.
 
type
  TCapturestate = (csNone, csCaptureStart, csCaptureEnd);
 
var     // Global varaialbes
  cs: TCaptureState;
  RxData: array[0..1000] of byte;
 
procedure TSymCommsDlg.VaComm1RxChar(Sender: TObject; Count: Integer);
 var
   sig_start, sig_end: byte;
   b: byte;
   i: integer;
begin
  cs := csNone;
  sig_start := $24;
  sig_end := $7E;
  i := 0;

  while cs <>  csCaptureEnd do begin
    if vacomm1.ReadBufUsed > 0 then  begin
      vacomm1.ReadBuf(b,1);
      case cs of
        csCaptureStart: begin
                          if b = sig_end then
                            cs := csCaptureEnd
                          else begin
                            RxData := b;
                            inc(i);
                          end;
                        end;
                csNone: if (b = sig_Start) then
                          cs := csCaptureStart;
      end;
      application.ProcessMessages;
      ProcessData;
    end;
  end;
end;