Changeset e141281 in mainline for uspace/lib/usbhid/src/hiddescriptor.c
- Timestamp:
- 2017-05-04T22:17:36Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 31a30fa
- Parents:
- dc12262
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbhid/src/hiddescriptor.c
rdc12262 re141281 737 737 * @return Error code 738 738 */ 739 int usb_hid_report_parse_local_tag(uint8_t tag, const uint8_t *data, 740 size_t item_size, usb_hid_report_item_t *report_item, 741 739 int usb_hid_report_parse_local_tag(uint8_t tag, const uint8_t *data, 740 size_t item_size, usb_hid_report_item_t *report_item, 741 usb_hid_report_path_t *usage_path) 742 742 { 743 743 int32_t extended_usage; 744 744 745 switch (tag) {745 switch (tag) { 746 746 case USB_HID_REPORT_TAG_USAGE: 747 switch (report_item->in_delimiter) {747 switch (report_item->in_delimiter) { 748 748 case INSIDE_DELIMITER_SET: 749 /* nothing to do 750 * we catch only the first one 749 /* 750 * Nothing to do. 751 * We catch only the first one 751 752 */ 752 753 break; 753 754 754 755 case START_DELIMITER_SET: 755 756 report_item->in_delimiter = INSIDE_DELIMITER_SET; … … 757 758 case OUTSIDE_DELIMITER_SET: 758 759 extended_usage = ((report_item->usage_page) << 16); 759 extended_usage += usb_hid_report_tag_data_uint32(760 data,item_size);761 762 report_item->usages[report_item->usages_count] = 763 764 760 extended_usage += 761 usb_hid_report_tag_data_uint32(data, item_size); 762 763 report_item->usages[report_item->usages_count] = 764 extended_usage; 765 765 766 report_item->usages_count++; 766 767 break; … … 768 769 break; 769 770 770 case USB_HID_REPORT_TAG_USAGE_MINIMUM: 771 case USB_HID_REPORT_TAG_USAGE_MINIMUM: 771 772 if (item_size == 3) { 772 // usage extended usages 773 report_item->extended_usage_page = 773 /* Usage extended usages */ 774 report_item->extended_usage_page = 775 USB_HID_EXTENDED_USAGE_PAGE( 776 usb_hid_report_tag_data_uint32(data, item_size)); 777 778 779 report_item->usage_minimum = 780 USB_HID_EXTENDED_USAGE( 781 usb_hid_report_tag_data_uint32(data, item_size)); 782 } else { 783 report_item->usage_minimum = 784 usb_hid_report_tag_data_uint32(data, item_size); 785 } 786 break; 787 788 case USB_HID_REPORT_TAG_USAGE_MAXIMUM: 789 if (item_size == 3) { 790 if (report_item->extended_usage_page != 791 USB_HID_EXTENDED_USAGE_PAGE( 792 usb_hid_report_tag_data_uint32(data, item_size))) { 793 return EINVAL; 794 } 795 796 /* Usage extended usages */ 797 report_item->extended_usage_page = 774 798 USB_HID_EXTENDED_USAGE_PAGE( 775 799 usb_hid_report_tag_data_uint32(data,item_size)); 776 777 778 report_item->usage_minimum = 800 801 report_item->usage_maximum = 779 802 USB_HID_EXTENDED_USAGE( 780 803 usb_hid_report_tag_data_uint32(data,item_size)); 781 } 782 else { 783 report_item->usage_minimum = 804 } else { 805 report_item->usage_maximum = 784 806 usb_hid_report_tag_data_uint32(data,item_size); 785 807 } 786 break; 787 788 case USB_HID_REPORT_TAG_USAGE_MAXIMUM: 789 if (item_size == 3) { 790 if(report_item->extended_usage_page != 791 USB_HID_EXTENDED_USAGE_PAGE( 792 usb_hid_report_tag_data_uint32(data,item_size))) { 793 794 return EINVAL; 795 } 796 797 // usage extended usages 798 report_item->extended_usage_page = 799 USB_HID_EXTENDED_USAGE_PAGE( 800 usb_hid_report_tag_data_uint32(data,item_size)); 801 802 report_item->usage_maximum = 803 USB_HID_EXTENDED_USAGE( 804 usb_hid_report_tag_data_uint32(data,item_size)); 805 } 806 else { 807 report_item->usage_maximum = 808 usb_hid_report_tag_data_uint32(data,item_size); 809 } 810 811 // vlozit zaznamy do pole usages 812 int32_t i; 813 for(i = report_item->usage_minimum; 808 809 /* Put the records into the usages array */ 810 for (int32_t i = report_item->usage_minimum; 814 811 i <= report_item->usage_maximum; i++) { 815 816 if(report_item->extended_usage_page) { 817 report_item->usages[report_item->usages_count++] = 818 (report_item->extended_usage_page << 16) + i; 819 } 820 else { 821 report_item->usages[report_item->usages_count++] = 822 (report_item->usage_page << 16) + i; 812 813 if (report_item->extended_usage_page) { 814 report_item->usages[report_item->usages_count++] = 815 (report_item->extended_usage_page << 16) + i; 816 } else { 817 report_item->usages[report_item->usages_count++] = 818 (report_item->usage_page << 16) + i; 823 819 } 824 820 } 825 821 report_item->extended_usage_page = 0; 826 822 827 823 break; 828 824 829 825 case USB_HID_REPORT_TAG_DESIGNATOR_INDEX: 830 report_item->designator_index = 831 usb_hid_report_tag_data_uint32(data,item_size);826 report_item->designator_index = 827 usb_hid_report_tag_data_uint32(data, item_size); 832 828 break; 833 829 834 830 case USB_HID_REPORT_TAG_DESIGNATOR_MINIMUM: 835 report_item->designator_minimum = 836 usb_hid_report_tag_data_uint32(data,item_size);837 break; 838 831 report_item->designator_minimum = 832 usb_hid_report_tag_data_uint32(data, item_size); 833 break; 834 839 835 case USB_HID_REPORT_TAG_DESIGNATOR_MAXIMUM: 840 report_item->designator_maximum = 841 usb_hid_report_tag_data_uint32(data,item_size);842 break; 843 836 report_item->designator_maximum = 837 usb_hid_report_tag_data_uint32(data, item_size); 838 break; 839 844 840 case USB_HID_REPORT_TAG_STRING_INDEX: 845 report_item->string_index = 846 usb_hid_report_tag_data_uint32(data,item_size);847 break; 848 841 report_item->string_index = 842 usb_hid_report_tag_data_uint32(data, item_size); 843 break; 844 849 845 case USB_HID_REPORT_TAG_STRING_MINIMUM: 850 report_item->string_minimum = 851 usb_hid_report_tag_data_uint32(data,item_size);852 break; 853 846 report_item->string_minimum = 847 usb_hid_report_tag_data_uint32(data, item_size); 848 break; 849 854 850 case USB_HID_REPORT_TAG_STRING_MAXIMUM: 855 report_item->string_maximum = 856 usb_hid_report_tag_data_uint32(data,item_size);857 break; 858 851 report_item->string_maximum = 852 usb_hid_report_tag_data_uint32(data, item_size); 853 break; 854 859 855 case USB_HID_REPORT_TAG_DELIMITER: 860 report_item->in_delimiter = 861 usb_hid_report_tag_data_uint32(data,item_size);862 break; 863 856 report_item->in_delimiter = 857 usb_hid_report_tag_data_uint32(data, item_size); 858 break; 859 864 860 default: 865 861 return USB_HID_NO_ACTION; 866 862 } 867 863 868 864 return EOK; 869 865 } 870 871 866 872 867 /**
Note:
See TracChangeset
for help on using the changeset viewer.