Samsung_S7/test_dwc3.c

58 lines
1.5 KiB
C
Raw Normal View History

2024-07-22 22:08:17 +00:00
#include <stdint.h>
// 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");
}