#include // Create external function at 0x00006f88 extern void maybe_usb_setup_read(char endpoint,void *fun,uint32_t target_buffer); extern void dwc3_ep0_start_trans(char endpoint,uint32_t target_buf, uint32_t len); extern int usb_event_handler(void); extern void * get_endpoint_buffer(char endpoint); extern void sleep(int endpoint,uint32_t timeout); #define recv_buffer 0x02021800 + 0x2000 #define data_received 0x02021800 + 0x2004 // do { // /* loops until image has been received */ // usb_event_handler(); // iVar2 = download_ready?(); #TODO, set some global to indicate readyness // } while (iVar2 == 0); void recv_data_cb(uint32_t endpoint, uint32_t len){ void *rbuf; void *dest_buf = (void *)recv_buffer; volatile void *dref = (void *)data_received; for(int i= 0; i < len; i++){ rbuf = get_endpoint_buffer(2); *(char *)dest_buf = *(char *)(void *)((int)rbuf + i); } // while(1){} // asm("mov x0, #0x0"); // asm("br x0"); *(uint8_t *)dref = 3; } void recv_data(){ // Set data_received to 0 // uint32_t *r = (uint32_t *) data_received; // r = 0; volatile void *dref = (void *)data_received; *(uint8_t *)dref = 0; maybe_usb_setup_read(2, recv_data_cb, 1); while(1){ usb_event_handler(); if(*(uint8_t *)dref == 3){ break; } sleep(1, 10); } } int main() { recv_data(); // recv_data(); // sleep(1, 5000); asm("mov x0, #0x0"); asm("br x0"); }