void DemoRun() { int nextFrame = 0; char userInput = 0; /* Flush UART FIFO */ while (XUartPs_IsReceiveData(UART_BASEADDR)) { XUartPs_ReadReg(UART_BASEADDR, XUARTPS_FIFO_OFFSET); } while (userInput != 'q') { DemoPrintMenu(); /* Wait for data on UART */ while (!XUartPs_IsReceiveData(UART_BASEADDR)) {} /* Store the first character in the UART receive FIFO and echo it */ if (XUartPs_IsReceiveData(UART_BASEADDR)) { userInput = XUartPs_ReadReg(UART_BASEADDR, XUARTPS_FIFO_OFFSET); xil_printf("%c", userInput); } switch (userInput) { case '1': DemoChangeRes(); break; case '2': nextFrame = dispCtrl.curFrame + 1; if (nextFrame >= DISPLAY_NUM_FRAMES) { nextFrame = 0; } DisplayChangeFrame(&dispCtrl, nextFrame); break; case '3': DemoPrintTest(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE, DEMO_PATTERN_0); break; case '4': DemoPrintTest(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE, DEMO_PATTERN_1); break; case '5': DemoInvertFrame(dispCtrl.framePtr[dispCtrl.curFrame], dispCtrl.framePtr[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, dispCtrl.stride); break; case '6': nextFrame = dispCtrl.curFrame + 1; if (nextFrame >= DISPLAY_NUM_FRAMES) { nextFrame = 0; } DemoInvertFrame(dispCtrl.framePtr[dispCtrl.curFrame], dispCtrl.framePtr[nextFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, dispCtrl.stride); DisplayChangeFrame(&dispCtrl, nextFrame); break; case 'q': break; default : xil_printf("\n\rInvalid Selection"); TimerDelay(500000); } } return; }
void DemoRun() { int nextFrame = 0; char userInput = 0; u32 locked; XGpio *GpioPtr = &videoCapt.gpio; /* Flush UART FIFO */ while (!XUartLite_IsReceiveEmpty(UART_BASEADDR)) { XUartLite_ReadReg(UART_BASEADDR, XUL_RX_FIFO_OFFSET); } while (userInput != 'q') { fRefresh = 0; DemoPrintMenu(); /* Wait for data on UART */ while (XUartLite_IsReceiveEmpty(UART_BASEADDR) && !fRefresh) {} /* Store the first character in the UART receive FIFO and echo it */ if (!XUartLite_IsReceiveEmpty(UART_BASEADDR)) { userInput = XUartLite_ReadReg(UART_BASEADDR, XUL_RX_FIFO_OFFSET); xil_printf("%c", userInput); } else //Refresh triggered by video detect interrupt { userInput = 'r'; } switch (userInput) { case '1': DemoChangeRes(); break; case '2': nextFrame = dispCtrl.curFrame + 1; if (nextFrame >= DISPLAY_NUM_FRAMES) { nextFrame = 0; } DisplayChangeFrame(&dispCtrl, nextFrame); break; case '3': DemoPrintTest(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE, DEMO_PATTERN_0); break; case '4': DemoPrintTest(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE, DEMO_PATTERN_1); break; case '5': if (videoCapt.state == VIDEO_STREAMING) VideoStop(&videoCapt); else VideoStart(&videoCapt); break; case '6': nextFrame = videoCapt.curFrame + 1; if (nextFrame >= DISPLAY_NUM_FRAMES) { nextFrame = 0; } VideoChangeFrame(&videoCapt, nextFrame); break; case '7': nextFrame = videoCapt.curFrame + 1; if (nextFrame >= DISPLAY_NUM_FRAMES) { nextFrame = 0; } VideoStop(&videoCapt); DemoInvertFrame(pFrames[videoCapt.curFrame], pFrames[nextFrame], videoCapt.timing.HActiveVideo, videoCapt.timing.VActiveVideo, DEMO_STRIDE); VideoStart(&videoCapt); DisplayChangeFrame(&dispCtrl, nextFrame); break; case '8': nextFrame = videoCapt.curFrame + 1; if (nextFrame >= DISPLAY_NUM_FRAMES) { nextFrame = 0; } VideoStop(&videoCapt); DemoScaleFrame(pFrames[videoCapt.curFrame], pFrames[nextFrame], videoCapt.timing.HActiveVideo, videoCapt.timing.VActiveVideo, dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE); VideoStart(&videoCapt); DisplayChangeFrame(&dispCtrl, nextFrame); break; case 'q': break; case 'r': locked = XGpio_DiscreteRead(GpioPtr, 2); xil_printf("%d", locked); break; default : xil_printf("\n\rInvalid Selection"); MB_Sleep(50); } } return; }