home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ddkx86v5.zip / DDKX86 / SRC / PEN / PENTKT / PENBASE / INC / PEN.INC < prev    next >
Text File  |  1995-04-14  |  16KB  |  445 lines

  1. ;*DDK*************************************************************************/
  2. ;
  3. ; COPYRIGHT    Copyright (C) 1995 IBM Corporation
  4. ;
  5. ;    The following IBM OS/2 WARP source code is provided to you solely for
  6. ;    the purpose of assisting you in your development of OS/2 WARP device
  7. ;    drivers. You may use this code in accordance with the IBM License
  8. ;    Agreement provided in the IBM Device Driver Source Kit for OS/2. This
  9. ;    Copyright statement may not be removed.;
  10. ;*****************************************************************************/
  11. ;      /*****************************************************************/
  12. ;      /*                                                               */
  13. ;      /*                                                               */
  14. ;      /*****************************************************************/
  15. ;      /******************* START OF SPECIFICATIONS *********************/
  16. ;      /*                                                               */
  17. ;      /*  SOURCE FILE NAME: PEN.INC                                    */
  18. ;      /*                                                               */
  19. ;      /*  DESCRIPTIVE NAME: Pen driver equates                         */
  20. ;      /*                                                               */
  21. ;      /*                                                               */
  22. ;      /*  STATUS:  Version 1.0                                         */
  23. ;      /*                                                               */
  24. ;      /*  NOTES:                                                       */
  25. ;      /*                                                               */
  26. ;      /*  ENTRY POINTS:                                                */
  27. ;      /*      See public statements                                    */
  28. ;      /*  EXTERNAL REFERENCES:                                         */
  29. ;      /*      See extrn statements                                     */
  30. ;      /*                                                               */
  31. ;      /******************* END  OF  SPECIFICATIONS *********************/
  32. ;------------------------------------------------------------------------------
  33. ; Device Control Block (DCB) - each device has one, its the root of everything
  34. ;------------------------------------------------------------------------------
  35.  
  36. DCB Struc ; Device Type Independent section
  37.  
  38.   dcb_Link            dw 0 ; link to next dcb, null terminated list
  39.   dcb_DevType         db 0 ; Device type
  40.   dcb_Unit            db 0 ; Unit number
  41.   dcb_Sem1            db 0 ; Semaphore to serialize entry to device engine
  42.   dcb_Flags           db 0 ; device flags (common for all types)
  43.  
  44. ; device service info
  45.  
  46.   dcb_service_ds      DW 0 ; data segment to load for service routine
  47.   dcb_service_rtn     DD 0 ; 16:16 address for service routine
  48.  
  49. ; pointers to type independent control blocks
  50.  
  51.   dcb_@RegCaps        dw 0 ; Offset of restigration capabilities
  52.   dcb_@EiEvent        dw 0 ; Offset of extended interface event packet
  53.   dcb_@DeviceData     dw 0 ; Addr of query config device data
  54.   dcb_@UVars          dw 0 ; Offset of Unit Variables
  55.  
  56. ; device type independent routines
  57.  
  58.   dcb_@Dev_DTTick     dw 0 ; Addr of device type tick handler
  59.  
  60. ; device dependent routines
  61.  
  62.   dcb_@Dev_Start      dw 0 ; Offset of start routine
  63.   dcb_@Dev_DDTick     dw 0 ; Offset of tick handler
  64.   dcb_@Dev_suv        dw 0 ; Offset of Set Unit Variable IOCTL rtn
  65.   dcb_@Dev_quv        dw 0 ; Offset of Query Unit Variable IOCTL rtn
  66.   dcb_@Dev_susd       dw 0 ; Offset of Set Unit Specific Data IOCTL rtn
  67.   dcb_@Dev_qusd       dw 0 ; Offset of Query Unit Specific Data IOCTL rtn
  68.  
  69. DCB Ends
  70.  
  71. ; Bits for dcb_Flags
  72. ; reserved    equ     00Fh    ; revseved for future base code use
  73. ; reserved    equ     0F0h    ; reserved for OEM usage
  74.  
  75. ; Unit variables structure
  76.  
  77. UVARS   Struc
  78.  uv_numVars    dd  0         ; number of varibles
  79.  uv_vars       dd  0         ; first variable in array
  80. UVARS   Ends
  81.  
  82. ;------------------------------------------------------------------------------
  83. ; Driver  Type DCB
  84. ;------------------------------------------------------------------------------
  85.  
  86. DCB_DRV Struc
  87.   db size DCB dup (0)  ; reserve room for common DCB
  88.  
  89.   dcb_@Dev_ReadEnable  dw 0 ; Offset of report enable routine
  90.   dcb_@Dev_ReadDisable dw 0 ; Offset of report disable routine
  91.   dcb_@Dev_Enable      dw 0 ; Offset of enable interrupts routine
  92.   dcb_@Dev_Disable     dw 0 ; Offset of disable interrupts routine
  93.   dcb_@Dev_CallBack    dw 0 ; Offset of video mode change routine
  94.   dcb_@Dev_VMChange    dw 0 ; Offset of video mode change routine
  95.   dcb_@Dev_APM         dw 0 ; Offset of power management routine
  96. DCB_DRV ends
  97.  
  98. ;------------------------------------------------------------------------------
  99. ; Locator Type DCB
  100. ;------------------------------------------------------------------------------
  101.  
  102. FAKE_EXTENT equ 1000    ; used to keep traps out if extents accidently set to 0
  103. FAKE_SAMPLE_RATE equ 100 ; used to keep traps out if rate is 0
  104.  
  105. DEFAULT_REPORT_TIMEOUT equ 100 ; default deadman timeout for hardware to report
  106.                                ; the next sample point. Used to detect leaving
  107.                                ; proximity or contact on ballistic liftoffs.
  108.                                ; (in milliseconds)
  109.  
  110. DEFAULT_PROX_FILTER equ 10*1000; default time limit for stationary proximity
  111.                                ; points before they are ignored.
  112.                                ; (in milliseconds)
  113. DEFAULT_BOX_SIZE    equ 20     ; default size for the proximity filter box
  114.  
  115. ;------------------------------------------------------------------------------
  116. ; Locator cooridinate transformation structure. Raw digitizer cooridinates
  117. ; need to be 'adjusted' due to manufacturing fluctuations. First an constant
  118. ; is added (origin adjust), then the result is scaled (ext_adj) so that the
  119. ; maximum measured cooridinate comes out to the expected fixed extent.
  120. ; Adjustments are calibrated based on the PM screen group and proportioned
  121. ; for other video modes.
  122. LOC_TRANS struc
  123.   trn_flags              dw 0 ; flag word
  124.   trn_offset             dw 0 ; finger offset (intended for LOCTYPE_FINGER)
  125.  
  126.   trn_ext_max            dd 0 ; maximum extent based on current video mode
  127.   trn_ext_max_PM         dd 0 ; maximum extent based on PM screen group V mode
  128.   trn_ext_adj            dd 0 ; ratio used to adjust coords based on video mode
  129.   trn_ext_adj_default    dd 0 ; default adjustment ratio based on PM SG
  130.   trn_ext_adj_calibrated dd 0 ; calibrated adjustment ratio based on PM SG
  131.  
  132.   trn_org_adj            dd 0 ; origin used to adjust coords based on video mode
  133.   trn_org_default        dd 0 ; default adjustment based on PM screen group
  134.   trn_org_calibrated     dd 0 ; calibrated adjustment based on PM screen group
  135. LOC_TRANS ends
  136.  
  137. ; bits for trn_flags
  138. INVERTED_COORD equ 0001h ; cooridinate is inverted
  139. STANDARD_USD   equ 0002h ; unit specific data contains transformation info
  140.  
  141. ;------------------------------------------------------------------------------
  142. ; box filter structure (used for box filter routines, allocated in device
  143. ; dependent section of the DCB.
  144.  
  145. BOX_FILTER struc
  146.   box_flags     dw 0    ; flag word
  147.   box_ClearCnt  dw 0    ; used to clear box after prox pts
  148.   box_Size      dd 0    ; size of box (2= box measures 5 on each side)
  149.   box_LocLastX  dd 0    ; last X coordinate
  150.   box_LocLastY  dd 0    ; last Y coordinate
  151.   box_TickCount dw 0    ; tick count for number of prox pts in the box
  152.   box_TickLimit dw 0    ; tick count limit to start ignoring pts in the box
  153. BOX_FILTER ends
  154.  
  155. ; bits for box_flags
  156. BOX_SMOOTH     equ 0001h ; update new coordinates to last position when in box
  157.  
  158. ;------------------------------------------------------------------------------
  159. ; locator specific dcb structure
  160. DCB_LOC Struc
  161.   db size DCB dup (0)  ; reserve room for common DCB
  162.  
  163.  
  164. ; The following are set by the device dependent code
  165.  
  166.   dcb_LocNewState     dw 0 ; State of locator now
  167.   dcb_LocNewX         dd 0 ; Raw coordinates now    ; ddxy
  168.   dcb_LocNewY         dd 0 ;                        ; ddxy
  169.   dcb_LocNewZ         dw 0 ; 
  170.  
  171. ; the following are figured out based by the engine
  172.  
  173.   dcb_LocFlags        db 0 ; Locator flags
  174.   dcb_LocMouBut       db 0 ; Simulated mouse buttons (for whole stroke)
  175.   dcb_LocNDCX         dd 0 ; Normalized device coordinates ;ddxy
  176.   dcb_LocNDCY         dd 0 ; 
  177.  
  178. ; these are saved for next time the engine is called
  179.  
  180.   dcb_LocLastState    dw 0 ; Last state of the engine (clear, in prox, contact)
  181.   dcb_LocLastX        dd 0 ; Last raw coordinates    ;ddxy
  182.   dcb_LocLastY        dd 0 ; 
  183.   dcb_LocLastZ        dw 0 ; 
  184.   dcb_LocLastCntrl    dw 0 ; Last lev_cntrl
  185.  
  186. ; coordinate transformaton values
  187.  
  188.   dcb_Xtrans  db size LOC_TRANS dup (0)  ; x coordinate transformation info
  189.   dcb_Ytrans  db size LOC_TRANS dup (0)  ; x coordinate transformation info
  190.  
  191. ; device dependent routines called from common routines
  192.  
  193.   dcb_@Dev_ForceClear dw 0 ; Addr of device force to clear state
  194.   dcb_@Adjust         dw 0 ; Addr of routine to adjust cooridinates
  195.   dcb_@slsr           dw 0 ; Addr of set sample rate routine
  196.  
  197. ; miscellaneous
  198.  
  199.   dcb_StateTimeout    dw 0 ; timeout used to detect proxity exit
  200.   dcb_TimeoutLimProx  dw 0 ; timeout limit
  201.   dcb_TimeoutLimCont  dw 0 ; timeout limit
  202.  
  203. DCB_LOC Ends
  204.  
  205. ; bit definition for dcb_LocFlags
  206. QLRC_REQUEST  equ     001h    ; QLRC pending
  207. LOC_MOTION    equ     002h    ; Motion detected on this point
  208.  
  209. ; Values for dcb_LocNewState and dcb_LocLastState
  210.  
  211. STATE_CLEAR      EQU    00h       ;out of prox
  212. ; reserved       EQU    02h
  213. STATE_PROX       EQU    04h       ;proximity state
  214. STATE_CONTACT    EQU    06h       ;contact state
  215.  
  216. ;------------------------------------------------------------------------------
  217. ; Button  Type DCB
  218. ;------------------------------------------------------------------------------
  219.  
  220. BUT_DEF Struc
  221.   but_action   db ?    ; action
  222.   but_value    db ?    ; mouse button mask or hot key value
  223.   but_state    db 0    ; 0 = released, 0FFh = activated
  224.   but_flags    db 0    ; flags
  225. BUT_DEF Ends
  226. BUT_DEF_SIZE_SHIFT equ 2
  227.  
  228. BUT_ONESHOT    EQU  01h    ; 1=one shot is pending
  229. BUT_USED       EQU  02h    ; 1=shift has been used during a stroke
  230.  
  231. DCB_BUT Struc
  232.   db size DCB dup (0)      ; reserve room for common DCB
  233.   dcb_NumButDefs    dw 0   ; number of BUT_DEF structure in array to process
  234.   dcb_@ButDefArray  dw 0   ; address of BUT_DEF arrary
  235. DCB_BUT Ends
  236.  
  237. ;------------------------------------------------------------------------------
  238. ; Display Type DCB
  239. ;------------------------------------------------------------------------------
  240.  
  241. ; video mode LCD types for standard video mode change support
  242. VMC_TYPE_NONE     equ 0  ; do not modify for video mode change
  243. VMC_TYPE_TOP      equ 1  ; squeeze to the top
  244. VMC_TYPE_CENTER   equ 2  ; center
  245.  
  246. DCB_DISP Struc
  247.   db size DCB dup (0)  ; reserve room for common DCB
  248.  
  249.   dcb_DspFlags      dw 0 ; display engine flags
  250.   dcb_InactPeriod   dd 0 ; inactivity period in seconds
  251.   dcb_LastActivity  dd 0 ; last activity count reading
  252.   dcb_TicksPerCheck dw 0 ; how often to check for activity
  253.   dcb_NumberChecks  dd 0 ; how many checks before auto turn off
  254.   dcb_CountDown1    dw 0 ; Count down for dcb_TicksPerCheck
  255.   dcb_CountDown2    dd 0 ; Count down for dcb_TicksTimeOut
  256.  
  257. ; device dependent routines called from common routines
  258.  
  259.   dcb_@Backlight      dw 0 ; Addr of routine to turn backlight on/off
  260.  
  261. DCB_DISP Ends
  262.  
  263. ; bits for dcb_DspFlags
  264. ; state information
  265. DSP_STATE_ON     equ 0001h     ; Display state 1==on 0==off
  266. DSP_AUTO_ON      equ 0002h     ; Auto on  request is outstanding
  267. DSP_AUTO_OFF     equ 0004h     ; Auto off request is outstanding
  268.  
  269. ; options
  270. DSP_AUTO_ENABLED equ 0100h     ; Enable Auto   1==on 0==off
  271. DSP_OPAQUE       equ 0200h     ; report events when backlight is off 1=yes 0=no
  272. DSP_SUPPRESS     equ 0400h     ; Suppress strokes after auto turn on 1=yes 0=no
  273.  
  274. ;------------------------------------------------------------------------------
  275. ; Macros
  276. ;------------------------------------------------------------------------------
  277.  
  278. DISABLE   MACRO
  279.   cli
  280. ENDM
  281.  
  282. ENABLE    MACRO
  283.  sti
  284. ENDM
  285.  
  286. TraceInt  MACRO
  287. ifndef Trc_Int
  288.   extrn Trc_Int : near
  289. endif
  290.   call Trc_Int
  291. ENDM
  292.  
  293. TraceByte MACRO
  294. ifndef Trc_Byte
  295.   extrn Trc_Byte : near
  296. endif
  297.   call Trc_Byte
  298. ENDM
  299.  
  300. TraceByte1 MACRO
  301. ifndef Trc_Byte1
  302.   extrn Trc_Byte1 : near
  303. endif
  304.   call Trc_Byte1
  305. ENDM
  306.  
  307. TraceTick MACRO
  308. ifndef Trc_Tick
  309.   extrn Trc_Tick : near
  310. endif
  311.   call Trc_Tick
  312. ENDM
  313.  
  314. TraceAbs  MACRO
  315. ifndef Trc_ABS
  316.   extrn Trc_ABS  : near
  317. endif
  318.   call Trc_ABS
  319. ENDM
  320.  
  321. TraceDD   MACRO index,value
  322. ifndef Trc_DD
  323.   extrn Trc_DD   : near
  324. endif
  325.   push ax
  326.   push cx
  327.   mov  cl,index
  328.   mov  ax,value
  329.   call Trc_DD
  330.   pop  cx
  331.   pop  ax
  332. ENDM
  333.  
  334. TraceDDb  MACRO index,value
  335. ifndef Trc_DD
  336.   extrn Trc_DD   : near
  337. endif
  338.   push ax
  339.   push cx
  340.   mov  cl,index
  341.   xor  ah,ah
  342.   mov  al,value
  343.   call Trc_DD
  344.   pop  cx
  345.   pop  ax
  346. ENDM
  347.  
  348. GetCritSec MACRO  sem
  349.   mov  al, 1
  350.   xchg sem, al
  351.   or   al,al
  352. ENDM
  353.  
  354. ClearCritSec MACRO sem
  355.   mov sem, 0
  356. ENDM
  357.  
  358. CALL_ALL   MACRO rtn
  359. ifndef Gio_CallAll
  360.   extrn Gio_CallAll  : near
  361. endif
  362.   mov  si, offset rtn
  363.   call Gio_CallAll
  364. ENDM
  365.  
  366. CALL_TYPE  MACRO rtn,type
  367. ifndef Gio_CallType
  368.   extrn Gio_CallType : near
  369. endif
  370.   mov  ax, type
  371.   mov  si, offset rtn
  372.   call Gio_CallType
  373. ENDM
  374.  
  375. CALL_UNIT  MACRO rtn,unit
  376. ifndef Gio_CallUnit
  377.   extrn Gio_CallUnit : near
  378. endif
  379.   mov  al, unit
  380.   mov  si, offset rtn
  381.   call Gio_CallUnit
  382. ENDM
  383.  
  384. CALL_NZ  MACRO rtn
  385.   .if <rtn ne 0>
  386.      call rtn
  387.   .endif
  388. ENDM
  389. CALL_NZ_OK  MACRO rtn
  390.   .if <rtn ne 0>
  391.      call rtn
  392.   .else
  393.      xor ax,ax
  394.   .endif
  395. ENDM
  396. CALL_NZ_ERR MACRO rtn
  397.   .if <rtn ne 0>
  398.      call rtn
  399.   .else
  400.      mov ax,1
  401.      stc
  402.   .endif
  403. ENDM
  404.  
  405. PANIC     MACRO value
  406. ifndef Gio_Panic
  407.   extrn Gio_Panic : near
  408. endif
  409.   mov  al,value
  410.   call Gio_Panic
  411. ENDM
  412. UNPANIC     MACRO value
  413. ifndef Gio_UnPanic
  414.   extrn Gio_UnPanic : near
  415. endif
  416.   mov  al,value
  417.   call Gio_UnPanic
  418. ENDM
  419. ;------------------------------------------------------------------------------
  420. ; Panic values
  421. ;------------------------------------------------------------------------------
  422. PANIC_DDS       equ 1  ; init: device services did not contact us
  423. PANIC_LEVELS    equ 2  ; idc: sinfo levels don't match on startdevice
  424. PANIC_INVALID_IDC equ 3 ; idc: invalid IDC, out of range
  425. PANIC_REG_ERR   equ 4  ; idc: Registration error from DDS (device services)
  426. PANIC_DEVHLP1   equ 5  ; init: GetDosVar failed
  427. PANIC_DEVHLP2   equ 6  ; init: RegisterDevClass failed
  428. PANIC_DEVINIT   equ 7  ; init: Dev_Init failed
  429. PANIC_SERNOLID  equ 8  ; serial: no serial LID
  430. PANIC_SERNOPORT equ 9  ; serial: serial port not available
  431. PANIC_SERNOIRQ  equ 10 ; serial: IRQ busy
  432. PANIC_GETINFO   equ 11 ; timer: DosGetInfo failed
  433. PANIC_DEVHLP3   equ 12 ; timer: TickCount failed
  434. PANIC_CALL0     equ 13 ; strat: call to location 0
  435. PANIC_EXTZERO   equ 14 ; loc: zero extent
  436. PANIC_RATEZERO  equ 15 ; loc: zero sample rate
  437. ;
  438. ; device dependent value base
  439. PANIC_BASEDD    equ 200
  440. ;
  441. ; device dependent values should use the following as a base, for example:
  442. ;   PANIC_DD_ERR0 equ PANIC_DDBASE+0
  443. ;   PANIC_DD_ERR1 equ PANIC_DDBASE+1
  444. ; these should be defined in a device dependent include file
  445.