OLD | NEW |
| 1 |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 2 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 3 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 4 // found in the LICENSE file. |
4 | 5 |
5 #ifndef MEDIA_MIDI_USB_MIDI_DESCRIPTOR_PARSER_H_ | 6 #ifndef MEDIA_MIDI_USB_MIDI_DESCRIPTOR_PARSER_H_ |
6 #define MEDIA_MIDI_USB_MIDI_DESCRIPTOR_PARSER_H_ | 7 #define MEDIA_MIDI_USB_MIDI_DESCRIPTOR_PARSER_H_ |
7 | 8 |
| 9 #include <stdint.h> |
| 10 |
8 #include <string> | 11 #include <string> |
9 #include <vector> | 12 #include <vector> |
10 | 13 |
11 #include "base/basictypes.h" | 14 #include "base/macros.h" |
12 #include "media/midi/usb_midi_export.h" | 15 #include "media/midi/usb_midi_export.h" |
13 #include "media/midi/usb_midi_jack.h" | 16 #include "media/midi/usb_midi_jack.h" |
14 | 17 |
15 namespace media { | 18 namespace media { |
16 namespace midi { | 19 namespace midi { |
17 | 20 |
18 class UsbMidiDevice; | 21 class UsbMidiDevice; |
19 | 22 |
20 // UsbMidiDescriptorParser parses USB descriptors and | 23 // UsbMidiDescriptorParser parses USB descriptors and |
21 // generates input / output lists of MIDIPortInfo. | 24 // generates input / output lists of MIDIPortInfo. |
22 // This is not a generic USB descriptor parser: this parser is designed | 25 // This is not a generic USB descriptor parser: this parser is designed |
23 // for collecting USB-MIDI jacks information from the descriptor. | 26 // for collecting USB-MIDI jacks information from the descriptor. |
24 class USB_MIDI_EXPORT UsbMidiDescriptorParser { | 27 class USB_MIDI_EXPORT UsbMidiDescriptorParser { |
25 public: | 28 public: |
26 struct DeviceInfo { | 29 struct DeviceInfo { |
27 DeviceInfo() | 30 DeviceInfo() |
28 : vendor_id(0), | 31 : vendor_id(0), |
29 product_id(0), | 32 product_id(0), |
30 bcd_device_version(0), | 33 bcd_device_version(0), |
31 manufacturer_index(0), | 34 manufacturer_index(0), |
32 product_index(0) {} | 35 product_index(0) {} |
33 uint16 vendor_id; | 36 uint16_t vendor_id; |
34 uint16 product_id; | 37 uint16_t product_id; |
35 // The higher one byte represents the "major" number and the lower one byte | 38 // The higher one byte represents the "major" number and the lower one byte |
36 // represents the "minor" number. | 39 // represents the "minor" number. |
37 uint16 bcd_device_version; | 40 uint16_t bcd_device_version; |
38 uint8 manufacturer_index; | 41 uint8_t manufacturer_index; |
39 uint8 product_index; | 42 uint8_t product_index; |
40 | 43 |
41 static std::string BcdVersionToString(uint16); | 44 static std::string BcdVersionToString(uint16_t); |
42 }; | 45 }; |
43 | 46 |
44 UsbMidiDescriptorParser(); | 47 UsbMidiDescriptorParser(); |
45 ~UsbMidiDescriptorParser(); | 48 ~UsbMidiDescriptorParser(); |
46 | 49 |
47 // Returns true if the operation succeeds. | 50 // Returns true if the operation succeeds. |
48 // When an incorrect input is given, this method may return true but | 51 // When an incorrect input is given, this method may return true but |
49 // never crashes. | 52 // never crashes. |
50 bool Parse(UsbMidiDevice* device, | 53 bool Parse(UsbMidiDevice* device, |
51 const uint8* data, | 54 const uint8_t* data, |
52 size_t size, | 55 size_t size, |
53 std::vector<UsbMidiJack>* jacks); | 56 std::vector<UsbMidiJack>* jacks); |
54 | 57 |
55 bool ParseDeviceInfo(const uint8* data, size_t size, DeviceInfo* info); | 58 bool ParseDeviceInfo(const uint8_t* data, size_t size, DeviceInfo* info); |
56 | 59 |
57 private: | 60 private: |
58 bool ParseInternal(UsbMidiDevice* device, | 61 bool ParseInternal(UsbMidiDevice* device, |
59 const uint8* data, | 62 const uint8_t* data, |
60 size_t size, | 63 size_t size, |
61 std::vector<UsbMidiJack>* jacks); | 64 std::vector<UsbMidiJack>* jacks); |
62 bool ParseDevice(const uint8* data, size_t size, DeviceInfo* info); | 65 bool ParseDevice(const uint8_t* data, size_t size, DeviceInfo* info); |
63 bool ParseInterface(const uint8* data, size_t size); | 66 bool ParseInterface(const uint8_t* data, size_t size); |
64 bool ParseCSInterface(UsbMidiDevice* device, const uint8* data, size_t size); | 67 bool ParseCSInterface(UsbMidiDevice* device, |
65 bool ParseEndpoint(const uint8* data, size_t size); | 68 const uint8_t* data, |
66 bool ParseCSEndpoint(const uint8* data, | 69 size_t size); |
| 70 bool ParseEndpoint(const uint8_t* data, size_t size); |
| 71 bool ParseCSEndpoint(const uint8_t* data, |
67 size_t size, | 72 size_t size, |
68 std::vector<UsbMidiJack>* jacks); | 73 std::vector<UsbMidiJack>* jacks); |
69 void Clear(); | 74 void Clear(); |
70 | 75 |
71 bool is_parsing_usb_midi_interface_; | 76 bool is_parsing_usb_midi_interface_; |
72 uint8 current_endpoint_address_; | 77 uint8_t current_endpoint_address_; |
73 uint8 current_cable_number_; | 78 uint8_t current_cable_number_; |
74 | 79 |
75 std::vector<UsbMidiJack> incomplete_jacks_; | 80 std::vector<UsbMidiJack> incomplete_jacks_; |
76 | 81 |
77 DISALLOW_COPY_AND_ASSIGN(UsbMidiDescriptorParser); | 82 DISALLOW_COPY_AND_ASSIGN(UsbMidiDescriptorParser); |
78 }; | 83 }; |
79 | 84 |
80 } // namespace midi | 85 } // namespace midi |
81 } // namespace media | 86 } // namespace media |
82 | 87 |
83 #endif // MEDIA_MIDI_USB_MIDI_DESCRIPTOR_PARSER_H_ | 88 #endif // MEDIA_MIDI_USB_MIDI_DESCRIPTOR_PARSER_H_ |
OLD | NEW |