More accurate buffer handling

 * Fix buffer overrun for big reports (125 bytes long)
 * Fix choose_data_size()
 * Use unsigned char for buffer