From: <ean...@us...> - 2012-08-29 23:18:48
|
Revision: 10931 http://octave.svn.sourceforge.net/octave/?rev=10931&view=rev Author: eandrius Date: 2012-08-29 23:18:40 +0000 (Wed, 29 Aug 2012) Log Message: ----------- serial: srl_write now also accepts uint8 array as data argument Modified Paths: -------------- trunk/octave-forge/main/serial/src/serial.cc trunk/octave-forge/main/serial/src/serial.h trunk/octave-forge/main/serial/src/srl_flush.cc trunk/octave-forge/main/serial/src/srl_write.cc Modified: trunk/octave-forge/main/serial/src/serial.cc =================================================================== --- trunk/octave-forge/main/serial/src/serial.cc 2012-08-29 21:57:44 UTC (rev 10930) +++ trunk/octave-forge/main/serial/src/serial.cc 2012-08-29 23:18:40 UTC (rev 10931) @@ -179,5 +179,7 @@ retval->srl_bytesize(bytesize); retval->srl_stopbits(stopbits); + retval->srl_flush(); + return octave_value(retval); } Modified: trunk/octave-forge/main/serial/src/serial.h =================================================================== --- trunk/octave-forge/main/serial/src/serial.h 2012-08-29 21:57:44 UTC (rev 10930) +++ trunk/octave-forge/main/serial/src/serial.h 2012-08-29 23:18:40 UTC (rev 10931) @@ -38,10 +38,12 @@ int srl_get_fd(); int srl_write(string); + int srl_write(unsigned char*, int); int srl_read(char *, unsigned int); int srl_close(); int srl_flush(unsigned short); + int srl_flush(); int srl_timeout(short); int srl_baudrate(unsigned int); Modified: trunk/octave-forge/main/serial/src/srl_flush.cc =================================================================== --- trunk/octave-forge/main/serial/src/srl_flush.cc 2012-08-29 21:57:44 UTC (rev 10930) +++ trunk/octave-forge/main/serial/src/srl_flush.cc 2012-08-29 23:18:40 UTC (rev 10931) @@ -88,4 +88,9 @@ } return ::tcflush(this->srl_get_fd(), flag); +} + +int octave_serial::srl_flush() +{ + return srl_flush(2); } \ No newline at end of file Modified: trunk/octave-forge/main/serial/src/srl_write.cc =================================================================== --- trunk/octave-forge/main/serial/src/srl_write.cc 2012-08-29 21:57:44 UTC (rev 10930) +++ trunk/octave-forge/main/serial/src/srl_write.cc 2012-08-29 23:18:40 UTC (rev 10931) @@ -35,29 +35,53 @@ #include "serial.h" -// TODO: implement uint8 array as input type // PKG_ADD: autoload ("srl_write", "serial.oct"); DEFUN_DLD (srl_write, args, nargout, "Hello World Help String") { - if (args.length() != 2 || - args(0).type_id() != octave_serial::static_type_id() || - !args(1).is_string()) + if (args.length() != 2 || args(0).type_id() != octave_serial::static_type_id()) { print_usage(); return octave_value(-1); } - + octave_serial* serial = NULL; + int retval; const octave_base_value& rep = args(0).get_rep(); serial = &((octave_serial &)rep); - serial->srl_write(args(1).string_value()); + if (args(1).is_string()) // String + { + retval = serial->srl_write(args(1).string_value()); + } + else if (args(1).byte_size() == args(1).numel()) // uint8_t + { + NDArray data = args(1).array_value(); + unsigned char* buf = new unsigned char[data.length()]; + + // memcpy? + for (int i = 0; i < data.length(); i++) + buf[i] = (unsigned char)data(i); + + retval = serial->srl_write(buf, data.length()); + + delete[] buf; + } + else + { + print_usage(); + return octave_value(-1); + } - return octave_value(); + return octave_value(retval); } int octave_serial::srl_write(string str) { return ::write(srl_get_fd(), str.c_str(), str.length()); +} + +int octave_serial::srl_write(unsigned char *buf, int len) +{ + return ::write(srl_get_fd(), buf, len); } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |