seek.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. # greaseweazle/tools/seek.py
  2. #
  3. # Greaseweazle control script: Seek to specified cylinder.
  4. #
  5. # Written & released by Keir Fraser <keir.xen@gmail.com>
  6. #
  7. # This is free and unencumbered software released into the public domain.
  8. # See the file COPYING for more details, or visit <http://unlicense.org>.
  9. description = "Seek to the specified cylinder."
  10. import struct, sys
  11. from greaseweazle.tools import util
  12. from greaseweazle import error
  13. from greaseweazle import usb as USB
  14. from greaseweazle.flux import Flux
  15. def seek(usb, args, **_kwargs):
  16. """Seeks to the cylinder specified in args.
  17. """
  18. usb.seek(args.cylinder, 0)
  19. def main(argv):
  20. parser = util.ArgumentParser(usage='%(prog)s [options] cylinder')
  21. parser.add_argument("--device", help="greaseweazle device name")
  22. parser.add_argument("--drive", type=util.drive_letter, default='A',
  23. help="drive to read (A,B,0,1,2)")
  24. parser.add_argument("--force", action="store_true",
  25. help="allow extreme cylinders with no prompt")
  26. parser.add_argument("--motor-on", action="store_true",
  27. help="seek with drive motor activated")
  28. parser.add_argument("cylinder", type=int, help="cylinder to seek")
  29. parser.description = description
  30. parser.prog += ' ' + argv[1]
  31. args = parser.parse_args(argv[2:])
  32. try:
  33. struct.pack('b', args.cylinder)
  34. except struct.error:
  35. raise error.Fatal("Cylinder %d out of range" % args.cylinder)
  36. if not 0 <= args.cylinder <= 83 and not args.force:
  37. answer = input("Seek to extreme cylinder %d, Yes/No? " % args.cylinder)
  38. if answer != "Yes":
  39. return
  40. try:
  41. usb = util.usb_open(args.device)
  42. util.with_drive_selected(seek, usb, args, motor=args.motor_on)
  43. except USB.CmdError as err:
  44. print("Command Failed: %s" % err)
  45. if __name__ == "__main__":
  46. main(sys.argv)
  47. # Local variables:
  48. # python-indent: 4
  49. # End: