Пример #1
0
/* ------------------------------------------------------------ */
int main()
{
	list_audio_devices(alcGetString(NULL, ALC_DEVICE_SPECIFIER));
	/* BBBIOlib init*/
	iolib_init();
	iolib_setdir(8,11, BBBIO_DIR_IN);	/* Button */
	iolib_setdir(8,12, BBBIO_DIR_OUT);	/* LED */


//	sys_info.capability = SYS_CAPABILITY_VIDEO_Tx | SYS_CAPABILITY_VIDEO_Rx | SYS_CAPABILITY_AUDIO_Tx | SYS_CAPABILITY_AUDIO_Rx;
//	sys_info.capability = SYS_CAPABILITY_VIDEO_Tx | SYS_CAPABILITY_AUDIO_Tx;
	sys_info.capability =SYS_CAPABILITY_AUDIO_Rx | SYS_CAPABILITY_VIDEO_Rx;
//	sys_info.capability = SYS_CAPABILITY_VIDEO_Tx;

	sys_info.status = SYS_STATUS_INIT;
	sys_info.cam.width = 320;
	sys_info.cam.height = 240;
//	sys_info.cam.pixel_fmt = V4L2_PIX_FMT_YUV420;
	sys_info.cam.pixel_fmt = V4L2_PIX_FMT_YUYV;

	/* alloc RGB565 buffer for frame buffer data store */
	RGB565_buffer = (unsigned char *)malloc(sys_info.cam.width * sys_info.cam.height *2);

	/* step Codec register  */
	avcodec_register_all();
	av_register_all();
	video_encoder_init(sys_info.cam.width, sys_info.cam.height, sys_info.cam.pixel_fmt);
	video_decoder_init(sys_info.cam.width, sys_info.cam.height, sys_info.cam.pixel_fmt);
	printf("Codec init finish\n");

	/* step Frame buffer initial*/
	if(FB_init() == 0) {
		fprintf(stderr, "Frame Buffer init error\n");
	}
	FB_clear(var_info.xres, var_info.yres);

	sys_set_status(SYS_STATUS_IDLE);

	/* Create Video thread */
	if(sys_info.capability & SYS_CAPABILITY_VIDEO_Rx) pthread_create(&Video_Rx_thread, NULL, Video_Rx_loop, NULL);
	if(sys_info.capability & SYS_CAPABILITY_VIDEO_Tx) pthread_create(&Video_Tx_thread, NULL, Video_Tx_loop, NULL);

	/* Create Audio thread*/
	if(sys_info.capability & SYS_CAPABILITY_AUDIO_Rx) pthread_create(&Audio_Rx_thread, NULL, Audio_Rx_loop, NULL);
	if(sys_info.capability & SYS_CAPABILITY_AUDIO_Tx) pthread_create(&Audio_Tx_thread, NULL, Audio_Tx_loop, NULL);

	/* Signale SIGINT */
	signal(SIGINT, SIGINT_release);

	/* Main loop */
	while(sys_get_status() != SYS_STATUS_RELEASE) {
		/* Button on */
		if (is_high(8,11)) {
			sys_set_status(SYS_STATUS_WORK);
			pin_high(8, 12);	/* LED on*/
		}
		else {
//			FB_clear(var_info.xres, var_info.yres);
//			sys_set_status(SYS_STATUS_IDLE);
			sys_set_status(SYS_STATUS_WORK);
			pin_low(8, 12);	/* LED off */
		}
		//usleep(100000);
		sleep(1);
	}
	pin_low(8, 12); /* LED off */

	/* *******************************************************
	 * Main thread for SIP server communication and HW process
	 *
	 *
	 * *******************************************************/

	/* release */
	if(sys_info.capability & SYS_CAPABILITY_VIDEO_Tx) pthread_join(Video_Tx_thread,NULL);
	if(sys_info.capability & SYS_CAPABILITY_VIDEO_Rx) pthread_join(Video_Rx_thread,NULL);
	if(sys_info.capability & SYS_CAPABILITY_AUDIO_Tx) pthread_join(Audio_Tx_thread,NULL);
	if(sys_info.capability & SYS_CAPABILITY_AUDIO_Rx) pthread_join(Audio_Rx_thread,NULL);


	munmap(FB_ptr, FB_scerrn_size);
	close(FB);
	free(RGB565_buffer);

	video_encoder_release();
	video_decoder_release();
	printf("finish\n");
	return 0;
}
Пример #2
0
int main()
{
// This must be more dynamic in the future, but right now this IOREF is only used for the analog switches in the 10-pin connector
//  (UART pins are handled by SIORefGen, and that voltage has to be lower than this IORef voltage)
//#define DYN_IOREF
#ifdef DYN_IOREF
    // ~1.0V to 4.1V vref
    IOVoltGen_Start();
    IOVoltGen_SetValue(0x80);
    IOVoltBuffer_Start();
#else
    // Results in 5V vref
    VDDIO2ref_SetDriveMode(VDDIO2ref_DM_STRONG);
    VDDIO2ref_Write(1);
#endif
    NV_Init();
    
    SIORefGen_Start();
    SIORefGen_SetValue(62); // 1V
    GPIO_SetTXDrive(0);
    debuguart1_init();
    
    CyGlobalIntEnable; /* Uncomment this line to enable global interrupts. */
    
    CyPins_ClearPin(LED_Status_0);
    CyPins_SetPin(FanEna_0);
  
    if(NVREAD->USBserial[0] != 0 && NVREAD->USBserial[0] != 0xff) {
		for(uint8_t loopah=0; loopah<8; loopah++) {
			mySerial[2 + (loopah<<1)] = NVREAD->USBserial[loopah]; // Update USB descriptor Unicode values with our ASCII
		}
        USBFS_1_SerialNumString(mySerial);
	}

    USB_Init();
    CyDelay(500);
    CyPins_ClearPin(FanEna_0);
    targetuart_init();
#ifdef SPECIAL_EDITION
    // Note that VtargetRef is in the 5V quadrant so that pin will always
    // output 5V when set high, no matter what the IOREF is set to!
    GPIO_SetPinState( TREF_PIN7, PIN_OUT_HIGH ); // Output on Vref
    GPIO_SetPinState( DFMS_PIN8, PIN_UART_TX ); // Send on DFMS pin, recv on DTMS!
    GPIO_SetPinState( DTMS_PIN9, PIN_UART_RX );
#else
    GPIO_SetPinState( DTMS_PIN9, PIN_UART_TX ); // Send on DTMS pin, recv on DFMS!
    GPIO_SetPinState( DFMS_PIN8, PIN_UART_RX );
#endif
    printf("\n\nWJ CDB Assist v3 controller init\n");
    
    FB_init();
    FB_clear();
    disp_str("CDB ASSIST V3",13,(64-39),0,FONT6X6 | INVERT);
    disp_str("Sony Mobile",11,(64-33),64-12,FONT6X6);
#ifdef SPECIAL_EDITION
    disp_str("Calibration Edition",19,(64-57),64-6,FONT6X6);
#else
    disp_str("Open Devices",12,(64-36),64-6,FONT6X6);
#endif
    FB_update();
    
    GPIO_Init();
    DummyLoad_Init();
    USBMux_Init();
    I2C_Init();
    PWM_Init();
    ADC_Init();
    
    uint16_t ctr=0;
    
    for(;;)
    {
        char buffah[22];
        uint8_t num;
        float vbatvolt,vbatcur,vbusvolt,vbuscur;
        
        I2C_Work();
        vbatvolt=(float)I2C_Get_VBAT_VoltAvg() * 0.001f;
        vbatcur=I2C_Get_VBAT_CurAvg();

        PWM_Work(I2C_Get_VBAT_Volt(),I2C_Get_VBAT_CurRaw());
        DummyLoad_Work(I2C_Get_VBAT_Volt());
        
        ADC_Work();
        uint8_t vrefok = ADC_VtargetValid();
        static uint8_t oldvrefok = 2;
        
        if( vrefok != oldvrefok ) {
            if( vrefok ) {
                CyPins_ClearPin(LED_Vref_0);
                GPIO_SetTXDrive( 1 );
            } else {
                CyPins_SetPin(LED_Vref_0);
                GPIO_SetTXDrive( 0 );
                SIORefGen_SetValue(62); // Default 1V ref
            }
            oldvrefok = vrefok;
        }

        if(ctr == 0) {
            vbusvolt=(float)I2C_Get_VBUS_Volt() * 0.001f;
            vbuscur=I2C_Get_VBUS_Cur();
            USBMux_UpdateMeasurements(vbusvolt,vbuscur);
            
            num = snprintf(buffah, sizeof(buffah), "VBAT %5.2fV %6.1fmA", vbatvolt,vbatcur);
            disp_str(buffah, num, 0, 8, FONT6X6);

            num = snprintf(buffah, sizeof(buffah), "VBUS %5.2fV %6.1fmA", vbusvolt,vbuscur);
            disp_str(buffah, num, 0, 8+6, FONT6X6);

            DummyLoad_ADCWork();
            float loadcur = DummyLoad_GetCur();
            float loadtemp = DummyLoad_GetTemp();
            num = snprintf(buffah, sizeof(buffah), "Load %5.1f` %6.1fmA", loadtemp,loadcur);
            disp_str(buffah, num, 0, 8+12, FONT6X6);

            float tmp = ADC_GetVoltage(VBATSENSE);
            num = snprintf(buffah, sizeof(buffah), "VBAT %5.2fV", tmp);
            disp_str(buffah, num, 0, 8+18, FONT6X6);

            tmp = ADC_GetVoltage(USB2SENSE);
            num = snprintf(buffah, sizeof(buffah), "USB2 %5.2fV", tmp);
            disp_str(buffah, num, 0, 8+24, FONT6X6);

            tmp = ADC_GetVoltage(USB3SENSE);
            num = snprintf(buffah, sizeof(buffah), "USB3 %5.2fV", tmp);
            disp_str(buffah, num, 0, 8+30, FONT6X6);

            tmp = ADC_GetVoltage(VTARGETSENSE);
            if( tmp > 4.5f ) { // Assume 5V, disable regulated output
                CY_SET_REG8(DTMS__SIO_CFG, (CY_GET_REG8(DTMS__SIO_CFG) & 0xcf) | 0x20);
                CY_SET_REG8(DTMS__SIO_DIFF, (CY_GET_REG8(DTMS__SIO_DIFF) & 0xcf) | 0x00);
                CY_SET_REG8(DTMS__SIO_HYST_EN, (CY_GET_REG8(DTMS__SIO_HYST_EN) & 0xcf) | 0x00);
            } else if( tmp > 0.89f ) {
                float val = tmp * 255.0f / 4.096f;
                if(val > 255.0f) val = 255.0f;
                SIORefGen_SetValue((uint8_t)val);
                CY_SET_REG8(DTMS__SIO_CFG, (CY_GET_REG8(DTMS__SIO_CFG) & 0xcf) | 0x30); // Regulated output buffer
                CY_SET_REG8(DTMS__SIO_DIFF, (CY_GET_REG8(DTMS__SIO_DIFF) & 0xcf) | 0x20);
                CY_SET_REG8(DTMS__SIO_HYST_EN, (CY_GET_REG8(DTMS__SIO_HYST_EN) & 0xcf) | 0x20);
            }
            num = snprintf(buffah, sizeof(buffah), "VTGT %5.2fV", tmp);
            disp_str(buffah, num, 0, 8+36, FONT6X6);

            FB_update();
            UpdateCtrl();
            ctr=256;
        } else {
            ctr--;
        }

        USB_Work();
    }
}
Пример #3
0
/* ------------------------------------------------------------ */
static void *Video_Rx_loop()
{
	int Rx_socket;
	struct sockaddr_in Rx_addr;
	struct VOD_DataPacket_struct Rx_Buffer ;

	/* Socket init */
	if(Rx_socket_init(&Rx_socket, &Rx_addr, VIDEO_NET_PORT) ==0) {
		fprintf(stderr, "Rx Socket init \n");
		return NULL;
	}
	printf("Rx socket init finish\n");

	/* receive data */
	int recv_len ; 
	AVPacket packet ;
	int remain_size =0;
	unsigned char *RGB_buffer =NULL;	/* feedback pointer */
	int ID ;

	fd_set fds;
	struct timeval tv;
	int r;

	while(sys_get_status() != SYS_STATUS_RELEASE) {
		/* Rx video data */
		while(sys_get_status() == SYS_STATUS_WORK) {

			/* Timeout. */
			FD_ZERO(&fds);
			FD_SET(Rx_socket, &fds);
			tv.tv_sec = 2;
			tv.tv_usec = 0;

			r = select(Rx_socket + 1, &fds, NULL, NULL, &tv);
			if (r == -1) {
				fprintf(stderr, "select");
				goto VIDEO_RX_RELEASE ;
			}
			if (r == 0) {
				//fprintf(stderr, "select timeout\n");
				/* Timeout to clear FrameBuffer */
				FB_clear(var_info.xres, var_info.yres);
				continue;
			}

			/* Receive Data */
			recv_len = recv(Rx_socket, (char*)&Rx_Buffer, sizeof(Rx_Buffer) , 0) ;
			if(recv_len == -1) {
				fprintf(stderr ,"Stream data recv() error\n");
				break ;
			}
			else {
				switch(Rx_Buffer.DataType) {
				case VOD_PACKET_TYPE_FRAME_HEADER :	/* AVPacket as header */
					memcpy(&packet, &Rx_Buffer.header , sizeof(AVPacket));
					packet.data = (unsigned char *)malloc(sizeof(char) * packet.size);
					remain_size = packet.size;
					break ;

				case VOD_PACKET_TYPE_FRAME_DATA :	/* AVPacket.data */
					ID = Rx_Buffer.data.ID ;
					memcpy(packet.data + ID * 1024, &Rx_Buffer.data.data[0] , Rx_Buffer.data.size);

					remain_size -= Rx_Buffer.data.size;
					/* receive finish */
					if(remain_size <= 0) {
						/* Decode frame */
						video_decoder(packet.data, packet.size, &RGB_buffer);

						/* Display in Frame buffer*/
						RGB24_to_RGB565(RGB_buffer, RGB565_buffer, sys_info.cam.width, sys_info.cam.height);
						FB_display(RGB565_buffer, 0, 0, sys_info.cam.width, sys_info.cam.height);
						av_free_packet(&packet);
					}
					break ;
				}
			}
		}
		usleep(50000);
	}

VIDEO_RX_RELEASE :
	close(Rx_socket);
	printf("Video Rx finish\n");
	pthread_exit(NULL); 
}