diff --git a/driver.h b/driver.h new file mode 100644 index 0000000000..36773176d8 --- /dev/null +++ b/driver.h @@ -0,0 +1,69 @@ +/* SSNES - A Super Ninteno Entertainment System (SNES) Emulator frontend for libsnes. + * Copyright (C) 2010 - Hans-Kristian Arntzen + * + * Some code herein may be based on code found in BSNES. + * + * SSNES is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * SSNES is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with SSNES. + * If not, see . + */ + + +#ifndef __DRIVER__H +#define __DRIVER__H + +#include +#include +#include + +struct snes_keybind +{ + int id; + int key; + int joykey; +}; + +typedef struct audio_driver +{ + void* (*init)(const char* device, int rate, int latency); + ssize_t (*write)(void* data, const void* buf, size_t size); + bool (*stop)(void* data); + bool (*start)(void* data); + void (*free)(void* data); +} audio_driver_t; + +typedef struct input_driver +{ + void* (*init)(void); + void (*poll)(void* data); + int16_t (*input_state)(void* data, const struct snes_keybind *snes_keybinds, bool port, unsigned device, unsigned index, unsigned id); + void (*free)(void* data); +} input_driver_t; + +typedef struct video_driver +{ + void* (*init)(int width, int height, bool fullscreen, bool vsync, bool force_aspect, input_driver_t **input); + // Should the video driver act as an input driver as well? :) + bool (*frame)(void* data, const uint16_t* frame, int width, int height); + void (*free)(void* data); +} video_driver_t; + + +typedef struct driver +{ + const audio_driver_t *audio; + const video_driver_t *video; + const input_driver_t *input; + void *audio_data; + void *video_data; + void *input_data; +} driver_t; + +#endif