2323 *
2424 */
2525
26- /*
26+ /*
2727 * After device is enumerated in dfu mode run the following commands
2828 *
2929 * To transfer firmware from host to device (best to test with text file)
4848//--------------------------------------------------------------------+
4949// MACRO CONSTANT TYPEDEF PROTYPES
5050//--------------------------------------------------------------------+
51- const char * upload_image [2 ]=
52- {
53- "Hello world from TinyUSB DFU! - Partition 0" ,
54- "Hello world from TinyUSB DFU! - Partition 1"
55- };
51+ const char * upload_image [2 ] = {"Hello world from TinyUSB DFU! - Partition 0" ,
52+ "Hello world from TinyUSB DFU! - Partition 1" };
5653
5754/* Blink pattern
5855 * - 250 ms : device not mounted
5956 * - 1000 ms : device mounted
6057 * - 2500 ms : device is suspended
6158 */
62- enum {
59+ enum {
6360 BLINK_NOT_MOUNTED = 250 ,
64- BLINK_MOUNTED = 1000 ,
65- BLINK_SUSPENDED = 2500 ,
61+ BLINK_MOUNTED = 1000 ,
62+ BLINK_SUSPENDED = 2500 ,
6663};
6764
6865static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED ;
6966
7067void led_blinking_task (void );
7168
7269/*------------- MAIN -------------*/
73- int main (void )
74- {
70+ int main (void ) {
7571 board_init ();
7672
7773 // init device stack on configured roothub port
78- tusb_rhport_init_t dev_init = {
79- .role = TUSB_ROLE_DEVICE ,
80- .speed = TUSB_SPEED_AUTO
81- };
74+ tusb_rhport_init_t dev_init = {.role = TUSB_ROLE_DEVICE , .speed = TUSB_SPEED_AUTO };
8275 tusb_init (BOARD_TUD_RHPORT , & dev_init );
8376
8477 board_init_after_tusb ();
8578
86- while (1 )
87- {
79+ while (1 ) {
8880 tud_task (); // tinyusb device task
8981 led_blinking_task ();
9082 }
@@ -95,29 +87,25 @@ int main(void)
9587//--------------------------------------------------------------------+
9688
9789// Invoked when device is mounted
98- void tud_mount_cb (void )
99- {
90+ void tud_mount_cb (void ) {
10091 blink_interval_ms = BLINK_MOUNTED ;
10192}
10293
10394// Invoked when device is unmounted
104- void tud_umount_cb (void )
105- {
95+ void tud_umount_cb (void ) {
10696 blink_interval_ms = BLINK_NOT_MOUNTED ;
10797}
10898
10999// Invoked when usb bus is suspended
110100// remote_wakeup_en : if host allow us to perform remote wakeup
111101// Within 7ms, device must draw an average of current less than 2.5 mA from bus
112- void tud_suspend_cb (bool remote_wakeup_en )
113- {
114- (void ) remote_wakeup_en ;
102+ void tud_suspend_cb (bool remote_wakeup_en ) {
103+ (void )remote_wakeup_en ;
115104 blink_interval_ms = BLINK_SUSPENDED ;
116105}
117106
118107// Invoked when usb bus is resumed
119- void tud_resume_cb (void )
120- {
108+ void tud_resume_cb (void ) {
121109 blink_interval_ms = tud_mounted () ? BLINK_MOUNTED : BLINK_NOT_MOUNTED ;
122110}
123111
@@ -129,19 +117,17 @@ void tud_resume_cb(void)
129117// Invoked right before tud_dfu_download_cb() (state=DFU_DNBUSY) or tud_dfu_manifest_cb() (state=DFU_MANIFEST)
130118// Application return timeout in milliseconds (bwPollTimeout) for the next download/manifest operation.
131119// During this period, USB host won't try to communicate with us.
132- uint32_t tud_dfu_get_timeout_cb (uint8_t alt , uint8_t state )
133- {
134- if ( state == DFU_DNBUSY )
135- {
120+ uint32_t tud_dfu_get_timeout_cb (uint8_t alt , uint8_t state ) {
121+ if (state == DFU_DNBUSY ) {
136122 // For this example
137123 // - Atl0 Flash is fast : 1 ms
138124 // - Alt1 EEPROM is slow: 100 ms
139125 return (alt == 0 ) ? 1 : 100 ;
140- }
141- else if (state == DFU_MANIFEST )
142- {
126+ } else if (state == DFU_MANIFEST ) {
143127 // since we don't buffer entire image and do any flashing in manifest stage
144128 return 0 ;
129+ } else {
130+ // nothing to do
145131 }
146132
147133 return 0 ;
@@ -150,15 +136,13 @@ uint32_t tud_dfu_get_timeout_cb(uint8_t alt, uint8_t state)
150136// Invoked when received DFU_DNLOAD (wLength>0) following by DFU_GETSTATUS (state=DFU_DNBUSY) requests
151137// This callback could be returned before flashing op is complete (async).
152138// Once finished flashing, application must call tud_dfu_finish_flashing()
153- void tud_dfu_download_cb (uint8_t alt , uint16_t block_num , uint8_t const * data , uint16_t length )
154- {
155- (void ) alt ;
156- (void ) block_num ;
139+ void tud_dfu_download_cb (uint8_t alt , uint16_t block_num , const uint8_t * data , uint16_t length ) {
140+ (void )alt ;
141+ (void )block_num ;
157142
158143 //printf("\r\nReceived Alt %u BlockNum %u of length %u\r\n", alt, wBlockNum, length);
159144
160- for (uint16_t i = 0 ; i < length ; i ++ )
161- {
145+ for (uint16_t i = 0 ; i < length ; i ++ ) {
162146 printf ("%c" , data [i ]);
163147 }
164148
@@ -169,9 +153,8 @@ void tud_dfu_download_cb(uint8_t alt, uint16_t block_num, uint8_t const* data, u
169153// Invoked when download process is complete, received DFU_DNLOAD (wLength=0) following by DFU_GETSTATUS (state=Manifest)
170154// Application can do checksum, or actual flashing if buffered entire image previously.
171155// Once finished flashing, application must call tud_dfu_finish_flashing()
172- void tud_dfu_manifest_cb (uint8_t alt )
173- {
174- (void ) alt ;
156+ void tud_dfu_manifest_cb (uint8_t alt ) {
157+ (void )alt ;
175158 printf ("Download completed, enter manifestation\r\n" );
176159
177160 // flashing op for manifest is complete without error
@@ -182,41 +165,43 @@ void tud_dfu_manifest_cb(uint8_t alt)
182165// Invoked when received DFU_UPLOAD request
183166// Application must populate data with up to length bytes and
184167// Return the number of written bytes
185- uint16_t tud_dfu_upload_cb (uint8_t alt , uint16_t block_num , uint8_t * data , uint16_t length )
186- {
187- (void ) block_num ;
188- (void ) length ;
168+ uint16_t tud_dfu_upload_cb (uint8_t alt , uint16_t block_num , uint8_t * data , uint16_t length ) {
169+ (void )block_num ;
170+ (void )length ;
189171
190- uint16_t const xfer_len = (uint16_t ) strlen (upload_image [alt ]);
172+ if (block_num != 0u ) {
173+ return 0 ; // for this example we only support single block upload
174+ }
175+
176+ const uint16_t xfer_len = tu_min16 ((uint16_t )strlen (upload_image [alt ]), length );
191177 memcpy (data , upload_image [alt ], xfer_len );
192178
193179 return xfer_len ;
194180}
195181
196182// Invoked when the Host has terminated a download or upload transfer
197- void tud_dfu_abort_cb (uint8_t alt )
198- {
199- (void ) alt ;
183+ void tud_dfu_abort_cb (uint8_t alt ) {
184+ (void )alt ;
200185 printf ("Host aborted transfer\r\n" );
201186}
202187
203188// Invoked when a DFU_DETACH request is received
204- void tud_dfu_detach_cb (void )
205- {
189+ void tud_dfu_detach_cb (void ) {
206190 printf ("Host detach, we should probably reboot\r\n" );
207191}
208192
209193//--------------------------------------------------------------------+
210194// BLINKING TASK + Indicator pulse
211195//--------------------------------------------------------------------+
212196
213- void led_blinking_task (void )
214- {
215- static uint32_t start_ms = 0 ;
216- static bool led_state = false;
197+ void led_blinking_task (void ) {
198+ static uint32_t start_ms = 0 ;
199+ static bool led_state = false;
217200
218201 // Blink every interval ms
219- if ( board_millis () - start_ms < blink_interval_ms ) return ; // not enough time
202+ if (board_millis () - start_ms < blink_interval_ms ) {
203+ return ; // not enough time
204+ }
220205 start_ms += blink_interval_ms ;
221206
222207 board_led_write (led_state );
0 commit comments