int waitForButton(int targetedButton) { int pressedButton; do pressedButton = keyCheck(0); while (!(pressedButton > 0 && ((pressedButton == targetedButton) || (targetedButton == 0)))); return pressedButton; }
int waitAndCheckKeys(int t) { //t=time in msec unsigned int i; unsigned long j; int key; unsigned long int cyclesPerMilliSecond = (long)(*P_PLLN & 0x3f) * 1000L; // 96000 at 96MHz const unsigned int cyclesPerKeyCheck = 400; // cycles for each no-operation instruction const unsigned int KeyChecksPerMilliSecond = cyclesPerMilliSecond / cyclesPerKeyCheck; // loop count per millisecond for (i = 0; i < t; i++) { for (j = 0; j < KeyChecksPerMilliSecond; j++) { key = keyCheck(0); if (key) break; } if (key) break; } return key; }
static void keyResponse(void) { // respond to key events int keystroke; if (context.keystroke) { keystroke = context.keystroke; context.keystroke = 0; } else keystroke = keyCheck(0); if (keystroke) checkInactivity(TRUE); if (keystroke == KEY_PLAY) { processButtonEvent(PLAY); } else if (keystroke == KEY_LEFT) { // TODO:doesn't yet look at possibility of relative jump action within same context (expects a context change) processButtonEvent(LEFT); } else if(keystroke == KEY_RIGHT) { processButtonEvent(RIGHT); } else if (keystroke == KEY_UP) { processButtonEvent(UP); } else if (keystroke == KEY_DOWN) { processButtonEvent(DOWN); } else if (keystroke == KEY_SELECT) { processButtonEvent(SELECT); } else if (keystroke == KEY_HOME) { processButtonEvent(HOME); } else if (keystroke == KEY_STAR) { processButtonEvent(STAR); } else if (keystroke == KEY_PLUS) { processButtonEvent(PLUS); } else if (keystroke == KEY_MINUS) { processButtonEvent(MINUS); } }
static void setTurboA(unsigned long key) { g_config->setOption("SDL.Input.GamePad.0TurboA", keyCheck(key)); UpdateInput(g_config); }
void startUp(void) { char buffer[200]; char strCounts[20]; int key; SetSystemClockRate(MAX_CLOCK_SPEED); // to speed up initial startup -- set CLOCK_RATE later setDefaults(); setLED(LED_RED,FALSE); // red light can be left on after reprog restart setLED(LED_GREEN,TRUE); // red light can be left on after reprog restart //to stop user from wondering if power is on and possibly cycling too quickly, playDing(); // it is important to play a sound immediately key = keyCheck(1); // long keycheck // voltage checks in SystemIntoUSB.c if (key == KEY_STAR || key == KEY_MINUS) { // allows USB device mode no matter what is on memory card Snd_Stop(); SystemIntoUDisk(1); loadConfigFile(); processInbox(); resetSystem(); } else if (key == KEY_PLUS) { // outbox mode: copy outbox files to connecting device loadConfigFile(); copyOutbox(); resetSystem(); } // check for new firmware first, but don't flash if voltage is low if(V_MIN_SDWRITE_VOLTAGE <= vCur_1) { check_new_sd_flash(); } if (loadConfigFile() == -1) // config.txt file not found testPCB(); if (!SNexists()) logException(32,(const char *)"no serial number",SHUT_DOWN); SysDisableWaitMode(WAITMODE_CHANNEL_A); adjustVolume(NORMAL_VOLUME,FALSE,FALSE); adjustSpeed(NORMAL_SPEED,FALSE); loadDefaultPackage(); if (MACRO_FILE) loadMacro(); loadSystemCounts(); systemCounts.powerUpNumber++; if (systemCounts.powerUpNumber - systemCounts.lastLogErase > MAX_PWR_CYCLES_IN_LOG) { systemCounts.lastLogErase = systemCounts.powerUpNumber; clearStaleLog(); } #ifndef TB_CAN_WAKE resetRTC(); // reset before saving anything to disk and running macros #endif saveSystemCounts(); strcpy(buffer,"\x0d\x0a" "---------------------------------------------------\x0d\x0a"); strcat(buffer,getDeviceSN(1)); strcpy(strCounts,(char *)" counts:S"); longToDecimalString(systemCounts.powerUpNumber, strCounts+9, 4); strcat(strCounts,(char *)"P"); longToDecimalString(systemCounts.packageNumber, strCounts+14, 4); strcat(strCounts,(char *)"R"); longToDecimalString(systemCounts.revdPkgNumber, strCounts+19, 4); strcat(buffer,strCounts); strcat(buffer,"\x0d\x0a" "CYCLE "); //cycle number longToDecimalString(systemCounts.powerUpNumber,(char *)(buffer+strlen(buffer)),4); strcat(buffer,(const char *)" - version " VERSION); logString(buffer,BUFFER); #ifdef TB_CAN_WAKE logRTC(); #endif loadPackage(PKG_SYS,BOOT_PACKAGE); SetSystemClockRate(CLOCK_RATE); // either set in config file or the default 48 MHz set at beginning of startUp() mainLoop(); }
static int recordAudio(char *pkgName, char *cursor, BOOL relatedToLastPlayed) { unsigned long getAvailRand(); int handle, ret = -1; char temp[PATH_LENGTH]; char filepath[PATH_LENGTH]; char unique_id[PATH_LENGTH], digits[16]; long start, end, prev; CtnrFile *file; int key; int low_voltage, v; unsigned long wrk1; char *cp, *cp1, category[9]; long metadata_start; long metadata_numfields; unsigned long rand1; long previousBitRate; previousBitRate = BIT_RATE; // set to return BIT_RATE to orig value at end of fct, in case BIT_RATE is changed below rand1 = getAvailRand(); // pick random value to identify this recording unsignedlongToHexString((long)rand1,digits); if (strcmp(cursor,TRANSLATE_TEMP_DIR) == 0) { strcpy(filepath,LANGUAGES_PATH); strcat(filepath,TRANSLATE_TEMP_DIR); strcat(filepath,"/"); strcat(filepath,pkgName); strcat(filepath,AUDIO_FILE_EXT); BIT_RATE = MAX_BIT_RATE; } else if (*cursor == SYS_MSG_CHAR) { strcpy(filepath,LANGUAGES_PATH); catLangDir(filepath); // strcat(filepath,pkgName); cp1 = filepath + strlen(filepath); // save this position strcat(filepath, (char *)TB_SERIAL_NUMBER_ADDR + CONST_TB_SERIAL_PREFIX_LEN); strcat(filepath, "_"); strcat(filepath, digits); strcpy(pkgName, cp1); // change pkgName to show file name we used strcat(filepath,AUDIO_FILE_EXT); } else { strcpy(filepath,USER_PATH); // strcat(filepath,pkgName); cp1 = filepath + strlen(filepath); // save this position strcat(filepath, (char *)TB_SERIAL_NUMBER_ADDR + CONST_TB_SERIAL_PREFIX_LEN); strcat(filepath, "_"); strcat(filepath, digits); strcpy(pkgName, cp1); // change pkgName to show file name we used strcat(filepath,AUDIO_FILE_EXT); } file = getTempFileFromName(cursor,0); if (strcmp(cursor,TRANSLATE_TEMP_DIR) != 0) insertSound(file,NULL,FALSE); if (context.keystroke == KEY_HOME) { //let context.keystroke propogate through ret = 1; // signals no audio recorded but not necessary to throw exception } else { start = getRTCinSeconds(); strcpy(temp,"\x0d\x0a"); longToDecimalString(start,temp+2,8); strcat(temp,(const char *)": RECORD "); LBstrncat(temp,pkgName,60); LBstrncat(temp," -> ",60); LBstrncat(temp,cursor,60); logString(temp,BUFFER); // play record prompt message unless running translation app or if a button was just pressed if (!context.keystroke && strcmp(cursor,TRANSLATE_TEMP_DIR) != 0) { insertSound(&pkgSystem.files[SPEAK_SOUND_FILE_IDX],NULL,FALSE); if (context.keystroke == KEY_HOME) ret = 1; // signals no audio recorded but not necessary to throw exception else context.keystroke = 0; } else context.keystroke = 0; // reset context.keystroke so a second action doesn't take place stop(); start = getRTCinSeconds(); prev = end = start; //asm("INT OFF"); // to prevent recordings with bad blocks } // only open file to record if HOME was not pressed and only proceed if file opens correctly if (ret != 1 && ((handle = tbOpen((LPSTR)filepath,O_CREAT|O_RDWR)) != -1)) { setLED(LED_RED,TRUE); playBip(); turnAmpOff(); Snd_SACM_RecFAT(handle, C_CODEC_AUDIO1800, BIT_RATE); low_voltage = 0; do { end = getRTCinSeconds(); if (0==(end%2) && (prev != end)) { // blink LED every three seconds prev = end; setLED(LED_RED,FALSE); wait (100); setLED(LED_RED,TRUE); while((v = getCurVoltageSample()) == 0xffff); if(vCur_1 < V_MIN_SDWRITE_VOLTAGE) { low_voltage = 1; } } key = keyCheck(0); if (key == KEY_PLAY) { // pause TODO: this key press to pause shouldn't be hard coded pause(); setLED(LED_RED,FALSE); // insertSound(&pkgSystem.files[REC_PAUSED_FILE_IDX],NULL,FALSE); ---need to play this from memory do key = keyCheck(0); // TODO: NEED CODE HERE TO SAFELY SAVE FILE WHEN PAUSED FOR EXTENDED PERIOD OF TIME (maybe 60 min?) // checkInactivity(key); --- this would cause recording to be lost in just 30-300 sec inactivity while (!key); if (key == KEY_PLAY) { setLED(LED_RED,TRUE); resume(); } } } while ((!key || (key == KEY_PLAY)) && (low_voltage == 0)); // TODO: this key press to stop shouldn't be hard coded // while ((end - start) < 3) { // must be at least 2.0 second recording // end = getRTCinSeconds(); // } SACM_Stop(); //Snd_Stop(); // no need to call stop() and flush the log setLED(LED_RED,FALSE); turnAmpOn(); playDing(); //lseek(handle, 6, SEEK_SET ); //Seek to the start of the file input //write(handle,(LPSTR)header<<1,6); // write meta data to end of file close(handle); // rhm: I think its already closed, I can't write to it here systemCounts.recordingNumber++; // bump global recording number saveSystemCounts(); handle = tbOpen((LPSTR)filepath,O_RDWR); metadata_start = lseek(handle, 0L, SEEK_END); // offset to start of metadata metadata_numfields = 0L; // init num fields wrk1 = METADATA_VERSION; writeLE32(handle, wrk1, CURRENT_POS); //meta data version = 1 writeLE32(handle, metadata_numfields, CURRENT_POS); // 4 byte for num fields strcpy(unique_id, (char *)TB_SERIAL_NUMBER_ADDR + CONST_TB_SERIAL_PREFIX_LEN); // skip serial number prefix strcat(unique_id, "_"); strcat(unique_id, digits); addField(handle, DC_IDENTIFIER, unique_id, 1); metadata_numfields += 1; addField(handle, DTB_REVISION, (char *)"0", 1); metadata_numfields += 1; strcpy(unique_id, (char *)TB_SERIAL_NUMBER_ADDR + CONST_TB_SERIAL_PREFIX_LEN); // skip serial number prefix strcat(unique_id, "_"); longToDecimalString(systemCounts.powerUpNumber,(char *)temp,4); strcat(unique_id, temp); strcat(unique_id, "_"); longToDecimalString(systemCounts.recordingNumber,(char *)temp,4); strcat(unique_id, temp); strcat(unique_id, "_"); strncat(unique_id, digits, 8); addField(handle, DC_TITLE, unique_id, 1); metadata_numfields += 1; // strcpy(unique_id, (char *)TB_SERIAL_NUMBER_ADDR + CONST_TB_SERIAL_PREFIX_LEN); // skip serial number prefix // strcat(unique_id, "_"); // strcat(unique_id, digits); // addField(handle, DC_AUDIO_ITEM_ID, unique_id, 1); // metadata_numfields += 1; if (pkgSystem.idxLanguageCode != -1) { strcpy(unique_id,&pkgSystem.strHeapStack[pkgSystem.idxLanguageCode]); addField(handle, DC_LANGUAGE, unique_id, 1); metadata_numfields += 1; } cp = cursor; if(cp != NULL) { if(*cp >= '0' && *cp <= '9') { strcpy(category, cursor); } else if(!strncmp(cp, "AGR", 3)) strcpy(category, CAT_AGRICULTURE); else if(!strncmp(cp, "HEA", 3)) strcpy(category, CAT_HEALTH); else if(!strncmp(cp, "EDU", 3)) strcpy(category, CAT_EDUCATION); else if(!strncmp(cp, "STO", 3)) strcpy(category, CAT_STORIES); else if(!strncmp(cp, "BUS", 3)) strcpy(category, CAT_BUSINESS); else if(!strncmp(cp, "GOV", 3)) strcpy(category, CAT_GOVERNANCE); else if(!strncmp(cp, "MUS", 3)) strcpy(category, CAT_MUSIC); else if(!strncmp(cp, "DIA", 3)) strcpy(category, CAT_DIARY); else strcpy(category, CAT_OTHER); } addField(handle, DC_CATEGORY, category, 1); metadata_numfields += 1; if(relatedToLastPlayed) { strcpy(unique_id, STAT_FN); // DC_IDENTIFIER read at open if(strlen(unique_id)) { addField(handle,DC_RELATION,unique_id,1); metadata_numfields += 1; } } strcpy(unique_id, (char *)TB_SERIAL_NUMBER_ADDR + CONST_TB_SERIAL_PREFIX_LEN); // skip serial number prefix addField(handle,DC_SOURCE,unique_id,1); metadata_numfields += 1; longToDecimalString(systemCounts.powerUpNumber,(char *)temp,4); addField(handle,DC_DATE,temp,1); metadata_numfields += 1; // add other fields here writeLE32(handle, metadata_numfields, metadata_start + 4); // write correct num meta data fields close(handle); // done with meta data //asm("INT FIQ, IRQ"); -- see INT OFF above used once to prevent corrupted recordings (now possibly handled by SD_Initial() after USB Device mode // *P_WatchDog_Ctrl &= ~0x8000; // clear bit 15 to disable if (strcmp(cursor,TRANSLATE_TEMP_DIR) != 0) { insertSound(&pkgSystem.files[POST_REC_FILE_IDX],NULL,FALSE); if (!context.keystroke) insertSound(file,NULL,FALSE); // replay subject } // Leaving this out now, because I believe it gets created when it is first played if non-existent. // The delay of having it in recordAudio is too long. // createStatsFile(rand1); // Assumes no name collision from using a 32-bit semi-random number // Checking all past names was causing a long delay, but maybe (TODO:) we can // add in a check if the open() fails and then generate a new number in that unlikely case strcpy(temp,"TIME RECORDED (secs): "); longToDecimalString((long)end-start,temp+strlen(temp),4); strcat(temp,"\x0d\x0a"); logString(temp,BUFFER); //logString(temp,ASAP); ret = 0; // used to set this based on fileExists() check, but too slow } else if (ret == -1) { logException(16, filepath,RESET); //can't open file for new recording } BIT_RATE = previousBitRate; return ret; }
void insertSound(CtnrFile *file, CtnrBlock *block, BOOL wait) { unsigned long lastPlayedPoint; CtnrFile *lastFilePlayed; unsigned long lBlockEndPoint; int keystroke = 0; int isPlayerStopped = !SACM_Status(); BOOL wasPaused; wasPaused = context.isPaused; lastFilePlayed = context.file; context.file = file; if (block) lBlockEndPoint = extractTime(block->endTime,context.package->timePrecision); if (!isPlayerStopped) { lastPlayedPoint = Snd_A1800_GetCurrentTime(); if (lastPlayedPoint < INSERT_SOUND_REWIND_MS) lastPlayedPoint = 0; else lastPlayedPoint -= INSERT_SOUND_REWIND_MS; //context.file should not be changed until we need them again in a few lines play(context.file,block?block->startTime:0); context.isPaused = FALSE; while (SACM_Status() && !keystroke) { if (block && lBlockEndPoint < Snd_A1800_GetCurrentTime()) { stop(); break; } if (!wait && (keystroke = keyCheck(0))) { if (keystroke == KEY_PLAY && !context.isPaused) { pause(); context.isPaused = TRUE; } else if (keystroke == KEY_PLAY && context.isPaused) { resume(); context.isPaused = FALSE; } else context.keystroke = keystroke; } } context.file = lastFilePlayed; playLongInt(context.file,lastPlayedPoint); if (wasPaused) { pause(); context.isPaused = TRUE; } } else { play(file,block?block->startTime:0); context.isPaused = FALSE; while (SACM_Status() && !keystroke) { if (block && lBlockEndPoint < Snd_A1800_GetCurrentTime()) { stop(); break; } if (!wait && (keystroke = keyCheck(0))) { if (keystroke == KEY_PLAY && !context.isPaused) { pause(); context.isPaused = TRUE; } else if (keystroke == KEY_PLAY && context.isPaused) { resume(); context.isPaused = FALSE; } else context.keystroke = keystroke; } } context.file = lastFilePlayed; } if (!SACM_Status()) { context.isStopped = TRUE; context.isPaused = FALSE; turnAmpOff(); } }
int SystemIntoUDisk(unsigned int serviceloop) { extern flash *RHM_FlashPtr; //RHM , *FP_RHM_FlashPtr; int i; #ifdef USBRP int fl_size = USB_Flash_init((flash *)0, 0); flash FL; int flash_execution_buf[fl_size]; RHM_FlashPtr = &FL; for(i=0; i<N_USB_LUN; i++) { FP_USB_Lun_Define[i] = &USB_Lun_Define[i]; if( USB_Lun_Define[i].unLunType == LunType_NOR) { USB_Lun_Define[i].rhmLunData = (unsigned long) RHM_FlashPtr; } } FL.flash_exe_buf = (void *) &flash_execution_buf[0]; USB_Flash_init(&FL, 1); #endif SysDisableWaitMode(3); SetSystemClockRate(48); if(serviceloop) { R_NAND_Present=0; MaxLUN = 0; R_SDC_Present=1; _deviceunmount(0); USB_TimeOut_Enable(); USB_Initial(); USB_Reset(); if(serviceloop == USB_CLIENT_SETUP_ONLY) { return(1); } } if(!serviceloop) { int tmp; long j; tmp = R_USB_State_Machine; for(j=0; j<100000; j++) { USB_ServiceLoop(0); if(R_USB_State_Machine > 0 && R_USB_State_Machine <= SCSI_CSW_Stage) { goto xxx; } else { if (!(j % 50)) { context.keystroke = keyCheck(0); if (context.keystroke) break; } } } if (tmp == 0 && R_USB_State_Machine == 0) { SetSystemClockRate(CLOCK_RATE); return(2); } if(R_USB_State_Machine == 0xf5f5) { SetSystemClockRate(CLOCK_RATE); return(2); } if(!(R_USB_State_Machine > 0 && R_USB_State_Machine <= SCSI_CSW_Stage)) { SysEnableWaitMode(3); RHM_FlashPtr = 0; SetSystemClockRate(CLOCK_RATE); return 1; } } xxx: if (LED_GREEN) setLED(LED_GREEN,FALSE); else // for USB before reading config file, or if config corrupted setLED(0x040,FALSE); if (LED_RED) setLED(LED_RED,TRUE); else // for USB before reading config file, or if config corrupted setLED(0x200,TRUE); //TODO: log entering USB device mode USB_ServiceLoop(1); *P_USBD_Config=0x00; *P_USBD_INTEN=0x00; if(1 == R_SDC_Present) { _devicemount(0); } SysEnableWaitMode( 3 ); R_USB_State_Machine == 0xf5f5; //CS: THIS LOOKS LIKE A BUG -- A TEST; NOT AN ASSIGNMENT! RHM_FlashPtr = 0; if (LED_RED) setLED(LED_RED,FALSE); else // for USB before reading config file, or if config corrupted setLED(0x200,FALSE); SetSystemClockRate(CLOCK_RATE); return 0; }
void windowProcess(void) { static const UWORD pCoords[WINDOW_NAV_COUNT][4] = { // dX, dY, sY, h {218, 114, 26, 14}, {218, 143, 54, 14}, {203, 128, 82, 15}, {234, 128, 112, 15}, {218, 129, 142, 13} }; UBYTE pTests[WINDOW_NAV_COUNT] = { ( keyCheck(KEY_W) || keyCheck(KEY_UP) || joyCheck(JOY1 + JOY_UP) || joyCheck(JOY2 + JOY_UP) ), ( keyCheck(KEY_S) || keyCheck(KEY_DOWN) || joyCheck(JOY1 + JOY_DOWN) || joyCheck(JOY2 + JOY_DOWN) ), ( keyCheck(KEY_A) || keyCheck(KEY_LEFT) || joyCheck(JOY1 + JOY_LEFT) || joyCheck(JOY2 + JOY_LEFT) ), ( keyCheck(KEY_D) || keyCheck(KEY_RIGHT) || joyCheck(JOY1 + JOY_RIGHT) || joyCheck(JOY2 + JOY_RIGHT) ), ( keyCheck(KEY_RETURN) || keyCheck(KEY_SPACE) || keyCheck(KEY_ESCAPE) || joyCheck(JOY1 + JOY_FIRE) || joyCheck(JOY2 + JOY_FIRE) ) }; tUwCoordYX sOrigin = windowGetOrigin(); for(UBYTE i = 0; i < WINDOW_NAV_COUNT; ++i) { if(pTests[i]) { if(s_pNav[i] == BTN_STATE_NACTIVE) { s_pNav[i] = BTN_STATE_ACTIVE; blitCopy( s_pButtons, 0, pCoords[i][2], s_pDrawBfr, sOrigin.sUwCoord.uwX + pCoords[i][0], sOrigin.sUwCoord.uwY + pCoords[i][1], 16, pCoords[i][3], MINTERM_COOKIE, 0xFF ); } } else if(s_pNav[i] != BTN_STATE_NACTIVE) { s_pNav[i] = BTN_STATE_NACTIVE; blitCopy( s_pButtons, 0, pCoords[i][2] + pCoords[i][3], s_pDrawBfr, sOrigin.sUwCoord.uwX + pCoords[i][0], sOrigin.sUwCoord.uwY + pCoords[i][1], 16, pCoords[i][3], MINTERM_COOKIE, 0xFF ); } } }
int SystemIntoUDisk(unsigned int serviceloop) { extern flash *RHM_FlashPtr; //RHM , *FP_RHM_FlashPtr; int i; char strLog[60]; #ifdef USBRP int fl_size = USB_Flash_init((flash *)0, 0); flash FL; int flash_execution_buf[fl_size]; RHM_FlashPtr = &FL; if(vCur_1 < V_MIN_USB_VOLTAGE) { refuse_lowvoltage(0); return(2); } for(i=0; i<N_USB_LUN; i++) { FP_USB_Lun_Define[i] = &USB_Lun_Define[i]; if( USB_Lun_Define[i].unLunType == LunType_NOR) { USB_Lun_Define[i].rhmLunData = (unsigned long) RHM_FlashPtr; } } FL.flash_exe_buf = (void *) &flash_execution_buf[0]; USB_Flash_init(&FL, 1); #endif SysDisableWaitMode(3); SetSystemClockRate(48); if(serviceloop) { R_NAND_Present=0; MaxLUN = 0; R_SDC_Present=1; _deviceunmount(0); USB_TimeOut_Enable(); USB_Initial(); USB_Reset(); if(serviceloop == USB_CLIENT_SETUP_ONLY) { return(1); } } if(!serviceloop) { int tmp; long j; tmp = R_USB_State_Machine; for(j=0; j<100000; j++) { USB_ServiceLoop(0); if(R_USB_State_Machine > 0 && R_USB_State_Machine <= SCSI_CSW_Stage) { goto xxx; } else { KeyScan_ServiceLoop(); if (!(j % 0x40)) { context.keystroke = keyCheck(0); if (context.keystroke) break; } } } if (tmp == 0 && R_USB_State_Machine == 0) { SetSystemClockRate(CLOCK_RATE); _devicemount(0); return(2); } if(R_USB_State_Machine == 0xf5f5) { SetSystemClockRate(CLOCK_RATE); _devicemount(0); return(2); } if(!(R_USB_State_Machine > 0 && R_USB_State_Machine <= SCSI_CSW_Stage)) { SysEnableWaitMode(3); RHM_FlashPtr = 0; SetSystemClockRate(CLOCK_RATE); return 1; } } xxx: if (LED_GREEN) setLED(LED_GREEN,FALSE); else // for USB before reading config file, or if config corrupted setLED(0x040,FALSE); if (LED_RED) setLED(LED_RED,TRUE); else // for USB before reading config file, or if config corrupted setLED(0x200,TRUE); USB_ServiceLoop(1); *P_USBD_Config=0x00; *P_USBD_INTEN=0x00; if(1 == R_SDC_Present) { _devicemount(0); } SysEnableWaitMode( 3 ); RHM_FlashPtr = 0; strcpy(strLog, "returned from USB Device Mode"); logString(strLog, ASAP, LOG_NORMAL); if (LED_RED) setLED(LED_RED,FALSE); else // for USB before reading config file, or if config corrupted setLED(0x200,FALSE); SetSystemClockRate(CLOCK_RATE); return 0; }
bool Game::cursesMain() { initscr(); noecho(); curs_set(FALSE); nodelay(stdscr, TRUE); keypad(stdscr,TRUE); srand(time(NULL)); // Coloring the screen start_color(); init_pair(1, COLOR_WHITE, COLOR_RED); // border init_pair(2, COLOR_GREEN, COLOR_GREEN); // barrier init_pair(3, COLOR_GREEN, COLOR_BLACK); // player init_pair(4, COLOR_RED, COLOR_BLACK); // boss // set up initial windows getmaxyx(stdscr, parent_y, parent_x); //set default space player.lives = 3; player.score = 0; player.x = 14; player.y = parent_y - (score_size + 3); WINDOW *field = newwin(parent_y - score_size, parent_x, 0, 0); WINDOW *score = newwin(score_size, parent_x, parent_y - score_size, 0); drawBorders(score); buildGame(board); int alienCount = 0; for(int i = 0; i < BOARDROWSIZE;i++) { for(int j = 0; j < BOARDCOLUMNSIZE;j++) { char temp = board[i][j]; wmove(field, i, j); waddch(field, temp); if(temp == ALIEN1 || temp == ALIEN2 || temp == ALIEN3) alienCount++; // mvwprintw(field, i, j, "%c", board[i][j]); } } numberOfAliens = alienCount; rawtime = time(NULL); alienGroup.waitTime = rawtime+8; // uncomment for cout // /* while(1) { getmaxyx(stdscr, new_y, new_x); if (new_y != parent_y || new_x != parent_x) { parent_x = new_x; parent_y = new_y; wresize(field, new_y - score_size, new_x); wresize(score, score_size, new_x); mvwin(score, new_y - score_size, 0); wclear(stdscr); wclear(field); wclear(score); drawBorders(score); } // board[20][18] = 'O'; // draw to our windows for(int i = 0; i < BOARDROWSIZE;i++) { for(int j = 0; j < BOARDCOLUMNSIZE;j++) { char piece = board[i][j]; // writeToFile("%c", piece); wmove(field, i, j); // check if our bullet should be seen if(board[i][j] == BULLET && player.bullet.enabled == true) waddch(field, board[i][j]); // if it shouldnt be seen then we remove it else if(board[i][j] == BULLET && player.bullet.enabled == false) { waddch(field, ' '); board[i][j] = ' '; wmove(field, i-1, j); waddch(field, ' '); board[i-1][j] = ' '; wmove(field, i, j); } // print everything else else { // color certain pieces switch(piece) { //border case '+': case '-': case '|': waddch(field, piece | COLOR_PAIR(1)); break; // barriers case '/': case '\\': case '#': waddch(field, piece | COLOR_PAIR(2)); break; //player case 'A': waddch(field, piece | COLOR_PAIR(3)); default: waddch(field, piece); } } } // writeToFile("\n"); } // Draw score board mvwprintw(score, 1, 2, "Score: "); mvwprintw(score, 1, 9, itoa(player.score, buffer, 10)); mvwprintw(score, 1, 70, "Lives: "); mvwprintw(score, 1, 77, itoa(player.lives, buffer, 10)); if(DEBUG == true) { string screensizex = itoa(new_x, buffer, 10); string screensizey = itoa(parent_y, buffer, 10); mvwprintw(score, 1, 30, "X: "); mvwprintw(score, 1, 34, screensizex.c_str()); mvwprintw(score, 1, 40, "Y: "); mvwprintw(score, 1, 44, screensizey.c_str()); } bool aliensMovement = true; aliensMovement = moveAliens(rawtime); alienShoot(); if(player.bullet.enabled == true) { if(player.bullet.direction == 'U') // safety check { timerCheck = clock()-timer; if(timerCheck > 15) { if(DEBUG == true) writeToFile("Current: %i,%i | New: %i,%i\n", player.bullet.x, player.bullet.y, player.bullet.x-1, player.bullet.y); char temp = board[player.bullet.x-1][player.bullet.y]; char temp2 = board[player.bullet.x-1][player.bullet.y+1]; switch(temp) { // all these will trigger the last case case 'S': case '@': case '%': case '&': case '#': case '/': case '\\': case '+': // most likely never reach here case '|': if(DEBUG == true) writeToFile("Collision with [%c]\n", temp); if(temp == ALIEN1) { player.score += 10; numberOfAliens--; } else if(temp == ALIEN2) { player.score += 20; numberOfAliens--; } else if(temp == ALIEN3) { player.score += 40; numberOfAliens--; } else if(temp == BOSS) { player.score += 150; } temp = ' '; temp2 = ' '; player.bullet.enabled = false; break; case '-': if(DEBUG == true) writeToFile("Bullet hits wall\n"); player.bullet.enabled = false; board[player.bullet.x][player.bullet.y] = ' '; break; default: // spaces and whatnot if(DEBUG == true) writeToFile("%i,%i = %c\n%i,%i\n",player.bullet.x,player.bullet.y-1,board[player.bullet.x][player.bullet.y],player.bullet.x,player.bullet.y); board[player.bullet.x-1][player.bullet.y] = BULLET; board[player.bullet.x][player.bullet.y] = ' '; player.bullet.x = player.bullet.x-1; break; } timer = clock(); } } } for(int x = 1;x<5;x++) { timerCheck = clock()-timer; if(timerCheck > 50) { char temp = ' '; switch(x) { case 1: temp = board[alienGroup.alienBullet1.x+1][alienGroup.alienBullet1.y]; if(alienGroup.alienBullet1.enabled == true) { switch(temp) { case '/': case '\\': case '#': temp = ' '; alienGroup.alienBullet1.enabled = false; board[alienGroup.alienBullet1.x][alienGroup.alienBullet1.y] = ' '; alienGroup.missles--; break; case 'A': player.lives--; board[player.x][player.y]= ' '; player.x = 14; player.y = parent_y - (score_size + 3); board[player.x][player.y] = PLAYER; alienGroup.missles--; break; case '-': if(DEBUG == true) writeToFile("Bullet hits wall\n"); alienGroup.alienBullet1.enabled = false; board[alienGroup.alienBullet1.x][alienGroup.alienBullet1.y] = ' '; alienGroup.missles--; break; default: if(DEBUG == true) writeToFile("%i,%i = %c\n%i,%i\n",player.bullet.x,player.bullet.y-1,board[player.bullet.x][player.bullet.y],player.bullet.x,player.bullet.y); board[alienGroup.alienBullet1.x+1][alienGroup.alienBullet1.y] = ALIENBULLET; board[alienGroup.alienBullet1.x][alienGroup.alienBullet1.y] = ' '; alienGroup.alienBullet1.x = alienGroup.alienBullet1.x+1; break; } /* if(temp == PLAYER) { player.lives--; player.x = 14; player.y = parent_y - (score_size + 3); board[player.x][player.y] = PLAYER; alienGroup.alienBullet1.enabled = false; alienGroup.missles--; } else if(temp == BARRIERCORNER1 || temp == BARRIERCORNER2 || temp == BARRIERMAIN) { temp = ' '; alienGroup.alienBullet1.enabled = false; alienGroup.missles--; } else if(temp == '-') { alienGroup.alienBullet1.enabled = false; alienGroup.missles--; } else { temp = BULLET; board[alienGroup.alienBullet1.x][alienGroup.alienBullet1.y] = ' '; alienGroup.alienBullet1.y += 1; }*/ } // case 2: // case 3: // case 4: default: break; } } } if(keyHit()) { key = getch(); keyChecker = keyCheck(key); if(keyChecker == true) break; // have code in CP } // refresh each window wrefresh(field); wrefresh(score); if(numberOfAliens == 0) break; } endwin(); // */ return true; }
static int recordAudio(char *pkgName, char *cursor) { int handle, ret = -1; char temp[PATH_LENGTH]; char filepath[PATH_LENGTH]; long start, end, prev; CtnrFile *file; int key; strcpy(filepath,USER_PATH); strcat(filepath,pkgName); strcat(filepath,AUDIO_FILE_EXT); file = getListFile(cursor); insertSound(file,NULL,TRUE); start = getRTCinSeconds(); strcpy(temp,"\x0d\x0a"); longToDecimalString(start,temp+2,5); strcat(temp,(const char *)": RECORD "); LBstrncat(temp,pkgName,60); LBstrncat(temp," -> ",60); LBstrncat(temp,cursor,60); logString(temp,BUFFER); insertSound(&pkgSystem.files[SPEAK_SOUND_FILE_IDX],NULL,TRUE); stop(); start = getRTCinSeconds(); prev = end = start; handle = tbOpen((LPSTR)filepath,O_CREAT|O_RDWR); if (handle != -1) { setLED(LED_RED,TRUE); playBip(); while (SACM_Status()); Snd_SACM_RecFAT(handle, C_CODEC_AUDIO1800, BIT_RATE); do { end = getRTCinSeconds(); if (0==(end%2) && (prev != end)) { // blink LED every three seconds prev = end; setLED(LED_RED,FALSE); wait (100); setLED(LED_RED,TRUE); } key = keyCheck(0); if (key == KEY_PLAY) { // pause TODO: this key press to pause shouldn't be hard coded SACM_Pause(); setLED(LED_RED,FALSE); do key = keyCheck(0); while (key != KEY_PLAY && key != KEY_STAR); setLED(LED_RED,TRUE); SACM_Resume(); } } while (key != KEY_STAR); // TODO: this key press to stop shouldn't be hard coded // while ((end - start) < 3) { // must be at least 2.0 second recording // end = getRTCinSeconds(); // } SACM_Stop(); //Snd_Stop(); // no need to call stop() and flush the log //lseek(handle, 6, SEEK_SET ); //Seek to the start of the file input //write(handle,(LPSTR)header<<1,6); close(handle); // *P_WatchDog_Ctrl &= ~0x8000; // clear bit 15 to disable setLED(LED_RED,FALSE); insertSound(&pkgSystem.files[BEEP_SOUND_FILE_IDX],NULL,TRUE); insertSound(file,NULL,TRUE); // replay subject strcpy(temp,"TIME RECORDED (secs): "); longToDecimalString((long)end-start,temp+strlen(temp),4); strcat(temp,"\x0d\x0a"); logString(temp,BUFFER); strcpy(lastFilenameRecorded,filepath); ret = 0; // used to set this based on fileExists() check, but too slow } else { logException(16, filepath,RESET); //can't open file for new recording } return ret; }
/**************************************************************************//** * @brief Main function *****************************************************************************/ int main(void) { #ifdef GG_STK uint32_t mode = 0; #else /* Initialize DK board register access, necessary if run on DK */ BSP_Init(BSP_INIT_DEFAULT); BSP_PeripheralAccess(BSP_AUDIO_OUT, true); #endif /* Initialize peripherals */ initClock(); initDma(); initDac(); initDacDma(); initTimer(); #ifdef GG_STK initGpio(); #endif while(1) { /*** Operation for EFM32GG-DK3750 ***/ #ifndef GG_STK /* Wait key press */ while(!BSP_PushButtonsGet()) ; if (BSP_PushButtonsGet() == BC_UIF_PB1) { BSP_LedsSet(0x0001); /* Wait key release */ while(BSP_PushButtonsGet()!=0); /* Start play files */ playList[0].frameStart = (char *)voice8k; playList[1].frameStart = NULL; playList[0].frameNum = sizeof(voice8k)/FRAME_SIZE_8K; speexPlayBack(0, NARROWBAND, FRAME_SIZE_8K, &playList[0]); BSP_LedsSet(0x0000); } if (BSP_PushButtonsGet() == BC_UIF_PB2) { BSP_LedsSet(0x0002); /* Wait key release */ while(BSP_PushButtonsGet()!=0); /* Start play files */ playList[0].frameStart = (char *)voice11k; playList[1].frameStart = NULL; playList[0].frameNum = sizeof(voice11k)/FRAME_SIZE_11K; speexPlayBack(0, NARROWBAND, FRAME_SIZE_11K, &playList[0]); BSP_LedsSet(0x0000); } if (BSP_PushButtonsGet() == BC_UIF_PB3) { BSP_LedsSet(0x0004); /* Wait key release */ while(BSP_PushButtonsGet()!=0); /* Start play files */ playList[0].frameStart = (char *)voice15k; playList[1].frameStart = NULL; playList[0].frameNum = sizeof(voice15k)/FRAME_SIZE_15K; speexPlayBack(0, NARROWBAND, FRAME_SIZE_15K, &playList[0]); BSP_LedsSet(0x0000); } if (BSP_PushButtonsGet() == BC_UIF_PB4) { BSP_LedsSet(0x0008); /* Wait key release */ while(BSP_PushButtonsGet()!=0); /* Start play files */ playList[0].frameStart = (char *)voice18k2; playList[1].frameStart = NULL; playList[0].frameNum = sizeof(voice18k2)/FRAME_SIZE_18K2; speexPlayBack(0, NARROWBAND, FRAME_SIZE_18K2, &playList[0]); BSP_LedsSet(0x0000); } /*** Operation for EFM32GG-STK3750 ***/ #else /* Wait key press */ EMU_EnterEM1(); switch (keyCheck()) { case 1: mode++; if (mode == 4) { mode = 0; } GPIO_PortOutSetVal(gpioPortE, (mode << 2), 0x000c); break; case 2: if (mode == 0x00) { /* Start play files */ playList[0].frameStart = (char *)voice8k; playList[1].frameStart = NULL; playList[0].frameNum = sizeof(voice8k)/FRAME_SIZE_8K; speexPlayBack(0, NARROWBAND, FRAME_SIZE_8K, &playList[0]); } else if (mode == 0x01) { /* Start play files */ playList[0].frameStart = (char *)voice11k; playList[1].frameStart = NULL; playList[0].frameNum = sizeof(voice11k)/FRAME_SIZE_11K; speexPlayBack(0, NARROWBAND, FRAME_SIZE_11K, &playList[0]); } else if (mode == 0x02) { /* Start play files */ playList[0].frameStart = (char *)voice15k; playList[1].frameStart = NULL; playList[0].frameNum = sizeof(voice15k)/FRAME_SIZE_15K; speexPlayBack(0, NARROWBAND, FRAME_SIZE_15K, &playList[0]); } else { /* Start play files */ playList[0].frameStart = (char *)voice18k2; playList[1].frameStart = NULL; playList[0].frameNum = sizeof(voice18k2)/FRAME_SIZE_18K2; speexPlayBack(0, NARROWBAND, FRAME_SIZE_18K2, &playList[0]); } break; default: break; } #endif } }