Fork of Smoothie to port to mbed non-LPC targets.

Dependencies:   mbed

Fork of Smoothie by Stéphane Cachat

Committer:
Bigcheese
Date:
Sun Mar 02 06:33:08 2014 +0000
Revision:
3:f151d08d335c
Parent:
2:1df0b61d3b5a
Bunch of stuff. Need to locally merge in updated USB changes.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Michael J. Spencer 2:1df0b61d3b5a 1 #ifndef _DFU_H
Michael J. Spencer 2:1df0b61d3b5a 2 #define _DFU_H
Michael J. Spencer 2:1df0b61d3b5a 3
Michael J. Spencer 2:1df0b61d3b5a 4 #include "USB.h"
Michael J. Spencer 2:1df0b61d3b5a 5
Michael J. Spencer 2:1df0b61d3b5a 6 #include "USBEndpoints.h"
Michael J. Spencer 2:1df0b61d3b5a 7 #include "USBDescriptor.h"
Michael J. Spencer 2:1df0b61d3b5a 8 #include "USBDevice_Types.h"
Michael J. Spencer 2:1df0b61d3b5a 9
Michael J. Spencer 2:1df0b61d3b5a 10 #include "Module.h"
Michael J. Spencer 2:1df0b61d3b5a 11
Michael J. Spencer 2:1df0b61d3b5a 12 #include <stdint.h>
Michael J. Spencer 2:1df0b61d3b5a 13
Michael J. Spencer 2:1df0b61d3b5a 14 #define REQ_DFU_DETACH 0x0
Michael J. Spencer 2:1df0b61d3b5a 15 #define REQ_DFU_DNLOAD 0x1
Michael J. Spencer 2:1df0b61d3b5a 16 #define REQ_DFU_UPLOAD 0x2
Michael J. Spencer 2:1df0b61d3b5a 17 #define REQ_DFU_GETSTATUS 0x3
Michael J. Spencer 2:1df0b61d3b5a 18 #define REQ_DFU_CLRSTATUS 0x4
Michael J. Spencer 2:1df0b61d3b5a 19 #define REQ_DFU_GETSTATE 0x5
Michael J. Spencer 2:1df0b61d3b5a 20 #define REQ_DFU_ABORT 0x6
Michael J. Spencer 2:1df0b61d3b5a 21
Michael J. Spencer 2:1df0b61d3b5a 22 #define DL_DFU_FUNCTIONAL_DESCRIPTOR 0x09
Michael J. Spencer 2:1df0b61d3b5a 23 #define DT_DFU_FUNCTIONAL_DESCRIPTOR 0x21
Michael J. Spencer 2:1df0b61d3b5a 24
Michael J. Spencer 2:1df0b61d3b5a 25 #define DFU_VERSION_1_1 0x0110
Michael J. Spencer 2:1df0b61d3b5a 26
Michael J. Spencer 2:1df0b61d3b5a 27 #define DFU_INTERFACE_CLASS 0xFE
Michael J. Spencer 2:1df0b61d3b5a 28 #define DFU_INTERFACE_SUBCLASS 0x01
Michael J. Spencer 2:1df0b61d3b5a 29 #define DFU_INTERFACE_PROTOCOL_RUNTIME 0x01
Michael J. Spencer 2:1df0b61d3b5a 30 #define DFU_INTERFACE_PROTOCOL_DFUMODE 0x02
Michael J. Spencer 2:1df0b61d3b5a 31
Michael J. Spencer 2:1df0b61d3b5a 32 #define DFU_BMATTRIBUTES_WILLDETACH (1<<3)
Michael J. Spencer 2:1df0b61d3b5a 33 #define DFU_BMATTRIBUTES_MANIFEST_TOLERANT (1<<2) /* device keeps talking while flashing? */
Michael J. Spencer 2:1df0b61d3b5a 34 #define DFU_BMATTRIBUTES_CANUPLOAD (1<<1)
Michael J. Spencer 2:1df0b61d3b5a 35 #define DFU_BMATTRIBUTES_CANDOWNLOAD (1<<0)
Michael J. Spencer 2:1df0b61d3b5a 36
Michael J. Spencer 2:1df0b61d3b5a 37 #define DFU_DETACH 0
Michael J. Spencer 2:1df0b61d3b5a 38 #define DFU_DNLOAD 1
Michael J. Spencer 2:1df0b61d3b5a 39 #define DFU_UPLOAD 2
Michael J. Spencer 2:1df0b61d3b5a 40 #define DFU_GETSTATUS 3
Michael J. Spencer 2:1df0b61d3b5a 41 #define DFU_CLRSTATUS 4
Michael J. Spencer 2:1df0b61d3b5a 42 #define DFU_GETSTATE 5
Michael J. Spencer 2:1df0b61d3b5a 43 #define DFU_ABORT 6
Michael J. Spencer 2:1df0b61d3b5a 44
Michael J. Spencer 2:1df0b61d3b5a 45 class DFU;
Michael J. Spencer 2:1df0b61d3b5a 46
Michael J. Spencer 2:1df0b61d3b5a 47 typedef struct __attribute__ ((packed))
Michael J. Spencer 2:1df0b61d3b5a 48 {
Michael J. Spencer 2:1df0b61d3b5a 49 uint8_t bLength;
Michael J. Spencer 2:1df0b61d3b5a 50 uint8_t bDescriptorType;
Michael J. Spencer 2:1df0b61d3b5a 51 uint8_t bmAttributes;
Michael J. Spencer 2:1df0b61d3b5a 52 uint16_t wDetachTimeout;
Michael J. Spencer 2:1df0b61d3b5a 53 uint16_t wTransferSize;
Michael J. Spencer 2:1df0b61d3b5a 54 uint16_t bcdDFUVersion;
Michael J. Spencer 2:1df0b61d3b5a 55 } DFU_functional_descriptor;
Michael J. Spencer 2:1df0b61d3b5a 56
Michael J. Spencer 2:1df0b61d3b5a 57 typedef struct __attribute__ ((packed))
Michael J. Spencer 2:1df0b61d3b5a 58 {
Michael J. Spencer 2:1df0b61d3b5a 59 uint8_t bStatus;
Michael J. Spencer 2:1df0b61d3b5a 60 uint32_t bwPollTimeout:24;
Michael J. Spencer 2:1df0b61d3b5a 61 uint8_t bState;
Michael J. Spencer 2:1df0b61d3b5a 62 uint8_t iString;
Michael J. Spencer 2:1df0b61d3b5a 63 } DFU_Status_Response;
Michael J. Spencer 2:1df0b61d3b5a 64
Michael J. Spencer 2:1df0b61d3b5a 65
Michael J. Spencer 2:1df0b61d3b5a 66 class DFU : public USB_Class_Receiver, public Module {
Michael J. Spencer 2:1df0b61d3b5a 67 public:
Michael J. Spencer 2:1df0b61d3b5a 68 DFU(USB *);
Michael J. Spencer 2:1df0b61d3b5a 69
Michael J. Spencer 2:1df0b61d3b5a 70 virtual bool USBEvent_Request(CONTROL_TRANSFER&);
Michael J. Spencer 2:1df0b61d3b5a 71 virtual bool USBEvent_RequestComplete(CONTROL_TRANSFER&, uint8_t *buf, uint32_t length);
Michael J. Spencer 2:1df0b61d3b5a 72
Michael J. Spencer 2:1df0b61d3b5a 73 void on_module_loaded(void);
Michael J. Spencer 2:1df0b61d3b5a 74 void on_idle(void*);
Michael J. Spencer 2:1df0b61d3b5a 75
Michael J. Spencer 2:1df0b61d3b5a 76 protected:
Michael J. Spencer 2:1df0b61d3b5a 77 USB *usb;
Michael J. Spencer 2:1df0b61d3b5a 78
Michael J. Spencer 2:1df0b61d3b5a 79 DFU_functional_descriptor dfu_descriptor;
Michael J. Spencer 2:1df0b61d3b5a 80 usbdesc_interface dfu_interface;
Michael J. Spencer 2:1df0b61d3b5a 81
Michael J. Spencer 2:1df0b61d3b5a 82 usbdesc_string_l(12) dfu_string;
Michael J. Spencer 2:1df0b61d3b5a 83
Michael J. Spencer 2:1df0b61d3b5a 84 DFU_Status_Response dfu_status;
Michael J. Spencer 2:1df0b61d3b5a 85
Michael J. Spencer 2:1df0b61d3b5a 86 int prep_for_detach;
Michael J. Spencer 2:1df0b61d3b5a 87 };
Michael J. Spencer 2:1df0b61d3b5a 88
Michael J. Spencer 2:1df0b61d3b5a 89 #endif /* _DFU_H */