Update of /cvsroot/pure-data/externals/iem/comport/comport
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6744
Modified Files:
comport.c
Log Message:
added devices message to enumerate available devices
info message outputs realtime status
Index: comport.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/comport/comport/comport.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -C2 -d -r1.22 -r1.23
*** comport.c 24 Sep 2006 21:18:43 -0000 1.22
--- comport.c 26 Sep 2006 04:12:11 -0000 1.23
***************
*** 13,16 ****
--- 13,17 ----
MP 20060824 added clock_delay call in comport_devicename
MP 20060924 added comport_enum to list available ports in Windows
+ MP 20060925 add devices message to enumerate actual devices, info just outputs current port state
*/
***************
*** 195,204 ****
static int set_serial(t_comport *x);
static int write_serial(t_comport *x, unsigned char serial_byte);
! int comport_get_dsr(t_comport *x);
! int comport_get_cts(t_comport *x);
#ifdef _WIN32
static HANDLE open_serial(unsigned int com_num, t_comport *x);
static HANDLE close_serial(t_comport *x);
- static void comport_enum(void);
#else
static int open_serial(unsigned int com_num, t_comport *x);
--- 196,204 ----
static int set_serial(t_comport *x);
static int write_serial(t_comport *x, unsigned char serial_byte);
! static int comport_get_dsr(t_comport *x);
! static int comport_get_cts(t_comport *x);
#ifdef _WIN32
static HANDLE open_serial(unsigned int com_num, t_comport *x);
static HANDLE close_serial(t_comport *x);
#else
static int open_serial(unsigned int com_num, t_comport *x);
***************
*** 232,236 ****
--- 232,238 ----
static void comport_output_rtscts(t_comport *x);
static void comport_output_xonxoff(t_comport *x);
+ static void comport_enum(t_comport *x);
static void comport_info(t_comport *x);
+ static void comport_devices(t_comport *x);
static void comport_verbose(t_comport *x, t_floatarg f);
static void comport_help(t_comport *x);
***************
*** 538,542 ****
}
! int comport_get_dsr(t_comport *x)
{
short dsr_state = 0;
--- 540,544 ----
}
! static int comport_get_dsr(t_comport *x)
{
short dsr_state = 0;
***************
*** 848,855 ****
}
! int comport_get_dsr(t_comport *x)
{
short dsr_state = 0;
!
if (x->comhandle != INVALID_HANDLE_VALUE)
{
--- 850,857 ----
}
! static int comport_get_dsr(t_comport *x)
{
short dsr_state = 0;
!
if (x->comhandle != INVALID_HANDLE_VALUE)
{
***************
*** 865,869 ****
{
short cts_state = 0;
!
if (x->comhandle != INVALID_HANDLE_VALUE)
{
--- 867,871 ----
{
short cts_state = 0;
!
if (x->comhandle != INVALID_HANDLE_VALUE)
{
***************
*** 1240,1246 ****
}
! #ifdef _WIN32
! static void comport_enum(void)
{
HANDLE fd;
char device_name[10];
--- 1242,1248 ----
}
! static void comport_enum(t_comport *x)
{
+ #ifdef _WIN32
HANDLE fd;
char device_name[10];
***************
*** 1266,1304 ****
else if (dw == ERROR_ACCESS_DENIED)post("\t%d - COM%d (in use)", i, i);
}
! }
! #endif // WIN32
!
! static void comport_output_print(t_comport *x)
! {
! unsigned int i;
!
! post("[comport]: available serial ports:");
! #ifdef _WIN32
! comport_enum();
! #else
glob_t glob_buffer;
! switch( glob( x->serial_device_name, 0, NULL, &glob_buffer ) )
! {
! case GLOB_NOSPACE:
! error("[comport] out of memory for \"%s\"",x->serial_device_name);
! break;
# ifdef GLOB_ABORTED
! case GLOB_ABORTED:
! error("[comport] aborted \"%s\"",x->serial_device_name);
! break;
# endif /* GLOB_ABORTED */
# ifdef GLOB_NOMATCH
! case GLOB_NOMATCH:
! error("[comport] no serial devices found for \"%s\"",x->serial_device_name);
! break;
# endif /* GLOB_NOMATCH */
! }
! for(i=0; i<glob_buffer.gl_pathc; i++)
! {
! post("\t%d\t%s", i, glob_buffer.gl_pathv[i]);
! }
#endif /* _WIN32 */
}
static void comport_output_status(t_comport *x, t_symbol *selector, t_float output_value)
--- 1268,1314 ----
else if (dw == ERROR_ACCESS_DENIED)post("\t%d - COM%d (in use)", i, i);
}
! #else
! unsigned int i;
glob_t glob_buffer;
! int fd;
! struct termios test;
!
! /* first look for registered devices in the filesystem */
! switch( glob( x->serial_device_name, 0, NULL, &glob_buffer ) )
! {
! case GLOB_NOSPACE:
! error("[comport] out of memory for \"%s\"",x->serial_device_name);
! break;
# ifdef GLOB_ABORTED
! case GLOB_ABORTED:
! error("[comport] aborted \"%s\"",x->serial_device_name);
! break;
# endif /* GLOB_ABORTED */
# ifdef GLOB_NOMATCH
! case GLOB_NOMATCH:
! error("[comport] no serial devices found for \"%s\"",x->serial_device_name);
! break;
# endif /* GLOB_NOMATCH */
! }
! for(i=0; i<glob_buffer.gl_pathc; i++)
! {
! /* now try to open the device */
! if((fd = open(glob_buffer.gl_pathv[i], OPENPARAMS)) != INVALID_HANDLE_VALUE)
! {
! /* now see if it has attributes */
! if ((tcgetattr(fd, &test)) != -1)
! post("\t%d\t%s", i, glob_buffer.gl_pathv[i]);// this one really exists
! close (fd);
! }
! }
#endif /* _WIN32 */
}
+ static void comport_output_print(t_comport *x)
+ {
+ post("[comport]: available serial ports:");
+ comport_enum(x);
+ }
+
static void comport_output_status(t_comport *x, t_symbol *selector, t_float output_value)
***************
*** 1355,1358 ****
--- 1365,1373 ----
}
+ static void comport_devices(t_comport *x)
+ {
+ comport_output_print(x);
+ }
+
static void comport_info(t_comport *x)
{
***************
*** 1366,1370 ****
comport_output_rtscts(x);
comport_output_xonxoff(x);
- comport_output_print(x);
}
--- 1381,1384 ----
***************
*** 1395,1403 ****
" close ... close device\n"
" open <num> ... open device number num\n"
! " devicename <d> ... set device name to s (eg. /dev/ttyS8)\n"
" print <list> ... print list of atoms on serial\n"
" pollintervall <t> ... set poll interval to t ticks\n"
" verbose <level> ... for debug set verbosity to level\n"
" info ... output info on status outlet\n"
" help ... post this help");
}
--- 1409,1418 ----
" close ... close device\n"
" open <num> ... open device number num\n"
! " devicename <d> ... set device name to d (eg. /dev/ttyS8)\n"
" print <list> ... print list of atoms on serial\n"
" pollintervall <t> ... set poll interval to t ticks\n"
" verbose <level> ... for debug set verbosity to level\n"
" info ... output info on status outlet\n"
+ " devices ... post list of available devices\n"
" help ... post this help");
}
***************
*** 1432,1435 ****
--- 1447,1451 ----
class_addmethod(comport_class, (t_method)comport_help, gensym("help"), 0);
class_addmethod(comport_class, (t_method)comport_info, gensym("info"), 0);
+ class_addmethod(comport_class, (t_method)comport_devices, gensym("devices"), 0);
#ifndef _WIN32