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{
39 void *handle = nullptr;
40 bool interface_claimed = false;
41};
42
44{
45public:
46 TransBase(int retry = 1) : m_retry{retry} {}
47 TransBase(const TransBase&) = delete;
48 TransBase& operator=(const TransBase&) = delete;
49 virtual ~TransBase();
50
51 virtual int open(TransHandle &) { return 0; }
52 virtual int close() { return 0; }
53 int write(void *buff, size_t size);
54 int read(void *buff, size_t size, size_t *return_size);
55 int write(std::vector<uint8_t> & buff) { return write(buff.data(), buff.size()); }
56 int read(std::vector<uint8_t> &buff);
57
58protected:
59 void * m_devhandle = nullptr;
60 int m_retry = 1;
61
62 virtual int write_simple(void *buff, size_t size) = 0;
63 virtual int read_simple(void *buff, size_t size, size_t *return_size) = 0;
64};
65
66class EPInfo
67{
68public:
69 constexpr EPInfo() = default;
70 constexpr EPInfo(int a, int size) : addr{a}, package_size{size} {}
71 int addr = 0;
72 int package_size = 64;
73};
74
75class USBTrans : public TransBase
76{
77public:
78 USBTrans(int retry = 1) : TransBase(retry) {}
79 int open(TransHandle &p) override;
80 int close() override;
81
82protected:
83 std::vector<EPInfo> m_EPs;
84
85private:
87};
88class HIDTrans : public USBTrans
89{
90public:
91 HIDTrans(int timeout = 1000) : USBTrans(2), m_timeout{timeout} {}
92 ~HIDTrans() override { if (m_devhandle) close(); m_devhandle = nullptr; }
93
94 int open(TransHandle &p) override;
95 void set_hid_out_ep(int ep) noexcept { m_outEP = ep; }
96
97protected:
98 int write_simple(void *buff, size_t size) override;
99 int read_simple(void *buff, size_t size, size_t *return_size) override;
100
101private:
102 int m_outEP = 0;
103 const int m_timeout = 1000;
105};
106
107class BulkTrans : public USBTrans
108{
109public:
110 BulkTrans(int timeout = 2000) : USBTrans(2), m_timeout{timeout} {}
111 ~BulkTrans() override { if (m_devhandle) close(); m_devhandle = nullptr; }
112
113 int open(TransHandle &p) override;
114
115protected:
116 int write_simple(void *buff, size_t size) override;
117 int read_simple(void *buff, size_t size, size_t *return_size) override;
118
119private:
120 size_t m_MaxTransPreRequest = 0x100000;
124 int m_timeout = 2000;
125};
126
127int polling_usb(std::atomic<int>& bexit);
~BulkTrans() override
Definition trans.h:111
int open(TransHandle &p) override
Definition trans.cpp:328
int read_simple(void *buff, size_t size, size_t *return_size) override
Definition trans.cpp:347
int m_b_send_zero
Definition trans.h:121
BulkTrans(int timeout=2000)
Definition trans.h:110
size_t m_MaxTransPreRequest
Definition trans.h:120
int write_simple(void *buff, size_t size) override
Definition trans.cpp:273
int m_timeout
Definition trans.h:124
EPInfo m_ep_out
Definition trans.h:123
EPInfo m_ep_in
Definition trans.h:122
Definition trans.h:67
constexpr EPInfo()=default
int package_size
Definition trans.h:72
constexpr EPInfo(int a, int size)
Definition trans.h:70
int addr
Definition trans.h:71
int m_outEP
Definition trans.h:102
~HIDTrans() override
Definition trans.h:92
const int m_timeout
Definition trans.h:103
void set_hid_out_ep(int ep) noexcept
Definition trans.h:95
int open(TransHandle &p) override
Definition trans.cpp:189
int read_simple(void *buff, size_t size, size_t *return_size) override
Definition trans.cpp:247
int m_set_report
Definition trans.h:104
HIDTrans(int timeout=1000)
Definition trans.h:91
int write_simple(void *buff, size_t size) override
Definition trans.cpp:205
virtual int close()
Definition trans.h:52
TransBase(int retry=1)
Definition trans.h:46
virtual ~TransBase()
Definition trans.cpp:53
int write(std::vector< uint8_t > &buff)
Definition trans.h:55
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:57
int m_retry
Definition trans.h:60
TransBase & operator=(const TransBase &)=delete
virtual int open(TransHandle &)
Definition trans.h:51
TransBase(const TransBase &)=delete
void * m_devhandle
Definition trans.h:59
int read(void *buff, size_t size, size_t *return_size)
Definition trans.cpp:76
int close() override
Definition trans.cpp:181
int open(TransHandle &p) override
Definition trans.cpp:105
USBTrans(int retry=1)
Definition trans.h:78
int ensure_interface_claimed(TransHandle &usb)
Definition trans.cpp:140
std::vector< EPInfo > m_EPs
Definition trans.h:83
Definition trans.h:38
bool interface_claimed
Definition trans.h:40
void * handle
Definition trans.h:39
int polling_usb(std::atomic< int > &bexit)
Definition usbhotplug.cpp:484