# -*- perl -*- # # Invoked from usbdescgen.pl # usb_languages('en_US', 'sv_SE'); my $vendor_id = 0x1d50; my $device_id = 0x6149; my $version_id = 0x0100; my $serial = usb_serial('?' x 16); my $manufacturer = usb_string('' => 'Peter & Per'); my $product = usb_string('' => 'MAX80 I/O card for ABC'); my $mgmt_if, $data_if; usb_device { usb_desc('device', word(0x101), # USB version usb_class('cdc'), # Communications device class byte(8), # Max packet size on endpoint 0 word($vendor_id), word($device_id), word($version_id), $manufacturer, $product, $serial, usb_children # Configuration count ), usb_dset { usb_desc('configuration', usb_totallen, # Total length for this dset usb_children, # Number of interfaces usb_index, # Configuration index usb_string(), # Text description (empty) byte(0xc0), # Self or bus powered byte(500 >> 1)), # Up to 500 mA # Management interface usb_dset { usb_desc('interface', $mgmt_if = usb_index, byte(0), # No alternate settings byte(1), # Endpoint count usb_class('cdc','acm','v25ter'), usb_string()), usb_desc('cs_interface.header', word(0x120)), # CDC spec version 1.20 usb_desc('cs_interface.call_management', byte(0x01), # No AT commands over data byte(0)), # No interface applicable usb_desc('cs_interface.acm', byte(0x04)), # Supports SEND_BREAK usb_desc('cs_interface.union', byte(\$mgmt_if), # Controlling interface byte(\$data_if)), # Data interface # EP 3, input: notification usb_desc('endpoint', ep_i(3), # Endpoint 3 input byte(3), # Interrupt, data word(64), # Max packet size byte(2)), # Interval }, # Data interface usb_dset { usb_desc('interface', $data_if = usb_index, byte(0), # No alternate settings byte(2), # Endpoint count usb_class('cdc_data'), usb_string()), # EP 1, output: downstream data usb_desc('endpoint', ep_o(1), byte(2), # Bulk, data word(64), # Max packet size byte(0)), # Interval # EP 2, input: upstream data usb_desc('endpoint', ep_i(2), byte(3), # Bulk, data word(64), # Max packet size byte(0)) # Interval } } };