]> mj.ucw.cz Git - home-hw.git/blobdiff - bsb/firmware/interface.h
BSB: Cleanup
[home-hw.git] / bsb / firmware / interface.h
index a4f42406b9e86c056644bd8170eaf12d31e290eb..3f8b42b47f1ded6a8b522fdbb9269673afd6faaa 100644 (file)
  *             Vendor-defined request 0x00 sends struct bsb_stats in little endian.
  *
  *     0x01 = bulk endpoint
  *             Vendor-defined request 0x00 sends struct bsb_stats in little endian.
  *
  *     0x01 = bulk endpoint
- *             Used for sending frames to BSB.
+ *             Used for sending frames to BSB. Accepts BSB frames. CRC will be calculated
+ *             automatically.
  *
  *     0x82 = interrupt endpoint
  *
  *     0x82 = interrupt endpoint
- *             Used for receiving frames from BSB.
- *             Also transmits 1-byte status reports on frames sent on endpoint 0x01.
+ *             Used for receiving frames from BSB and status reports on sent frames.
+ *             The first byte is a status byte (TX_RESULT_xxx), the rest is a frame.
+ *             If status == TX_RESULT_NONE, the frame is a received frame.
+ *             If status == TX_RESULT_OK, the frame is a received reply to the sent frame.
+ *             Otherwise, the status indicates transmit error and the frame is empty.
  */
 
 // Status sent on the interrupt endpoint
  */
 
 // Status sent on the interrupt endpoint
@@ -51,20 +55,9 @@ enum bsb_tx_result {
        P(tx_rejects) \
        P(tx_timeouts) \
        P(tx_collisions) \
        P(tx_rejects) \
        P(tx_timeouts) \
        P(tx_collisions) \
-       P(tx_ok)
-
-       u32 rx_noise;
-       u32 rx_errors;
-       u32 rx_invalid;
-       u32 rx_overruns;
-       u32 rx_timeouts;
-       u32 rx_bad_crc;
-       u32 rx_ok;
-       u32 tx_overruns;
-       u32 tx_rejects;
-       u32 tx_timeouts;
-       u32 tx_collisions;
-       u32 tx_ok;
+       P(tx_reply_timeouts) \
+       P(tx_ok_no_reply) \
+       P(tx_ok_replied)
 
 struct bsb_stats {
 #define P(x) u32 x;
 
 struct bsb_stats {
 #define P(x) u32 x;
@@ -84,12 +77,21 @@ struct bsb_stats {
  *             16-bit CRC
  */
 
  *             16-bit CRC
  */
 
+// Positions of fields in a frame
+enum bsb_frame {
+       BF_SOF,
+       BF_SRC,
+       BF_DEST,
+       BF_LEN,
+       BF_OP,
+};
+
 enum bsb_address {
        BSB_ADDR_BOILER = 0,
        BSB_ADDR_EXT_BOARD = 3,
        BSB_ADDR_ROOM1 = 6,
        BSB_ADDR_ROOM2 = 7,
 enum bsb_address {
        BSB_ADDR_BOILER = 0,
        BSB_ADDR_EXT_BOARD = 3,
        BSB_ADDR_ROOM1 = 6,
        BSB_ADDR_ROOM2 = 7,
-       BSB_ADDR_GATEWAY = 0x42,
+       BSB_ADDR_GATEWAY = 0x42,        // That's us
        BSB_ADDR_BROADCAST = 0x7f,
 };
 
        BSB_ADDR_BROADCAST = 0x7f,
 };