int DisplayDemoRun(DisplayCtrl *dispPtr) { char userInput = 0; int nextFrame = 0; while (userInput != 'q') { DisplayDemoPrintMenu(dispPtr); /* Store the first character in the UART recieve FIFO and echo it */ userInput = getchar(); xil_printf("%c", userInput); switch (userInput) { case '1': DisplayDemoChangeRes(dispPtr); break; case '2': nextFrame = dispPtr->curFrame + 1; if (nextFrame >= DISPLAY_NUM_FRAMES) { nextFrame = 0; } DisplayChangeFrame(dispPtr, nextFrame); break; case '3': DisplayDemoPrintTest(dispPtr->vframePtr[dispPtr->curFrame], dispPtr->vMode.width, dispPtr->vMode.height, dispPtr->stride, DISPLAYDEMO_PATTERN_0); break; case '4': DisplayDemoPrintTest(dispPtr->vframePtr[dispPtr->curFrame], dispPtr->vMode.width, dispPtr->vMode.height, dispPtr->stride, DISPLAYDEMO_PATTERN_1); break; case '5': DisplayDemoInvertFrame(dispPtr->vframePtr[dispPtr->curFrame], dispPtr->vframePtr[dispPtr->curFrame], dispPtr->vMode.width, dispPtr->vMode.height, dispPtr->stride); break; case '6': nextFrame = dispPtr->curFrame + 1; if (nextFrame >= DISPLAY_NUM_FRAMES) { nextFrame = 0; } DisplayDemoInvertFrame(dispPtr->vframePtr[dispPtr->curFrame], dispPtr->vframePtr[nextFrame], dispPtr->vMode.width, dispPtr->vMode.height, dispPtr->stride); DisplayChangeFrame(dispPtr, nextFrame); break; case 'q': break; default : xil_printf("\n\rInvalid Selection"); { struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 500000000; nanosleep( &ts, NULL ); } } } return XST_SUCCESS; }
int DisplayDemoRun(DisplayCtrl *dispPtr, u32 uartAddr) { char userInput = 0; int nextFrame = 0; /* Flush UART FIFO */ while (XUartPs_IsReceiveData(uartAddr)) { XUartPs_ReadReg(uartAddr, XUARTPS_FIFO_OFFSET); } while (userInput != 'q') { DisplayDemoPrintMenu(dispPtr); /* Wait for data on UART */ while (!XUartPs_IsReceiveData(uartAddr)) {} /* Store the first character in the UART recieve FIFO and echo it */ userInput = XUartPs_ReadReg(uartAddr, XUARTPS_FIFO_OFFSET); xil_printf("%c", userInput); switch (userInput) { case '1': DisplayDemoChangeRes(dispPtr, uartAddr); break; case '2': nextFrame = dispPtr->curFrame + 1; if (nextFrame >= DISPLAY_NUM_FRAMES) { nextFrame = 0; } DisplayChangeFrame(dispPtr, nextFrame); break; case '3': DisplayDemoPrintTest(dispPtr->framePtr[dispPtr->curFrame], dispPtr->vMode.width, dispPtr->vMode.height, dispPtr->stride, DISPLAYDEMO_PATTERN_0); break; case '4': DisplayDemoPrintTest(dispPtr->framePtr[dispPtr->curFrame], dispPtr->vMode.width, dispPtr->vMode.height, dispPtr->stride, DISPLAYDEMO_PATTERN_1); break; case '5': DisplayDemoInvertFrame(dispPtr->framePtr[dispPtr->curFrame], dispPtr->framePtr[dispPtr->curFrame], dispPtr->vMode.width, dispPtr->vMode.height, dispPtr->stride); break; case '6': nextFrame = dispPtr->curFrame + 1; if (nextFrame >= DISPLAY_NUM_FRAMES) { nextFrame = 0; } DisplayDemoInvertFrame(dispPtr->framePtr[dispPtr->curFrame], dispPtr->framePtr[nextFrame], dispPtr->vMode.width, dispPtr->vMode.height, dispPtr->stride); DisplayChangeFrame(dispPtr, nextFrame); break; case 'q': break; default : xil_printf("\n\rInvalid Selection"); TimerDelay(500000); } } return XST_SUCCESS; }
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 pong(DisplayCtrl *video ,u32 uartAddress, XGpio *btn, XGpio *sw){ u32 height = video->vMode.height, width = video->vMode.width, stride = video->stride, *frame, speed = 2, pause=false; char entrada; frame=video->framePtr[video->curFrame]; xil_printf("\x1B[H"); //Set cursor to top left of terminal xil_printf("\x1B[2J"); //Clear terminal Rectangulo bola=crearRectangulo(10,10,RED,ANCHO_BOLA,ALTO_BOLA); Rectangulo palaIzquierda = crearRectangulo(0,height/2-ALTO_PALA/2,GREEN,ANCHO_PALA,ALTO_PALA); Rectangulo palaDerecha = crearRectangulo(width-ANCHO_PALA,height/2-ALTO_PALA/2,GREEN,ANCHO_PALA,ALTO_PALA); int dir_x=true, dir_y=true, indice_frame=0,salir=0,pulsar=0,puntuacionA=0,puntuacionB=0; salir = XGpio_DiscreteRead(sw, 1); while(salir & 0x8){ if (salir & 0x1) // 0x1=0b0001=posicion de SW0 bola.color = WHITE; else bola.color = RED; //apunta a al siguente frame indice_frame=nextFrame(video,&frame); pintarFondo(frame, BLACK, width,height,stride); //movimiento y colision if(dir_x == DERECHA) if ((bola.x+ANCHO_BOLA > palaDerecha.x) && (bola.y >= palaDerecha.y && bola.y < palaDerecha.y+ALTO_PALA )){ bola.x-=speed; dir_x = IZQUIERDA; }else{ bola.x+=speed; } else if ((bola.x < palaIzquierda.x+ANCHO_PALA) && (bola.y >= palaIzquierda.y && bola.y < palaIzquierda.y+ALTO_PALA)){ bola.x+=speed; dir_x = DERECHA; }else{ bola.x-=speed; } if(dir_y == ABAJO) bola.y+=speed; else bola.y-=speed; //control de direccion if (bola.x<0){ bola.x=width/2; bola.y=height/2; dir_x=DERECHA; puntuacionB++; xil_printf("%d - %d\n\r",puntuacionA,puntuacionB); TimerDelay(1500000); }else if(bola.x>width - ANCHO_BOLA){ bola.x=width/2; bola.y=height/2; dir_x=IZQUIERDA; puntuacionA++; xil_printf("%d - %d\n\r",puntuacionA,puntuacionB); TimerDelay(1500000); } if (bola.y<0){ bola.y=0; dir_y=ABAJO; }else if(bola.y>height - ALTO_BOLA){ bola.y=height - ALTO_BOLA; dir_y=ARRIBA; } //pintar la pelota y las palas pintarRectangulo(frame,&bola,width,height,stride); pintarRectangulo(frame,&palaDerecha,width,height,stride); pintarRectangulo(frame,&palaIzquierda,width,height,stride); //flush Xil_DCacheFlushRange((unsigned int) frame, DISPLAY_MAX_FRAME * 4); DisplayChangeFrame(video,indice_frame); //TimerDelay(17000); salir = XGpio_DiscreteRead(sw, 1); pulsar = XGpio_DiscreteRead(btn, 1); //control de las palas if (pulsar & 0x1){ //Pala derecha if (palaDerecha.y+ALTO_PALA < height){ palaDerecha.y+=speed; } }else if(pulsar & 0x2){ if (palaDerecha.y >= 0){ palaDerecha.y-=speed; } } if (pulsar & 0x4 ){ //Pala izquierda if (palaIzquierda.y+ALTO_PALA < height){ palaIzquierda.y+=speed; } }else if(pulsar & 0x8){ if (palaIzquierda.y >= 0){ palaIzquierda.y-=speed; } } //recolocar las palas si se han salido fuera if (palaDerecha.y<0) palaDerecha.y=0; else if (palaDerecha.y+ALTO_PALA>height) palaDerecha.y=height-ALTO_PALA; if (palaIzquierda.y<0) palaIzquierda.y=0; else if (palaIzquierda.y+ALTO_PALA>height) palaIzquierda.y=height-ALTO_PALA; //leer pulsaciones de cambio de velocidad if (XUartPs_IsReceiveData(uartAddress)){ entrada=XUartPs_ReadReg(uartAddress, XUARTPS_FIFO_OFFSET); if (entrada==' '){ pause=true; while(pause){ if (XUartPs_IsReceiveData(uartAddress)){ entrada=XUartPs_ReadReg(uartAddress, XUARTPS_FIFO_OFFSET); if (entrada==' ') pause=false; else cambiarVelocidad(&speed,entrada); } } }else cambiarVelocidad(&speed,entrada); } } }
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; }