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