int sio_puts(const char *str) { int res; res = sio_putsn(str); sio_putc('\r'); sio_putc('\n'); return res + 2; }
int ioPrintf(const char* format, ...) { WaitSema(gIOPrintfSemaId); va_list args; va_start(args, format); #ifdef __EESIO_DEBUG int ret = vsnprintf((char *)tbuf, sizeof(tbuf), format, args); sio_putsn(tbuf); #else int ret = vprintf(format, args); #endif va_end(args); SignalSema(gIOPrintfSemaId); return ret; }
static void * sior_rpc_server(u32 funcno, void * data, int size) { int res = 0, c; size_t s; char * p; struct init_arguments_t * i; switch(funcno) { case SIOR_INIT: i = (struct init_arguments_t *) data; sio_init(i->baudrate, i->lcr_ueps, i->lcr_upen, i->lcr_usbl, i->lcr_umode); break; case SIOR_PUTC: c = *((int *) data); res = sio_putc(c); break; case SIOR_GETC: res = sio_getc(); break; case SIOR_GETCBLOCK: res = sio_getc_block(); break; case SIOR_WRITE: p = *((char **) data) + IOP_MEM; s = *(((size_t *) data) + 1); DI(); ee_kmode_enter(); res = sio_write(p, s); ee_kmode_exit(); EI(); break; case SIOR_READ: p = *((char **) data) + IOP_MEM; s = *(((size_t *) data) + 1); DI(); ee_kmode_enter(); res = sio_read(p, s); ee_kmode_exit(); EI(); break; case SIOR_PUTS: p = *((char **) data) + IOP_MEM; DI(); ee_kmode_enter(); res = sio_puts(p); ee_kmode_exit(); EI(); break; case SIOR_PUTSN: p = *((char **) data) + IOP_MEM; DI(); ee_kmode_enter(); res = sio_putsn(p); ee_kmode_exit(); EI(); break; case SIOR_GETS: p = *((char **) data) + IOP_MEM; DI(); ee_kmode_enter(); (char*)res = sio_gets(p); ee_kmode_exit(); EI(); break; case SIOR_FLUSH: sio_flush(); break; } *((int *) data) = res; return data; }