serial: ability to turn on the permissive mode from the command line
This commit is contained in:
parent
275a1b9bc4
commit
e9749c6b3f
@ -53,6 +53,7 @@ typedef struct _SERIAL_DEVICE SERIAL_DEVICE;
|
|||||||
struct _SERIAL_DEVICE
|
struct _SERIAL_DEVICE
|
||||||
{
|
{
|
||||||
DEVICE device;
|
DEVICE device;
|
||||||
|
BOOL permissive;
|
||||||
SERIAL_DRIVER_ID ServerSerialDriverId;
|
SERIAL_DRIVER_ID ServerSerialDriverId;
|
||||||
HANDLE* hComm;
|
HANDLE* hComm;
|
||||||
|
|
||||||
@ -182,11 +183,7 @@ static void serial_process_irp_create(SERIAL_DEVICE* serial, IRP* irp)
|
|||||||
|
|
||||||
_comm_setServerSerialDriver(serial->hComm, serial->ServerSerialDriverId);
|
_comm_setServerSerialDriver(serial->hComm, serial->ServerSerialDriverId);
|
||||||
|
|
||||||
/* FIXME: Appeared to be useful to setup some devices. Guess
|
_comm_set_permissive(serial->hComm, serial->permissive);
|
||||||
* the device driver asked to setup some unsupported feature
|
|
||||||
* that were not eventually used. TODO: collecting more
|
|
||||||
* details, a command line argument? */
|
|
||||||
/* _comm_set_permissive(serial->hComm, TRUE); */
|
|
||||||
|
|
||||||
/* NOTE: binary mode/raw mode required for the redirection. On
|
/* NOTE: binary mode/raw mode required for the redirection. On
|
||||||
* Linux, CommCreateFileA forces this setting.
|
* Linux, CommCreateFileA forces this setting.
|
||||||
@ -817,6 +814,21 @@ int DeviceServiceEntry(PDEVICE_SERVICE_ENTRY_POINTS pEntryPoints)
|
|||||||
serial->ServerSerialDriverId = SerialDriverSerCx2Sys;
|
serial->ServerSerialDriverId = SerialDriverSerCx2Sys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (device->Permissive != NULL)
|
||||||
|
{
|
||||||
|
if (_stricmp(device->Permissive, "permissive") == 0)
|
||||||
|
{
|
||||||
|
serial->permissive = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WLog_Print(serial->log, WLOG_DEBUG, "Unknown flag: %s", device->Permissive);
|
||||||
|
assert(FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
WLog_Print(serial->log, WLOG_DEBUG, "Server's serial driver: %s (id: %d)", driver, serial->ServerSerialDriverId);
|
WLog_Print(serial->log, WLOG_DEBUG, "Server's serial driver: %s (id: %d)", driver, serial->ServerSerialDriverId);
|
||||||
/* TODO: implement auto detection of the server's serial driver */
|
/* TODO: implement auto detection of the server's serial driver */
|
||||||
|
|
||||||
|
@ -253,8 +253,8 @@ int freerdp_client_print_command_line_help(int argc, char** argv)
|
|||||||
|
|
||||||
printf("Drive Redirection: /drive:home,/home/user\n");
|
printf("Drive Redirection: /drive:home,/home/user\n");
|
||||||
printf("Smartcard Redirection: /smartcard:<device>\n");
|
printf("Smartcard Redirection: /smartcard:<device>\n");
|
||||||
printf("Printer Redirection: /printer:<device>,<driver>\n");
|
printf("Serial Port Redirection: /serial:<name>,<device>,[SerCx2|SerCx|Serial],[permissive]\n");
|
||||||
printf("Serial Port Redirection: /serial:<device>\n");
|
printf("Serial Port Redirection: /serial:COM1,/dev/ttyS0\n");
|
||||||
printf("Parallel Port Redirection: /parallel:<device>\n");
|
printf("Parallel Port Redirection: /parallel:<device>\n");
|
||||||
printf("Printer Redirection: /printer:<device>,<driver>\n");
|
printf("Printer Redirection: /printer:<device>,<driver>\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
@ -422,6 +422,9 @@ int freerdp_client_add_device_channel(rdpSettings* settings, int count, char** p
|
|||||||
if (count > 3)
|
if (count > 3)
|
||||||
serial->Driver = _strdup(params[3]);
|
serial->Driver = _strdup(params[3]);
|
||||||
|
|
||||||
|
if (count > 4)
|
||||||
|
serial->Permissive = _strdup(params[4]);
|
||||||
|
|
||||||
freerdp_device_collection_add(settings, (RDPDR_DEVICE*) serial);
|
freerdp_device_collection_add(settings, (RDPDR_DEVICE*) serial);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -472,6 +472,7 @@ struct _RDPDR_SERIAL
|
|||||||
char* Name;
|
char* Name;
|
||||||
char* Path;
|
char* Path;
|
||||||
char* Driver;
|
char* Driver;
|
||||||
|
char* Permissive;
|
||||||
};
|
};
|
||||||
typedef struct _RDPDR_SERIAL RDPDR_SERIAL;
|
typedef struct _RDPDR_SERIAL RDPDR_SERIAL;
|
||||||
|
|
||||||
|
@ -44,12 +44,17 @@ struct winpr_comm
|
|||||||
int fd_write_event; /* as of today, only used by _purge() */
|
int fd_write_event; /* as of today, only used by _purge() */
|
||||||
CRITICAL_SECTION WriteLock;
|
CRITICAL_SECTION WriteLock;
|
||||||
|
|
||||||
/* permissive mode on errors if TRUE (default is FALSE).
|
/* permissive mode on errors. If TRUE (default is FALSE)
|
||||||
|
* CommDeviceIoControl always return TRUE.
|
||||||
*
|
*
|
||||||
* Since not all features are supported, some devices and applications
|
* Not all features are supported yet and an error is then returned when
|
||||||
* can still be functional on such errors.
|
* an application turns them on (e.g: i/o buffers > 4096). It appeared
|
||||||
|
* though that devices and applications can be still functional on such
|
||||||
|
* errors.
|
||||||
*
|
*
|
||||||
* TODO: command line switch or getting rid of it.
|
* see also: comm_ioctl.c
|
||||||
|
*
|
||||||
|
* FIXME: getting rid of this flag once all features supported.
|
||||||
*/
|
*/
|
||||||
BOOL permissive;
|
BOOL permissive;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user