summaryrefslogtreecommitdiff
path: root/packages/libndsfpc/src/nds/fifocommon.inc
blob: 06fa3ff1a3d58bd9973d9b9fcc33416b1e39f84f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147

{$ifdef NDS_INTERFACE}
 
type
  FifoChannels = integer;
const
  FIFO_PM      : FifoChannels = 0;
  FIFO_SOUND   : FifoChannels = 1;
  FIFO_SYSTEM  : FifoChannels = 2;
  FIFO_MAXMOD  : FifoChannels = 3;
  FIFO_DSWIFI  : FifoChannels = 4;
  FIFO_SDMMC   : FifoChannels = 5;
  FIFO_FIRMWARE: FifoChannels = 6;
  FIFO_RSVD_01 : FifoChannels = 7;
  FIFO_USER_01 : FifoChannels = 8;
  FIFO_USER_02 : FifoChannels = 9;
  FIFO_USER_03 : FifoChannels = 10;	    
  FIFO_USER_04 : FifoChannels = 11;	    
  FIFO_USER_05 : FifoChannels = 12;	    
  FIFO_USER_06 : FifoChannels = 13;	    
  FIFO_USER_07 : FifoChannels = 14;	    
  FIFO_USER_08 : FifoChannels = 15;
  
  
type
  FifoSoundCommand = integer;
const
  SOUND_SET_PAN         : FifoSoundCommand = ( 0 shl 20);
  SOUND_SET_VOLUME      : FifoSoundCommand = ( 1 shl 20);
  SOUND_SET_FREQ        : FifoSoundCommand = ( 2 shl 20);
  SOUND_SET_WAVEDUTY    : FifoSoundCommand = ( 3 shl 20);
  SOUND_MASTER_ENABLE   : FifoSoundCommand = ( 4 shl 20);
  SOUND_MASTER_DISABLE  : FifoSoundCommand = ( 5 shl 20);
  SOUND_PAUSE           : FifoSoundCommand = ( 6 shl 20);
  SOUND_RESUME          : FifoSoundCommand = ( 7 shl 20);
  SOUND_KILL            : FifoSoundCommand = ( 8 shl 20);
  SET_MASTER_VOL        : FifoSoundCommand = ( 9 shl 20);
  MIC_STOP              : FifoSoundCommand = (10 shl 20);

type
  FifoSystemCommands = integer;
const
  SYS_REQ_TOUCH      : FifoSystemCommands = 0;
  SYS_REQ_KEYS       : FifoSystemCommands = 1;
  SYS_REQ_TIME       : FifoSystemCommands = 2;
  SYS_SET_TIME       : FifoSystemCommands = 3;
  SDMMC_INSERT       : FifoSystemCommands = 4;
  SDMMC_REMOVE       : FifoSystemCommands = 5;  
  
type
 FifoSdmmcCommands = integer;
const
  SDMMC_HAVE_SD        : FifoSystemCommands = 0;
	SDMMC_SD_START       : FifoSystemCommands = 1;
	SDMMC_SD_IS_INSERTED : FifoSystemCommands = 2;
	SDMMC_SD_STOP        : FifoSystemCommands = 3;
	SDMMC_NAND_START     : FifoSystemCommands = 4;
	SDMMC_NAND_STOP      : FifoSystemCommands = 5;

type
  FifoFirmwareCommands = integer;
const
	FW_READ  = 0;
	FW_WRITE = 1;

type
  FifoPMCommands = integer;
const
  PM_REQ_ON             : FifoPMCommands = (1 shl 16);
  PM_REQ_OFF            : FifoPMCommands = (2 shl 16);
  PM_REQ_LED            : FifoPMCommands = (3 shl 16);
  PM_REQ_SLEEP          : FifoPMCommands = (4 shl 16);
  PM_REQ_SLEEP_DISABLE  : FifoPMCommands = (5 shl 16);
  PM_REQ_SLEEP_ENABLE   : FifoPMCommands = (6 shl 16);
  PM_REQ_BATTERY        : FifoPMCommands = (7 shl 16);
  PM_DSI_HACK           : FifoPMCommands = (8 shl 16);
	
type
  FifoWifiCommands = integer;
const
  WIFI_ENABLE   : FifoWifiCommands = 0;
  WIFI_DISABLE  : FifoWifiCommands = 1;
  WIFI_SYNC     : FifoWifiCommands = 2;
  WIFI_STARTUP  : FifoWifiCommands = 3;

type
  PM_LedBlinkMode = integer;
const
  PM_LED_ON   : PM_LedBlinkMode = 0;
  PM_LED_SLEEP: PM_LedBlinkMode = 1;
  PM_LED_BLINK: PM_LedBlinkMode = 3;

//var
//  fifo_buffer: array [0..FIFO_BUFFER_ENTRIES*2-1] of cuint32; cvar; external;


{$ifdef FIFO_RIGOROUS_ERROR_CHECKING}
	function fifoError(value: pchar; array of const): integer; cdecl; external;// expected to be defined externally.
{$endif}

type  // FUNCTION(...):POINTER or PROCEDURE?!?
  FifoAddressHandlerFunc = function(address, userdata: pointer): pointer;
  FifoValue32HandlerFunc = function(value32: cuint32; userdata: pointer): pointer;
  FifoDatamsgHandlerFunc = function(num_bytes: integer; userdata: pointer): pointer;

function fifoInit(): cbool; cdecl; external;
function fifoSendAddress(channel: integer; address: pointer): cbool; cdecl; external;
function fifoSendValue32(channel: integer; value32: cuint32): cbool; cdecl; external;

function fifoSendDatamsg(channel, num_bytes: integer; data_array: pcuint8): cbool; cdecl; external;

function fifoSetAddressHandler(channel: integer; newhandler: FifoAddressHandlerFunc; userdata: pointer): cbool; cdecl; external;
function fifoSetValue32Handler(channel: integer; newhandler: FifoValue32HandlerFunc; userdata: pointer): cbool; cdecl; external;
function fifoSetDatamsgHandler(channel: integer; newhandler: FifoDatamsgHandlerFunc; userdata: pointer): cbool; cdecl; external;

function fifoCheckAddress(channel: integer): cbool; cdecl; external;
function fifoCheckValue32(channel: integer): cbool; cdecl; external;
function fifoCheckDatamsg(channel: integer): cbool; cdecl; external;

function fifoCheckDatamsgLength(channel: integer): cint; cdecl; external;

function fifoGetAddress(channel: integer): pointer; cdecl; external;

function fifoGetValue32(channel: integer): cuint32; cdecl; external;

function fifoGetDatamsg(channel, buffersize: cint; destbuffer: pcuint8): cint; cdecl; external;

procedure fifoWaitValue32(channel: cint); inline; 

{$endif NDS_INTERFACE}



{$ifdef NDS_IMPLEMENTATION}

procedure fifoWaitValue32(channel: cint); inline; 
begin

	while (not fifoCheckValue32(channel)) do
	begin
		swiIntrWait(1, IRQ_FIFO_NOT_EMPTY);
	end;

end;


{$endif NDS_IMPLEMENTATION}