Add packet to close device.

This commit is contained in:
2019-10-26 15:47:49 +01:00
parent ac619c274a
commit bcae241162
5 changed files with 24 additions and 1 deletions

View File

@@ -32,6 +32,15 @@ int DeviceOpen(const char* device_path)
#endif
}
void DeviceClose(int device_fd)
{
#if defined(__linux__) && !defined(__ANDROID__)
return LinuxCloseDevice(device_fd);
#else
return -1;
#endif
}
int32_t GetDeviceType(const char* device_path)
{
#if defined(__linux__) && !defined(__ANDROID__)

View File

@@ -62,6 +62,7 @@
#define DICMOTE_PACKET_TYPE_RESPONSE_GET_FIREWIRE_DATA 22
#define DICMOTE_PACKET_TYPE_COMMAND_GET_PCMCIA_DATA 23
#define DICMOTE_PACKET_TYPE_RESPONSE_GET_PCMCIA_DATA 24
#define DICMOTE_PACKET_TYPE_COMMAND_CLOSE_DEVICE 25
#define DICMOTE_PROTOCOL_MAX 1
#define DICMOTE_PACKET_NOP_REASON_OOO 0
#define DICMOTE_PACKET_NOP_REASON_NOT_IMPLEMENTED 1
@@ -418,12 +419,18 @@ typedef struct
char cis[65536];
} DicPacketResGetPcmciaData;
typedef struct
{
DicPacketHeader hdr;
} DicPacketCmdClose;
#pragma pack(pop)
DeviceInfoList* ListDevices();
void FreeDeviceInfoList(DeviceInfoList* start);
uint16_t DeviceInfoListCount(DeviceInfoList* start);
int DeviceOpen(const char* device_path);
void DeviceClose(int device_fd);
int32_t GetDeviceType(const char* device_path);
int32_t SendScsiCommand(int device_fd,
char* cdb,

View File

@@ -39,6 +39,8 @@ int LinuxOpenDevice(const char* device_path)
return fd;
}
void LinuxCloseDevice(int device_fd) { close(device_fd); }
int32_t LinuxGetDeviceType(const char* device_path)
{
#ifdef HAS_UDEV

View File

@@ -25,6 +25,7 @@
DeviceInfoList* LinuxListDevices();
int LinuxOpenDevice(const char* device_path);
void LinuxCloseDevice(int device_fd);
int32_t LinuxGetDeviceType(const char* device_path);

View File

@@ -1019,6 +1019,10 @@ void* WorkingLoop(void* arguments)
free(pkt_cmd_sdhci);
free(pkt_res_sdhci);
continue;
case DICMOTE_PACKET_TYPE_COMMAND_CLOSE_DEVICE:
DeviceClose(device_fd);
skip_next_hdr = 1;
continue;
default:
pkt_nop->reason_code = DICMOTE_PACKET_NOP_REASON_NOT_RECOGNIZED;
memset(&pkt_nop->reason, 0, 256);