cdc_acm_protocol.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /*
  2. * cdc_acm_protocol.h
  3. *
  4. * Greaseweazle protocol over CDC ACM streams.
  5. *
  6. * Written & released by Keir Fraser <keir.xen@gmail.com>
  7. *
  8. * This is free and unencumbered software released into the public domain.
  9. * See the file COPYING for more details, or visit <http://unlicense.org>.
  10. */
  11. /*
  12. * GREASEWEAZLE COMMAND SET
  13. */
  14. /* CMD_GET_INFO, length=4, 0, nr_bytes. Returns nr_bytes after ACK. */
  15. #define CMD_GET_INFO 0
  16. /* CMD_SEEK, length=3, cyl# */
  17. #define CMD_SEEK 1
  18. /* CMD_SIDE, length=3, side# (0=bottom) */
  19. #define CMD_SIDE 2
  20. /* CMD_SET_PARAMS, length=3+nr, idx, <nr bytes> */
  21. #define CMD_SET_PARAMS 3
  22. /* CMD_GET_PARAMS, length=4, idx, nr_bytes. Returns nr_bytes after ACK. */
  23. #define CMD_GET_PARAMS 4
  24. /* CMD_MOTOR, length=3, motor_mask */
  25. #define CMD_MOTOR 5
  26. /* CMD_READ_FLUX, length=2-3. Optionally include all or part of gw_read_flux.
  27. * Returns flux readings until EOStream. */
  28. #define CMD_READ_FLUX 6
  29. /* CMD_WRITE_FLUX, length=2-7. Optionally include all or part of gw_write_flux.
  30. * Host follows with flux readings until EOStream. */
  31. #define CMD_WRITE_FLUX 7
  32. /* CMD_GET_FLUX_STATUS, length=2. Last read/write status returned in ACK. */
  33. #define CMD_GET_FLUX_STATUS 8
  34. /* CMD_GET_INDEX_TIMES, length=4, first, nr.
  35. * Returns nr*4 bytes after ACK. */
  36. #define CMD_GET_INDEX_TIMES 9
  37. /* CMD_SELECT, length=3, select_mask */
  38. #define CMD_SELECT 10
  39. /* [BOOTLOADER] CMD_UPDATE, length=6, <update_len>.
  40. * Host follows with <update_len> bytes.
  41. * Bootloader finally returns a status byte, 0 on success. */
  42. #define CMD_UPDATE 1
  43. /*
  44. * ACK RETURN CODES
  45. */
  46. #define ACK_OKAY 0
  47. #define ACK_BAD_COMMAND 1
  48. #define ACK_NO_INDEX 2
  49. #define ACK_NO_TRK0 3
  50. #define ACK_FLUX_OVERFLOW 4
  51. #define ACK_FLUX_UNDERFLOW 5
  52. #define ACK_WRPROT 6
  53. /*
  54. * CONTROL-CHANNEL COMMAND SET:
  55. * We abuse SET_LINE_CODING requests over endpoint 0, stashing a command
  56. * in the baud-rate field.
  57. */
  58. #define BAUD_NORMAL 9600
  59. #define BAUD_CLEAR_COMMS 10000
  60. /*
  61. * COMMAND PACKETS
  62. */
  63. /* CMD_GET_INFO, index 0 */
  64. struct __packed gw_info {
  65. uint8_t fw_major;
  66. uint8_t fw_minor;
  67. uint8_t max_index;
  68. uint8_t max_cmd;
  69. uint32_t sample_freq;
  70. };
  71. /* CMD_READ_FLUX */
  72. struct __packed gw_read_flux {
  73. uint8_t nr_idx; /* default: 2 */
  74. };
  75. /* CMD_WRITE_FLUX */
  76. struct __packed gw_write_flux {
  77. uint32_t index_delay_ticks; /* default: 0 */
  78. uint8_t terminate_at_index; /* default: 0 */
  79. };
  80. /* CMD_{GET,SET}_PARAMS, index 0 */
  81. #define PARAMS_DELAYS 0
  82. struct __packed gw_delay {
  83. uint16_t select_delay; /* usec */
  84. uint16_t step_delay; /* usec */
  85. uint16_t seek_settle; /* msec */
  86. uint16_t motor_delay; /* msec */
  87. uint16_t auto_off; /* msec */
  88. };
  89. /*
  90. * Local variables:
  91. * mode: C
  92. * c-file-style: "Linux"
  93. * c-basic-offset: 4
  94. * tab-width: 4
  95. * indent-tabs-mode: nil
  96. * End:
  97. */