/* Circle Pad example made by Aurelio Mannara for ctrulib Please refer to https://github.com/smealum/ctrulib/blob/master/libctru/include/3ds/services/hid.h for more information This code was modified for the last time on: 12/13/2014 2:20 UTC+1 This wouldn't be possible without the amazing work done by: -Smealum -fincs -WinterMute -yellows8 -plutoo -mtheall -Many others who worked on 3DS and I'm surely forgetting about */ #include <3ds.h> #include int main(int argc, char **argv) { //Matrix containing the name of each key. Useful for printing when a key is pressed char keysNames[32][32] = { "KEY_A", "KEY_B", "KEY_SELECT", "KEY_START", "KEY_DRIGHT", "KEY_DLEFT", "KEY_DUP", "KEY_DDOWN", "KEY_R", "KEY_L", "KEY_X", "KEY_Y", "", "", "KEY_ZL", "KEY_ZR", "", "", "", "", "KEY_TOUCH", "", "", "", "KEY_CSTICK_RIGHT", "KEY_CSTICK_LEFT", "KEY_CSTICK_UP", "KEY_CSTICK_DOWN", "KEY_CPAD_RIGHT", "KEY_CPAD_LEFT", "KEY_CPAD_UP", "KEY_CPAD_DOWN" }; // Initialize services gfxInitDefault(); //Initialize console on top screen. Using NULL as the second argument tells the console library to use the internal console structure as current one consoleInit(GFX_TOP, NULL); u32 kDownOld = 0, kHeldOld = 0, kUpOld = 0; //In these variables there will be information about keys detected in the previous frame printf("\x1b[0;0HPress Start to exit."); printf("\x1b[1;0HCirclePad position:"); // Main loop while (aptMainLoop()) { //Scan all the inputs. This should be done once for each frame hidScanInput(); //hidKeysDown returns information about which buttons have been just pressed (and they weren't in the previous frame) u32 kDown = hidKeysDown(); //hidKeysHeld returns information about which buttons have are held down in this frame u32 kHeld = hidKeysHeld(); //hidKeysUp returns information about which buttons have been just released u32 kUp = hidKeysUp(); if (kDown & KEY_START) break; // break in order to return to hbmenu //Do the keys printing only if keys have changed if (kDown != kDownOld || kHeld != kHeldOld || kUp != kUpOld) { //Clear console consoleClear(); //These two lines must be rewritten because we cleared the whole console printf("\x1b[0;0HPress Start to exit."); printf("\x1b[1;0HCirclePad position:"); printf("\x1b[3;0H"); //Move the cursor to the fourth row because on the third one we'll write the circle pad position //Check if some of the keys are down, held or up int i; for (i = 0; i < 32; i++) { if (kDown & BIT(i)) printf("%s down\n", keysNames[i]); if (kHeld & BIT(i)) printf("%s held\n", keysNames[i]); if (kUp & BIT(i)) printf("%s up\n", keysNames[i]); } } //Set keys old values for the next frame kDownOld = kDown; kHeldOld = kHeld; kUpOld = kUp; circlePosition pos; //Read the CirclePad position hidCircleRead(&pos); //Print the CirclePad position printf("\x1b[2;0H%04d; %04d", pos.dx, pos.dy); // Flush and swap framebuffers gfxFlushBuffers(); gfxSwapBuffers(); //Wait for VBlank gspWaitForVBlank(); } // Exit services gfxExit(); return 0; }