237 lines
9 KiB
NASM
237 lines
9 KiB
NASM
|
;====================================================================
|
||
|
; ROM Size , HT82A821R = 2K , last page = 0700H
|
||
|
; HT82A822R = 4K , last page = 0F00H
|
||
|
; If use HT82A821R
|
||
|
; #defined HT82A821R 1
|
||
|
; #defined HT82A822R 0
|
||
|
; If use HT82A822R
|
||
|
; #defined HT82A821R 0
|
||
|
; #defined HT82A822R 1
|
||
|
;====================================================================
|
||
|
; Use ReportID , Report ID 1 = Volume HID control
|
||
|
; Report ID 2 = Transform Other Data
|
||
|
;====================================================================
|
||
|
|
||
|
#include ht82a821r.inc
|
||
|
#include const.inc
|
||
|
#define HT82A821R 1
|
||
|
#define HT82A822R 0
|
||
|
|
||
|
IF HT82A821R
|
||
|
Descript .Section at 0700h 'code'
|
||
|
ENDIF
|
||
|
|
||
|
|
||
|
IF HT82A822R
|
||
|
Descript .Section at 0F00h 'code'
|
||
|
ENDIF
|
||
|
|
||
|
|
||
|
|
||
|
control_read_table:
|
||
|
device_desc_table:
|
||
|
DW 00112H ;descriptor type (device descriptor) , size of descriptor (18 bytes)
|
||
|
DW 00110H ;USB spec release (ver 1.1)
|
||
|
DW 00000H ;device sub-class , device class
|
||
|
DW 00800H ;maximum packet size , device sub-sub-class
|
||
|
DW 0046DH ;vender ID = 004D9H
|
||
|
DW 03F0EH
|
||
|
DW 03F0AH ;product ID (Sample Device) = 0x2821
|
||
|
DW 00100H ;product version ID
|
||
|
DW 00201H ;product string index (device show) , manufacturer string index
|
||
|
DW 00100H ;number of configurations
|
||
|
config_desc_table:
|
||
|
DW 00209H ;descriptor type (config descriptor) , size of descriptor
|
||
|
DW 00087H ;total length of descriptor (34 bytes)
|
||
|
DW 00103H ;1 configuration , 3 interface
|
||
|
DW 03F00H ;configuration string index
|
||
|
DW 03FA0H ;configuration attributes (bus supply), Remote Wakeup
|
||
|
DW 03FFAH ;maxpower (500ma)
|
||
|
Interface_Descriptor:
|
||
|
Interface0_descriptor:
|
||
|
standard_audio_control_interface_control:
|
||
|
DW 00409H ;descriptor type (interface descriptor) , size of descriptor (9 bytes)
|
||
|
DW 00000H ;interface alternate setting , interface number (0 base)
|
||
|
DW 00100H ;interface class(01H for audio class) , number of endpoint (1 end point)
|
||
|
DW 00001H ;interface protocol , interface sub-class (audio control)
|
||
|
DW 03F00H ;x , interface string index
|
||
|
class_specific_audio_control_interface_descriptor:
|
||
|
DW 02409H ;descriptor type (CS_INTERFACE) , size of descriptor (9 bytes)
|
||
|
DW 03F01H ;descriptor subtype (Header)
|
||
|
DW 00100H ;audio device class specification release number(1.00)
|
||
|
DW 00028H ;total number of bytes for the class-specific audiocontrol interface descriptor
|
||
|
DW 00101H ;streaming interface number belongs to audio control interface , the number of streaming interface
|
||
|
input_terminal:
|
||
|
DW 0240CH ;descriptor type(CS_INTERFACE) , size of descriptor
|
||
|
DW 00102H ;ID of this terminal(ID=1) , descriptor subtype(INPUT_TERMINAL)
|
||
|
DW 00101H ;terminal type(USB streaming type)
|
||
|
DW 00200H ;number of channel(two channel) , associate with output terminal
|
||
|
DW 00003H ;channel config(Left/Right Front)
|
||
|
DW 00000H ;channelname(unused) , terminal name(unused)
|
||
|
feature_unit:
|
||
|
DW 0240AH ;descriptor type(CS_INTERFACE) , size of descriptor(10 bytes)
|
||
|
DW 00D06H ;UnitID , descriptorSubtype(FEATURE_UNIT)
|
||
|
DW 00101H ;control size(1) , SourceID(input terminal 01)
|
||
|
DW 00003H ;D1(volume)control is enable foe channel 1 , D0(mute) D1(volume) is enable for channel 0
|
||
|
DW 00000H ;index of this descriptor , D1(volume)control is enable for channel 2
|
||
|
output_terminal:
|
||
|
DW 02409H ;descriptor type(CS_INTERFACE) , size of descriptor(9 bytes)
|
||
|
DW 00303H ;terminal ID(03) , descriptorsubtype(OUTPUT_TERMINAL)
|
||
|
DW 00301H ;terminal is speaker
|
||
|
DW 00D00H ;sourceID(feature unit ID=0D) , associate terminal
|
||
|
DW 03F00H ;index of this descriptor
|
||
|
Interface1_descriptor:
|
||
|
zero_bw:
|
||
|
DW 00409H ;descriptor type(INTERFACE) , sizoe of descriptor
|
||
|
DW 00001H ;index of ths setting(alternatesetting = 0) , index of this interface
|
||
|
DW 00100H ;interface-class(AUDIO) , number of endpoint(0)
|
||
|
DW 00002H ;interface protocol(unused) , InterfaceSubClass(AUDIO_STREAMING)
|
||
|
DW 03F00H ;index string of this descriptor
|
||
|
audio_streaming:
|
||
|
DW 00409H ;descriptor type(INTERFACE) , size of descriptor
|
||
|
DW 00101H ;index of the setting(alternatesetting = 1) ,index of this interface
|
||
|
DW 00101H ;interface-class(AUDIO) , number of endpoint(1)
|
||
|
DW 00002H ;interface protocol(unused) , InterfaceSubClass(AUDIO_STREAMING)
|
||
|
DW 03F00H ;index string of this descriptor
|
||
|
class_specific_as_interface_desc:
|
||
|
DW 02407H ;descriptor type(CS_INTERFACE) , size of descriptor
|
||
|
DW 00101H ;terminalLink(Input terminal) , descriptor subtype(AS_GENERAL)
|
||
|
DW 03F01H ;interface delay(1)
|
||
|
DW 00001H ;PCM format
|
||
|
format_type_descriptor:
|
||
|
DW 0240BH ;descriptor type(CS_INTERFACE) , size of descriptor
|
||
|
DW 00102H ;FormatType(FORMAT_TYPE_I) , descriptorSubType(FORMAT_TYPE)
|
||
|
DW 00202H ;SubFrameSize(2 byte per slot) , number of channel(2 channels)
|
||
|
DW 00110H ;SamFreqType(support 1 type) , BitSolution(16 bits)
|
||
|
DW 03F80H ;Sample Frequency(48000 Hz)
|
||
|
DW 000BBH ;
|
||
|
end_point_descriptor:
|
||
|
DW 00509H ;descriptor type(END_POINT) , size of descriptor
|
||
|
DW 00902H ;endpoint attributes(adaptive,isochronous) , endpoint2(out direction)
|
||
|
DW 000C0H ;maxPacketSize(192 bytes)
|
||
|
DW 00001H ;Refresh(0) , Interval(1ms)
|
||
|
DW 03F00H ;index string of this descriptor
|
||
|
class_specific_endpoint_descriptor:
|
||
|
DW 02507H ;descriptor type(CS_ENDPOINT) , size of descriptor
|
||
|
DW 00001H ;Attributes(no sampling frequency , no pitch , no maxpackets control) , descriptorType(EP_GENERAL)
|
||
|
DW 03F00H ;LockedDelayUnit(unused)
|
||
|
DW 00000H ;LockDelay(unused)
|
||
|
Interface2_descriptor:
|
||
|
HID_class:
|
||
|
DW 00409H ;INTERFACE descriptor , Size of this descriptor
|
||
|
DW 00002H ;Index of this string , index of this interface
|
||
|
DW 00301H ;HID , 1 endpoint
|
||
|
DW 00000H ;Unused , Non-Boot Device
|
||
|
DW 03F00H ;null string
|
||
|
HID_Desc:
|
||
|
DW 02109H ;HID , Size of this descriptor
|
||
|
DW 00110H ;HID spec rev #1.10
|
||
|
DW 00100H ;bNumDescriptor , bCountryCode
|
||
|
DW 03F22H ;Report Descriptor
|
||
|
;====================================================================
|
||
|
; Use ReportID , Report ID 1 = Volume HID control
|
||
|
; Report ID 2 = Transform Other Data
|
||
|
;====================================================================
|
||
|
IF UseReportID
|
||
|
DW 00016H ;67 bytes
|
||
|
ELSE
|
||
|
DW 00016H
|
||
|
ENDIF
|
||
|
|
||
|
HID_end_point_descriptor:
|
||
|
DW 00507H ;Endpoint descriptor , Length of this descriptor
|
||
|
DW 00381H ;Interrupt , Endpoint 1 In direction
|
||
|
DW 00008H ;wMaxPacketSize = 1 Bytes
|
||
|
DW 03F30H ;48ms Interval
|
||
|
end_config_desc_table:
|
||
|
|
||
|
hid_report_desc_table:
|
||
|
;====================================================================
|
||
|
; Use ReportID , Report ID 1 = Volume HID control
|
||
|
; Report ID 2 = Transform Other Data
|
||
|
;====================================================================
|
||
|
;;vender defined
|
||
|
DW 03F06H ;//Usage Page(Global)
|
||
|
DW 03F00H
|
||
|
DW 03FFFH ;//Usage Page
|
||
|
|
||
|
DW 00109H ;//Usage(Local 1 bytes)
|
||
|
DW 001A1H ;//collection(Main)
|
||
|
;input report
|
||
|
;; DW 03F19H
|
||
|
;; DW 03FA6H
|
||
|
;; DW 03F29H ;//Usage(Local)
|
||
|
;; DW 03FACH
|
||
|
;; DW 03F15H ;//Global Logical Minimum
|
||
|
;; DW 03F80H
|
||
|
;; DW 03F25H ;//Global Logical Maximum
|
||
|
;; DW 03F7FH
|
||
|
;; DW 00875H ;//Global Report Size 8 bits
|
||
|
;; DW 00795H ;//Global Report Count 7 (field)
|
||
|
;; DW 00281H ;//Main Input (Data,Variable,Absolute)
|
||
|
;output
|
||
|
DW 00015H ;//LOGICAL MINIMUM (0)
|
||
|
DW 03F25H
|
||
|
DW 03FffH ;//LOGICAL MAXIMUM (FF)
|
||
|
DW 00019H ;//Usage Min (#)
|
||
|
DW 00129H ;//Usage Max (#)
|
||
|
DW 00895H ;//Report Count(8)
|
||
|
DW 00875H ;//Report Size(8)
|
||
|
DW 00291H ;//OUTPUT: (Data, Array)
|
||
|
DW 03FC0H ;End Collection
|
||
|
end_hid_report_desc_table:
|
||
|
|
||
|
string_descriptor:
|
||
|
USBStringLanguageDescription:
|
||
|
DW 00304h ; Length , Type (3=string)
|
||
|
DW 00409h ; Language: English , Sub-language: US
|
||
|
|
||
|
imanufacturer_string: ;Vendor Name
|
||
|
USBStringDescription1:
|
||
|
DW 00310h, 00048h, 0004fh, 0004ch, 00054h, 00045h, 0004bh, 00020h ;HOLTEK
|
||
|
|
||
|
iproduct_string: ;Product Name
|
||
|
USBStringDescription2:
|
||
|
;DW 00326h, 00042h, 0002Dh, 0004ch, 00049h, 0004Eh, 0004bh, 00020h ;B-LINK
|
||
|
DW 00055h, 00053h, 00042h, 00020h ;USB
|
||
|
DW 00041h, 00075h, 00064h, 00069h, 0006fh, 00020h, 00020h ;Audio
|
||
|
|
||
|
isnumber_string: ;Serial Number
|
||
|
USBStringDescription3:
|
||
|
DW 0030Ah, 00038h, 00032h, 00031h, 00052h ;821R
|
||
|
|
||
|
|
||
|
|
||
|
config_desc_length:
|
||
|
DW 00087H
|
||
|
|
||
|
report_desc_length:
|
||
|
IF UseReportID
|
||
|
DW 00016H
|
||
|
ELSE
|
||
|
DW 00016H
|
||
|
ENDIF
|
||
|
hid_desc_length:
|
||
|
DW 00009H
|
||
|
|
||
|
|
||
|
|
||
|
Public control_read_table
|
||
|
Public device_desc_table
|
||
|
Public config_desc_table
|
||
|
Public end_config_desc_table
|
||
|
Public USBStringLanguageDescription
|
||
|
Public USBStringDescription1
|
||
|
Public USBStringDescription2
|
||
|
Public USBStringDescription3
|
||
|
|
||
|
Public HID_Desc
|
||
|
Public hid_report_desc_table
|
||
|
Public end_hid_report_desc_table
|
||
|
|
||
|
|
||
|
Public config_desc_length
|
||
|
Public hid_desc_length
|
||
|
Public report_desc_length
|
||
|
|