• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #pragma once
2 
3 #include <android-base/file.h>
4 #include <android/hardware/usb/1.2/IUsbCallback.h>
5 #include <android/hardware/usb/1.2/types.h>
6 #include <android/hardware/usb/1.3/IUsb.h>
7 #include <hidl/Status.h>
8 #include <utils/Log.h>
9 
10 #define UEVENT_MSG_LEN 2048
11 // The type-c stack waits for 4.5 - 5.5 secs before declaring a port non-pd.
12 // The -partner directory would not be created until this is done.
13 // Having a margin of ~3 secs for the directory and other related bookeeping
14 // structures created and uvent fired.
15 #define PORT_TYPE_TIMEOUT 8
16 
17 namespace android {
18 namespace hardware {
19 namespace usb {
20 namespace V1_3 {
21 namespace implementation {
22 
23 using ::android::sp;
24 using ::android::base::WriteStringToFile;
25 using ::android::hardware::hidl_array;
26 using ::android::hardware::hidl_memory;
27 using ::android::hardware::hidl_string;
28 using ::android::hardware::hidl_vec;
29 using ::android::hardware::Return;
30 using ::android::hardware::Void;
31 using ::android::hardware::usb::V1_0::PortDataRole;
32 using ::android::hardware::usb::V1_0::PortPowerRole;
33 using ::android::hardware::usb::V1_0::PortRole;
34 using ::android::hardware::usb::V1_0::PortRoleType;
35 using ::android::hardware::usb::V1_0::Status;
36 using ::android::hardware::usb::V1_1::PortMode_1_1;
37 using ::android::hardware::usb::V1_1::PortStatus_1_1;
38 using ::android::hardware::usb::V1_2::IUsbCallback;
39 using ::android::hardware::usb::V1_2::PortStatus;
40 using ::android::hardware::usb::V1_3::IUsb;
41 using ::android::hidl::base::V1_0::DebugInfo;
42 using ::android::hidl::base::V1_0::IBase;
43 
44 #define PULLUP_PATH "/config/usb_gadget/g1/UDC"
45 constexpr char kGadgetName[] = "a600000.dwc3";
46 #define SOC_PATH "/sys/devices/platform/soc/a600000.ssusb/"
47 #define ID_PATH SOC_PATH "id"
48 #define VBUS_PATH SOC_PATH "b_sess"
49 #define USB_DATA_PATH SOC_PATH "usb_data_enabled"
50 
51 enum class HALVersion { V1_0, V1_1, V1_2, V1_3 };
52 
53 struct Usb : public IUsb {
54     Usb();
55 
56     Return<void> switchRole(const hidl_string &portName, const PortRole &role) override;
57     Return<void> setCallback(const sp<V1_0::IUsbCallback>& callback) override;
58     Return<void> queryPortStatus() override;
59     Return<void> enableContaminantPresenceDetection(const hidl_string &portName, bool enable);
60     Return<void> enableContaminantPresenceProtection(const hidl_string &portName, bool enable);
61     Return<bool> enableUsbDataSignal(bool enable) override;
62 
63     sp<V1_0::IUsbCallback> mCallback_1_0;
64     // Protects mCallback variable
65     pthread_mutex_t mLock;
66     // Protects roleSwitch operation
67     pthread_mutex_t mRoleSwitchLock;
68     // Threads waiting for the partner to come back wait here
69     pthread_cond_t mPartnerCV;
70     // lock protecting mPartnerCV
71     pthread_mutex_t mPartnerLock;
72     // Variable to signal partner coming back online after type switch
73     bool mPartnerUp;
74 
75     private:
76         pthread_t mPoll;
77 };
78 
79 }  // namespace implementation
80 }  // namespace V1_3
81 }  // namespace usb
82 }  // namespace hardware
83 }  // namespace android
84