The ports message now outputs index / path pairs on the status outlet.

svn path=/trunk/externals/iem/comport/; revision=8209
This commit is contained in:
Martin Peach 2007-07-22 19:10:50 +00:00
parent 419fbce170
commit f423522228

View file

@ -58,7 +58,7 @@ typedef struct comport
struct termios com_termio; /* for the new com config */ struct termios com_termio; /* for the new com config */
#endif #endif
t_symbol *serial_device; t_symbol *serial_device;
char serial_device_name[FILENAME_MAX]; char serial_device_prefix[FILENAME_MAX];/* the device name without the number */
short comport; /* holds the comport # */ short comport; /* holds the comport # */
t_float baud; /* holds the current baud rate */ t_float baud; /* holds the current baud rate */
t_float data_bits; /* holds the current number of data bits */ t_float data_bits; /* holds the current number of data bits */
@ -407,21 +407,31 @@ static int set_serial(t_comport *x)
static HANDLE open_serial(unsigned int com_num, t_comport *x) static HANDLE open_serial(unsigned int com_num, t_comport *x)
{ {
HANDLE fd; HANDLE fd;
COMMTIMEOUTS timeouts; COMMTIMEOUTS timeouts;
char buffer[MAX_PATH]; char buffer[MAX_PATH];
float *baud = &(x->baud); float *baud = &(x->baud);
DWORD dw; DWORD dw;
int i;
char *errStr;
if(com_num < 1 || com_num >= COMPORT_MAX) if (com_num != USE_DEVICENAME)
{ {
post("comport number %d out of range (0-%d)", com_num, COMPORT_MAX); if(com_num < 1 || com_num >= COMPORT_MAX)
return INVALID_HANDLE_VALUE; {
post("comport number %d out of range (1-%d)", com_num, COMPORT_MAX);
return INVALID_HANDLE_VALUE;
}
sprintf(buffer, "%s%d", x->serial_device_prefix, com_num);
x->serial_device = gensym(buffer);
} }
else
sprintf(buffer, "%s%d", x->serial_device_name, com_num); {
x->serial_device = gensym(buffer); sprintf(buffer, "\\\\.\\%s", x->serial_device->s_name); /* assume the slashes were not prefixed by user */
post("Opening %s",x->serial_device->s_name); x->serial_device = gensym(buffer);
}
post("Opening %s", &x->serial_device->s_name[4]);/* skip slashes and dot */
fd = CreateFile( x->serial_device->s_name, fd = CreateFile( x->serial_device->s_name,
GENERIC_READ | GENERIC_WRITE, GENERIC_READ | GENERIC_WRITE,
0, 0,
@ -433,8 +443,29 @@ static HANDLE open_serial(unsigned int com_num, t_comport *x)
if(fd == INVALID_HANDLE_VALUE) if(fd == INVALID_HANDLE_VALUE)
{ {
dw = GetLastError(); dw = GetLastError();
post("** ERROR ** could not open device %s:\n failure(%d)\n", switch (dw)
x->serial_device->s_name,dw); {
case 2:
errStr = "ERROR_FILE_NOT_FOUND";
break;
case 3:
errStr = "ERROR_PATH_NOT_FOUND";
break;
case 5:
errStr = "ERROR_ACCESS_DENIED";
break;
case 53:
errStr = "ERROR_BAD_NETPATH";
break;
case 123:
errStr = "ERROR_INVALID_NAME";
break;
default:
errStr = " ";
break;
}
post("** ERROR ** could not open device %s:\n failure(%d) %s\n",
&x->serial_device->s_name[4], dw, errStr);
return INVALID_HANDLE_VALUE; return INVALID_HANDLE_VALUE;
} }
@ -443,7 +474,7 @@ static HANDLE open_serial(unsigned int com_num, t_comport *x)
if (!GetCommState(fd, &(x->dcb_old))) if (!GetCommState(fd, &(x->dcb_old)))
{ {
post("** ERROR ** could not get old dcb of device %s\n", post("** ERROR ** could not get old dcb of device %s\n",
x->serial_device->s_name); &x->serial_device->s_name[4]);
CloseHandle(fd); CloseHandle(fd);
return INVALID_HANDLE_VALUE; return INVALID_HANDLE_VALUE;
} }
@ -453,7 +484,7 @@ static HANDLE open_serial(unsigned int com_num, t_comport *x)
if (!GetCommState(fd, &(x->dcb))) if (!GetCommState(fd, &(x->dcb)))
{ {
post("** ERROR ** could not get new dcb of device %s\n", post("** ERROR ** could not get new dcb of device %s\n",
x->serial_device->s_name); &x->serial_device->s_name[4]);
CloseHandle(fd); CloseHandle(fd);
return INVALID_HANDLE_VALUE; return INVALID_HANDLE_VALUE;
@ -484,15 +515,22 @@ static HANDLE open_serial(unsigned int com_num, t_comport *x)
x->comhandle = fd; x->comhandle = fd;
if (com_num == USE_DEVICENAME)
{
/* extract index from device name */
for (i = 0; x->serial_device->s_name[i] != 0; ++i)
if ((x->serial_device->s_name[i] >= '0') && (x->serial_device->s_name[i] <= '9'))
com_num = atoi(&x->serial_device->s_name[i]);
}
if(set_serial(x)) if(set_serial(x))
{ {
post("[comport] opened serial line device %d (%s)\n", post("[comport] opened serial line device %d (%s)\n",
com_num,x->serial_device->s_name); com_num, &x->serial_device->s_name[4]);
} }
else else
{ {
error("[comport] ** ERROR ** could not set params to control dcb of device %s\n", error("[comport] ** ERROR ** could not set params to control dcb of device %s\n",
x->serial_device->s_name); &x->serial_device->s_name[4]);
CloseHandle(fd); CloseHandle(fd);
return INVALID_HANDLE_VALUE; return INVALID_HANDLE_VALUE;
} }
@ -518,7 +556,6 @@ static HANDLE open_serial(unsigned int com_num, t_comport *x)
{ {
post("[comport] Couldn't do SetupComm (%d)", GetLastError()); post("[comport] Couldn't do SetupComm (%d)", GetLastError());
} }
x->comport = com_num;/* output on next tick */ x->comport = com_num;/* output on next tick */
return fd; return fd;
} }
@ -530,14 +567,14 @@ static HANDLE close_serial(t_comport *x)
if (!SetCommState(x->comhandle, &(x->dcb_old))) if (!SetCommState(x->comhandle, &(x->dcb_old)))
{ {
post("[comport] ** ERROR ** couldn't reset params to DCB of device %s\n", post("[comport] ** ERROR ** couldn't reset params to DCB of device %s\n",
x->serial_device->s_name); &x->serial_device->s_name[4]);
} }
if (!SetCommTimeouts(x->comhandle, &(x->old_timeouts))) if (!SetCommTimeouts(x->comhandle, &(x->old_timeouts)))
{ {
post("[comport] Couldn't reset old_timeouts for serial device"); post("[comport] Couldn't reset old_timeouts for serial device");
} }
CloseHandle(x->comhandle); CloseHandle(x->comhandle);
post("[comport] closed %s",x->serial_device->s_name); post("[comport] closed %s", &x->serial_device->s_name[4]);
} }
return INVALID_HANDLE_VALUE; return INVALID_HANDLE_VALUE;
} }
@ -774,21 +811,21 @@ static int open_serial(unsigned int com_num, t_comport *x)
com_num, COMPORT_MAX - 1); com_num, COMPORT_MAX - 1);
return INVALID_HANDLE_VALUE; return INVALID_HANDLE_VALUE;
} }
/* post("[comport] globbing %s",x->serial_device_name);*/ /* post("[comport] globbing %s",x->serial_device_prefix);*/
/* get the device path based on the port# and the glob pattern */ /* get the device path based on the port# and the glob pattern */
switch( glob( x->serial_device_name, 0, NULL, &glob_buffer ) ) switch( glob( x->serial_device_prefix, 0, NULL, &glob_buffer ) )
{ {
case GLOB_NOSPACE: case GLOB_NOSPACE:
error("[comport] out of memory for \"%s\"",x->serial_device_name); error("[comport] out of memory for \"%s\"",x->serial_device_prefix);
break; break;
#ifdef GLOB_ABORTED #ifdef GLOB_ABORTED
case GLOB_ABORTED: case GLOB_ABORTED:
error("[comport] aborted \"%s\"",x->serial_device_name); error("[comport] aborted \"%s\"",x->serial_device_prefix);
break; break;
#endif #endif
#ifdef GLOB_NOMATCH #ifdef GLOB_NOMATCH
case GLOB_NOMATCH: case GLOB_NOMATCH:
error("[comport] no serial devices found for \"%s\"",x->serial_device_name); error("[comport] no serial devices found for \"%s\"",x->serial_device_prefix);
break; break;
#endif #endif
} }
@ -1024,15 +1061,22 @@ static void *comport_new(t_floatarg com_num, t_floatarg fbaud)
/* for UNIX, this is a glob pattern for matching devices */ /* for UNIX, this is a glob pattern for matching devices */
#ifdef _WIN32 #ifdef _WIN32
const char *serial_device_name = "COM"; /*
According to http://msdn2.microsoft.com/en-us/library/aa363858.aspx
To specify a COM port number greater than 9,
use the following syntax: "\\\\.\\COM10".
This syntax works for all port numbers and hardware
that allows COM port numbers to be specified.
*/
const char *serial_device_prefix = "\\\\.\\COM";
#else #else
# ifdef __APPLE__ # ifdef __APPLE__
const char *serial_device_name = "/dev/tty.*"; const char *serial_device_prefix = "/dev/tty.*";
# else # else
# ifdef IRIX # ifdef IRIX
const char *serial_device_name = "/dev/ttyd*"; const char *serial_device_prefix = "/dev/ttyd*";
# else # else
const char *serial_device_name = "/dev/tty[SU]*"; const char *serial_device_prefix = "/dev/tty[SU]*";
# endif /* IRIX */ # endif /* IRIX */
# endif /* __APPLE__ */ # endif /* __APPLE__ */
#endif /* _WIN32 */ #endif /* _WIN32 */
@ -1040,7 +1084,7 @@ static void *comport_new(t_floatarg com_num, t_floatarg fbaud)
/* Open the Comport for RD and WR and get a handle */ /* Open the Comport for RD and WR and get a handle */
/* this line should use a real serial device */ /* this line should use a real serial device */
strncpy(test.serial_device_name, serial_device_name, strlen(serial_device_name)+1); strncpy(test.serial_device_prefix, serial_device_prefix, strlen(serial_device_prefix)+1);
test.baud = fbaud; test.baud = fbaud;
test.data_bits = 8; /* default 8 data bits */ test.data_bits = 8; /* default 8 data bits */
test.parity_bit = 0;/* default no parity bit */ test.parity_bit = 0;/* default no parity bit */
@ -1053,7 +1097,7 @@ static void *comport_new(t_floatarg com_num, t_floatarg fbaud)
x = (t_comport *)pd_new(comport_class); x = (t_comport *)pd_new(comport_class);
x->comport = test.comport;/* com_num */ x->comport = test.comport;/* com_num */
strncpy(x->serial_device_name,serial_device_name,strlen(serial_device_name)+1); strncpy(x->serial_device_prefix,serial_device_prefix,strlen(serial_device_prefix)+1);
x->serial_device = test.serial_device; /* we need this so 'help' doesn't crash */ x->serial_device = test.serial_device; /* we need this so 'help' doesn't crash */
x->baud = test.baud; x->baud = test.baud;
@ -1067,7 +1111,7 @@ static void *comport_new(t_floatarg com_num, t_floatarg fbaud)
if(fd == INVALID_HANDLE_VALUE ) if(fd == INVALID_HANDLE_VALUE )
{ {
/* postings in open routine */ /* postings in open routine */
post("[comport] invalid handle for %s",x->serial_device_name); post("[comport] invalid handle for %s", x->serial_device_prefix);
} }
else else
{ {
@ -1123,10 +1167,19 @@ static void comport_baud(t_comport *x,t_floatarg f)
if(set_serial(x) == 0) if(set_serial(x) == 0)
{ {
error("[comport] ** ERROR ** could not set baudrate of device %s\n", error("[comport] ** ERROR ** could not set baudrate of device %s\n",
#ifdef _WIN32
&x->serial_device->s_name[4]);
#else
x->serial_device->s_name); x->serial_device->s_name);
#endif
} }
else if(x->verbose > 0) else if(x->verbose > 0)
post("set baudrate of %s to %f\n",x->serial_device->s_name,x->baud); post("set baudrate of %s to %f\n",
#ifdef _WIN32
&x->serial_device->s_name[4], x->baud);
#else
x->serial_device->s_name, x->baud);
#endif
} }
static void comport_bits(t_comport *x,t_floatarg f) static void comport_bits(t_comport *x,t_floatarg f)
@ -1138,11 +1191,20 @@ static void comport_bits(t_comport *x,t_floatarg f)
if(set_serial(x) == 0) if(set_serial(x) == 0)
{ {
error("[comport] ** ERROR ** could not set bits of device %s\n", error("[comport] ** ERROR ** could not set bits of device %s\n",
#ifdef _WIN32
&x->serial_device->s_name[4]);
#else
x->serial_device->s_name); x->serial_device->s_name);
#endif
return; return;
} }
else if(x->verbose > 0) else if(x->verbose > 0)
post("set bits of %s to %f\n",x->serial_device->s_name,f); post("set bits of %s to %f\n",
#ifdef _WIN32
&x->serial_device->s_name[4], f);
#else
x->serial_device->s_name, f);
#endif
x->data_bits = f; x->data_bits = f;
} }
@ -1156,11 +1218,20 @@ static void comport_parity(t_comport *x,t_floatarg f)
if(set_serial(x) == 0) if(set_serial(x) == 0)
{ {
error("[comport] ** ERROR ** could not set extra paritybit of device %s\n", error("[comport] ** ERROR ** could not set extra paritybit of device %s\n",
#ifdef _WIN32
&x->serial_device->s_name[4]);
#else
x->serial_device->s_name); x->serial_device->s_name);
#endif
return; return;
} }
else if(x->verbose > 0) else if(x->verbose > 0)
post("[comport] set extra paritybit of %s to %f\n",x->serial_device->s_name,f); post("[comport] set extra paritybit of %s to %f\n",
#ifdef _WIN32
&x->serial_device->s_name[4], f);
#else
x->serial_device->s_name, f);
#endif
x->parity_bit = f; x->parity_bit = f;
} }
@ -1173,11 +1244,20 @@ static void comport_stopbit(t_comport *x,t_floatarg f)
if(set_serial(x) == 0) if(set_serial(x) == 0)
{ {
error("[comport] ** ERROR ** could not set extra stopbit of device %s\n", error("[comport] ** ERROR ** could not set extra stopbit of device %s\n",
x->serial_device->s_name); #ifdef _WIN32
&x->serial_device->s_name[4]);
#else
x->serial_device->s_name);
#endif
return; return;
} }
else if(x->verbose > 0) else if(x->verbose > 0)
post("[comport] set extra stopbit of %s to %f\n",x->serial_device->s_name,f); post("[comport] set extra stopbit of %s to %f\n",
#ifdef _WIN32
&x->serial_device->s_name[4], f);
#else
x->serial_device->s_name, f);
#endif
x->stop_bits = f; x->stop_bits = f;
} }
@ -1190,11 +1270,20 @@ static void comport_rtscts(t_comport *x,t_floatarg f)
if(set_serial(x) == 0) if(set_serial(x) == 0)
{ {
error("[comport] ** ERROR ** could not set rts_cts of device %s\n", error("[comport] ** ERROR ** could not set rts_cts of device %s\n",
#ifdef _WIN32
&x->serial_device->s_name[4]);
#else
x->serial_device->s_name); x->serial_device->s_name);
#endif
return; return;
} }
else if(x->verbose > 0) else if(x->verbose > 0)
post("[comport] set rts-cts of %s to %f\n",x->serial_device->s_name,f); post("[comport] set rts-cts of %s to %f\n",
#ifdef _WIN32
&x->serial_device->s_name[4], f);
#else
x->serial_device->s_name, f);
#endif
x->ctsrts = f; x->ctsrts = f;
} }
@ -1207,10 +1296,19 @@ static void comport_dtr(t_comport *x,t_floatarg f)
if(f < 0) if(f < 0)
{ {
error("[comport] ** ERROR ** could not set dtr of device %s\n", error("[comport] ** ERROR ** could not set dtr of device %s\n",
#ifdef _WIN32
&x->serial_device->s_name[4]);
#else
x->serial_device->s_name); x->serial_device->s_name);
#endif
} }
else if(x->verbose > 0) else if(x->verbose > 0)
post("[comport] set dtr of %s to %f\n",x->serial_device->s_name,f); post("[comport] set dtr of %s to %f\n",
#ifdef _WIN32
&x->serial_device->s_name[4], f);
#else
x->serial_device->s_name, f);
#endif
} }
static void comport_rts(t_comport *x,t_floatarg f) static void comport_rts(t_comport *x,t_floatarg f)
@ -1222,10 +1320,19 @@ static void comport_rts(t_comport *x,t_floatarg f)
if(f < 0) if(f < 0)
{ {
error("[comport] ** ERROR ** could not set rts of device %s\n", error("[comport] ** ERROR ** could not set rts of device %s\n",
#ifdef _WIN32
&x->serial_device->s_name[4]);
#else
x->serial_device->s_name); x->serial_device->s_name);
#endif
} }
else if(x->verbose > 0) else if(x->verbose > 0)
post("[comport] set rts of %s to %f\n",x->serial_device->s_name,f); post("[comport] set rts of %s to %f\n",
#ifdef _WIN32
&x->serial_device->s_name[4], f);
#else
x->serial_device->s_name, f);
#endif
} }
static void comport_xonxoff(t_comport *x,t_floatarg f) static void comport_xonxoff(t_comport *x,t_floatarg f)
@ -1237,11 +1344,20 @@ static void comport_xonxoff(t_comport *x,t_floatarg f)
if(set_serial(x) == 0) if(set_serial(x) == 0)
{ {
error("[comport] ** ERROR ** could not set xonxoff of device %s\n", error("[comport] ** ERROR ** could not set xonxoff of device %s\n",
x->serial_device->s_name); #ifdef _WIN32
&x->serial_device->s_name[4]);
#else
x->serial_device->s_name);
#endif
return; return;
} }
else if(x->verbose > 0) else if(x->verbose > 0)
post("[comport] set xonxoff of %s to %f\n",x->serial_device->s_name,f); post("[comport] set xonxoff of %s to %f\n",
#ifdef _WIN32
&x->serial_device->s_name[4], f);
#else
x->serial_device->s_name, f);
#endif
x->xonxoff = f; x->xonxoff = f;
} }
@ -1272,6 +1388,9 @@ static void comport_open(t_comport *x, t_floatarg f)
static void comport_devicename(t_comport *x, t_symbol *s) static void comport_devicename(t_comport *x, t_symbol *s)
{ {
x->serial_device = s; x->serial_device = s;
if(x->comhandle != INVALID_HANDLE_VALUE)
comport_close(x);
x->comhandle = open_serial(USE_DEVICENAME,x); x->comhandle = open_serial(USE_DEVICENAME,x);
clock_delay(x->x_clock, x->x_deltime); clock_delay(x->x_clock, x->x_deltime);
} }
@ -1302,10 +1421,9 @@ static void comport_enum(t_comport *x)
char device_name[10]; char device_name[10];
unsigned int i; unsigned int i;
DWORD dw; DWORD dw;
for(i = 1; i < COMPORT_MAX; i++) for(i = 1; i < COMPORT_MAX; i++)
{ {
sprintf(device_name, "\\\\.\\COM%d", i);/* the recommended way to specify COMs above 9 */ sprintf(device_name, "%s%d", x->serial_device_prefix, i);
fd = CreateFile( device_name, fd = CreateFile( device_name,
GENERIC_READ | GENERIC_WRITE, GENERIC_READ | GENERIC_WRITE,
0, 0,
@ -1328,19 +1446,19 @@ static void comport_enum(t_comport *x)
struct termios test; struct termios test;
/* first look for registered devices in the filesystem */ /* first look for registered devices in the filesystem */
switch( glob( x->serial_device_name, 0, NULL, &glob_buffer ) ) switch( glob( x->serial_device_prefix, 0, NULL, &glob_buffer ) )
{ {
case GLOB_NOSPACE: case GLOB_NOSPACE:
error("[comport] out of memory for \"%s\"",x->serial_device_name); error("[comport] out of memory for \"%s\"",x->serial_device_prefix);
break; break;
# ifdef GLOB_ABORTED # ifdef GLOB_ABORTED
case GLOB_ABORTED: case GLOB_ABORTED:
error("[comport] aborted \"%s\"",x->serial_device_name); error("[comport] aborted \"%s\"",x->serial_device_prefix);
break; break;
# endif /* GLOB_ABORTED */ # endif /* GLOB_ABORTED */
# ifdef GLOB_NOMATCH # ifdef GLOB_NOMATCH
case GLOB_NOMATCH: case GLOB_NOMATCH:
error("[comport] no serial devices found for \"%s\"",x->serial_device_name); error("[comport] no serial devices found for \"%s\"",x->serial_device_prefix);
break; break;
# endif /* GLOB_NOMATCH */ # endif /* GLOB_NOMATCH */
} }
@ -1361,7 +1479,7 @@ static void comport_enum(t_comport *x)
static void comport_ports(t_comport *x) static void comport_ports(t_comport *x)
{ /* the same as comport_enum except outputs list of available ports on status outlet */ { /* the same as comport_enum except outputs list of available ports on status outlet */
unsigned int i, j = 0; unsigned int i, j = 0;
int ports[COMPORT_MAX]; /* we don't know how many there might be but 99 is probably safe */ t_atom output_atom[2];
#ifdef _WIN32 #ifdef _WIN32
HANDLE fd; HANDLE fd;
char device_name[10]; char device_name[10];
@ -1369,7 +1487,7 @@ static void comport_ports(t_comport *x)
for(i = 1; i < COMPORT_MAX; i++) for(i = 1; i < COMPORT_MAX; i++)
{ {
sprintf(device_name, "\\\\.\\COM%d", i);/* the recommended way to specify COMs above 9 */ sprintf(device_name, "%s%d", x->serial_device_prefix, i);
fd = CreateFile( device_name, fd = CreateFile( device_name,
GENERIC_READ | GENERIC_WRITE, GENERIC_READ | GENERIC_WRITE,
0, 0,
@ -1382,7 +1500,12 @@ static void comport_ports(t_comport *x)
dw = GetLastError(); dw = GetLastError();
else else
CloseHandle(fd); CloseHandle(fd);
if ((dw == 0)||(dw == ERROR_ACCESS_DENIED)) ports[j++]=i; if ((dw == 0)||(dw == ERROR_ACCESS_DENIED))
{ /* output index and name as a list */
SETFLOAT(&output_atom[0], i);
SETSYMBOL(&output_atom[1], gensym(&device_name[4]));/* strip the slashes and dot */
outlet_anything( x->x_status_outlet, gensym("ports"), 2, output_atom);
}
} }
#else #else
glob_t glob_buffer; glob_t glob_buffer;
@ -1390,19 +1513,19 @@ static void comport_ports(t_comport *x)
struct termios test; struct termios test;
/* first look for registered devices in the filesystem */ /* first look for registered devices in the filesystem */
switch( glob( x->serial_device_name, 0, NULL, &glob_buffer ) ) switch( glob( x->serial_device_prefix, 0, NULL, &glob_buffer ) )
{ {
case GLOB_NOSPACE: case GLOB_NOSPACE:
error("[comport] out of memory for \"%s\"",x->serial_device_name); error("[comport] out of memory for \"%s\"",x->serial_device_prefix);
break; break;
# ifdef GLOB_ABORTED # ifdef GLOB_ABORTED
case GLOB_ABORTED: case GLOB_ABORTED:
error("[comport] aborted \"%s\"",x->serial_device_name); error("[comport] aborted \"%s\"",x->serial_device_prefix);
break; break;
# endif /* GLOB_ABORTED */ # endif /* GLOB_ABORTED */
# ifdef GLOB_NOMATCH # ifdef GLOB_NOMATCH
case GLOB_NOMATCH: case GLOB_NOMATCH:
error("[comport] no serial devices found for \"%s\"",x->serial_device_name); error("[comport] no serial devices found for \"%s\"",x->serial_device_prefix);
break; break;
# endif /* GLOB_NOMATCH */ # endif /* GLOB_NOMATCH */
} }
@ -1413,18 +1536,15 @@ static void comport_ports(t_comport *x)
{ {
/* now see if it has attributes */ /* now see if it has attributes */
if ((tcgetattr(fd, &test)) != -1) if ((tcgetattr(fd, &test)) != -1)
ports[j++] = i;/* this one really exists */ { /* output index and name as a list */
SETFLOAT(&output_atom[0], i);
SETSYMBOL(&output_atom[1], gensym(glob_buffer.gl_pathv[i]));
outlet_anything( x->x_status_outlet, gensym("ports"), 2, output_atom);
}
close (fd); close (fd);
} }
} }
#endif /* _WIN32 */ #endif /* _WIN32 */
if (j)
{
t_atom *output_atom = getbytes(j*sizeof(t_atom));
for (i = 0; i < j; ++i) SETFLOAT(&output_atom[i], ports[i]);
outlet_anything( x->x_status_outlet, gensym("ports"), j, output_atom);
freebytes(output_atom, j*sizeof(t_atom));
}
} }
static void comport_output_print(t_comport *x) static void comport_output_print(t_comport *x)
@ -1526,7 +1646,11 @@ static void comport_help(t_comport *x)
post("[comport] serial port %d (baud %f):", x->comport, x->baud); post("[comport] serial port %d (baud %f):", x->comport, x->baud);
if(x->comport >= 0 && x->comport < COMPORT_MAX) if(x->comport >= 0 && x->comport < COMPORT_MAX)
{ {
post("\tdevicename: %s",x->serial_device->s_name); #ifdef WIN32
post("\tdevicename: %s", &x->serial_device->s_name[4]);
#else
post("\tdevicename: %s", x->serial_device->s_name);
#endif
} }
post(" Methods:"); post(" Methods:");