Files
jlibusb/blackbox/Usb/Mod/TargLog.otd
schlaepfer c3f93ae092 - period incremented to 500ms
git-svn-id: https://svn.code.sf.net/p/libusbjava/code/trunk@118 94ad28fe-ef68-46b1-9651-e7ae4fcf1c4c
2006-03-17 07:34:05 +00:00

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 .