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

📄 twain.lst

📁 飞利浦usb D12芯片fireware 源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
  18      =1  */
  19      =1  
  20      =1  
  21      =1  #ifndef __CHAP_9_H__
  22      =1  #define __CHAP_9_H__
  23      =1  
  24      =1  /*
  25      =1     //*************************************************************************
  26      =1     // USB Protocol Layer
  27      =1     //*************************************************************************
  28      =1  */
  29      =1  
  30      =1  /*
  31      =1     //*************************************************************************
C51 COMPILER V8.02   TWAIN                                                                 07/24/2007 14:12:03 PAGE 15  

  32      =1     // USB standard device requests
  33      =1     //*************************************************************************
  34      =1  */
  35      =1  void get_status(void);
  36      =1  void clear_feature(void);
  37      =1  void set_feature(void);
  38      =1  void set_address(void);
  39      =1  void get_descriptor(void);
  40      =1  void get_configuration(void);
  41      =1  void set_configuration(void);
  42      =1  void get_interface(void);
  43      =1  void set_interface(void);
  44      =1  
  45      =1  void reserved(void);
  46      =1  
  47      =1  #endif
  32          
  33          extern CONTROL_XFER ControlData;
  34          extern IO_REQUEST idata ioRequest;
  35          extern EPPFLAGS bEPPflags;
  36          
  37          unsigned char idata TwainFileNumber = 0, idata TwainCurrentFile = 0;
  38          unsigned long idata TwainFileSize;
  39          
  40          void get_firmware_version()
  41          {
  42   1              unsigned char i;
  43   1      
  44   1      #ifndef __C51__
                      i = 0x01; // firmware version number, return 0x01 for PC kit version 1
              #else
  47   1              i = 0x21; // firmware version number, return 0x11 for PC kit using 8052, 0x21 for USB-EPP
  48   1      #endif
  49   1              single_transmit((unsigned char *)&i, 1);
  50   1      }
  51          
  52          void get_twain_request()
  53          {
  54   1              if(ControlData.DeviceRequest.wValue == 0 &&
  55   1                      ControlData.DeviceRequest.wLength == 1) // get file number
  56   1                      single_transmit((unsigned char *)&TwainFileNumber, 1);
  57   1              if(ControlData.DeviceRequest.wValue == 1 &&
  58   1                      ControlData.DeviceRequest.wLength == 1) // get current file
  59   1                      single_transmit((unsigned char *)&TwainCurrentFile, 1);
  60   1              else if(ControlData.DeviceRequest.wValue == 2 &&
  61   1                      ControlData.DeviceRequest.wLength == 4) // get file size
  62   1                      single_transmit((unsigned char *)&TwainFileSize, 4);
  63   1              else
  64   1                      stall_ep0();
  65   1      }
  66          
  67          void set_twain_request()
  68          {
  69   1              if(ControlData.DeviceRequest.wValue == 1 &&
  70   1                      ControlData.DeviceRequest.wLength == 1) {// set current file
  71   2                      TwainCurrentFile = ControlData.dataBuffer[0];
  72   2                      single_transmit(0, 0);
  73   2              }
  74   1              else if(ControlData.DeviceRequest.wValue == 2 &&
  75   1                      ControlData.DeviceRequest.wLength == 4) { // set file size
  76   2                      memcpy((unsigned char *)&TwainFileSize,
  77   2                              ControlData.dataBuffer,
C51 COMPILER V8.02   TWAIN                                                                 07/24/2007 14:12:03 PAGE 16  

  78   2                              ControlData.DeviceRequest.wLength);
  79   2                      TwainFileNumber = 1;
  80   2                      single_transmit(0, 0);
  81   2              }
  82   1              else if(ControlData.DeviceRequest.wValue == 6 &&
  83   1                      ControlData.DeviceRequest.wLength == 1) { // clear all
  84   2                      TwainFileNumber = 0;
  85   2                      single_transmit(0, 0);
  86   2              }
  87   1              else
  88   1                      stall_ep0();
  89   1      }
  90          
  91          void setup_dma_request()
  92          {
  93   1      #ifndef __C51__
                      unsigned long offset;
              #else
  96   1              unsigned char offset;
  97   1      #endif
  98   1      
  99   1              memcpy((unsigned char *)&ioRequest + ControlData.DeviceRequest.wValue,
 100   1                      ControlData.dataBuffer,
 101   1                      ControlData.DeviceRequest.wLength);
 102   1      
 103   1              ioRequest.uSize = SWAP(ioRequest.uSize);
 104   1              ioRequest.uAddressL = SWAP(ioRequest.uAddressL);
 105   1      
 106   1              if(ioRequest.uSize > DMA_BUFFER_SIZE) { // Unaccepted request
 107   2                      stall_ep0();
 108   2              }
 109   1              else {
 110   2      
 111   2                      if(bEPPflags.bits.dma_state == DMA_IDLE) {
 112   3                              DISABLE;
 113   3                              bEPPflags.bits.setup_dma = 1;
 114   3                              ENABLE;
 115   3                      }
 116   2                      else {
 117   3                              DISABLE;
 118   3                              bEPPflags.bits.dma_state = DMA_PENDING;
 119   3                              ENABLE;
 120   3                      }
 121   2      
 122   2              } // else if accepted request
 123   1      }
*** WARNING C280 IN LINE 96 OF TWAIN.C: 'offset': unreferenced local variable
 124          
 125          void read_write_register(void)
 126          {
 127   1              unsigned char i;
 128   1      
 129   1              if(ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
 130   2      
 131   2                      if(bEPPflags.bits.verbose)
 132   2                              printf("Read Registers: Offset = 0x%x, Length = 0x%x, Index = 0x%x.\n",
 133   2                                      ControlData.DeviceRequest.wValue,
 134   2                                      ControlData.DeviceRequest.wLength,
 135   2                                      ControlData.DeviceRequest.wIndex);
 136   2      
 137   2                      if(ControlData.DeviceRequest.wIndex == GET_FIRMWARE_VERSION &&
 138   2                              ControlData.DeviceRequest.wValue == 0 &&
C51 COMPILER V8.02   TWAIN                                                                 07/24/2007 14:12:03 PAGE 17  

 139   2                              ControlData.DeviceRequest.wLength == 1)
 140   2                              get_firmware_version();
 141   2                      else if(ControlData.DeviceRequest.wIndex == GET_SET_TWAIN_REQUEST)
 142   2                              get_twain_request();
 143   2                      else
 144   2                              stall_ep0();
 145   2      
 146   2              }       // if read register
 147   1              else{
 148   2                      if(bEPPflags.bits.verbose) {
 149   3      
 150   3                              printf("Write Registers: Offset = 0x%x, Length = 0x%x, Index = 0x%x.\n",
 151   3                                      ControlData.DeviceRequest.wValue,
 152   3                                      ControlData.DeviceRequest.wLength,
 153   3                                      ControlData.DeviceRequest.wIndex);
 154   3      
 155   3                              printf("Data: ");
 156   3                              for(i = 0; i < ControlData.DeviceRequest.wLength; i ++)
 157   3      #ifndef __C51__
                                              printf("0x%x, ", *((ControlData.dataBuffer)+i));
              #else
 160   3                                      printf("0x%bx, ", *((ControlData.dataBuffer)+i));
 161   3      #endif
 162   3                              printf("\n");
 163   3                      }
 164   2      
 165   2                      if(ControlData.DeviceRequest.wIndex == SETUP_DMA_REQUEST &&
 166   2                              ControlData.DeviceRequest.wValue == 0 &&
 167   2                              ControlData.DeviceRequest.wLength == 6)
 168   2                              setup_dma_request();
 169   2                      else if(ControlData.DeviceRequest.wIndex == GET_SET_TWAIN_REQUEST)
 170   2                              set_twain_request();
 171   2                      else
 172   2                              stall_ep0();
 173   2              }       // if write register
 174   1      }
 175          
C51 COMPILER V8.02   TWAIN                                                                 07/24/2007 14:12:03 PAGE 18  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION get_firmware_version (BEGIN)
                                           ; SOURCE LINE # 40
                                           ; SOURCE LINE # 41
                                           ; SOURCE LINE # 47
0000 900000      R     MOV     DPTR,#i
0003 7421              MOV     A,#021H
0005 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 49
0006 7B01              MOV     R3,#01H
0008 7A00        R     MOV     R2,#HIGH i
000A 7900        R     MOV     R1,#LOW i
000C 7D01              MOV     R5,#01H
000E 020000      E     LJMP    _single_transmit
             ; FUNCTION get_firmware_version (END)

             ; FUNCTION get_twain_request (BEGIN)
                                           ; SOURCE LINE # 52
                                           ; SOURCE LINE # 53
                                           ; SOURCE LINE # 54
0000 900000      E     MOV     DPTR,#ControlData+02H
0003 E0                MOVX    A,@DPTR
0004 7002              JNZ     ?C0036
0006 A3                INC     DPTR
0007 E0                MOVX    A,@DPTR
0008         ?C0036:
0008 7016              JNZ     ?C0002
000A 900000      E     MOV     DPTR,#ControlData+06H
000D E0                MOVX    A,@DPTR
000E 7004              JNZ     ?C0037
0010 A3                INC     DPTR
0011 E0                MOVX    A,@DPTR
0012 6401              XRL     A,#01H
0014         ?C0037:
0014 700A              JNZ     ?C0002
                                           ; SOURCE LINE # 56
0016 FB                MOV     R3,A
0017 7A00        R     MOV     R2,#HIGH TwainFileNumber
0019 7900        R     MOV     R1,#LOW TwainFileNumber
001B 7D01              MOV     R5,#01H
001D 120000      E     LCALL   _single_transmit
0020         ?C0002:
                                           ; SOURCE LINE # 57
0020 900000      E     MOV     DPTR,#ControlData+02H
0023 E0                MOVX    A,@DPTR
0024 7004              JNZ     ?C0038
0026 A3                INC     DPTR
0027 E0                MOVX    A,@DPTR
0028 6401              XRL     A,#01H
002A         ?C0038:
002A 7015              JNZ     ?C0003
002C 900000      E     MOV     DPTR,#ControlData+06H
002F E0                MOVX    A,@DPTR
0030 7004              JNZ     ?C0039
0032 A3                INC     DPTR
0033 E0                MOVX    A,@DPTR
0034 6401              XRL     A,#01H
0036         ?C0039:
0036 7009              JNZ     ?C0003
                                           ; SOURCE LINE # 59
C51 COMPILER V8.02   TWAIN                                                                 07/24/2007 14:12:03 PAGE 19  

0038 FB                MOV     R3,A
0039 7A00        R     MOV     R2,#HIGH TwainCurrentFile
003B 7900        R     MOV     R1,#LOW TwainCurrentFile
003D 7D01              MOV     R5,#01H
003F 801F              SJMP    ?C0055
0041         ?C0003:
                                           ; SOURCE LINE # 60
0041 900000      E     MOV     DPTR,#ControlData+02H
0044 E0                MOVX    A,@DPTR
0045 7004              JNZ     ?C0040
0047 A3                INC     DPTR
0048 E0                MOVX    A,@DPTR
0049 6402              XRL     A,#02H
004B         ?C0040:
004B 7016              JNZ     ?C0005
004D 900000      E     MOV     DPTR,#ControlData+06H
0050 E0                MOVX    A,@DPTR
0051 7004              JNZ     ?C0041
0053 A3                INC     DPTR
0054 E0                MOVX    A,@DPTR
0055 6404              XRL     A,#04H
0057         ?C0041:
0057 700A              JNZ     ?C0005
                                           ; SOURCE LINE # 62
0059 FB                MOV     R3,A
005A 7A00        R     MOV     R2,#HIGH TwainFileSize
005C 7900        R     MOV     R1,#LOW TwainFileSize
005E 7D04              MOV     R5,#04H
0060         ?C0055:
0060 020000      E     LJMP    _single_transmit
0063         ?C0005:
                                           ; SOURCE LINE # 64
0063 120000      E     LCALL   stall_ep0
                                           ; SOURCE LINE # 65
0066         ?C0007:
0066 22                RET     
             ; FUNCTION get_twain_request (END)

             ; FUNCTION set_twain_request (BEGIN)
                                           ; SOURCE LINE # 67
                                           ; SOURCE LINE # 68
                                           ; SOURCE LINE # 69
0000 900000      E     MOV     DPTR,#ControlData+02H
0003 E0                MOVX    A,@DPTR
0004 7004              JNZ     ?C0042
0006 A3                INC     DPTR
0007 E0                MOVX    A,@DPTR

⌨️ 快捷键说明

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