1 /*---------------------------------------------------------------------------*
2 Project: SC demo
3 File: main.c
4
5 Copyright 2006 Nintendo. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Log: main.c,v $
14 Revision 1.9 08/08/2006 12:41:50 kawaset
15 Added SCGetWpadMotorMode, SCGetWpadSensorBarPosition, SCGetWpadSpeakerVolume, SCSetWpadMotorMode, SCSetWpadSensorBarPosition, and SCSetWpadSpeakerVolume.
16 Deleted SCEmuSetAspectRatio and SCEmuSetLanguage.
17
18 Revision 1.8 06/09/2006 02:05:00 kawaset
19 Added checking result of NANDInit().
20
21 Revision 1.7 06/05/2006 10:35:58 kawaset
22 Do check before SCFlush*().
23
24 Revision 1.6 06/01/2006 11:08:31 kawaset
25 Deleted timezone.
26
27 Revision 1.5 05/26/2006 12:40:26 kawaset
28 Full model change.
29
30 Revision 1.4 02/17/2006 01:49:35 kawaset
31 Changed message on exit.
32
33 Revision 1.3 02/16/2006 12:56:01 hiratsu
34 Deleted NAND* API call.
35
36 Revision 1.2 02/07/2006 01:11:37 kawaset
37 Fixed build error for RVL
38
39 Revision 1.1 02/03/2006 12:57:05 kawaset
40 Initial check-in.
41
42
43 $NoKeywords: $
44 *---------------------------------------------------------------------------*/
45 #include <revolution/os.h>
46 #include <revolution/sc.h>
47 #include <stdlib.h>
48 #include <string.h>
49
50 static u32 DemoFlushCount;
51 static u32 DemoFlushResult;
52
DemoFlushCallback(u32 result)53 static void DemoFlushCallback(u32 result)
54 {
55 DemoFlushResult = result;
56 }
57
DemoMain(void)58 static void DemoMain(void)
59 {
60 char *msg;
61 u8 aspectRatio;
62 u8 language;
63 u8 euRgb60Mode;
64 u8 progressiveMode;
65 u8 soundMode;
66 u8 wpadSpeakerVolume;
67 u8 wpadMotorMode;
68 u8 wpadSensorBarPosition;
69
70 OSReport("DemoMain() called\n");
71
72 aspectRatio = SCGetAspectRatio();
73 switch (aspectRatio) {
74 case SC_ASPECT_RATIO_4x3:
75 msg = "4x3";
76 break;
77
78 case SC_ASPECT_RATIO_16x9:
79 msg = "16x9";
80 break;
81
82 default:
83 msg = "UNKNOWN";
84 break;
85 }
86 OSReport("Aspect Ratio = %s\n", msg);
87
88 language = SCGetLanguage();
89 switch (language) {
90 case SC_LANG_JAPANESE:
91 msg = "Japanese";
92 break;
93
94 case SC_LANG_ENGLISH:
95 msg = "English";
96 break;
97
98 case SC_LANG_GERMAN:
99 msg = "German";
100 break;
101
102 case SC_LANG_FRENCH:
103 msg = "French";
104 break;
105
106 case SC_LANG_SPANISH:
107 msg = "Spanish";
108 break;
109
110 case SC_LANG_ITALIAN:
111 msg = "Italian";
112 break;
113
114 case SC_LANG_DUTCH:
115 msg = "Dutch";
116 break;
117
118 default:
119 msg = "UNKNOWN";
120 break;
121 }
122 OSReport("Language = %s\n", msg);
123
124 euRgb60Mode = SCGetEuRgb60Mode();
125 switch (euRgb60Mode) {
126 case SC_EURGB60_MODE_OFF:
127 msg = "OFF";
128 break;
129
130 case SC_EURGB60_MODE_ON:
131 msg = "ON";
132 break;
133
134 default:
135 msg = "UNKNOWN";
136 break;
137 }
138 OSReport("EURGB60 Mode = %s\n", msg);
139
140 progressiveMode = SCGetProgressiveMode();
141 switch (progressiveMode) {
142 case SC_PROGRESSIVE_MODE_OFF:
143 msg = "OFF";
144 break;
145
146 case SC_PROGRESSIVE_MODE_ON:
147 msg = "ON";
148 break;
149
150 default:
151 msg = "UNKNOWN";
152 break;
153 }
154 OSReport("Progressive Mode = %s\n", msg);
155
156 soundMode = SCGetSoundMode();
157 switch (soundMode) {
158 case SC_SOUND_MODE_MONO:
159 msg = "MONO";
160 break;
161
162 case SC_SOUND_MODE_STEREO:
163 msg = "STEREO";
164 break;
165
166 case SC_SOUND_MODE_SURROUND:
167 msg = "SURROUND";
168 break;
169
170 default:
171 msg = "UNKNOWN";
172 break;
173 }
174 OSReport("Sound Mode = %s\n", msg);
175
176 wpadSpeakerVolume = SCGetWpadSpeakerVolume();
177 OSReport("WPAD Speaker Volume = %d\n", wpadSpeakerVolume);
178
179 wpadMotorMode = SCGetWpadMotorMode();
180 switch (wpadMotorMode) {
181 case SC_WPAD_MOTOR_MODE_OFF:
182 msg = "OFF";
183 break;
184
185 case SC_WPAD_MOTOR_MODE_ON:
186 msg = "ON";
187 break;
188
189 default:
190 msg = "UNKNOWN";
191 break;
192 }
193 OSReport("WPAD Motor Mode = %s\n", msg);
194
195 wpadSensorBarPosition = SCGetWpadSensorBarPosition();
196 switch (wpadSensorBarPosition) {
197 case SC_WPAD_SENSOR_BAR_POSITION_LOWER:
198 msg = "Lower";
199 break;
200
201 case SC_WPAD_SENSOR_BAR_POSITION_UPPER:
202 msg = "Upper";
203 break;
204
205 default:
206 msg = "UNKNOWN";
207 break;
208 }
209 OSReport("WPAD Sensor Bar Position = %s\n", msg);
210 }
211
main(void)212 int main(void)
213 {
214 SCInit();
215
216 {
217 u32 status;
218 u32 count = 0;
219
220 // Wait until SC initialize finishes
221 do {
222 status = SCCheckStatus();
223 count++;
224 } while (status == SC_STATUS_BUSY);
225
226 OSReport("SCInit finished. status = %d, count = %d\n", status, count);
227 if (status != SC_STATUS_OK) {
228 OSHalt("Demo failed");
229 }
230 }
231
232 DemoMain();
233
234 {
235 u32 status = SCCheckStatus();
236
237 if (status == SC_STATUS_OK) {
238 SCFlushAsync(DemoFlushCallback);
239
240 while (SCCheckStatus() == SC_STATUS_BUSY) {
241 DemoFlushCount++;
242 }
243 OSReport("SCFlushAsync result=%d, count=%d\n", DemoFlushResult, DemoFlushCount);
244 } else {
245 OSReport("SCFlushAsync was not executed due to status (%d)\n", status);
246 }
247 }
248
249 OSReport("\n");
250 OSHalt("Demo complete");
251 return EXIT_SUCCESS;
252 }
253