USBTestWatcher.Mod 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. (** Watches the USB state *)
  2. MODULE USBTestWatcher;
  3. IMPORT SYSTEM, Trace, Machine, Kernel;
  4. CONST
  5. USBCmd = ADDRESS(0E0002140H);
  6. USBSts = ADDRESS(0E0002144H);
  7. PortSc = ADDRESS(0E0002184H);
  8. OtgSc = ADDRESS(0E00021A4H);
  9. UsbMode = ADDRESS(0E00021A8H);
  10. TYPE
  11. Watcher = OBJECT
  12. VAR
  13. timer: Kernel.Timer;
  14. PROCEDURE & Init *;
  15. BEGIN
  16. NEW(timer)
  17. END Init;
  18. PROCEDURE Watch;
  19. VAR
  20. interrupts: BOOLEAN;
  21. BEGIN
  22. interrupts := Machine.AreInterruptsEnabled();
  23. Machine.Acquire(Machine.TraceOutput);
  24. Trace.Ln; Trace.StringLn("===== USB Watcher =====");
  25. Trace.String("Interrupts: "); Trace.Boolean(interrupts); Trace.String(" -- "); Trace.Address(SYSTEM.VAL(ADDRESS, Machine.proc[0].locksHeld)); Trace.Ln;
  26. Trace.String("USBCmd: "); Trace.Address(SYSTEM.GET32(USBCmd)); Trace.Ln;
  27. Trace.String("USBSts: "); Trace.Address(SYSTEM.GET32(USBSts)); Trace.Ln;
  28. Trace.String("Port SC: "); Trace.Address(SYSTEM.GET32(PortSc)); Trace.Ln;
  29. Trace.String("OTG SC: "); Trace.Address(SYSTEM.GET32(OtgSc)); Trace.Ln;
  30. Trace.String("USB Mode: "); Trace.Address(SYSTEM.GET32(UsbMode)); Trace.Ln;
  31. Trace.StringLn("==== End USB Watcher ===="); Trace.Ln;
  32. Machine.Release(Machine.TraceOutput);
  33. IF ~interrupts THEN
  34. Trace.StringLn("Enabling interrupts");
  35. Machine.EnableInterrupts
  36. END;
  37. END Watch;
  38. BEGIN {ACTIVE}
  39. LOOP
  40. Watch;
  41. timer.Sleep(1000)
  42. END;
  43. END Watcher;
  44. VAR
  45. watcher: Watcher;
  46. i: LONGINT;
  47. BEGIN
  48. NEW(watcher)
  49. END USBTestWatcher.