int SFDelay(lua_State* l) { int ms = lua_tonumber(Scripts.vm, 1); int currentFps = TimerDelay(ms); lua_pushnumber(Scripts.vm, currentFps); return 1; }
int main(void) { u32 *vgaPtr[DISPLAY_NUM_FRAMES]; u32 *hdmiPtr[DISPLAY_NUM_FRAMES]; int i; char userInput = 0; for (i = 0; i < DISPLAY_NUM_FRAMES; i++) { vgaPtr[i] = vgaBuf[i]; hdmiPtr[i] = hdmiBuf[i]; } DisplayDemoInitialize(&vgaCtrl, VGA_VDMA_ID, SCU_TIMER_ID, VGA_BASEADDR, DISPLAY_NOT_HDMI, vgaPtr); DisplayDemoInitialize(&hdmiCtrl, HDMI_VDMA_ID, SCU_TIMER_ID, HDMI_BASEADDR, DISPLAY_HDMI, hdmiPtr); AudioInitialize(SCU_TIMER_ID, AUDIO_IIC_ID, AUDIO_CTRL_BASEADDR); TimerInitialize(SCU_TIMER_ID); /* Flush UART FIFO */ while (XUartPs_IsReceiveData(UART_BASEADDR)) { XUartPs_ReadReg(UART_BASEADDR, XUARTPS_FIFO_OFFSET); } while (userInput != 'q') { MainDemoPrintMenu(); /* Wait for data on UART */ while (!XUartPs_IsReceiveData(UART_BASEADDR)) {} /* Store the first character in the UART recieve FIFO and echo it */ userInput = XUartPs_ReadReg(UART_BASEADDR, XUARTPS_FIFO_OFFSET); xil_printf("%c", userInput); switch (userInput) { case '1': AudioRunDemo(AUDIO_CTRL_BASEADDR, UART_BASEADDR, SW_BASEADDR, BTN_BASEADDR); break; case '2': DisplayDemoRun(&vgaCtrl, UART_BASEADDR); break; case '3': DisplayDemoRun(&hdmiCtrl, UART_BASEADDR); break; case 'q': break; default : xil_printf("\n\rInvalid Selection"); TimerDelay(500000); } } return 0; }
SQInteger SFDelay(HSQUIRRELVM v) { int ms; int currentFps; sq_getinteger(Scripts.vm, 2, &ms); currentFps = TimerDelay(ms); sq_pushinteger(Scripts.vm, currentFps); return 1; }
extern int camera_expose (int chip, float *exposure, int light) { CAMERA *C; int imstate; if (!is_init) return -1; sem_lock (); #ifdef INIT_SHUTTER init_shutter (); #else if (!light) // init shutter only for dark images init_shutter (); #endif if (OpenCCD (chip, &C)) goto err; if (CCDExpose (C, (int) 100 * (*exposure) + 0.5, light)) goto err; sem_unlock (); // wait for completing exp do { sem_lock (); imstate = CCDImagingState (C); sem_unlock (); pthread_testcancel (); TimerDelay (100000); } while (imstate); sem_lock (); readout_line[chip] = 0; if (CCDReadout (img[chip], C, 0, 0, C->vertImage, C->horzImage, ch_info[chip].binning_vertical)) goto err; CloseCCD (C); sem_unlock (); return 0; err: CloseCCD (C); sem_unlock (); errno = ENODEV; return -1; }
/** * @brief Do tasks. This function should be called repeatedly within the main * program loop. */ void ReceiveDoTasks() { while (Uart1IsGetReady() > 0) { switch (Uart1GetChar()) { case 'f': case 'F': SendFirmwareVersion(); TimerDelay(2000); break; case 'r': case 'R': asm("RESET"); break; case 'z': case 'Z': EncoderZero(); ImuZero(); SendZero(); break; default: break; } } }
void DisplayDemoChangeRes(DisplayCtrl *dispPtr, u32 uartAddr) { char userInput = 0; int fResSet = 0; int status; /* Flush UART FIFO */ while (XUartPs_IsReceiveData(uartAddr)) { XUartPs_ReadReg(uartAddr, XUARTPS_FIFO_OFFSET); } while (!fResSet) { DisplayDemoCRMenu(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); status = XST_SUCCESS; switch (userInput) { case '1': status = DisplayStop(dispPtr); DisplaySetMode(dispPtr, &VMODE_640x480); DisplayStart(dispPtr); fResSet = 1; break; case '2': status = DisplayStop(dispPtr); DisplaySetMode(dispPtr, &VMODE_800x600); DisplayStart(dispPtr); fResSet = 1; break; case '3': status = DisplayStop(dispPtr); DisplaySetMode(dispPtr, &VMODE_1280x720); DisplayStart(dispPtr); fResSet = 1; break; case '4': status = DisplayStop(dispPtr); DisplaySetMode(dispPtr, &VMODE_1280x1024); DisplayStart(dispPtr); fResSet = 1; break; case '5': status = DisplayStop(dispPtr); DisplaySetMode(dispPtr, &VMODE_1920x1080); DisplayStart(dispPtr); fResSet = 1; break; case 'q': fResSet = 1; break; default : xil_printf("\n\rInvalid Selection"); TimerDelay(500000); } if (status == XST_DMA_ERROR) { xil_printf("\n\rWARNING: AXI VDMA Error detected and cleared\n\r"); } } }
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); } } }