Symbian platform (C++)
SDK native APIs, runtime and tooling
Loading...
Searching...
No Matches
transport.h
Go to the documentation of this file.
1#ifndef SYMBIAN_DEVICE_TRANSPORT_H_
2#define SYMBIAN_DEVICE_TRANSPORT_H_
3
4#include <cstdint>
5#include <memory>
6#include <string>
7#include <vector>
8
9#include <absl/status/status.h>
10#include <absl/status/statusor.h>
11
13#include "symbian/device/usb.h"
14
15namespace symbian::device {
16
17struct UsbPollFd {
18 // Host file descriptor watched by libusb.
19 int fd = -1;
20 // Poll event bitmask requested by libusb.
21 int events = 0;
22};
23
25 // Transfer identifier for the explicit submission API.
26 uint64_t id = 0;
27 // Libusb completion state.
28 std::string status;
29 // Number of bytes transferred.
31 // Received data for inbound transfers; empty for outbound transfers.
32 std::string data;
33};
34
35class UsbSession : public std::enable_shared_from_this<UsbSession> {
36 public:
37 static absl::StatusOr<std::shared_ptr<UsbSession>> Open(
38 uint16_t vendor, uint16_t product, const std::string& serial_anchor);
40 UsbSession(const UsbSession&) = delete;
41 UsbSession& operator=(const UsbSession&) = delete;
42
43 absl::StatusOr<UsbProbe> Descriptors() const;
44 absl::Status Claim(int number);
45 absl::Status SetAlternate(int number, int alternate);
46 absl::Status Release(int number);
47 absl::StatusOr<std::string> BulkIn(uint8_t endpoint, int length,
48 int timeout_ms);
49 absl::Status BulkOut(uint8_t endpoint, const std::string& data,
50 int timeout_ms);
51 absl::StatusOr<std::string> InterruptIn(uint8_t endpoint, int length,
52 int timeout_ms);
53 absl::Status InterruptOut(uint8_t endpoint, const std::string& data,
54 int timeout_ms);
55 absl::StatusOr<std::string> ControlIn(uint8_t request_type, uint8_t request,
56 uint16_t value, uint16_t index,
57 int length, int timeout_ms);
58 absl::Status ControlOut(uint8_t request_type, uint8_t request, uint16_t value,
59 uint16_t index, const std::string& data,
60 int timeout_ms);
61 absl::StatusOr<uint64_t> SubmitBulk(uint8_t endpoint, const std::string& data,
62 int length, int timeout_ms);
63 absl::StatusOr<uint64_t> SubmitInterrupt(uint8_t endpoint,
64 const std::string& data, int length,
65 int timeout_ms);
66 absl::StatusOr<uint64_t> SubmitControl(
67 uint8_t request_type, uint8_t request, uint16_t value, uint16_t index,
68 const std::string& data, int length, int timeout_ms,
70 confirmation = nullptr);
71 absl::StatusOr<symbian::concurrency::Future<UsbCompletion>> SubmitBulkFuture(
72 uint8_t endpoint, const std::string& data, int length, int timeout_ms);
73 absl::StatusOr<symbian::concurrency::Future<UsbCompletion>>
74 SubmitInterruptFuture(uint8_t endpoint, const std::string& data, int length,
75 int timeout_ms);
76 absl::StatusOr<symbian::concurrency::Future<UsbCompletion>>
77 SubmitControlFuture(uint8_t request_type, uint8_t request, uint16_t value,
78 uint16_t index, const std::string& data, int length,
79 int timeout_ms);
80 absl::Status Cancel(uint64_t id);
81 absl::StatusOr<std::vector<UsbCompletion>> HandleEvents(int timeout_ms);
82 absl::StatusOr<std::vector<UsbPollFd>> PollFileDescriptors() const;
83 absl::StatusOr<int> NextTimeoutMs() const;
84 absl::Status Close();
85
86 private:
87 struct Impl;
88 explicit UsbSession(std::unique_ptr<Impl> impl);
89 absl::StatusOr<std::string> SyncIn(uint8_t endpoint, int length,
90 int timeout_ms, bool interrupt);
91 absl::Status SyncOut(uint8_t endpoint, const std::string& data,
92 int timeout_ms, bool interrupt);
93 absl::StatusOr<uint64_t> Submit(
94 uint8_t endpoint, const std::string& data, int length, int timeout_ms,
95 bool interrupt,
97 confirmation = nullptr);
98 std::unique_ptr<Impl> impl_;
99};
100
101absl::StatusOr<std::vector<UsbDeviceDescriptor>> ListUsbDevices();
102
103} // namespace symbian::device
104#endif // SYMBIAN_DEVICE_TRANSPORT_H_
Definition bounded_channel.h:38
Definition transport.h:35
absl::StatusOr< std::vector< UsbPollFd > > PollFileDescriptors() const
Definition usb.cc:2136
absl::StatusOr< uint64_t > SubmitBulk(uint8_t endpoint, const std::string &data, int length, int timeout_ms)
Definition usb.cc:1945
absl::Status Claim(int number)
Definition usb.cc:1644
absl::StatusOr< std::string > BulkIn(uint8_t endpoint, int length, int timeout_ms)
Definition usb.cc:1788
absl::Status Cancel(uint64_t id)
Definition usb.cc:2088
absl::StatusOr< uint64_t > SubmitInterrupt(uint8_t endpoint, const std::string &data, int length, int timeout_ms)
Definition usb.cc:1951
absl::StatusOr< std::string > ControlIn(uint8_t request_type, uint8_t request, uint16_t value, uint16_t index, int length, int timeout_ms)
Definition usb.cc:1808
absl::StatusOr< int > NextTimeoutMs() const
Definition usb.cc:2153
absl::StatusOr< std::string > InterruptIn(uint8_t endpoint, int length, int timeout_ms)
Definition usb.cc:1798
absl::Status InterruptOut(uint8_t endpoint, const std::string &data, int timeout_ms)
Definition usb.cc:1803
UsbSession & operator=(const UsbSession &)=delete
absl::StatusOr< std::vector< UsbCompletion > > HandleEvents(int timeout_ms)
Definition usb.cc:2102
absl::Status SetAlternate(int number, int alternate)
Definition usb.cc:1663
absl::Status ControlOut(uint8_t request_type, uint8_t request, uint16_t value, uint16_t index, const std::string &data, int timeout_ms)
Definition usb.cc:1843
absl::Status BulkOut(uint8_t endpoint, const std::string &data, int timeout_ms)
Definition usb.cc:1793
absl::StatusOr< symbian::concurrency::Future< UsbCompletion > > SubmitBulkFuture(uint8_t endpoint, const std::string &data, int length, int timeout_ms)
Definition usb.cc:2027
UsbSession(const UsbSession &)=delete
absl::Status Close()
Definition usb.cc:2169
absl::Status Release(int number)
Definition usb.cc:1683
absl::StatusOr< uint64_t > SubmitControl(uint8_t request_type, uint8_t request, uint16_t value, uint16_t index, const std::string &data, int length, int timeout_ms, std::shared_ptr< symbian::concurrency::Promise< UsbCompletion > > confirmation=nullptr)
Definition usb.cc:1958
static absl::StatusOr< std::shared_ptr< UsbSession > > Open(uint16_t vendor, uint16_t product, const std::string &serial_anchor)
Definition usb.cc:1570
absl::StatusOr< symbian::concurrency::Future< UsbCompletion > > SubmitControlFuture(uint8_t request_type, uint8_t request, uint16_t value, uint16_t index, const std::string &data, int length, int timeout_ms)
Definition usb.cc:2067
absl::StatusOr< UsbProbe > Descriptors() const
Definition usb.cc:1636
~UsbSession()
Definition usb.cc:1564
absl::StatusOr< symbian::concurrency::Future< UsbCompletion > > SubmitInterruptFuture(uint8_t endpoint, const std::string &data, int length, int timeout_ms)
Definition usb.cc:2047
Definition transport.h:15
absl::StatusOr< std::vector< UsbDeviceDescriptor > > ListUsbDevices()
Definition usb.cc:2216
Definition transport.h:24
std::string data
Definition transport.h:32
std::string status
Definition transport.h:28
int actual_length
Definition transport.h:30
Definition transport.h:17
int events
Definition transport.h:21
int fd
Definition transport.h:19
libusb_context * value
Definition usb.cc:35
int number
Definition usb.cc:80
std::vector< unsigned char > data
Definition usb.cc:292