+++ /dev/null
-; Copyright (C) 2009 Ubixum, Inc.
-;
-; This library is free software; you can redistribute it and/or
-; modify it under the terms of the GNU Lesser General Public
-; License as published by the Free Software Foundation; either
-; version 2.1 of the License, or (at your option) any later version.
-;
-; This library is distributed in the hope that it will be useful,
-; but WITHOUT ANY WARRANTY; without even the implied warranty of
-; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-; Lesser General Public License for more details.
-;
-; You should have received a copy of the GNU Lesser General Public
-; License along with this library; if not, write to the Free Software
-; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-; this is a the default
-; full speed and high speed
-; descriptors found in the TRM
-; change however you want but leave
-; the descriptor pointers so the setupdat.c file works right
-
-
-.module DEV_DSCR
-
-; descriptor types
-; same as setupdat.h
-DSCR_DEVICE_TYPE=1
-DSCR_CONFIG_TYPE=2
-DSCR_STRING_TYPE=3
-DSCR_INTERFACE_TYPE=4
-DSCR_ENDPOINT_TYPE=5
-DSCR_DEVQUAL_TYPE=6
-
-; for the repeating interfaces
-DSCR_INTERFACE_LEN=9
-DSCR_ENDPOINT_LEN=7
-
-; endpoint types
-ENDPOINT_TYPE_CONTROL=0
-ENDPOINT_TYPE_ISO=1
-ENDPOINT_TYPE_BULK=2
-ENDPOINT_TYPE_INT=3
-
- .globl _dev_dscr, _dev_qual_dscr, _highspd_dscr, _fullspd_dscr, _dev_strings, _dev_strings_end
-; These need to be in code memory. If
-; they aren't you'll have to manully copy them somewhere
-; in code memory otherwise SUDPTRH:L don't work right
- .area DSCR_AREA (CODE)
-
-_dev_dscr:
- .db dev_dscr_end-_dev_dscr ; len
- .db DSCR_DEVICE_TYPE ; type
- .dw 0x0002 ; usb 2.0
- .db 0xff ; class (vendor specific)
- .db 0xff ; subclass (vendor specific)
- .db 0xff ; protocol (vendor specific)
- .db 64 ; packet size (ep0)
- .dw 0xB404 ; vendor id
- .dw 0x0410 ; product id
- .dw 0x0100 ; version id
- .db 1 ; manufacturure str idx
- .db 2 ; product str idx
- .db 0 ; serial str idx
- .db 1 ; n configurations
-dev_dscr_end:
-
-_dev_qual_dscr:
- .db dev_qualdscr_end-_dev_qual_dscr
- .db DSCR_DEVQUAL_TYPE
- .dw 0x0002 ; usb 2.0
- .db 0xff
- .db 0xff
- .db 0xff
- .db 64 ; max packet
- .db 1 ; n configs
- .db 0 ; extra reserved byte
-dev_qualdscr_end:
-
-_highspd_dscr:
- .db highspd_dscr_end-_highspd_dscr ; dscr len ;; Descriptor length
- .db DSCR_CONFIG_TYPE
- ; can't use .dw because byte order is different
- .db (highspd_dscr_realend-_highspd_dscr) % 256 ; total length of config lsb
- .db (highspd_dscr_realend-_highspd_dscr) / 256 ; total length of config msb
- .db 1 ; n interfaces
- .db 1 ; config number
- .db 0 ; config string
- .db 0x80 ; attrs = bus powered, no wakeup
- .db 0x32 ; max power = 100ma
-highspd_dscr_end:
-
-; all the interfaces next
-; NOTE the default TRM actually has more alt interfaces
-; but you can add them back in if you need them.
-; here, we just use the default alt setting 1 from the trm
- .db DSCR_INTERFACE_LEN
- .db DSCR_INTERFACE_TYPE
- .db 0 ; index
- .db 0 ; alt setting idx
- .db 2 ; n endpoints
- .db 0xff ; class
- .db 0xff
- .db 0xff
- .db 3 ; string index
-
-; endpoint 2 out
- .db DSCR_ENDPOINT_LEN
- .db DSCR_ENDPOINT_TYPE
- .db 0x02 ; ep2 dir=OUT and address
- .db ENDPOINT_TYPE_BULK ; type
- .db 0x00 ; max packet LSB
- .db 0x02 ; max packet size=512 bytes
- .db 0x00 ; polling interval
-
-; endpoint 6 in
- .db DSCR_ENDPOINT_LEN
- .db DSCR_ENDPOINT_TYPE
- .db 0x86 ; ep6 dir=in and address
- .db ENDPOINT_TYPE_BULK ; type
- .db 0x00 ; max packet LSB
- .db 0x02 ; max packet size=512 bytes
- .db 0x00 ; polling interval
-
-highspd_dscr_realend:
-
- .even
-_fullspd_dscr:
- .db fullspd_dscr_end-_fullspd_dscr ; dscr len
- .db DSCR_CONFIG_TYPE
- ; can't use .dw because byte order is different
- .db (fullspd_dscr_realend-_fullspd_dscr) % 256 ; total length of config lsb
- .db (fullspd_dscr_realend-_fullspd_dscr) / 256 ; total length of config msb
- .db 1 ; n interfaces
- .db 1 ; config number
- .db 0 ; config string
- .db 0x80 ; attrs = bus powered, no wakeup
- .db 0x32 ; max power = 100ma
-fullspd_dscr_end:
-
-; all the interfaces next
-; NOTE the default TRM actually has more alt interfaces
-; but you can add them back in if you need them.
-; here, we just use the default alt setting 1 from the trm
- .db DSCR_INTERFACE_LEN
- .db DSCR_INTERFACE_TYPE
- .db 0 ; index
- .db 0 ; alt setting idx
- .db 2 ; n endpoints
- .db 0xff ; class
- .db 0xff
- .db 0xff
- .db 3 ; string index
-
-; endpoint 2 out
- .db DSCR_ENDPOINT_LEN
- .db DSCR_ENDPOINT_TYPE
- .db 0x02 ; ep2 dir=OUT and address
- .db ENDPOINT_TYPE_BULK ; type
- .db 0x40 ; max packet LSB
- .db 0x00 ; max packet size=64 bytes
- .db 0x00 ; polling interval
-
-; endpoint 6 in
- .db DSCR_ENDPOINT_LEN
- .db DSCR_ENDPOINT_TYPE
- .db 0x86 ; ep6 dir=in and address
- .db ENDPOINT_TYPE_BULK ; type
- .db 0x40 ; max packet LSB
- .db 0x00 ; max packet size=64 bytes
- .db 0x00 ; polling interval
-
-fullspd_dscr_realend:
-
-.even
-_dev_strings:
-; sample string
-_string0:
- .db string0end-_string0 ; len
- .db DSCR_STRING_TYPE
- .db 0x09, 0x04 ; who knows
-string0end:
-; add more strings here
-
-_string1:
- .db string1end-_string1
- .db DSCR_STRING_TYPE
- .ascii 'H'
- .db 0
- .ascii 'i'
- .db 0
-string1end:
-
-_string2:
- .db string2end-_string2
- .db DSCR_STRING_TYPE
- .ascii 'T'
- .db 0
- .ascii 'h'
- .db 0
- .ascii 'e'
- .db 0
- .ascii 'r'
- .db 0
- .ascii 'e'
- .db 0
-string2end:
-
-_string3:
- .db string3end-_string3
- .db DSCR_STRING_TYPE
- .ascii 'i'
- .db 0
- .ascii 'F'
- .db 0
- .ascii 'a'
- .db 0
- .ascii 'c'
- .db 0
- .ascii 'e'
- .db 0
-string3end:
-
-_dev_strings_end:
- .dw 0x0000 ; just in case someone passes an index higher than the end to the firmware