static void Play(MIDI_MusicTrack *tracks, unsigned int nofTracks) { int itemNo; uint8_t channel; uint32_t currTimeMs; TickType_t startTicks; unsigned int nofFinished; /* init defaults */ for(channel=0;channel<nofTracks;channel++) { VS1_MIDI_SetBank(channel, 0); VS1_MIDI_SetInstrument(channel, VS1_MIDI_INSTR_Default); VS1_MIDI_SetVolume(channel, 127); } startTicks = FRTOS1_xTaskGetTickCount(); itemNo = 0; for(;;) { /* breaks */ currTimeMs = (FRTOS1_xTaskGetTickCount()-startTicks)/portTICK_RATE_MS; #if 0 if (currTimeMs>15000) { break; } #endif nofFinished = 0; for(channel=0;channel<nofTracks;channel++) { if (!PlayTrackItem(&tracks[channel], currTimeMs, channel)) { nofFinished++; } } if (nofFinished==nofTracks) { /* all finished */ break; } FRTOS1_vTaskDelay(1/portTICK_RATE_MS); itemNo++; } }
static int random(int min, int max) { TickType_t cnt; cnt = FRTOS1_xTaskGetTickCount(); cnt &= 0xff; /* reduce to 8 bits */ if (max>64) { cnt >>= 1; } else {
static void RadioPowerUp(void) { /* need to ensure that we wait 100 ms after power-on of the transceiver */ portTickType xTime; xTime = FRTOS1_xTaskGetTickCount(); if (xTime<(100/portTICK_PERIOD_MS)) { /* not powered for 100 ms: wait until we can access the radio transceiver */ xTime = (100/portTICK_PERIOD_MS)-xTime; /* remaining ticks to wait */ FRTOS1_vTaskDelay(xTime); } (void)RNET1_PowerUp(); }
static void RadioPowerUp(void) { /* need to ensure that we wait at least 100 ms (I use 150 ms here) after power-on of the transceiver */ portTickType xTime; xTime = FRTOS1_xTaskGetTickCount(); if (xTime<(150/portTICK_RATE_MS)) { /* not powered for 100 ms: wait until we can access the radio transceiver */ xTime = (150/portTICK_RATE_MS)-xTime; /* remaining ticks to wait */ FRTOS1_vTaskDelay(xTime); } (void)RADIO_PowerUp(); /* enable the transceiver */ }
static void Play(MIDI_MusicTrack *tracks, unsigned int nofTracks, uint32_t tempoUS) { int itemNo; uint8_t channel; uint32_t currTimeMs; TickType_t startTicks; unsigned int nofFinished; uint32_t flags; /* init defaults */ for(channel=0;channel<nofTracks;channel++) { FLOPPY_MIDI_SetBank(channel, 0); FLOPPY_MIDI_SetInstrument(channel, 0); FLOPPY_MIDI_SetVolume(channel, 127); } startTicks = FRTOS1_xTaskGetTickCount(); itemNo = 0; for(;;) { /* breaks */ (void)xTaskNotifyWait(0UL, MIDI_SONG_STOP, &flags, 0); /* check flags */ if (flags&MIDI_SONG_STOP) { CLS1_SendStr((uint8_t*)"Stopping song!\r\n", CLS1_GetStdio()->stdOut); for(channel=0;channel<nofTracks;channel++) { FLOPPY_MIDI_AllSoundOff(channel); } break; } currTimeMs = (FRTOS1_xTaskGetTickCount()-startTicks)/portTICK_RATE_MS; nofFinished = 0; for(channel=0;channel<nofTracks;channel++) { if (!PlayTrackItem(&tracks[channel], currTimeMs, channel, tempoUS)) { nofFinished++; } } if (nofFinished==nofTracks) { /* all finished */ break; } FRTOS1_vTaskDelay(1/portTICK_RATE_MS); itemNo++; } }
static void PONG_CheckLimiterButtons(void) { bool gameOver = FALSE; TickType_t currTickCount; currTickCount = FRTOS1_xTaskGetTickCount(); if (EVNT1_GetClearEvent(EVNT1_BTN_LEFT_PRESSED)) { PONG_LeftLimiter.pressedTickCounter = currTickCount; PONG_SetLimiter(&PONG_LeftLimiter); } else if (PONG_LeftLimiter.isOn && currTickCount>PONG_LeftLimiter.pressedTickCounter+(PONG_LeftLimiter.buttonTimeoutMs/portTICK_RATE_MS)) { PONG_ClearLimiter(&PONG_LeftLimiter); } if (EVNT1_GetClearEvent(EVNT1_BTN_RIGHT_PRESSED)) { PONG_RightLimiter.pressedTickCounter = currTickCount; PONG_SetLimiter(&PONG_RightLimiter); } else if (PONG_RightLimiter.isOn && currTickCount>PONG_RightLimiter.pressedTickCounter+(PONG_RightLimiter.buttonTimeoutMs/portTICK_RATE_MS)) { PONG_ClearLimiter(&PONG_RightLimiter); } }
static bool PONG_UpdateBalls(void) { TickType_t currTickCount; bool transferPixels = FALSE; int i; bool gameOver = FALSE; currTickCount = FRTOS1_xTaskGetTickCount(); PONG_CheckLimiterButtons(); for(i=0;i<PONG_NOF_BALLS;i++) { if (currTickCount>=PONG_Balls[i].drawTickCounter+PONG_Balls[i].speedMs/portTICK_RATE_MS) { if (PONG_UpdateBall(&PONG_Balls[i])) { gameOver = TRUE; } transferPixels = TRUE; } } if (transferPixels) { NEO_TransferPixels(); } return gameOver; }
static void PONG_DrawBall(PONG_BallT *ball) { (void)NEO_SetPixelColor(ball->pos, ball->color); ball->drawTickCounter = FRTOS1_xTaskGetTickCount(); }