git-svn-id: https://svn.code.sf.net/p/libusbjava/code/trunk@118 94ad28fe-ef68-46b1-9651-e7ae4fcf1c4c
112 lines
2.9 KiB
Plaintext
112 lines
2.9 KiB
Plaintext
|
|
MODULE UsbTargLog;
|
|
(** © NTB/AS 12.01.2006 *)
|
|
(**
|
|
Changes:
|
|
*)
|
|
IMPORT
|
|
USB := UsbBDI, Log := StdLog, Services, TextModels, XUT := XdeUtilities;
|
|
|
|
CONST
|
|
logTitle = "USB Target Log";
|
|
PERIOD = 500;
|
|
|
|
TYPE
|
|
Receiver = POINTER TO RECORD (Services.Action)
|
|
time: LONGINT; period: INTEGER
|
|
END;
|
|
|
|
VAR
|
|
receiver: Receiver;
|
|
logTextModel: TextModels.Model; logWriter: TextModels.Writer;
|
|
|
|
PROCEDURE (receiver: Receiver) Do;
|
|
VAR
|
|
length, i: INTEGER; done: BOOLEAN;
|
|
data: ARRAY USB.MAX_UART_DATA_LENGTH OF SHORTCHAR;
|
|
BEGIN
|
|
done := USB.UART0_read(data, length);
|
|
IF done THEN
|
|
length := MIN(length, USB.MAX_UART_DATA_LENGTH );
|
|
FOR i := 0 TO length - 1 DO
|
|
logWriter.WriteChar(data[i])
|
|
END
|
|
END;
|
|
INC( receiver.time, receiver.period ); Services.DoLater(receiver, receiver.time )
|
|
END Do;
|
|
|
|
PROCEDURE Stop * ;
|
|
BEGIN
|
|
IF receiver # NIL THEN Services.RemoveAction(receiver ); receiver := NIL END;
|
|
logWriter := NIL; logTextModel := NIL
|
|
END Stop;
|
|
|
|
PROCEDURE StartReceiver;
|
|
BEGIN
|
|
IF receiver # NIL THEN Services.RemoveAction(receiver ); receiver := NIL END;
|
|
NEW(receiver);
|
|
receiver.time := Services.Ticks(); receiver.period := PERIOD;
|
|
Services.DoLater(receiver, receiver.time)
|
|
END StartReceiver;
|
|
|
|
PROCEDURE Start * ;
|
|
VAR beg, end: INTEGER;
|
|
BEGIN
|
|
IF ~USB.DeviceOpen() THEN
|
|
USB.ConnectDevice;
|
|
END;
|
|
Stop;
|
|
Log.String("opening USB target log"); Log.Ln;
|
|
XUT.GetTextModel("", logTextModel, beg, end); logWriter := logTextModel.NewWriter(NIL);
|
|
XUT.ShowTextView(logTextModel, logTitle);
|
|
StartReceiver;
|
|
END Start;
|
|
|
|
PROCEDURE SendSelToTarget * ;
|
|
(** send all visible char of the current selection to the target
|
|
*)
|
|
VAR
|
|
reader: TextModels.Reader; textModel: TextModels.Model; beg, end, currentLen: INTEGER; ch: CHAR;
|
|
data: ARRAY USB.MAX_UART_DATA_LENGTH OF SHORTCHAR; done, error: BOOLEAN;
|
|
BEGIN
|
|
XUT.GetTextModel("@", textModel, beg, end);
|
|
IF textModel # NIL THEN
|
|
reader := textModel.NewReader(NIL); reader.SetPos(beg);
|
|
currentLen := 0; error := FALSE;
|
|
WHILE reader.Pos() < end DO
|
|
reader.ReadChar(ch);
|
|
data[currentLen] := SHORT(ch);
|
|
INC(currentLen);
|
|
IF currentLen >= USB.MAX_UART_DATA_LENGTH THEN
|
|
done := USB.UART0_write(data, currentLen);
|
|
IF ~done THEN
|
|
error := TRUE;
|
|
Log.String("Sending data failed"); Log.Ln;
|
|
END;
|
|
currentLen := 0;
|
|
END
|
|
END;
|
|
IF currentLen > 0 THEN
|
|
done := USB.UART0_write(data, currentLen);
|
|
IF ~done THEN
|
|
error := TRUE;
|
|
Log.String("Sending data failed"); Log.Ln;
|
|
END
|
|
END;
|
|
IF ~error THEN
|
|
Log.String("Data sent successfully"); Log.Ln;
|
|
END
|
|
END
|
|
END SendSelToTarget;
|
|
|
|
PROCEDURE ClearText * ;
|
|
BEGIN
|
|
IF logTextModel # NIL THEN
|
|
logTextModel.Delete(0, logTextModel.Length()); logWriter.SetPos(0)
|
|
END
|
|
END ClearText;
|
|
|
|
CLOSE
|
|
Stop
|
|
END UsbTargLog .
|