Kinetis Bootloader Host  2.0.0
Host Tools for Kinetis devices
UsbHidPacketizer.h
1 /*
2  * Copyright (c) 2013-14, Freescale Semiconductor, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without modification,
6  * are permitted provided that the following conditions are met:
7  *
8  * o Redistributions of source code must retain the above copyright notice, this list
9  * of conditions and the following disclaimer.
10  *
11  * o Redistributions in binary form must reproduce the above copyright notice, this
12  * list of conditions and the following disclaimer in the documentation and/or
13  * other materials provided with the distribution.
14  *
15  * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
16  * contributors may be used to endorse or promote products derived from this
17  * software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 #ifndef _usb_hid_packetizer_h_
32 #define _usb_hid_packetizer_h_
33 
34 #include "Packetizer.h"
35 #include "UsbHidPeripheral.h"
36 #include "hidapi.h"
37 
38 #include "bootloader_common.h"
39 
40 #include "bootloader_hid_report_ids.h"
41 
44 
45 namespace blfwk
46 {
51 {
52 public:
55  {
56  kReadFlushTimeoutMs = 100000,
57 #if defined(BL_WITHOUT_RECEIVE_SB_FILE_CMD)
58  kPollAbortTimeoutMs = 0,
59 #else
60  kPollAbortTimeoutMs = 10,
61 #endif
62  kPollPacketMaxRetryCnt = 50,
63  kContinuousReadMargin = 2,
64  };
65 public:
67  UsbHidPacketizer(UsbHidPeripheral *peripheral, uint32_t readPacketTimeoutMs);
68 
70  virtual ~UsbHidPacketizer();
71 
78  virtual status_t readPacket(uint8_t **packet, uint32_t *packetLength, packet_type_t packetType);
79 
84  virtual status_t writePacket(const uint8_t *packet, uint32_t byteCount, packet_type_t packetType);
85 
87  virtual void abortPacket();
88 
90  virtual void sync(){};
91 
93  virtual void finalize(){};
94 
96  virtual void enableSimulatorPump() {}
98  virtual void pumpSimulator() {}
100  virtual void setAborted(bool aborted) {}
102  virtual uint32_t getMaxPacketSize();
103 
106 protected:
108  virtual void flushInput();
109 
111  bool pollForAbortPacket();
112 
113 protected:
114  bl_hid_report_t m_report;
115  bl_hid_report_t m_abortReport;
116 
117 private:
118  uint32_t
119  m_continuousReadCount;
120 };
121 
122 } // namespace blfwk
123 
125 
126 #endif // _usb_hid_packetizer_h_
127 
129 // EOF
Interface class for packetization of commands and data.
Definition: Packetizer.h:59
bl_hid_report_t m_abortReport
Used for received abort report.
Definition: UsbHidPacketizer.h:115
virtual void abortPacket()
Abort data phase.
Definition: UsbHidPacketizer.cpp:206
virtual status_t readPacket(uint8_t **packet, uint32_t *packetLength, packet_type_t packetType)
Read a packet.
Definition: UsbHidPacketizer.cpp:111
Definition: BlfwkErrors.h:16
virtual void sync()
Send framing packet ack/nak.
Definition: UsbHidPacketizer.h:90
UsbHidPacketizer(UsbHidPeripheral *peripheral, uint32_t readPacketTimeoutMs)
Default Constructor.
Definition: UsbHidPacketizer.cpp:47
virtual uint32_t getMaxPacketSize()
Returns the max packet size supported.
Definition: UsbHidPacketizer.cpp:232
Provides source and sink for packets that go over USB HID class.
Definition: UsbHidPacketizer.h:50
_usbhid_contants
Constants.
Definition: UsbHidPacketizer.h:54
bool pollForAbortPacket()
Poll overlapped read for receiver data phase abort.
Definition: UsbHidPacketizer.cpp:213
virtual void setAborted(bool aborted)
Set aborted flag.
Definition: UsbHidPacketizer.h:100
virtual void enableSimulatorPump()
Enable simulator command processor pump.
Definition: UsbHidPacketizer.h:96
virtual UsbHidPeripheral * getPeripheral()
Peripheral accessor.
Definition: UsbHidPacketizer.h:105
virtual void finalize()
Finalize.
Definition: UsbHidPacketizer.h:93
bl_hid_report_t m_report
Used for building and receiving the report.
Definition: UsbHidPacketizer.h:114
virtual void flushInput()
Flush input from device.
Definition: UsbHidPacketizer.cpp:196
Represents a USB HID peripheral.
Definition: UsbHidPeripheral.h:47
virtual ~UsbHidPacketizer()
Destructor.
Definition: UsbHidPacketizer.cpp:54
Peripheral * m_peripheral
Peripheral to send/receive bytes on.
Definition: Packetizer.h:113
virtual void pumpSimulator()
Pump simulator command processor.
Definition: UsbHidPacketizer.h:98
virtual status_t writePacket(const uint8_t *packet, uint32_t byteCount, packet_type_t packetType)
Write a packet.
Definition: UsbHidPacketizer.cpp:60