Touch 4.13 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
;
; Copyright (c) 2015, RISC OS Open Ltd
; All rights reserved.
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
;     * Redistributions of source code must retain the above copyright
;       notice, this list of conditions and the following disclaimer.
;     * Redistributions in binary form must reproduce the above copyright
;       notice, this list of conditions and the following disclaimer in the
;       documentation and/or other materials provided with the distribution.
;     * Neither the name of RISC OS Open Ltd nor the names of its contributors
;       may be used to endorse or promote products derived from this software
;       without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
; POSSIBILITY OF SUCH DAMAGE.
;

        AREA    |ARM$$code|, CODE, READONLY, PIC

        GET     Hdr:ListOpts
        GET     Hdr:Macros
        GET     Hdr:Proc
34 35 36 37
        GET     Hdr:System
        GET     Hdr:FSNumbers
        GET     Hdr:NewErrors
        GET     Hdr:BCMSupport
38 39 40 41 42 43 44
        GET     hdr.BCM2835
        GET     hdr.StaticWS
        GET     hdr.CastleMacros

        EXPORT  Touch_InitDevices

        IMPORT  memcpy
45
        IMPORT  GetVCBuffer
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94

        MACRO
$class  HALDeviceField $field, $value
        LCLS    myvalue
      [ "$value" = ""
myvalue SETS    "$field"
      |
myvalue SETS    "$value"
      ]
        ASSERT  . - %A0 = HALDevice_$class$field
     [ ?HALDevice_$class$field = 2
        DCW     $myvalue
   ELIF ?HALDevice_$class$field = 4
        DCD     $myvalue
      |
        %       ?HALDevice_$class$field
      ]
        MEND


; Template for touchscreen device

Touch_Dev
0
        HALDeviceField Type,               HALDeviceType_HID + HALDeviceHID_Touchscreen
        HALDeviceField ID,                 HALDeviceID_Touchscreen_FT5406
        HALDeviceField Location,           HALDeviceBus_Sys + HALDeviceSysBus_AHB ; Guess
        HALDeviceField Version,            0
        HALDeviceField Description,        Touch_Description
        HALDeviceField Address,            0 ; Filled in later
        HALDeviceField Reserved1,          0
        HALDeviceField Activate,           Touch_Activate
        HALDeviceField Deactivate,         Touch_Deactivate
        HALDeviceField Reset,              Touch_Reset
        HALDeviceField Sleep,              Touch_Sleep
        HALDeviceField Device,             -1
        HALDeviceField TestIRQ,            0
        HALDeviceField ClearIRQ,           0
        HALDeviceField Reserved2,          0
        ASSERT  . - %A0 = HALDeviceSize

Touch_Description
        = "FT5406 Touch Panel Controller", 0

        ALIGN

        ; Initialise our HAL devices
Touch_InitDevices ROUT
        Entry   "v1"
95 96 97 98 99 100
        ; Try and initialise the register softcopy buffer
        LDR     a1, =ARM2VC_Tag_FBGetTouchBuf
        MOV     a2, #256
        LDR     a3, =ARM2VC_Tag_FBSetTouchBuf
        BL      GetVCBuffer
        MOVS    v1, a1
101 102 103 104 105 106
        EXIT    EQ
        ADRL    a1, TouchDevice
        ADR     a2, Touch_Dev
        MOV     a3, #HALDeviceSize
        BL      memcpy
        ADRL    a2, TouchDevice
107
        STR     v1, [a2, #HALDevice_Address]
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
        ; Register the device
        MOV     a1, #0
        CallOS  OS_AddDevice
        EXIT

Touch_Activate
        MOV     a1, #1
Touch_Deactivate
Touch_Reset
        MOV     pc, lr

Touch_Sleep
        MOV     a1, #0
        MOV     pc, lr

        END