#ifndef NALL_SNES_USART_HPP #define NALL_SNES_USART_HPP #include #include #include #include #define usartproc dllexport static nall::function usart_usleep; static nall::function usart_read; static nall::function usart_write; extern "C" usartproc void usart_init( nall::function usleep, nall::function read, nall::function write ) { usart_usleep = usleep; usart_read = read; usart_write = write; } extern "C" usartproc void usart_main(); // static nall::serial usart; static bool usart_is_virtual = true; static bool usart_virtual() { return usart_is_virtual; } // static void usarthw_usleep(unsigned milliseconds) { usleep(milliseconds); } static uint8_t usarthw_read() { while(true) { uint8_t buffer[1]; signed length = usart.read((uint8_t*)&buffer, 1); if(length > 0) return buffer[0]; } } static void usarthw_write(uint8_t data) { uint8_t buffer[1] = { data }; usart.write((uint8_t*)&buffer, 1); } int main(int argc, char **argv) { bool result = false; if(argc == 1) result = usart.open("/dev/ttyACM0", 57600, true); if(argc == 2) result = usart.open(argv[1], 57600, true); if(result == false) { printf("error: unable to open USART hardware device\n"); return 0; } usart_is_virtual = false; usart_init(usarthw_usleep, usarthw_read, usarthw_write); usart_main(); usart.close(); return 0; } #endif