- blackbox files added

git-svn-id: https://svn.code.sf.net/p/libusbjava/code/trunk@96 94ad28fe-ef68-46b1-9651-e7ae4fcf1c4c
This commit is contained in:
schlaepfer
2006-01-19 07:17:20 +00:00
parent 6c6effa5b6
commit 2d735a5092
15 changed files with 5771 additions and 0 deletions

413
blackbox/Usb/Mod/BDI.otd Normal file
View File

@@ -0,0 +1,413 @@
MODULE UsbBDI;
IMPORT SYS := SYSTEM, BDI := UsbBDIDll, Log := StdLog, ComTools, WinApi, Services, TextModels, Ports,
Files, HostFiles;
CONST
ttDefaultPeriod = 500; (*500 ms*) ttPipeHandDisconnected = -1;
nul = 0X;
ascLf = 0AX; ascCr = 0DX;
CONST
FALSE_ = 0;
PATH_LENGTH* = 512;
CONST
JAVA_OUT_FILENAME = "JavaOut.txt";
JAVA_ERR_FILENAME = "JavaErr.txt";
INVALID_HANDLE_VALUE = -1;
STD_OUT_COLOR = Ports.green;
STD_ERR_COLOR = Ports.grey50;
JAVA_OUT_COLOR = Ports.blue;
JAVA_ERR_COLOR = Ports.red;
CONST
MAX_UART_DATA_LENGTH* = BDI.MAX_UART_DATA_LENGTH;
CONST
PATH_SEPERATOR = "\";
CLASSPATH = "Usb\Rsrc\usbpdi.jar";
TYPE
StdReaderWriter = POINTER TO ABSTRACT RECORD (Services.Action)
stdIoText: TextModels.Model; stdIoTextPos: INTEGER;
time, endTime: LONGINT; period: INTEGER;
hStdOut, hStdErr: WinApi.HANDLE;
connected, running: BOOLEAN; prevChar: SHORTCHAR
END;
JvmReaderWriter = POINTER TO EXTENSIBLE RECORD (StdReaderWriter)
errText: TextModels.Model; stdIoWriter, stdErrWriter: TextModels.Writer;
hJavaOut, hJavaErr: WinApi.HANDLE;
END;
VAR
bool: BDI.BOOL;
Done-, deviceOpen, jvmCreated: BOOLEAN; (** previous operation successfully completed *)
readerWriter: JvmReaderWriter;
(* ----------- Standard-IO / Java ReaderWriter --------------- *)
PROCEDURE (task: StdReaderWriter) Clear, NEW, EXTENSIBLE;
BEGIN
task.stdIoText := NIL; task.stdIoTextPos := 0;
task.hStdOut := ttPipeHandDisconnected; task.hStdErr := ttPipeHandDisconnected;
task.time := 0; task.endTime := 0; task.period := 0;
task.connected := FALSE; task.running := FALSE;
task.prevChar := nul;
END Clear;
PROCEDURE (task: StdReaderWriter) Stop, NEW, EXTENSIBLE;
VAR done: WinApi.BOOL;
BEGIN
Services.RemoveAction(task); task.running := FALSE;
IF task.connected THEN
done := WinApi.CloseHandle(task.hStdOut);
done := WinApi.CloseHandle(task.hStdErr);
END;
task.Clear
END Stop;
PROCEDURE (task: StdReaderWriter) SetTime (startFromNow, period, timeOut: INTEGER), NEW;
BEGIN
task.time := Services.Ticks() + startFromNow;
IF timeOut <= 0 THEN timeOut := MAX(INTEGER) END;
task.endTime := task.time + LONG(timeOut) * Services.resolution DIV 1000;
task.period := period
END SetTime;
PROCEDURE (task: StdReaderWriter) ConnectStdOutPipe (hStdOut: WinApi.HANDLE), NEW;
VAR done: WinApi.BOOL;
BEGIN
IF task.connected & (task.hStdOut # hStdOut) THEN done := WinApi.CloseHandle(task.hStdOut) END;
task.hStdOut := hStdOut; task.connected := TRUE
END ConnectStdOutPipe;
PROCEDURE (task: StdReaderWriter) ConnectStdErrPipe (hStdErr: WinApi.HANDLE), NEW;
VAR done: WinApi.BOOL;
BEGIN
IF task.connected & (task.hStdErr # hStdErr) THEN done := WinApi.CloseHandle(task.hStdErr) END;
task.hStdErr := hStdErr; task.connected := TRUE
END ConnectStdErrPipe;
PROCEDURE (task: StdReaderWriter) Start, NEW, ABSTRACT;
PROCEDURE NewJvmReaderWriter ( ): JvmReaderWriter;
VAR rec: JvmReaderWriter;
BEGIN
NEW(rec); rec.Clear; RETURN rec
END NewJvmReaderWriter;
PROCEDURE (rec: JvmReaderWriter) Clear, EXTENSIBLE;
VAR done: WinApi.BOOL;
BEGIN
rec.Clear^;
rec.errText := NIL; rec.stdIoWriter := NIL; rec.stdErrWriter := NIL;
rec.hJavaOut := ttPipeHandDisconnected; rec.hJavaErr := ttPipeHandDisconnected;
END Clear;
PROCEDURE (rec: JvmReaderWriter) Stop, EXTENSIBLE;
VAR done: WinApi.BOOL;
BEGIN
IF rec.connected THEN
rec.Stop^; done := WinApi.CloseHandle(rec.hJavaErr); done := WinApi.CloseHandle(rec.hJavaOut)
END;
rec.Clear
END Stop;
PROCEDURE (rec: JvmReaderWriter) ConnectJavaOutPipe (hJavaOut: WinApi.HANDLE), NEW;
VAR done: WinApi.BOOL;
BEGIN
IF rec.connected & (rec.hJavaOut # hJavaOut) THEN done := WinApi.CloseHandle(rec.hJavaOut) END;
rec.hJavaOut := hJavaOut; rec.connected := TRUE
END ConnectJavaOutPipe;
PROCEDURE (rec: JvmReaderWriter) ConnectJavaErrPipe (hJavaErr: WinApi.HANDLE), NEW;
VAR done: WinApi.BOOL;
BEGIN
IF rec.connected & (rec.hJavaErr # hJavaErr) THEN done := WinApi.CloseHandle(rec.hJavaErr) END;
rec.hJavaErr := hJavaErr; rec.connected := TRUE
END ConnectJavaErrPipe;
PROCEDURE (rec: JvmReaderWriter) Start;
VAR handle, stdOutHandle, stdErrHandle: WinApi.HANDLE;
BEGIN
IF rec.running THEN rec.Stop END;
IF rec.stdIoText = NIL THEN rec.stdIoText := TextModels.dir.New(); END;
IF rec.stdIoWriter = NIL THEN rec.stdIoWriter := rec.stdIoText.NewWriter(NIL) END;
rec.stdIoWriter.SetPos(rec.stdIoTextPos);
IF rec.errText = NIL THEN rec.errText := TextModels.dir.New(); END;
IF rec.stdErrWriter = NIL THEN rec.stdErrWriter := rec.errText.NewWriter(NIL) END;
rec.stdErrWriter.SetPos(rec.errText.Length());
(* Connect Std pipes *)
(*
stdOutHandle := BDI.getOutPipeHandle();
stdErrHandle := BDI.getErrPipeHandle();
Log.String("stdOutHandle: "); Log.Int(stdOutHandle); Log.Ln;
Log.String("stdErrHandle: "); Log.Int(stdErrHandle); Log.Ln;
*)
rec.ConnectStdOutPipe(BDI.getOutPipeHandle());
rec.ConnectStdErrPipe(BDI.getErrPipeHandle());
(* Connect Java pipes *)
handle := WinApi.CreateFile(JAVA_OUT_FILENAME, WinApi.GENERIC_READ + WinApi.GENERIC_WRITE,
WinApi.FILE_SHARE_WRITE, NIL, WinApi.OPEN_EXISTING, {}, 0);
IF (handle = INVALID_HANDLE_VALUE) THEN
Log.String("Error opening JAVA_OUT_FILENAME"); Log.Ln;
ELSE
rec.ConnectJavaOutPipe(handle)
END;
handle := WinApi.CreateFile(JAVA_ERR_FILENAME, WinApi.GENERIC_READ + WinApi.GENERIC_WRITE,
WinApi.FILE_SHARE_WRITE, NIL, WinApi.OPEN_EXISTING, {}, 0);
IF (handle = INVALID_HANDLE_VALUE) THEN
Log.String("Error opening JAVA_ERR_FILENAME"); Log.Ln;
ELSE
rec.ConnectJavaErrPipe(handle)
END;
rec.running := TRUE; Services.DoLater(rec, rec.time)
END Start;
PROCEDURE (rec: JvmReaderWriter) Do;
VAR
outModel: TextModels.Model;
n, ioDone, errDone, nofBytesRead, ioBytesAvail, errBytesAvail, exitCode: INTEGER;
ch: SHORTCHAR;
strSC: ARRAY 512 OF SHORTCHAR;
success: WinApi.BOOL;
BEGIN
IF rec.running THEN
(* STD OUT *)
IF rec.hStdOut > 0 THEN
nofBytesRead := 0; ioBytesAvail := 0;
ioDone := WinApi.PeekNamedPipe(
rec.hStdOut, (*//handle to pipe to copy from *)
SYS.ADR(strSC), (*//pointer to data buffer*)
LEN(strSC), (*//size, in bytes, of data buffer*)
nofBytesRead, (*nofBytesRead,*) (*//pointer to number of bytes read*)
ioBytesAvail, (*//pointer to total number of bytes available*)
NIL (*//pointer to unread bytes in this message*)
);
IF (ioDone # 0) & (ioBytesAvail > 0) THEN
ioDone := WinApi.ReadFile(rec.hStdOut, SYS.ADR(strSC), LEN(strSC), nofBytesRead, NIL);
IF (ioDone # 0) & (nofBytesRead > 0) THEN
FOR n := 0 TO nofBytesRead - 1 DO
ch := strSC[n];
IF (ch = ascLf) & (rec.prevChar # ascCr) THEN ch := TextModels.line END;
rec.stdIoWriter.WriteChar(ch);
rec.prevChar := ch;
END
END;
rec.stdIoText.SetAttr(0, rec.stdIoText.Length(),
TextModels.NewColor(TextModels.dir.attr, STD_OUT_COLOR));
Log.text.Append(rec.stdIoText)
END;
END;
(* STD ERR *)
IF rec.hStdErr > 0 THEN
nofBytesRead := 0; errBytesAvail := 0;
ioDone := WinApi.PeekNamedPipe(
rec.hStdErr, (*//handle to pipe to copy from *)
SYS.ADR(strSC), (*//pointer to data buffer*)
LEN(strSC), (*//size, in bytes, of data buffer*)
nofBytesRead, (*nofBytesRead,*) (*//pointer to number of bytes read*)
errBytesAvail, (*//pointer to total number of bytes available*)
NIL (*//pointer to unread bytes in this message*)
);
IF (ioDone # 0) & (errBytesAvail > 0) THEN
errDone := WinApi.ReadFile(rec.hStdErr, SYS.ADR(strSC), LEN(strSC), nofBytesRead, NIL);
IF (errDone # 0) & (nofBytesRead > 0) THEN
FOR n := 0 TO nofBytesRead - 1 DO
ch := strSC[n];
IF (ch = ascLf) & (rec.prevChar # ascCr) THEN ch := TextModels.line END;
rec.stdErrWriter.WriteChar(ch); rec.prevChar := ch
END
END;
rec.errText.SetAttr(0, rec.errText.Length(),
TextModels.NewColor(TextModels.dir.attr, STD_ERR_COLOR));
Log.text.Append(rec.errText)
END
END;
(* JAVA OUT *)
IF rec.hJavaOut > 0 THEN
ioDone := WinApi.ReadFile(rec.hJavaOut, SYS.ADR(strSC), LEN(strSC), nofBytesRead, NIL);
IF (ioDone # 0) & (nofBytesRead > 0) THEN
FOR n := 0 TO nofBytesRead - 1 DO
ch := strSC[n];
IF (ch = ascLf) & (rec.prevChar # ascCr) THEN ch := TextModels.line END;
rec.stdIoWriter.WriteChar(ch);
rec.prevChar := ch;
END
END;
rec.stdIoText.SetAttr(0, rec.stdIoText.Length(),
TextModels.NewColor(TextModels.dir.attr, JAVA_OUT_COLOR));
Log.text.Append(rec.stdIoText)
END;
(* JAVA ERR *)
IF rec.hJavaErr > 0 THEN
errDone := WinApi.ReadFile(rec.hJavaErr, SYS.ADR(strSC), LEN(strSC), nofBytesRead, NIL);
IF (errDone # 0) & (nofBytesRead > 0) THEN
FOR n := 0 TO nofBytesRead - 1 DO
ch := strSC[n];
IF (ch = ascLf) & (rec.prevChar # ascCr) THEN ch := TextModels.line END;
rec.stdErrWriter.WriteChar(ch); rec.prevChar := ch
END
END;
rec.errText.SetAttr(0, rec.errText.Length(),
TextModels.NewColor(TextModels.dir.attr, JAVA_ERR_COLOR));
Log.text.Append(rec.errText)
END;
INC( rec.time, rec.period ); Services.DoLater(rec, rec.time )
END;
END Do;
(* ----------- JVM --------------- *)
PROCEDURE CreateJVM (classpath: ARRAY OF SHORTCHAR);
VAR string: WinApi.PtrSTR;
BEGIN
string := ComTools.NewSString(classpath);
bool := BDI.createJVM(string);
IF bool = FALSE_ THEN
Done := FALSE;
Log.String("creating JVM failed"); Log.Ln;
ELSE
Done := TRUE;
Log.String("JVM successfully created"); Log.Ln;
jvmCreated := TRUE;
END;
(* We need to create the jvm before opening the ReaderWriter.
The javaout, javaerr can only be opened after creating the jvm! *)
IF readerWriter = NIL THEN
readerWriter := NewJvmReaderWriter();
readerWriter.Start();
END;
ComTools.FreeSString(string);
END CreateJVM;
PROCEDURE DestroyJVM ;
BEGIN
bool := BDI.destroyJVM();
IF bool = FALSE_ THEN
Done := FALSE;
Log.String("destroying JVM failed"); Log.Ln;
ELSE
Done := TRUE;
Log.String("JVM destroyed"); Log.Ln;
END;
jvmCreated := FALSE;
END DestroyJVM;
PROCEDURE CheckForExceptions * (): BOOLEAN;
BEGIN
RETURN (BDI.checkForExceptions() # FALSE_)
END CheckForExceptions;
(* ----------- USB --------------- *)
PROCEDURE USB_Device_open ;
BEGIN
BDI.USB_Device_open;
Done := ~CheckForExceptions();
IF Done THEN
deviceOpen := TRUE;
END
END USB_Device_open;
PROCEDURE USB_Device_close ;
BEGIN
BDI.USB_Device_close;
Done := ~CheckForExceptions();
deviceOpen := FALSE;
END USB_Device_close;
PROCEDURE USB_Device_reset * ;
BEGIN
BDI.USB_Device_reset;
Done := ~CheckForExceptions();
deviceOpen := FALSE;
END USB_Device_reset;
(* --------- UART0 ----------------- *)
PROCEDURE UART0_read * (VAR data: ARRAY OF SHORTCHAR; VAR length: INTEGER): BOOLEAN;
BEGIN
length := BDI.UART0_read(data);
RETURN length # FALSE_;
END UART0_read;
PROCEDURE UART0_write * (VAR data: ARRAY OF SHORTCHAR; length: INTEGER): BOOLEAN;
VAR
result: INTEGER;
BEGIN
RETURN BDI.UART0_write(SYS.ADR(data[0]), length) # FALSE_;
END UART0_write;
(* -------------- Helper Functions ------------------*)
PROCEDURE GetUserStartUpPath (VAR startupPath: ARRAY OF SHORTCHAR);
VAR
userStartUpLocator: Files.Locator; userStartUpHostLoc: HostFiles.Locator;
startupPathChar: ARRAY PATH_LENGTH OF CHAR;
i: INTEGER;
BEGIN
userStartUpLocator := Files.dir.This(""); userStartUpHostLoc := userStartUpLocator(HostFiles.Locator);
startupPathChar := userStartUpHostLoc.path$;
FOR i := 0 TO LEN(startupPathChar) - 1 DO
startupPath[i] := SYS.VAL(SHORTCHAR, startupPathChar[i]);
END
END GetUserStartUpPath;
PROCEDURE ConnectDevice * ;
VAR
startupPath: ARRAY PATH_LENGTH OF SHORTCHAR;
BEGIN
IF ~deviceOpen THEN
IF ~jvmCreated THEN
GetUserStartUpPath(startupPath);
Log.String("Startup Path: " + startupPath); Log.Ln;
CreateJVM(startupPath + PATH_SEPERATOR + CLASSPATH);
(*
CreateJVM("D:\work\USB\eclipse\mcdp\bin\");
*)
IF ~Done THEN HALT(77) END;
jvmCreated := TRUE;
END;
BDI.USB_Device_open;
IF ~Done THEN HALT(78) END;
END
END ConnectDevice;
PROCEDURE DeviceOpen * (): BOOLEAN ;
BEGIN
RETURN deviceOpen
END DeviceOpen;
(* Close and reopen the device *)
PROCEDURE ReopenDevice * ;
BEGIN
USB_Device_close;
USB_Device_open;
IF Done THEN
Log.String("Device opened successfully"); Log.Ln;
ELSE
Log.String("Error while opening Device"); Log.Ln;
END
END ReopenDevice;
BEGIN
deviceOpen := FALSE;
jvmCreated := FALSE;
CLOSE
IF readerWriter # NIL THEN
readerWriter.Stop;
END;
IF deviceOpen THEN
USB_Device_close;
END;
IF jvmCreated THEN
DestroyJVM
END
END UsbBDI.

109
blackbox/Usb/Mod/BDI332.otd Normal file
View File

@@ -0,0 +1,109 @@
MODULE UsbBDI332;
IMPORT SYS := SYSTEM, BDI := UsbBDIDll, BDIMain := UsbBDI, WinApi;
CONST
FALSE_ = 0;
VAR
Done-: BOOLEAN;
(* --------- 332 ----------------- *)
PROCEDURE nopsToLegalCmd * ;
BEGIN
BDI.BDI332_nopsToLegalCmd;
Done := ~BDIMain.CheckForExceptions()
END nopsToLegalCmd;
PROCEDURE go * ;
BEGIN
BDI.BDI332_go;
Done := ~BDIMain.CheckForExceptions()
END go;
PROCEDURE break_ * ;
BEGIN
BDI.BDI332_break_;
Done := ~BDIMain.CheckForExceptions()
END break_;
PROCEDURE reset_target * ;
BEGIN
BDI.BDI332_reset_target;
Done := ~BDIMain.CheckForExceptions()
END reset_target;
PROCEDURE reset_peripherals * ;
BEGIN
BDI.BDI332_reset_peripherals;
Done := ~BDIMain.CheckForExceptions()
END reset_peripherals;
PROCEDURE isFreezeAsserted * (): BOOLEAN;
VAR result: WinApi.BOOL;
BEGIN
result := BDI.BDI332_isFreezeAsserted();
Done := ~BDIMain.CheckForExceptions();
RETURN result # FALSE_
END isFreezeAsserted;
PROCEDURE fillMem * (downloadData: ARRAY OF INTEGER; dataLength: INTEGER);
BEGIN
BDI.BDI332_fillMem(SYS.ADR(downloadData[0]), dataLength);
Done := ~BDIMain.CheckForExceptions()
END fillMem;
PROCEDURE dumpMem * (nofData: INTEGER; VAR result: ARRAY OF INTEGER; VAR length: INTEGER);
BEGIN
length := BDI.BDI332_dumpMem(nofData, result);
Done := ~BDIMain.CheckForExceptions()
END dumpMem;
PROCEDURE writeMem * (addr, value, size: INTEGER);
BEGIN
BDI.BDI332_writeMem(addr, value, size);
Done := ~BDIMain.CheckForExceptions()
END writeMem;
PROCEDURE readMem * (addr, size: INTEGER): INTEGER;
VAR result: INTEGER;
BEGIN
result := BDI.BDI332_readMem(addr, size);
Done := ~BDIMain.CheckForExceptions();
RETURN result
END readMem;
PROCEDURE readUserReg * (reg: INTEGER): INTEGER;
VAR result: INTEGER;
BEGIN
result := BDI.BDI332_readUserReg(reg);
Done := ~BDIMain.CheckForExceptions();
RETURN result
END readUserReg;
PROCEDURE writeUserReg * (reg, value: INTEGER);
BEGIN
BDI.BDI332_writeUserReg(reg, value);
Done := ~BDIMain.CheckForExceptions()
END writeUserReg;
PROCEDURE readSysReg * (reg: INTEGER): INTEGER;
VAR result: INTEGER;
BEGIN
result := BDI.BDI332_readSysReg(reg);
Done := ~BDIMain.CheckForExceptions();
RETURN result
END readSysReg;
PROCEDURE writeSysReg * (reg, value: INTEGER);
BEGIN
BDI.BDI332_writeSysReg(reg, value);
Done := ~BDIMain.CheckForExceptions()
END writeSysReg;
PROCEDURE isTargetInDebugMode * (): BOOLEAN;
BEGIN
RETURN BDI.BDI332_isTargetInDebugMode() # FALSE_;
END isTargetInDebugMode;
END UsbBDI332.

189
blackbox/Usb/Mod/BDI555.otd Normal file
View File

@@ -0,0 +1,189 @@
MODULE UsbBDI555;
IMPORT SYS := SYSTEM, BDI := UsbBDIDll, BDIMain := UsbBDI, WinApi;
CONST
FALSE_ = 0;
CONST
MAX_NOF_LONGS_FILL* = BDI.MAX_NOF_LONGS_FILL;
VAR
Done-: BOOLEAN;
(* ----------- 555 --------------- *)
PROCEDURE go * ;
BEGIN
BDI.BDI555_go;
Done := ~BDIMain.CheckForExceptions()
END go;
PROCEDURE break_ * ;
BEGIN
BDI.BDI555_break_;
Done := ~BDIMain.CheckForExceptions()
END break_;
PROCEDURE reset_target * ;
BEGIN
BDI.BDI555_reset_target;
Done := ~BDIMain.CheckForExceptions()
END reset_target;
PROCEDURE isFreezeAsserted * (): BOOLEAN;
VAR result: WinApi.BOOL;
BEGIN
result := BDI.BDI555_isFreezeAsserted();
Done := ~BDIMain.CheckForExceptions();
RETURN result # FALSE_
END isFreezeAsserted;
PROCEDURE startFastDownload * (addr: INTEGER);
BEGIN
BDI.BDI555_startFastDownload(addr);
Done := ~BDIMain.CheckForExceptions()
END startFastDownload;
PROCEDURE fastDownload * (downloadData: ARRAY OF INTEGER; dataLength: INTEGER);
(*VAR i: INTEGER;*)
BEGIN
(*
Log.String("BDI555_fastDownload: length = "); Log.Int(dataLength); Log.Ln;
FOR i := 0 TO dataLength - 1 DO
Log.Int(downloadData[i]); Log.Tab;
END;
Log.Ln;
*)
BDI.BDI555_fastDownload(SYS.ADR(downloadData[0]), dataLength);
Done := ~BDIMain.CheckForExceptions()
END fastDownload;
PROCEDURE stopFastDownload * ;
BEGIN
BDI.BDI555_stopFastDownload;
Done := ~BDIMain.CheckForExceptions()
END stopFastDownload;
PROCEDURE writeMem * (addr, value, size: INTEGER);
BEGIN
BDI.BDI555_writeMem(addr, value, size);
Done := ~BDIMain.CheckForExceptions()
END writeMem;
PROCEDURE readMem * (addr, size: INTEGER): INTEGER;
VAR result: INTEGER;
BEGIN
result := BDI.BDI555_readMem(addr, size);
Done := ~BDIMain.CheckForExceptions();
RETURN result
END readMem;
PROCEDURE writeMemSeq * (value, size: INTEGER);
BEGIN
BDI.BDI555_writeMemSeq(value, size);
Done := ~BDIMain.CheckForExceptions()
END writeMemSeq;
PROCEDURE readMemSeq * (size: INTEGER): INTEGER;
VAR result: INTEGER;
BEGIN
result := BDI.BDI555_readMemSeq(size);
Done := ~BDIMain.CheckForExceptions();
RETURN result
END readMemSeq;
PROCEDURE readGPR * (gpr: INTEGER): INTEGER;
VAR result: INTEGER;
BEGIN
result := BDI.BDI555_readGPR(gpr);
Done := ~BDIMain.CheckForExceptions();
RETURN result
END readGPR;
PROCEDURE writeGPR * (gpr, value: INTEGER);
BEGIN
BDI.BDI555_writeGPR(gpr, value);
Done := ~BDIMain.CheckForExceptions()
END writeGPR;
PROCEDURE readSPR * (spr: INTEGER): INTEGER;
VAR result: INTEGER;
BEGIN
result := BDI.BDI555_readSPR(spr);
Done := ~BDIMain.CheckForExceptions();
RETURN result
END readSPR;
PROCEDURE writeSPR * (spr, value: INTEGER);
BEGIN
BDI.BDI555_writeSPR(spr, value);
Done := ~BDIMain.CheckForExceptions()
END writeSPR;
PROCEDURE readMSR * (): INTEGER;
VAR result: INTEGER;
BEGIN
result := BDI.BDI555_readMSR();
Done := ~BDIMain.CheckForExceptions();
RETURN result
END readMSR;
PROCEDURE writeMSR * (value: INTEGER);
BEGIN
BDI.BDI555_writeMSR(value);
Done := ~BDIMain.CheckForExceptions()
END writeMSR;
PROCEDURE readFPR * (fpr, tmpMemAddr: INTEGER): LONGINT;
VAR result: LONGINT;
BEGIN
result := BDI.BDI555_readFPR(fpr, tmpMemAddr);
Done := ~BDIMain.CheckForExceptions();
RETURN result
END readFPR;
PROCEDURE writeFPR * (fpr, tmpMemAddr: INTEGER; value: LONGINT);
BEGIN
BDI.BDI555_writeFPR(fpr, tmpMemAddr, value);
Done := ~BDIMain.CheckForExceptions()
END writeFPR;
PROCEDURE readCR * (): INTEGER;
VAR result: INTEGER;
BEGIN
result := BDI.BDI555_readCR();
Done := ~BDIMain.CheckForExceptions();
RETURN result
END readCR;
PROCEDURE writeCR * (value: INTEGER);
BEGIN
BDI.BDI555_writeCR(value);
Done := ~BDIMain.CheckForExceptions()
END writeCR;
PROCEDURE readFPSCR * (): INTEGER;
VAR result: INTEGER;
BEGIN
result := BDI.BDI555_readFPSCR();
Done := ~BDIMain.CheckForExceptions();
RETURN result
END readFPSCR;
PROCEDURE writeFPSCR * (value: INTEGER);
BEGIN
BDI.BDI555_writeFPSCR(value);
Done := ~BDIMain.CheckForExceptions()
END writeFPSCR;
PROCEDURE isTargetInDebugMode * (): BOOLEAN;
BEGIN
RETURN BDI.BDI555_isTargetInDebugMode() # FALSE_;
END isTargetInDebugMode;
PROCEDURE setGpr31 * (gpr31: INTEGER);
BEGIN
BDI.BDI555_setGpr31(gpr31);
END setGpr31;
END UsbBDI555.

175
blackbox/Usb/Mod/BDIDll.otd Normal file
View File

@@ -0,0 +1,175 @@
MODULE UsbBDIDll ["BDI.dll"];
IMPORT SYSTEM;
CONST
MAX_NOF_LONGS_FILL* = 84;
MAX_UART_DATA_LENGTH* = 128;
TYPE
PtrSTR* = POINTER TO ARRAY [untagged] OF SHORTCHAR;
BOOL* = INTEGER;
(* -------JVM--------- *)
PROCEDURE getErrPipeHandle* (): INTEGER;
(*END getErrPipeHandle; *)
PROCEDURE getOutPipeHandle* (): INTEGER;
(*END getOutPipeHandle; *)
PROCEDURE createJVM* (classpath: PtrSTR): BOOL;
(*END createJVM; *)
PROCEDURE destroyJVM* (): INTEGER;
(*END destroyJVM; *)
PROCEDURE checkForExceptions* (): BOOL;
(*END checkForExceptions; *)
(* -------USB--------- *)
PROCEDURE USB_Device_open*;
(*END USB_Device_open; *)
PROCEDURE USB_Device_close*;
(*END USB_Device_close; *)
PROCEDURE USB_Device_reset*;
(*END USB_Device_reset; *)
(* -------555--------- *)
PROCEDURE BDI555_go*;
(*END BDI555_go; *)
PROCEDURE BDI555_break_*;
(*END BDI555_break_; *)
PROCEDURE BDI555_reset_target*;
(*END BDI555_reset_target; *)
PROCEDURE BDI555_isFreezeAsserted* (): BOOL;
(*END BDI555_isFreezeAsserted; *)
PROCEDURE BDI555_startFastDownload* (adr: INTEGER);
(*END BDI555_startFastDownload; *)
PROCEDURE BDI555_fastDownload* (downloadData: (* ARRAY OF *) INTEGER; dataLength: INTEGER);
(*END BDI555_fastDownload; *)
PROCEDURE BDI555_stopFastDownload*;
(*END BDI555_stopFastDownload; *)
PROCEDURE BDI555_writeMem* (addr, value, size: INTEGER);
(*END BDI555_writeMem; *)
PROCEDURE BDI555_readMem* (addr, size: INTEGER): INTEGER;
(*END BDI555_readMem; *)
PROCEDURE BDI555_writeMemSeq* (value, size: INTEGER);
(*END BDI555_writeMemSeq; *)
PROCEDURE BDI555_readMemSeq* (size: INTEGER): INTEGER;
(*END BDI555_readMemSeq; *)
PROCEDURE BDI555_readGPR* (gpr: INTEGER): INTEGER;
(*END BDI555_readGPR; *)
PROCEDURE BDI555_writeGPR* (gpr, value: INTEGER);
(*END BDI555_writeGPR; *)
PROCEDURE BDI555_readSPR* (spr: INTEGER): INTEGER;
(*END BDI555_readSPR; *)
PROCEDURE BDI555_writeSPR* (spr, value: INTEGER);
(*END BDI555_writeSPR; *)
PROCEDURE BDI555_readMSR* (): INTEGER;
(*END BDI555_readMSR; *)
PROCEDURE BDI555_writeMSR* (value: INTEGER);
(*END BDI555_writeMSR; *)
PROCEDURE BDI555_readFPR* (fpr, tmpMemAddr: INTEGER): LONGINT;
(*END BDI555_readFPR; *)
PROCEDURE BDI555_writeFPR* (fpr, tmpMemAddr: INTEGER; value: LONGINT);
(*END BDI555_writeFPR; *)
PROCEDURE BDI555_readCR* (): INTEGER;
(*END BDI555_readCR; *)
PROCEDURE BDI555_writeCR* (value: INTEGER);
(*END BDI555_writeCR; *)
PROCEDURE BDI555_readFPSCR* (): INTEGER;
(*END BDI555_readFPSCR; *)
PROCEDURE BDI555_writeFPSCR* (value: INTEGER);
(*END BDI555_writeFPSCR; *)
PROCEDURE BDI555_isTargetInDebugMode* (): BOOL;
(*END BDI555_isTargetInDebugMode; *)
PROCEDURE BDI555_setGpr31* (gpr31: INTEGER);
(*END BDI555_setGpr31; *)
(* -------332--------- *)
PROCEDURE BDI332_nopsToLegalCmd*;
(*END BDI332_nopsToLegalCmd; *)
PROCEDURE BDI332_go*;
(*END BDI332_go; *)
PROCEDURE BDI332_break_*;
(*END BDI332_break_; *)
PROCEDURE BDI332_reset_target*;
(*END BDI332_reset_target; *)
PROCEDURE BDI332_reset_peripherals*;
(*END BDI332_reset_peripherals; *)
PROCEDURE BDI332_isFreezeAsserted* (): BOOL;
(*END BDI332_isFreezeAsserted; *)
PROCEDURE BDI332_fillMem* (downloadData: (* ARRAY OF *) INTEGER; dataLength: INTEGER);
(*END BDI332_fillMem; *)
PROCEDURE BDI332_dumpMem* (nofData: INTEGER; VAR result: ARRAY OF INTEGER): INTEGER;
(*
PROCEDURE BDI332_dumpMem* (nofData: INTEGER; VAR result: ARRAY [untagged] MAX_NOF_LONGS_FILL OF INTEGER): INTEGER;
*)
(*END BDI332_dumpMem; *)
PROCEDURE BDI332_writeMem* (addr, value, size: INTEGER);
(*END BDI332_writeMem; *)
PROCEDURE BDI332_readMem* (addr, size: INTEGER): INTEGER;
(*END BDI332_readMem; *)
PROCEDURE BDI332_readUserReg* (reg: INTEGER): INTEGER;
(*END BDI332_readUserReg; *)
PROCEDURE BDI332_writeUserReg* (reg, value: INTEGER);
(*END BDI332_writeUserReg; *)
PROCEDURE BDI332_readSysReg* (reg: INTEGER): INTEGER;
(*END BDI332_readSysReg; *)
PROCEDURE BDI332_writeSysReg* (reg, value: INTEGER);
(*END BDI332_writeSysReg; *)
PROCEDURE BDI332_isTargetInDebugMode* (): BOOL;
(*END BDI332_isTargetInDebugMode; *)
(* ------ UART0 ------ *)
PROCEDURE UART0_read* (VAR data: ARRAY [untagged] OF SHORTCHAR): INTEGER;
(*END UART0_read; *)
PROCEDURE UART0_write* (data: (* ARRAY OF SHORTCHAR *) INTEGER; length: INTEGER): BOOL;
(*END UART0_write; *)
END UsbBDIDll.

View File

@@ -0,0 +1,110 @@
MODULE UsbTargLog;
(** <20> NTB/AS 12.01.2006 *)
(**
Changes:
*)
IMPORT
USB := UsbBDI, Log := StdLog, Services, TextModels, XUT := XdeUtilities;
CONST
logTitle = "USB Target Log";
PERIOD = 200;
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
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 .