package com.github.mjdev.libaums;

import android.content.Context;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbEndpoint;
import android.hardware.usb.UsbInterface;
import android.hardware.usb.UsbManager;
import android.util.Log;
import com.github.mjdev.libaums.driver.BlockDeviceDriver;
import com.github.mjdev.libaums.driver.BlockDeviceDriverFactory;
import com.github.mjdev.libaums.partition.Partition;
import com.github.mjdev.libaums.partition.PartitionTable;
import com.github.mjdev.libaums.partition.PartitionTableEntry;
import com.github.mjdev.libaums.partition.PartitionTableFactory;
import com.github.mjdev.libaums.usb.UsbCommunicationFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/* JADX INFO: loaded from: classes.dex */
public class UsbMassStorageDevice {
    private static final int INTERFACE_PROTOCOL = 80;
    private static final int INTERFACE_SUBCLASS = 6;
    private static final String TAG = "UsbMassStorageDevice";
    private BlockDeviceDriver blockDevice;
    private UsbDeviceConnection deviceConnection;
    private UsbEndpoint inEndpoint;
    private UsbEndpoint outEndpoint;
    private PartitionTable partitionTable;
    private List<Partition> partitions = new ArrayList();
    private UsbDevice usbDevice;
    private UsbInterface usbInterface;
    private UsbManager usbManager;

    private UsbMassStorageDevice(UsbManager usbManager, UsbDevice usbDevice, UsbInterface usbInterface, UsbEndpoint usbEndpoint, UsbEndpoint usbEndpoint2) {
        this.usbManager = usbManager;
        this.usbDevice = usbDevice;
        this.usbInterface = usbInterface;
        this.inEndpoint = usbEndpoint;
        this.outEndpoint = usbEndpoint2;
    }

    public static UsbMassStorageDevice[] getMassStorageDevices(Context context) {
        UsbManager usbManager = (UsbManager) context.getSystemService("usb");
        ArrayList arrayList = new ArrayList();
        for (UsbDevice usbDevice : usbManager.getDeviceList().values()) {
            Log.i(TAG, "found usb device: " + usbDevice);
            int interfaceCount = usbDevice.getInterfaceCount();
            for (int i = 0; i < interfaceCount; i++) {
                UsbInterface usbInterface = usbDevice.getInterface(i);
                String str = TAG;
                Log.i(str, "found usb interface: " + usbInterface);
                if (usbInterface.getInterfaceClass() != 8 || usbInterface.getInterfaceSubclass() != 6 || usbInterface.getInterfaceProtocol() != 80) {
                    Log.i(str, "device interface not suitable!");
                } else {
                    int endpointCount = usbInterface.getEndpointCount();
                    if (endpointCount != 2) {
                        Log.w(str, "inteface endpoint count != 2");
                    }
                    UsbEndpoint usbEndpoint = null;
                    UsbEndpoint usbEndpoint2 = null;
                    for (int i2 = 0; i2 < endpointCount; i2++) {
                        UsbEndpoint endpoint = usbInterface.getEndpoint(i2);
                        Log.i(TAG, "found usb endpoint: " + endpoint);
                        if (endpoint.getType() == 2) {
                            if (endpoint.getDirection() == 0) {
                                usbEndpoint2 = endpoint;
                            } else {
                                usbEndpoint = endpoint;
                            }
                        }
                    }
                    if (usbEndpoint2 == null || usbEndpoint == null) {
                        Log.e(TAG, "Not all needed endpoints found!");
                    } else {
                        arrayList.add(new UsbMassStorageDevice(usbManager, usbDevice, usbInterface, usbEndpoint, usbEndpoint2));
                    }
                }
            }
        }
        return (UsbMassStorageDevice[]) arrayList.toArray(new UsbMassStorageDevice[0]);
    }

    public void init() throws IOException {
        if (this.usbManager.hasPermission(this.usbDevice)) {
            setupDevice();
            return;
        }
        throw new IllegalStateException("Missing permission to access usb device: " + this.usbDevice);
    }

    private void setupDevice() throws IOException {
        Log.d(TAG, "setup device");
        UsbDeviceConnection usbDeviceConnectionOpenDevice = this.usbManager.openDevice(this.usbDevice);
        this.deviceConnection = usbDeviceConnectionOpenDevice;
        if (usbDeviceConnectionOpenDevice == null) {
            throw new IOException("deviceConnection is null!");
        }
        if (!usbDeviceConnectionOpenDevice.claimInterface(this.usbInterface, true)) {
            throw new IOException("could not claim interface!");
        }
        BlockDeviceDriver blockDeviceDriverCreateBlockDevice = BlockDeviceDriverFactory.createBlockDevice(UsbCommunicationFactory.createUsbCommunication(this.deviceConnection, this.outEndpoint, this.inEndpoint));
        this.blockDevice = blockDeviceDriverCreateBlockDevice;
        blockDeviceDriverCreateBlockDevice.init();
        this.partitionTable = PartitionTableFactory.createPartitionTable(this.blockDevice);
        initPartitions();
    }

    private void initPartitions() throws IOException {
        Iterator<PartitionTableEntry> it = this.partitionTable.getPartitionTableEntries().iterator();
        while (it.hasNext()) {
            Partition partitionCreatePartition = Partition.createPartition(it.next(), this.blockDevice);
            if (partitionCreatePartition != null) {
                this.partitions.add(partitionCreatePartition);
            }
        }
    }

    public void close() {
        String str = TAG;
        Log.d(str, "close device");
        UsbDeviceConnection usbDeviceConnection = this.deviceConnection;
        if (usbDeviceConnection == null) {
            return;
        }
        if (!usbDeviceConnection.releaseInterface(this.usbInterface)) {
            Log.e(str, "could not release interface!");
        }
        this.deviceConnection.close();
    }

    public List<Partition> getPartitions() {
        return this.partitions;
    }

    public UsbDevice getUsbDevice() {
        return this.usbDevice;
    }
}
