| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #include <stddef.h>
- #include "video_drv.h"
- #include "arm_vsi.h"
- #ifdef _RTE_
- #include "RTE_Components.h"
- #endif
- #include CMSIS_device_header
- #include "cmsis_os2.h"
- #include "RingBuffer.h"
- #include "arm_math.h"
- #include "SchedEvents.h"
- #include "VideoConfig.h"
- #include "RingConfig.h"
- #include "RingInit.h"
- extern osThreadId_t gStreamingThreadID;
- // Number of bytes read by DMA
- #define VIDEO_BLOCK_SIZE RING_BUFSIZE_RX
- // Number of DMA blocks
- #define VIDEO_DMA_NB_BLOCKS RING_NBBUFS
- extern int32_t VideoDrv_Setup(void);
- extern ring_config_t ringConfigRX;
- #ifdef __FVP_PY
- __attribute__((section(".ARM.__at_0x90000000")))
- #endif
- __ALIGNED(16) static uint8_t video_bufferRX[VIDEO_DMA_NB_BLOCKS*VIDEO_BLOCK_SIZE];
- static uint8_t *reservedBufRX=NULL;
- uint8_t* VideoRXBuffer()
- {
- return(video_bufferRX);
- }
- static void VideoEvent (uint32_t event) {
- if (event & VIDEO_DRV_EVENT_RX_DATA)
- {
-
-
- ringInterruptReleaseBuffer(&ringConfigRX,(void *)gStreamingThreadID);
- int reservedRX=ringInterruptReserveBuffer(&ringConfigRX);
- reservedBufRX=ringGetBufferAddress(&ringConfigRX,reservedRX);
- }
- }
- int32_t VideoDrv_Setup(void) {
- int32_t ret;
- ret = VideoDrv_Initialize(VideoEvent);
- if (ret != 0) {
- return ret;
- }
- ret = VideoDrv_Configure(VIDEO_DRV_INTERFACE_RX,
- 8U * VIDEO_DRV_PIXEL_SIZE, /* 16 sample bits */
- static_cast<uint32_t>(VIDEO_DRV_FRAME_RATE*VIDEO_DRV_WIDTH*VIDEO_DRV_HEIGHT));
- if (ret != 0) {
- return ret;
- }
- /* Work because user process not started yet
- */
- int reservedRX=ringInterruptReserveBuffer(&ringConfigRX);
- reservedBufRX=ringGetBufferAddress(&ringConfigRX,reservedRX);
- ret = VideoDrv_SetBuf(VIDEO_DRV_INTERFACE_RX,
- video_bufferRX, VIDEO_DMA_NB_BLOCKS,VIDEO_BLOCK_SIZE);
- if (ret != 0) {
- return ret;
- }
- ret = VideoDrv_Control(VIDEO_DRV_CONTROL_RX_ENABLE);
- if (ret != 0) {
- return ret;
- }
- return 0;
- }
|