uuu
uuu (Universal Update Utility), mfgtools 3.0
Loading...
Searching...
No Matches
trans.h
Go to the documentation of this file.
1/*
2* Copyright 2018 NXP.
3*
4* Redistribution and use in source and binary forms, with or without modification,
5* are permitted provided that the following conditions are met:
6*
7* Redistributions of source code must retain the above copyright notice, this
8* list of conditions and the following disclaimer.
9*
10* Redistributions in binary form must reproduce the above copyright notice, this
11* list of conditions and the following disclaimer in the documentation and/or
12* other materials provided with the distribution.
13*
14* Neither the name of the NXP Semiconductor nor the names of its
15* contributors may be used to endorse or promote products derived from this
16* software without specific prior written permission.
17*
18* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28* POSSIBILITY OF SUCH DAMAGE.
29*
30*/
31#pragma once
32
33#include <atomic>
34#include <string>
35#include <vector>
36
38{
39public:
40 TransBase(int retry = 1) : m_retry{retry} {}
41 TransBase(const TransBase&) = delete;
42 TransBase& operator=(const TransBase&) = delete;
43 virtual ~TransBase();
44
45 virtual int open(void *) { return 0; }
46 virtual int close() { return 0; }
47 int write(void *buff, size_t size);
48 int read(void *buff, size_t size, size_t *return_size);
49 int write(std::vector<uint8_t> & buff) { return write(buff.data(), buff.size()); }
50 int read(std::vector<uint8_t> &buff);
51
52protected:
53 void * m_devhandle = nullptr;
54 int m_retry = 1;
55
56 virtual int write_simple(void *buff, size_t size) = 0;
57 virtual int read_simple(void *buff, size_t size, size_t *return_size) = 0;
58};
59
60class EPInfo
61{
62public:
63 constexpr EPInfo() = default;
64 constexpr EPInfo(int a, int size) : addr{a}, package_size{size} {}
65 int addr = 0;
66 int package_size = 64;
67};
68
69class USBTrans : public TransBase
70{
71public:
72 USBTrans(int retry = 1) : TransBase(retry) {}
73 int open(void *p) override;
74 int close() override;
75
76protected:
77 std::vector<EPInfo> m_EPs;
78};
79class HIDTrans : public USBTrans
80{
81public:
82 HIDTrans(int timeout = 1000) : USBTrans(2), m_timeout{timeout} {}
83 ~HIDTrans() override { if (m_devhandle) close(); m_devhandle = nullptr; }
84
85 int open(void *p) override;
86 void set_hid_out_ep(int ep) noexcept { m_outEP = ep; }
87
88protected:
89 int write_simple(void *buff, size_t size) override;
90 int read_simple(void *buff, size_t size, size_t *return_size) override;
91
92private:
93 int m_outEP = 0;
94 const int m_timeout = 1000;
95 int m_set_report = 9;
96};
97
98class BulkTrans : public USBTrans
99{
100public:
101 BulkTrans(int timeout = 2000) : USBTrans(2), m_timeout{timeout} {}
102 ~BulkTrans() override { if (m_devhandle) close(); m_devhandle = nullptr; }
103
104 int open(void *p) override;
105
106protected:
107 int write_simple(void *buff, size_t size) override;
108 int read_simple(void *buff, size_t size, size_t *return_size) override;
109
110private:
111 size_t m_MaxTransPreRequest = 0x100000;
115 int m_timeout = 2000;
116};
117
118int polling_usb(std::atomic<int>& bexit);
~BulkTrans() override
Definition trans.h:102
int read_simple(void *buff, size_t size, size_t *return_size) override
Definition trans.cpp:310
int m_b_send_zero
Definition trans.h:112
BulkTrans(int timeout=2000)
Definition trans.h:101
int open(void *p) override
Definition trans.cpp:291
size_t m_MaxTransPreRequest
Definition trans.h:111
int write_simple(void *buff, size_t size) override
Definition trans.cpp:236
int m_timeout
Definition trans.h:115
EPInfo m_ep_out
Definition trans.h:114
EPInfo m_ep_in
Definition trans.h:113
Definition trans.h:61
constexpr EPInfo()=default
int package_size
Definition trans.h:66
constexpr EPInfo(int a, int size)
Definition trans.h:64
int addr
Definition trans.h:65
int m_outEP
Definition trans.h:93
int open(void *p) override
Definition trans.cpp:152
~HIDTrans() override
Definition trans.h:83
const int m_timeout
Definition trans.h:94
void set_hid_out_ep(int ep) noexcept
Definition trans.h:86
int read_simple(void *buff, size_t size, size_t *return_size) override
Definition trans.cpp:210
int m_set_report
Definition trans.h:95
HIDTrans(int timeout=1000)
Definition trans.h:82
int write_simple(void *buff, size_t size) override
Definition trans.cpp:168
virtual int close()
Definition trans.h:46
TransBase(int retry=1)
Definition trans.h:40
virtual ~TransBase()
Definition trans.cpp:46
int write(std::vector< uint8_t > &buff)
Definition trans.h:49
virtual int write_simple(void *buff, size_t size)=0
virtual int read_simple(void *buff, size_t size, size_t *return_size)=0
int write(void *buff, size_t size)
Definition trans.cpp:50
int m_retry
Definition trans.h:54
TransBase & operator=(const TransBase &)=delete
virtual int open(void *)
Definition trans.h:45
TransBase(const TransBase &)=delete
void * m_devhandle
Definition trans.h:53
int read(void *buff, size_t size, size_t *return_size)
Definition trans.cpp:69
int close() override
Definition trans.cpp:144
USBTrans(int retry=1)
Definition trans.h:72
int open(void *p) override
Definition trans.cpp:98
std::vector< EPInfo > m_EPs
Definition trans.h:77
int polling_usb(std::atomic< int > &bexit)
Definition usbhotplug.cpp:480