mirror of
https://github.com/ShadauxCat/CATSFC.git
synced 2025-04-02 10:41:47 -04:00
285 lines
8.4 KiB
C
Executable file
285 lines
8.4 KiB
C
Executable file
#ifndef __DS2IO_H__
|
|
#define __DS2IO_H__
|
|
|
|
#ifndef BIT
|
|
#define BIT(a) (1<<a)
|
|
#endif
|
|
|
|
#define SCREEN_WIDTH 256
|
|
#define SCREEN_HEIGHT 192
|
|
|
|
#define AUDIO_BUFFER_COUNT 4 // in 1.2, that's 4, but in 0.13 it would be 16 [Neb]
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct touchPosition {
|
|
signed short x;
|
|
signed short y;
|
|
} touchPosition;
|
|
|
|
typedef struct T_INPUT
|
|
{
|
|
unsigned int keysHeld;
|
|
unsigned int keysUp;
|
|
unsigned int keysDown;
|
|
unsigned int keysDownRepeat;
|
|
touchPosition touchPt;
|
|
touchPosition movedPt;
|
|
int touchDown;
|
|
int touchUp;
|
|
int touchHeld;
|
|
int touchMoved;
|
|
}INPUT;
|
|
|
|
typedef enum KEYPAD_BITS {
|
|
KEY_A = BIT(0), //!< Keypad A button.
|
|
KEY_B = BIT(1), //!< Keypad B button.
|
|
KEY_SELECT = BIT(2), //!< Keypad SELECT button.
|
|
KEY_START = BIT(3), //!< Keypad START button.
|
|
KEY_RIGHT = BIT(4), //!< Keypad RIGHT button.
|
|
KEY_LEFT = BIT(5), //!< Keypad LEFT button.
|
|
KEY_UP = BIT(6), //!< Keypad UP button.
|
|
KEY_DOWN = BIT(7), //!< Keypad DOWN button.
|
|
KEY_R = BIT(8), //!< Right shoulder button.
|
|
KEY_L = BIT(9), //!< Left shoulder button.
|
|
KEY_X = BIT(10), //!< Keypad X button.
|
|
KEY_Y = BIT(11), //!< Keypad Y button.
|
|
KEY_TOUCH = BIT(12), //!< Touchscreen pendown.
|
|
KEY_LID = BIT(13) //!< Lid state.
|
|
} KEYPAD_BITS;
|
|
|
|
struct rtc{
|
|
volatile unsigned char year; //add 2000 to get 4 digit year
|
|
volatile unsigned char month; //1 to 12
|
|
volatile unsigned char day; //1 to (days in month)
|
|
|
|
volatile unsigned char weekday; // day of week
|
|
volatile unsigned char hours; //0 to 11 for AM, 52 to 63 for PM
|
|
volatile unsigned char minutes; //0 to 59
|
|
volatile unsigned char seconds; //0 to 59
|
|
};
|
|
|
|
struct key_buf
|
|
{
|
|
unsigned short key;
|
|
unsigned short x;
|
|
unsigned short y;
|
|
};
|
|
|
|
typedef enum SCREEN_ID
|
|
{
|
|
UP_SCREEN = 1,
|
|
DOWN_SCREEN = 2,
|
|
DUAL_SCREEN = 3,
|
|
JOINTUSE_SCREEN = 3
|
|
} SCREEN_ID;
|
|
|
|
#define UP_MASK 0x1
|
|
#define DOWN_MASK 0x2
|
|
#define DUAL_MASK 0x3
|
|
|
|
//video buffer address of up screen
|
|
extern void* up_screen_addr;
|
|
|
|
//video buffer address of down screen
|
|
extern void* down_screen_addr;
|
|
|
|
//every time call ds2_updateAudio() function, the ds2io layer will transfer
|
|
//audio_samples_per_trans *4 bytes audio data to NDS
|
|
extern unsigned int audio_samples_per_trans;
|
|
|
|
/*
|
|
* Function: initialize ds2 I/O(DS2 Input and Output) layer
|
|
* audio_samples_lenght: ds2io layer's audio buffer length, it unit is sample
|
|
* which is fixed 4(ds2io use stereo and 16-bit audio) bytes,
|
|
* audio_samples_lenght sholud be 128*n, 128 <= audio_samples_lenght <= 4096
|
|
* NOTE: the audio sampling frequence be fixed to 44.1KHz, 2 channels 16-bit
|
|
*/
|
|
extern int ds2io_init(int audio_samples_lenght);
|
|
|
|
/*
|
|
* Function: initialize ds2 I/O(DS2 Input and Output) layer (b version)
|
|
* audio_samples_lenght: ds2io layer's audio buffer length, it unit is sample
|
|
* which is fixed 4(ds2io use stereo and 16-bit audio) bytes,
|
|
* audio_samples_lenght sholud be 128*n, 128 <= audio_samples_lenght <= 4096
|
|
* audio_samples_freq: audio samples frequence, it should be among 44100, 22050,
|
|
* 11025
|
|
* reserved1: reserved for future using
|
|
* reserved2: reserved for future using
|
|
* NOTE: the audio samples are 2 channels 16-bit
|
|
*/
|
|
extern int ds2io_initb(int audio_samples_lenght, int audio_samples_freq, int reserved1,
|
|
int reserved2);
|
|
|
|
/*
|
|
* Function: update video data from buffer to screen, the ds2io layer have 2 video
|
|
* buffers for up screen and 2 video buffers for down screen, everytime
|
|
* ds2_flipScreen is called, up_screen_addr and/or down_buffer_addr
|
|
* point to the other buffer, but not always do so, see below.
|
|
* screen_num: UP_SCREEN, only update up screen
|
|
* DOWN_SCREEN, only update down screen
|
|
* DUAL_SCREEN, update both up screen and down screen
|
|
* done: after updating video data, the up_screen_addr and/or down_buffer_addr
|
|
* are ready to point the other buffer, but if the other buffer is busy:
|
|
* when done = 0, ds2_flipScreen returns without change up_screen_addr
|
|
* and/or down_buffer_addr pointer. it will not sure the graphic just
|
|
* updated will appear on the screen
|
|
* when done = 1, it will WAIT untill the other buffer idle and change
|
|
* the pointers and returns. the graphic just updated will appear on
|
|
* the screen, but please noting the word "WAIT"
|
|
* when done = 2, it will WAIT untill the other buffer idle, then return
|
|
* without change the pointers, it is convenient for GUI drawing
|
|
*/
|
|
extern void ds2_flipScreen(enum SCREEN_ID screen_num, int done);
|
|
|
|
/*
|
|
* Function: set the video buffer to a single color
|
|
* screen_num: UP_SCREEN, only set up screen buffer
|
|
* DOWN_SCREEN, only set down screen buffer
|
|
* DUAL_SCREEN, set both up screen and down screen buffer
|
|
*/
|
|
extern void ds2_clearScreen(enum SCREEN_ID screen_num, unsigned short color);
|
|
|
|
|
|
/*
|
|
* Function: there are AUDIO_BUFFER_COUNT audio buffers on the ds2io layer, this function to
|
|
* check how many buffers are occupied
|
|
*/
|
|
extern int ds2_checkAudiobuff(void);
|
|
|
|
/*
|
|
* Function: get audio buffer address
|
|
* NOTE: ds2_getAudiobuff may return NULL, even if ds2_checkAudiobuff() < AUDIO_BUFFER_COUNT.
|
|
* The fact are that, AUDIO_BUFFER_COUNT audio buffers are on NDS, the ds2io layer using
|
|
* 2 other buffers transfering data to the AUDIO_BUFFER_COUNT audio buffers alternately,
|
|
* this function checks the 2 buffers in ds2io layers whether are occupied,
|
|
* it will return the address of the idle buffer, else it return NULL
|
|
*/
|
|
extern void* ds2_getAudiobuff(void);
|
|
|
|
/*
|
|
* Function: flush audio data from buffer to ds2io layer
|
|
NOTE: execution of the function ds2_updateAudio() only put audio data transfer request to wait queue,
|
|
it is not equal that the audio data reach NDS buffer.
|
|
*/
|
|
extern void ds2_updateAudio(void);
|
|
|
|
|
|
/*
|
|
* Function: set audio info
|
|
* audio_samples_freq: default freq 44100Hz
|
|
* audio_sample_bit: 16bit
|
|
* audio_samples_lenght: sholud be 128*n, 128 <= audio_samples_lenght <= 4096
|
|
* channels: 2
|
|
* data_format: 0: interleave(L R L R L R L R ...) 1: group(L L L L ...R R R R ...)
|
|
*/
|
|
void ds2_setAudio( unsigned int audio_samples_freq, int audio_sample_bit, unsigned int audio_samples_lenght, int channels, int data_format );
|
|
|
|
|
|
#ifndef RGB15
|
|
#define RGB15(r,g,b) (((r)|((g)<<5)|((b)<<10))|BIT(15))
|
|
#endif
|
|
|
|
/*
|
|
* Functin: get time
|
|
*/
|
|
extern void ds2_getTime(struct rtc *time);
|
|
|
|
/*
|
|
* Function: get brightness of the screens
|
|
* return: fours levels 0, 1, 2, 3
|
|
*/
|
|
extern int ds2_getBrightness(void);
|
|
|
|
/*
|
|
* Function: set brightness of the screens
|
|
* Input: level, there are 4 levels, 0, 1, 2 and 3
|
|
*/
|
|
extern void ds2_setBrightness(int level);
|
|
|
|
/*
|
|
* Function: get the swaping state of the screens
|
|
*/
|
|
extern int ds2_getSwap(void);
|
|
|
|
/*
|
|
* Funciotn: swap up screen and down screen
|
|
*/
|
|
extern void ds2_setSwap(int swap);
|
|
|
|
/*
|
|
* Function: get backlight status
|
|
* input bit0 = 0 set down screen's backlight off
|
|
* bit0 = 1 set down screen's backlight on
|
|
* bit1 = 0 set up screen's backlight off
|
|
* bit1 = 1 set up screen's backlight on
|
|
*/
|
|
extern void ds2_setBacklight(int backlight);
|
|
|
|
/*
|
|
* Function: get backlight status
|
|
* return bit0 = 0 the down screen's backlight is off
|
|
* bit0 = 1 the down screen's backlight is on
|
|
* bit1 = 0 the up screen's backlight is off
|
|
* bit1 = 1 the up screen's backlight is on
|
|
*/
|
|
extern int ds2_getBacklight(void);
|
|
|
|
/*
|
|
* Function: system suspend
|
|
*/
|
|
extern void ds2_setSupend(void);
|
|
|
|
/*
|
|
* Function: system wakeup
|
|
*/
|
|
extern void ds2_wakeup(void);
|
|
|
|
/*
|
|
* Function: NDS power offf
|
|
*/
|
|
extern void ds2_shutdown(void);
|
|
|
|
/*
|
|
* Function: set volume of NDS
|
|
* Input: volume 0- mute
|
|
* 1 - 127 hardware adjust the volume
|
|
* 128-255 software adjust the volume, when close to 255, the sound may
|
|
* be saturation distortion
|
|
*/
|
|
extern void ds2_setVolume(int volume);
|
|
|
|
/*
|
|
* Funciton: get key value and touch screen position value
|
|
*/
|
|
extern void ds2_getrawInput(struct key_buf *input);
|
|
|
|
/*
|
|
* Function: system exit, return to DSTWO Menu
|
|
*/
|
|
extern void ds2_plug_exit(void);
|
|
|
|
/*
|
|
* Function: return ds2sdk version string
|
|
*/
|
|
extern const char* ds2_getVersion(void);
|
|
|
|
/*
|
|
* Function: Register a function for debug purpos, such as CONSOLE. when keys
|
|
* pressed, function fun will be called in the interruption
|
|
*/
|
|
extern void regist_escape_key(void (*fun)(void), unsigned int keys);
|
|
|
|
/*
|
|
* Function: release the function fointer registered by regist_escape_key
|
|
*/
|
|
extern void release_escape_key(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif //__DS2IO_H__
|
|
|