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

📄 show.c

📁 epson 13506 driver code
💻 C
📖 第 1 页 / 共 4 页
字号:
         break;
      }

   printf("\n");
   }

/*-------------------------------------------------------------------------*/

void ExitBadConfiguration(unsigned DisplayMode)
{
   char str[10];

   if (DisplayMode & LCD)
      strcpy(str, "LCD");
   else if (DisplayMode & CRT)
      strcpy(str, "CRT");
   else if (DisplayMode & TV)
      strcpy(str, "TV");
   else
      return;
      
   printf("\nERROR: Program not configured for %s.", str);
   printf("\n       Run 13506CFG and configure for %s.\n", str);

   exit(1);
}

/*-------------------------------------------------------------------------*/

void CheckLcdOrientationForLandscape(void)
{
   if (seGetLcdOrientation() != LANDSCAPE)
      {
      printf("\nERROR: LCD must be in landscape mode.\n");

      // Turn off displays
      seLcdDisplayEnable(FALSE);
      seCrtDisplayEnable(FALSE);
      seTvDisplayEnable(FALSE);

      exit(1);
      }
}

/*-------------------------------------------------------------------------*/

void DisplayErrorNotEnoughMemory(unsigned BitsPerPixel)
{
   unsigned count = 0;
   unsigned DisplayMode = 0;
   char szErr[50];
   DisplayMode = GetSurfaceDisplayMode(GetActiveSurfaceNumber());
   szErr[0] = 0;
   count = 0;

   if (DisplayMode & LCD)
      {
      strcat(szErr, "LCD");
      ++count;
      }

   if (DisplayMode & CRT)
      {
      if (count > 0)
         strcat(szErr, ", ");

      strcat(szErr, "CRT");
      ++count;
      }

   if (DisplayMode & TV)
      {
      if (count > 0)
         strcat(szErr, ", ");

      strcat(szErr, "TV");
      ++count;
      }

   if (count == 0)
      strcpy(szErr, "NONE");

   printf(szModeFailed, szErr, BitsPerPixel);
}

/*-------------------------------------------------------------------------*/

void SetLcdBitsPerPixel(int BitsPerPixel)
{
#ifdef INTEL_DOS
   if (seSetLcdBitsPerPixel(BitsPerPixel) == -1)
      DisplayErrorNotEnoughMemory(BitsPerPixel);
#else
   if (seSetLcdBitsPerPixel(BitsPerPixel) == 0)
      DisplayErrorNotEnoughMemory(BitsPerPixel);
#endif
}

/*-------------------------------------------------------------------------*/

void SetCrtBitsPerPixel(int BitsPerPixel)
{
#ifdef INTEL_DOS
   if (seSetCrtBitsPerPixel(BitsPerPixel) == -1)
      DisplayErrorNotEnoughMemory(BitsPerPixel);
#else
   if (seSetCrtBitsPerPixel(BitsPerPixel) == 0)
      DisplayErrorNotEnoughMemory(BitsPerPixel);
#endif
}

/*-------------------------------------------------------------------------*/

void SetTvBitsPerPixel(int BitsPerPixel)
{
   SetCrtBitsPerPixel(BitsPerPixel);
}

/*-------------------------------------------------------------------------*/

void SetLcdCrtBitsPerPixel(int BitsPerPixel)
{
#ifdef INTEL_DOS
   if (seSetLcdCrtBitsPerPixel(BitsPerPixel) == -1)
      DisplayErrorNotEnoughMemory(BitsPerPixel);
#else
   if (seSetLcdCrtBitsPerPixel(BitsPerPixel) == 0)
      DisplayErrorNotEnoughMemory(BitsPerPixel);
#endif
}

/*-------------------------------------------------------------------------*/

void SetLcdTvBitsPerPixel(int BitsPerPixel)
{
   SetLcdCrtBitsPerPixel(BitsPerPixel);
}

/*-------------------------------------------------------------------------*/

int main( int argc, char *argv[] )
   {
   unsigned nBitsPerPixel[MAX_DISP_SURFACE];
   int surface;
   int GotDisplaySurfaceIndex = FALSE;

   int i;

   int *bpp;
   int BppSize;
   int LandscapeBpp[] = { 16, 15, 8, 4 };
   int k;
   int ch;
   unsigned regDisplayMode;
   char *szPressKey = "Press any key to continue...\n";
   char *szCrtTvInLandscapeMode = "\nWARNING: CRT/TV only available in LANDSCAPE mode.\n";
   char szBad_iDisplay[] = "\nERROR: Invalid display surface number.\n";
   char *pStr;
   int iDisplay = -1;
   int LcdBitsPerPixel = 0;
   int CrtTvBitsPerPixel = 0;
   unsigned regLcdDisplayMode;
   unsigned width1, height1;
   unsigned width2, height2;
   unsigned DisplayMode = 0;
   unsigned ConfiguredBpp = 0;

   bpp = LandscapeBpp;
   BppSize = sizeof(LandscapeBpp) / sizeof(LandscapeBpp[0]);
   ShowAllBppModes = TRUE;
   SelectedLcdBppMode = FALSE;

   gnUseVertical     = FALSE;
   gnInitRegisters   = TRUE;
   gnAutoRun         = FALSE; 
   gnContinualScrnRead  = FALSE;
   gnContinualScrnWrite = FALSE;
   gnShowGrid        = FALSE;
   gnUpdateDisplayMemory = TRUE;
   NumberOfSurfaces  = 0;
   CommonMemoryBlockForAllDisplays = FALSE;
   LcdOrientation    = LANDSCAPE;
   DisplaySurfaceCombination = SURFACE_NONE;

/*-------------------*/

   for (surface = 0; surface < MAX_DISP_SURFACE; ++surface)
      {
      nBitsPerPixel[surface] = 0;  /* 0 means show all bits-per-pixel modes. */
      Orientation[surface] = LANDSCAPE;
      SurfaceDisplayMode[surface] = 0;
      }

/*-------------------*/

   DisplayCopyright();


   /*
   ** Parse the command line.
   */
   for (i = 1; i < argc; ++i)
      {
      strupr(argv[i]);

      if (('/' == *argv[i]) || ('-' == *argv[i]))
         {
         argv[i]++;

         if (!strcmpi( argv[i], "?" ))
            {
            DisplayUsage( );
            return 0;
            }
         else if (!strcmpi( argv[i], "A" ))
            {
            gnAutoRun = 1;
            }
         else if (!strcmpi( argv[i], "G" ))
            {
            gnShowGrid = TRUE;
            }
         else if (!strcmpi( argv[i], "S" ))
            {
            gnUseVertical = TRUE;
            }
         else if (!strcmpi( argv[i], "READ" ))
            {
            gnContinualScrnRead = TRUE;
            }
         else if (!strcmpi( argv[i], "WRITE" ))
            {
            gnContinualScrnWrite = TRUE;
            }
         else if ( !strcmpi( argv[i], "NOINIT" ))
            {
            gnInitRegisters = FALSE;
            }
         else if ( !strcmpi( argv[i], "R90" ))
            {
            LcdOrientation |= ROTATE90;
            }
         else if ( !strcmpi( argv[i], "R180" ))
            {
            LcdOrientation |= ROTATE180;
            }
         else if ( !strcmpi( argv[i], "R270" ))
            {
            LcdOrientation |= ROTATE270;
            }
         else
            {
            DisplayUsage( );
            return 1;
            }
         }
      else if (!strncmp(argv[i], "BL=", 3))
         {
         LcdBitsPerPixel = atoi( &argv[i][3] );

         switch (LcdBitsPerPixel)
            {
            case 4:
            case 8:
            case 15:
            case 16:
               ShowAllBppModes = FALSE;
               SelectedLcdBppMode = TRUE;
               break;

            default:
               DisplayUsage( );
               return 1;
            }
         }
      else if (!strncmp(argv[i], "BC=", 3))
         {
         CrtTvBitsPerPixel = atoi( &argv[i][3] );

         switch (CrtTvBitsPerPixel)
            {
            case 4:
            case 8:
            case 15:
            case 16:
               ShowAllBppModes = FALSE;
            break;

            default:
               DisplayUsage( );
               return 1;
            }
         }
      else if (!strncmp(argv[i], "DS=", 3))
         {
         if (argv[i][3] == '?')
            {
            DisplaySurfaceHelp();
            return 0;
            }

         iDisplay = atoi(&argv[i][3]);

         if ((iDisplay >= 0) && (iDisplay <= 6))
            GotDisplaySurfaceIndex = TRUE;
         else
            {
            printf("%s", szBad_iDisplay);
            return 1;
            }
         }
      else
         {
         DisplayUsage( );
         return 1;
         }
      }

   if (gnContinualScrnRead)
      {
      if (gnAutoRun)
         {
         DisplayUsage( );
         printf( "ERROR: Continual screen read will not work with the /a switch.\n" );
         return 1;
         }
      }

   if (gnContinualScrnWrite)
      {
      if (gnAutoRun)
         {
         DisplayUsage( );
         printf( "ERROR: Continual screen write will not work with the /a switch.\n" );
         return 1;
         }
      }


   switch (seRegisterDevice(&HalInfo))
      {
      case ERR_OK:
         break;

#ifdef INTEL_W32
      case ERR_PCI_DRIVER_NOT_FOUND:
         printf("ERROR: PCI driver not found.\n");
         return 1;

      case ERR_PCI_BRIDGE_ADAPTER_NOT_FOUND:
         printf("ERROR: PCI bridge adapter not found.\n");
         return 1;
#endif

      case ERR_UNKNOWN_DEVICE:
         printf("ERROR: Could not detect S1D13506.\n");
         return 1;
      
      default:
         printf("ERROR: Could not map memory from evaluation board to host platform.\n");
         return 1;
      }



   if (((LcdBitsPerPixel != 0) || (CrtTvBitsPerPixel != 0)) && !gnInitRegisters)
      {
      printf("ERROR: bl= and bc= options cannot be used with /noinit.\n");
      exit(1);
      }


   if (gnInitRegisters)
      {
      switch (iDisplay)
         {
         case 0:
            DisplayMode = LCD;
            break;

         case 1:
            DisplayMode = CRT;
            break;

         case 2:
            DisplayMode = TV;
            break;

         case 3:
         case 5:
            DisplayMode = LCD | CRT;
            break;

         case 4:
         case 6:
            DisplayMode = LCD | TV;

            if (HalInfo.wTVFlickerFilter)
               DisplayMode |= CRT;
            break;

         default:
            DisplayMode = 0;
            break;
         }

      switch (seInitReg(DisplayMode, CLEAR_MEM | DISP_BLANK))
         {
         case ERR_OK:
            break;

         case ERR_CLKI_NOT_IN_TABLE:
            printf("WARNING: CLKI frequency not in HAL table.\n"
                   "         Program assumes that external oscillator is used.\n");
            break;

         case ERR_CLKI2_NOT_IN_TABLE:
            printf("WARNING: CLKI2 frequency not in HAL table.\n"
                   "         Program assumes that external oscillator is used.\n");
            break;

         case ERR_NOT_ENOUGH_MEMORY:
            printf("\nERROR: Not enough display buffer memory.\n");
            return 1;
            break;
         }
      }
   else
      {
      LcdOrientation = LANDSCAPE;

      if (seReadRegByte(REG_DISPLAY_MODE) & 0x40)
         LcdOrientation |= ROTATE90;

      if (seReadRegByte(REG_LCD_DISPLAY_MODE) & 0x10)
         LcdOrientation |= ROTATE180;
      }


   regDisplayMode = seReadRegByte(REG_DISPLAY_MODE);

   if (LcdOrientation & ROTATE90)
      seWriteRegByte(REG_DISPLAY_MODE, regDisplayMode | 0x40);
   else
      seWriteRegByte(REG_DISPLAY_MODE, regDisplayMode & ~0x40);


   regLcdDisplayMode = seReadRegByte(REG_LCD_DISPLAY_MODE);

   if (LcdOrientation & ROTATE180)
      seWriteRegByte(REG_LCD_DISPLAY_MODE, regLcdDisplayMode | 0x10);
   else
      seWriteRegByte(REG_LCD_DISPLAY_MODE, regLcdDisplayMode & ~0x10);


   regDisplayMode = seReadRegByte(REG_DISPLAY_MODE);

   if (iDisplay == -1)
      {
      ConfiguredBpp = seGetLcdBitsPerPixel();

      if (ConfiguredBpp == 0)
         ConfiguredBpp = seGetCrtBitsPerPixel();

      switch (regDisplayMode & 0x07)
         {
         case LCD:
         default:
            iDisplay = 0;
            break;

         case CRT:
            iDisplay = 1;
            break;

         case TV:
         case (CRT | TV):  // flicker filter on
            iDisplay = 2;
            break;

         case (LCD | CRT):
            iDisplay = 5;  // separate surfaces
            break;

         case (LCD | TV):
         case (LCD | CRT | TV):
            iDisplay = 6;  // separate surfaces
            break;
         }
      }


   if (iDisplay != -1)
      {
      seWriteRegDword(REG_LCD_START_ADDR0, 0);
      seWriteRegDword(REG_CRTTV_START_ADDR0, 0);

      if (CrtTvBitsPerPixel == 0)
         CrtTvBitsPerPixel = seGetCrtBitsPerPixel();

      if (LcdBitsPerPixel == 0)
         LcdBitsPerPixel = seGetLcdBitsPerPixel();

      if (LcdBitsPerPixel != 0)
         ConfiguredBpp = LcdBitsPerPixel;
      else
         ConfiguredBpp = CrtTvBitsPerPixel;

⌨️ 快捷键说明

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