Changeset d012590 in mainline for uspace/lib/usb/src/hidparser.c


Ignore:
Timestamp:
2011-03-29T19:35:27Z (13 years ago)
Author:
Matej Klonfar <maklf@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2f4b3a4, fc883bb
Parents:
79e1abd
Message:

output creating api fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usb/src/hidparser.c

    r79e1abd rd012590  
    12041204                report_item = list_get_instance(item, usb_hid_report_item_t, link);
    12051205
    1206                 for(i=0; i<report_item->count; i++, idx++) {
     1206                for(i=0; i<report_item->count; i++) {
    12071207
    12081208                        if(idx >= data_size) {
     
    12171217                                //variable item
    12181218                                value = usb_hid_translate_data_reverse(report_item, data[idx]);
     1219                                idx++;
    12191220                        }
    12201221
    12211222                        if((USB_HID_ITEM_FLAG_VARIABLE(report_item->item_flags) == 0) ||
    12221223                                ((report_item->usage_minimum == 0) && (report_item->usage_maximum == 0))) {
     1224                                       
    12231225//                              // variable item
    12241226                                offset = report_item->offset + (i * report_item->size);
     
    12311233                        }
    12321234
    1233                         if((offset/8) == ((offset+length)/8)) {
     1235                        if((offset/8) == ((offset+length-1)/8)) {
    12341236                                // je to v jednom bytu
    1235                                 if(((size_t)(offset/8) >= size) || ((size_t)(offset+length)/8) >= size) {
     1237                                if(((size_t)(offset/8) >= size) || ((size_t)(offset+length-1)/8) >= size) {
    12361238                                        break; // TODO ErrorCode
    12371239                                }
    12381240
    1239                                 value = value << (8- ((offset+length)%8));
    1240                                 value = value & (((1 << length)-1) << (8- ((offset+length)%8)));
     1241                                size_t shift=0;
     1242                                if(((offset+length)%8) > 0) {
     1243                                        shift = (8- ((offset+length)%8));
     1244                                }
     1245
     1246                                value = value << shift;                                                 
     1247                                value = value & (((1 << length)-1) << shift);
    12411248                                buffer[offset/8] = buffer[offset/8] | value;
    1242 
    12431249                        }
    12441250                        else {
     
    12471253                                // konec prvniho
    12481254                                tmp_value = value;
    1249                                 tmp_value = tmp_value >> (8 - (offset%8));
    1250                                 tmp_value = tmp_value & ((1 << (8-(offset%8)))-1);
     1255                                tmp_value = tmp_value >> (8 - (offset%8) - 1);
     1256                                tmp_value = tmp_value & ((1 << (8-(offset%8)))-1);                             
     1257
    12511258                                buffer[offset/8] = buffer[offset/8] | tmp_value;
    12521259
    12531260                                // a ted druhej
    1254                                 value = value & (((1 << report_item->size) - ((8 - (offset%8))))-1);
    1255                                 buffer[(offset+length)/8] = buffer[(offset+length)/8] | value;
     1261                                value = value & ((1 << (length - (8 - (offset%8))))-1);
     1262                                value = value << (8 - (length - (8 - (offset%8))));
     1263                               
     1264                                buffer[(offset+length-1)/8] = buffer[(offset+length-1)/8] | value;
    12561265                        }
    12571266
     
    12761285        int resolution;
    12771286
    1278         if((USB_HID_ITEM_FLAG_VARIABLE(item->item_flags) == 0) ||
    1279                 ((item->usage_minimum == 0) && (item->usage_maximum == 0))) {
     1287        if((USB_HID_ITEM_FLAG_VARIABLE(item->item_flags) == 0)) {
    12801288
    12811289                // variable item
Note: See TracChangeset for help on using the changeset viewer.