⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flcd.c

📁 GM8120 linux driver.
💻 C
📖 第 1 页 / 共 4 页
字号:
  result = getchar();  switch(result)  {    case '1':       panel_width= 640;      panel_height = 480;      panel_type = 0;        LCD_IO_Base = 0x90600000;      int_num = 20;      break;    case '2':       panel_width= 320;      panel_height = 240;      panel_type = 1;        LCD_IO_Base = 0x90600000;      int_num =20;      break;    case '3':       panel_width= 640;      panel_height = 480;      panel_type = 0;        LCD_IO_Base = 0x90600000;      int_num = 20;      break;      case '4':       panel_width= 320;      panel_height = 240;      panel_type = 1;        LCD_IO_Base = 0x90600000;      int_num = 20;      break;       case '5':       panel_width= 640;      panel_height = 480;      panel_type = 0;        LCD_IO_Base = 0x96500000;      int_num = 2;      break;       case '6':       panel_width= 320;      panel_height = 240;      panel_type = 1;        LCD_IO_Base = 0x96500000;      int_num=0;      break;    }                       pFrameBuffer = malloc( (panel_width* panel_height * 2 * 10 ) + 0x3f);    // Maximum 16bpp 10 Frame for motion piture      if(pFrameBuffer == NULL ) printf("memory allocate fail\n");      	  pFrameBuffer += 0x3F;	  pFrameBuffer = (unsigned char *) ((unsigned int ) pFrameBuffer & 0xffffffc0) ;  	  SetFrameBase( pFrameBuffer );      Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 16);      saving_mode_burnning();                      // *****************RGB 16/32 BPP  vs Endian vs OSD **************           ColorBar_RGB( 1, LBLP, pFrameBuffer, panel_width, panel_height,0);      OSD_Test(1, "RGB LBLP 1BPP");  //3/19 Τ拜肈             palette_ram_test(LCD_IO_Base);            Vertical_Int_Test(int_num);           ColorBar_RGB( 1, BBBP, pFrameBuffer, panel_width, panel_height,0);//      OSD_Test(1, "RGB BBP 1BPP");       ColorBar_RGB( 1, LBBP, pFrameBuffer, panel_width, panel_height,0);//      OSD_Test(1, "RGB LBBP 1BPP");             ColorBar_RGB( 2, LBLP, pFrameBuffer, panel_width, panel_height,0);//      OSD_Test(1, "RGB LBLP 2BPP");       ColorBar_RGB( 2, BBBP, pFrameBuffer, panel_width, panel_height,0);      OSD_Test(1, "RGB BBP 2BPP");       ColorBar_RGB( 2, LBBP, pFrameBuffer, panel_width, panel_height,0);//      OSD_Test(1, "RGB LBBP 2BPP");             ColorBar_RGB( 4, LBLP, pFrameBuffer, panel_width, panel_height,0);//      OSD_Test(1, "RGB LBLP 4BPP");       ColorBar_RGB( 4, BBBP, pFrameBuffer, panel_width, panel_height,0);//      OSD_Test(1, "RGB BBP 4BPP");       ColorBar_RGB( 4, LBBP, pFrameBuffer, panel_width, panel_height,0);      OSD_Test(1, "RGB LBBP 4BPP");             ColorBar_RGB( 8, LBLP, pFrameBuffer, panel_width, panel_height,0);//      OSD_Test(1, "RGB LBLP 8BPP");       ColorBar_RGB( 8, BBBP, pFrameBuffer, panel_width, panel_height,0);//      OSD_Test(1, "RGB BBP 8BPP");       ColorBar_RGB( 8, LBBP, pFrameBuffer, panel_width, panel_height,0);      OSD_Test(1, "RGB LBBP 8BPP");                   	  	  Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 16);	        ColorBar_YCbCr_420( BBBP, pFrameBuffer, panel_width, panel_height, 0);      OSD_Test(2, "YCBCR 420 BBBP");      ColorBar_YCbCr_420( LBBP, pFrameBuffer, panel_width, panel_height, 0);//      OSD_Test(2, "YCBCR 420 LBBP");      ColorBar_YCbCr_420( LBLP, pFrameBuffer, panel_width, panel_height, 0);//      OSD_Test(2, "YCBCR 420 LBLP");      		  	  SetYCbCr(422);  	  ColorBar_YCbCr_422( BBBP, pFrameBuffer, panel_width, panel_height, 0);	  OSD_Test(2, "YCBCR 422 BBBP");            ColorBar_YCbCr_422( LBBP, pFrameBuffer, panel_width, panel_height, 0);     //	  OSD_Test(2, "YCBCR 422 LBBP");      	  ColorBar_YCbCr_422( LBLP, pFrameBuffer, panel_width, panel_height, 0);     //	  OSD_Test(2, "YCBCR 422 LBLP");         	  	         if( panel_type == 1 )            {            Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 16);      SetEndian(LBBP);      OSD_Off(LCD_IO_Base);      Load_Image( "D:\\FTLCDc100\\Script\\ship565_320x240.bin", 153600, pFrameBuffer, LBBP);      OSD_Test(1, "RGB LBBP 16 BPP");            SetEndian( BBBP);      OSD_Off(LCD_IO_Base);	  Load_Image( "D:\\FTLCDc100\\Script\\ship565_320x240.bin", 153600, pFrameBuffer, BBBP);	//  OSD_Test(1, "RGB BBBP 16 BPP");		  	  SetEndian( LBLP);	  Load_Image( "D:\\FTLCDc100\\Script\\ship565_320x240.bin", 153600, pFrameBuffer, LBLP);//	  OSD_Test(1, "RGB LBLP 16 BPP");	  	        Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 24);      SetEndian( BBBP);      Set_DivNo(0xf);	  Load_Image( "D:\\FTLCDc100\\Script\\ship888_320x240.bin", 307200 , pFrameBuffer, BBBP);//      OSD_Test(1, "RGB  24BPP");            Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 16);      animation_test( pFrameBuffer, "D:\\FTLCDc100\\Script\\mov3224\\mov3224.bin",  1536000, int_num  );     }   else     {                     Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 16);      OSD_Off(LCD_IO_Base);	  SetEndian(LBBP);	  Load_Image( "D:\\FTLCDc100\\Script\\castle64565.bin", 614400, pFrameBuffer, LBBP);//	  OSD_Test(1, "RGB LBBP 16 BPP");	  	 	  SetEndian( BBBP);	  OSD_Off(LCD_IO_Base);	  Load_Image( "D:\\FTLCDc100\\Script\\castle64565.bin", 614400, pFrameBuffer, BBBP);//	  OSD_Test(1, "RGB BBBP 16 BPP");	  	  SetEndian( LBLP);	  OSD_Off(LCD_IO_Base);	  Load_Image( "D:\\FTLCDc100\\Script\\castle64565.bin", 614400, pFrameBuffer, LBLP);	  OSD_Test(1, "RGB LBLP 16 BPP");      Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 24);           OSD_Off(LCD_IO_Base);      Set_DivNo(0xf);      Load_Image( "D:\\FTLCDc100\\Script\\samuel64888.bin", 1228800, pFrameBuffer, BBBP);	  OSD_Test(1, "RGB 32 BPP");	  	  OSD_Off(LCD_IO_Base);      Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 16);      animation_test(pFrameBuffer, "D:\\FTLCDc100\\Script\\animation565.bin", 6144000, int_num );	 }  	         ColorBar_RGB( 8, LBBP, pFrameBuffer, panel_width, panel_height,1);          //***************************** 1bpp *******************************************               Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 16);   ColorBar_YCbCr_422( LBBP, pFrameBuffer, panel_width , panel_height, 1);   ColorBar_YCbCr_422( BBBP, pFrameBuffer, panel_width , panel_height, 1);	}/*Show_Picture( char *file, unsigned char *pFrameBuffer, int width, int height){   FILE *fptr;   unsigned int bytes;       fptr = fopen( file , "rb");    pFrameBuffer = malloc( (width *height *4 ) + 0x3f);    pFrameBuffer += 0x3F;    pFrameBuffer = (unsigned char *) ((unsigned int ) pFrameBuffer & 0xffffffc0) ;      SetFrameBase( pFrameBuffer );    if(  (bytes = fread(pFrameBuffer, sizeof(unsigned int) *640 *480 , 1 , fptr)) == NULL)   {    printf("File open error, read %d bytes \n", bytes);   }            }*/void SetFrameBase( unsigned char  *pFrameBuffer ){  *(unsigned int *)(LCD_IO_Base + 0x10) =  (unsigned int) pFrameBuffer;} void Init_LCD( volatile unsigned int LCD_Base, volatile LCDMTYPE_T  *pLCDC, unsigned int lcd_type, unsigned char bpp){     *(volatile unsigned int *) (LCD_Base + 0x0 )= pLCDC[lcd_type].Timing0;   *(volatile unsigned int *) (LCD_Base + 0x4 )= pLCDC[lcd_type].Timing1;   *(volatile unsigned int *) (LCD_Base + 0x8 )= pLCDC[lcd_type].Timing2;   //   *(volatile unsigned int *) (LCD_Base + 0x10 )= 0x10000020;//   *(volatile unsigned int *) (LCD_Base + 0x1c )= 0x00053a29; //YCbCR              *(volatile unsigned int *) (LCD_Base + 0x1c ) = 0x00013a21; // Turn on LCD   SetBPP( bpp );   Set_DivNo(6);               }void SetBPP( unsigned char bpp){  *(unsigned int *)(LCD_IO_Base + 0x1c) &= 0xFFFFFFF1;  switch( bpp)    {       case 1:              *(unsigned int *)(LCD_IO_Base + 0x1c) &= 0xFFFFFFF1;              *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00000000;              break;              case 2:              *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00000002;              break;       case 4:              *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00000004;              break;       case 8:              *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00000006;              break;       case 16:               *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00000008;              break;         case 24:               *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x0000000a;              break;   }           }              void SetEndian( unsigned char endian ){   *(unsigned int *)(LCD_IO_Base + 0x1c) &= 0xFFFFF9FF;      switch( endian )   {     case LBLP:        break;     case BBBP:        *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00000200;        break;     case LBBP:        *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00000400;        break;   }                                }void SetYCbCr( int type ){   *(unsigned int *)(LCD_IO_Base + 0x1c) &= 0xfff9ffff;   if( type == 422)     {       *(unsigned int *)(LCD_IO_Base + 0x1c)  |= 0x00040000;     }             else      if( type == 420)        *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00060000;                       }void ColorBar_YCbCr_420( unsigned char endian, unsigned char *pFrameBuffer, int width, int height, int int_test){   unsigned char *CbPtr, *CrPtr, r, g, b;   int  i,j;         OSD_Off(LCD_IO_Base);   SetYCbCr(420);   Set_DivNo(6); //  SetBPP(8);   r=0, g=0; b=255;   rgb2ycbcr( &r, &g, &b );      *(unsigned int *)(LCD_IO_Base + 0x10) |= 0x20;            CbPtr = pFrameBuffer + 0x80000;   CrPtr = pFrameBuffer + 0xa0000;         SetEndian( endian );       if(endian == BBBP)   {     for(i=0; i<height; i++)  //***********  draw pattern      {        r=255, g=0; b=0;        rgb2ycbcr( &r, &g, &b );        for(j=0; j<(width * 1/3 ); j++)         {                      *(unsigned char *) (pFrameBuffer + i * width + (j & 0xFFFFFFFC ) + 3-(j%4) ) = r;                            if( ((i%2) == 0) && ((j%2) == 0) )                 *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) +  ((j>>1)  & 0xFFFFFFFC)  + (3 - ((j>>1) %4) ) ) = g;           if( ((i%2) == 0) && ((j%2) == 0) )                 *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) +  ((j>>1)  & 0xFFFFFFFC) + (3 - ((j>>1) %4)) )= b;              }                                          r=0, g=255; b=0;        rgb2ycbcr( &r, &g, &b );        for( ; j<(width * 2/3 ); j++)         {           *(unsigned char *) (pFrameBuffer + i * width + (j & 0xFFFFFFFC ) + 3-(j%4) ) = r;                            if( ((i%2) == 0) && ((j%2) == 0) )                 *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) +  ((j>>1)  & 0xFFFFFFFC)  + (3 - ((j>>1) %4) )) = g;           if( ((i%2) == 0) && ((j%2) == 0) )                 *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) +  ((j>>1)  & 0xFFFFFFFC) + (3 - ((j>>1) %4))) = b;          }                   r=0, g=0; b=255;       rgb2ycbcr( &r, &g, &b );         for( ; j<width; j++)         {           *(unsigned char *) (pFrameBuffer + i * width + (j & 0xFFFFFFFC ) + 3-(j%4) ) = r;                            if( ((i%2) == 0) && ((j%2) == 0) )                 *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) +  ((j>>1)  & 0xFFFFFFFC)  + (3 - ((j>>1) %4) ) )= g;           if( ((i%2) == 0) && ((j%2) == 0) )                 *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) +  ((j>>1)  & 0xFFFFFFFC) + (3 - ((j>>1) %4)) )= b;                             }                                         } // end of i loop       }  //end of if(BBBP)               else   {         for(i=0; i<height; i++)  //***********  draw pattern      {        r=255, g=0; b=0;        rgb2ycbcr( &r, &g, &b );        for(j=0; j<(width * 1/3 ); j++)         {                      *(unsigned char *) (pFrameBuffer + i * width + j ) = r;                            if( (i%2) == 0 )  *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) +  (j>>1) ) = g;           if( (i%2) == 0 )  *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) + (j>>1) ) = b;              }                                          r=0, g=255; b=0;        rgb2ycbcr( &r, &g, &b );        for( ; j<(width * 2/3 ); j++)         {          *(unsigned char *) (pFrameBuffer + i * width + j) = r;          if( (i%2) == 0 ) *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) + (j>>1) ) = g;          if( (i%2) == 0 ) *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) + (j>>1) ) = b;         }                   r=0, g=0; b=255;       rgb2ycbcr( &r, &g, &b );         for( ; j<width; j++)         {           *(unsigned char *) (pFrameBuffer + i * width + j) = r;            if( (i%2) == 0 ) *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) + (j>>1) ) = g;           if( (i%2) == 0 ) *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) + (j>>1) ) = b;                              }                                         }              }            /*          for(i=0; i<height; i++)  //***********  draw pattern      {        r=255, g=0; b=0;        rgb2ycbcr( &r, &g, &b );        for(j=0; j<(width * 1/3 ); j++)         {                      *(unsigned char *) (pFrameBuffer + i * width + (j>>2) + 3-(j%4) ) = r;                            if( (i%2) == 0 )  *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) +  (j>>1) ) = g;           if( (i%2) == 0 )  *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) + (j>>1) ) = b;              }                                          r=0, g=255; b=0;        rgb2ycbcr( &r, &g, &b );        for( ; j<(width * 2/3 ); j++)         {          *(unsigned char *) (pFrameBuffer + i * width + j) = r;          if( (i%2) == 0 ) *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) + (j>>1) ) = g;          if( (i%2) == 0 ) *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) + (j>>1) ) = b;         }                   r=0, g=0; b=255;       rgb2ycbcr( &r, &g, &b );         for( ; j<width; j++)         {           *(unsigned char *) (pFrameBuffer + i * width + j) = r;            if( (i%2) == 0 ) *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) + (j>>1) ) = g;           if( (i%2) == 0 ) *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) + (j>>1) ) = b;                              }                                         }       */}void ColorBar_YCbCr_422( unsigned char endian, unsigned char *pFrameBuffer, int width, int height, int int_test){  int i,j;  unsigned char r,g,b, result;        OSD_Off(LCD_IO_Base);  (volatile) FIFO_Under_Run=0;           fLib_ConnectInt(34,  UnderRun_Handler );	//it only can be         UnmaskFIQ(2);  SetFIQmode(2,LEVEL);       SetBPP(16);  SetEndian(endian);  SetYCbCr(422);  Set_DivNo(6);       switch(endian)  {    case BBBP:  printf("YCbCr BBBP Testing\n");                break;    case LBLP:  printf("YCbCr LBLP Testing\n");                break;    case LBBP:   printf("YCbCr LBBP Testing\n");                break;                                      }      for(i=0; i<height; i++)                           //***********  draw pattern      {        r=255, g=0; b=0;                         // Draw red Bar        rgb2ycbcr( &r, &g, &b );        for(j=0; j< ( width * 1/3) *2 ; j=j+4)         {                      if( endian == BBBP)             {              *(unsigned char *) (pFrameBuffer + i * width*2 + j+3 ) = r;                *(unsigned char *) (pFrameBuffer + i * width*2 + j+2 ) = g;                                             *(unsigned char *) (pFrameBuffer + i * width*2 + j+1 ) = r;                *(unsigned char *) (pFrameBuffer + i * width*2 + j ) = b;                            }             else             {              *(unsigned char *) (pFrameBuffer + i * width*2 + j+3 ) = r;                *(unsigned char *) (pFrameBuffer + i * width*2 + j+2 ) = b;                                            *(unsigned char *) (pFrameBuffer + i * width*2 + j+1 ) = r;                *(unsigned char *) (pFrameBuffer + i * width*2 + j ) = g;                            }                                          }              r=0, g=255; b=0;                          // Draw green bar        rgb2ycbcr( &r, &g, &b );                      for( ; j< (width * 2/3 )*2 ; j=j+4)         {                      if( endian == BBBP)             {              *(unsigned char *) (pFrameBuffer + i * width*2 + j+3 ) = r;                *(unsigned char *) (pFrameBuffer + i * width*2 + j+2 ) = g;                                             *(unsigned char *) (pFrameBuffer + i * width*2 + j+1 ) = r;                *(unsigned char *) (pFrameBuffer + i * width*2 + j ) = b;                            }             else             {              *(unsigned char *) (pFrameBuffer + i * width*2 + j+3 ) = r;  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -