Skip to content

Instantly share code, notes, and snippets.

@rw-r-r-0644
Created November 4, 2016 21:56
Show Gist options
  • Save rw-r-r-0644/3ee11526149b552950b83805b5556e89 to your computer and use it in GitHub Desktop.
Save rw-r-r-0644/3ee11526149b552950b83805b5556e89 to your computer and use it in GitHub Desktop.
char *iosu_cwd = "";
void iosu_init() {
iosu_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (iosu_socket < 0)
return;
struct sockaddr_in connect_addr;
memset(&connect_addr, 0, sizeof(connect_addr));
connect_addr.sin_family = AF_INET;
connect_addr.sin_port = 1337;
inet_aton("127.0.0.1", &connect_addr.sin_addr);
if(connect(iosu_socket, (struct sockaddr*)&connect_addr, sizeof(connect_addr)) < 0)
{
socketclose(iosu_socket);
iosu_socket = -1;
}
}
void iosu_deinit() {
if(iosu_socket >= 0)
{
socketclose(iosu_socket);
iosu_socket = -1;
}
}
void iosu_print(const char *str) {
if(iosu_socket < 0) return;
while(log_lock) usleep(1000);
log_lock = 1;
int len = strlen(str);
int ret;
while (len > 0) {
int block = len < 1400 ? len : 1400; // take max 1400 bytes per UDP packet
ret = send(log_socket, str, block, 0);
if(ret < 0)
break;
len -= ret;
str += ret;
}
log_lock = 0;
}
u32 iosu_send(u32 command, u32 *data, u32 data_size, u32** result) {
u32 *request = malloc((data_size+1)*sizeof(u32));
request[0] = command;
memcpy(&request[1], data, data_size*sizeof(u32));
socket_send(request);
u32 response[0x600] = socket_recv(0x600);
memcpy(*result, &response[4], (0x600-4)*sizeof(u32));
return response[0];
}
u32 iosu_svc(u32 svc_id, u32 *args, u32 argsc) {
u32 data_size=argsc+1;
u32* data = malloc(data_size*sizeof(u32));
data[0] = svc_id;
memcpy(&data[1], args, argsc*sizeof(u32));
u32* result;
int ret = iosu_send(2, data, data_size, &result);
if (ret == 0) return result[0];
else {
return NULL;
}
}
void *iosu_alloc(u32 size) {
if (size == 0) return 0;
return self.svc(0x27, {0xCAFF, size}, 2);
}
void *iosu_alloc_aligned(u32 size, int align) {
if (size == 0) return 0;
return self.svc(0x28, [0xCAFF, size, align], 3);
}
int iosu_load_buffer(char *b) {
if (strlen(b) == 0) return 0;
address = iosu_alloc(strlen(b));
self.write(address, b)
return address
int iosu_load_buffer_aligned(char *b, int align) {
if (strlen(b) == 0) return 0;
address = iosu_alloc_aligned(strlen(b), align);
self.write(address, b)
return address
int iosu_open(char* device, int mode) {
address = iosu_load_buffer(device);
int handle = self.svc(0x33, [address, mode])
self.free(address)
return handle;
}
int iosu_mount_sd() {
int handle = iosu_open("/dev/fsa", 0);
int ret = iosu_FSA_Mount(handle, "/dev/sdcard01", "/vol/storage_sdcard", 2);
ret = iosu_close(handle);
}
void iosu_unmount_sd() {
int handle = iosu_open("/dev/fsa", 0);
int ret = iosu_FSA_Unmount(handle, "/vol/storage_sdcard", 2);
ret = iosu_close(handle);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment