Explorar o código

Thanks to the original author of librs232 "Petr Štetiar" now all tests pass on linux.

mingodad %!s(int64=13) %!d(string=hai) anos
pai
achega
796f64b4ac
Modificáronse 3 ficheiros con 43 adicións e 39 borrados
  1. 15 13
      SquiLu-ext/sq_rs232.c
  2. 26 25
      SquiLu/samples/test-rs232.nut
  3. 2 1
      SquiLu/samples/test-serial.nut

+ 15 - 13
SquiLu-ext/sq_rs232.c

@@ -98,7 +98,6 @@ static SQRESULT sq_rs232_open(HSQUIRRELVM v){
 static SQRESULT sq_rs232_close(HSQUIRRELVM v){
     SQ_FUNC_VARS_NO_TOP(v);
 	GET_sq_rs232_INSTANCE(v, 1);
-	if(self == NULL) return sq_throwerror(v, _SC("rs232 port already closed"));
 	_rc_ = sq_rs232_release_hook(self, 0, v);
 	sq_setinstanceup(v, 1, 0); //next calls will fail with "rs232 port already closed"
 	sq_pushinteger(v, _rc_);
@@ -108,7 +107,6 @@ static SQRESULT sq_rs232_close(HSQUIRRELVM v){
 static SQRESULT sq_rs232_read(HSQUIRRELVM v){
     SQ_FUNC_VARS(v);
 	GET_sq_rs232_INSTANCE(v, 1);
-	if(self == NULL) return sq_throwerror(v, _SC("rs232 port already closed"));
 	SQ_GET_INTEGER(v, 2, len);
 	unsigned int bytes_read = 0;
 	SQChar *data = NULL;
@@ -143,7 +141,6 @@ static SQRESULT sq_rs232_read(HSQUIRRELVM v){
 static SQRESULT sq_rs232_write(HSQUIRRELVM v){
     SQ_FUNC_VARS(v);
 	GET_sq_rs232_INSTANCE(v, 1);
-	if(self == NULL) return sq_throwerror(v, _SC("rs232 port already closed"));
     SQ_GET_STRING(v, 2, data);
 	unsigned int wlen = 0;
 
@@ -169,7 +166,6 @@ static SQRESULT sq_rs232_write(HSQUIRRELVM v){
 static SQRESULT sq_rs232_flush(HSQUIRRELVM v){
     SQ_FUNC_VARS_NO_TOP(v);
 	GET_sq_rs232_INSTANCE(v, 1);
-	if(self == NULL) return sq_throwerror(v, _SC("rs232 port already closed"));
 	sq_pushinteger(v, rs232_flush(self));
 	return 1;
 }
@@ -177,7 +173,6 @@ static SQRESULT sq_rs232_flush(HSQUIRRELVM v){
 static SQRESULT sq_rs232_device(HSQUIRRELVM v){
     SQ_FUNC_VARS_NO_TOP(v);
 	GET_sq_rs232_INSTANCE(v, 1);
-	if(self == NULL) return sq_throwerror(v, _SC("rs232 port already closed"));
 	const char *ret = rs232_get_device(self);
 	if (ret == NULL) sq_pushnull(v);
 	else sq_pushstring(v, ret, -1);
@@ -187,7 +182,6 @@ static SQRESULT sq_rs232_device(HSQUIRRELVM v){
 static SQRESULT sq_rs232_fd(HSQUIRRELVM v){
     SQ_FUNC_VARS_NO_TOP(v);
 	GET_sq_rs232_INSTANCE(v, 1);
-	if(self == NULL) return sq_throwerror(v, _SC("rs232 port already closed"));
 	sq_pushinteger(v, rs232_fd(self));
 	return 1;
 }
@@ -199,6 +193,13 @@ static SQRESULT sq_rs232_strerror(HSQUIRRELVM v){
 	return 1;
 }
 
+static SQRESULT sq_rs232__tostring(HSQUIRRELVM v){
+    SQ_FUNC_VARS_NO_TOP(v);
+    GET_sq_rs232_INSTANCE(v, 1);
+    sq_pushstring(v, rs232_to_string(self), -1);
+	return 1;
+}
+
 #define FN_GET_SET_PORT(type, sufix) \
 	static SQRESULT sq_rs232_##type##sufix(HSQUIRRELVM v) \
 	{ \
@@ -247,27 +248,28 @@ static SQRegFunction rs232_methods[] =
     _DECL_FUNC(device,1,_SC("x")),
     _DECL_FUNC(fd,1,_SC("x")),
     _DECL_FUNC(strerror,2,_SC(".i")),
+    _DECL_FUNC(_tostring,1,_SC("x")),
 	/* baud */
     _DECL_FUNC(baud_rate,-1,_SC("xi")),
-    _DECL_FUNC(baud_rate_tostring,2,_SC(".i")),
+    _DECL_FUNC(baud_rate_tostring,-1,_SC(".i")),
 	/* data */
     _DECL_FUNC(data_bits,-1,_SC("xi")),
-    _DECL_FUNC(data_bits_tostring,2,_SC(".i")),
+    _DECL_FUNC(data_bits_tostring,-1,_SC(".i")),
 	/* stop */
     _DECL_FUNC(stop_bits,-1,_SC("xi")),
-    _DECL_FUNC(stop_bits_tostring,2,_SC(".i")),
+    _DECL_FUNC(stop_bits_tostring,-1,_SC(".i")),
 	/* parity */
     _DECL_FUNC(parity,-1,_SC("xi")),
-    _DECL_FUNC(parity_tostring,2,_SC(".i")),
+    _DECL_FUNC(parity_tostring,-1,_SC(".i")),
 	/* flow */
     _DECL_FUNC(flow_control,-1,_SC("xi")),
-    _DECL_FUNC(flow_control_tostring,2,_SC(".i")),
+    _DECL_FUNC(flow_control_tostring,-1,_SC(".i")),
 	/* dtr */
     _DECL_FUNC(dtr,-1,_SC("xi")),
-    _DECL_FUNC(dtr_tostring,2,_SC(".i")),
+    _DECL_FUNC(dtr_tostring,-1,_SC(".i")),
 	/* rts */
     _DECL_FUNC(rts,-1,_SC("xi")),
-    _DECL_FUNC(rts_tostring,2,_SC(".i")),
+    _DECL_FUNC(rts_tostring,-1,_SC(".i")),
     {0,0}
 };
 

+ 26 - 25
SquiLu/samples/test-rs232.nut

@@ -1,8 +1,9 @@
-local __WIN32__ = os.getenv("WINDIR") != null
+__WIN32__ <- os.getenv("WINDIR") != null
 
 //local port_name = __WIN32__ ?  "COM1" : "/dev/ttyUSB0";
-local port_name = __WIN32__ ?  "COM1" : "/dev/ttyS0";
-local platform = __WIN32__ ? "win32" : "linux";
+//local port_name = __WIN32__ ?  "COM1" : "/dev/ttyS0";
+port_name <- __WIN32__ ?  "COM1" : "/dev/ttyACM0";
+platform <- __WIN32__ ? "win32" : "linux";
 
 function time_stamp(){
 	local t = os.date("*t");
@@ -36,7 +37,7 @@ function format_test(text, err){
 	local si = get_last_stackinfo();
 	local line_err = si.line;
 	
-	foreach( line in text.split("\n")) {
+	foreach( line in text.split('\n')) {
 		if (line_number == line_err.tointeger())
 			ret += format("-->   %d. %s (%s)\n", line_number, line, err);
 		else
@@ -269,44 +270,44 @@ foreach(baud in baud_rates) {
 				local e = p.flush();
 				assert(e == SqRs232.RS232_ERR_NOERROR);
 				 
-				e, d, l = p.read(1, timeout);
-				assert(e == SqRs232.RS232_ERR_TIMEOUT);
-				assert(d == nil);
-				assert(l == 0);
+				local data = p.read(1, timeout);
+				if(type(data) == "integer") assert(data == SqRs232.RS232_ERR_TIMEOUT);
+				//assert(d == nil);
+				//assert(l == 0);
 				 
 				// not implemented yet...
 				if (platform != "win32"){
-					local forced = 1;
-					e, d, l = p.read(1, timeout, forced)
-					assert(e == SqRs232.RS232_ERR_TIMEOUT)
-					assert(d == nil)
-					assert(l == 0)
+					local forced = true;
+					data = p.read(1, timeout, forced)
+					if(type(data) == "integer") assert(data == SqRs232.RS232_ERR_TIMEOUT)
+					//assert(d == nil)
+					//assert(l == 0)
 				}
 				 
-				local forced = 0;
-				e, d, l = p.read(1, timeout, forced);
-				assert(e == SqRs232.RS232_ERR_TIMEOUT)
-				assert(d == nil)
-				assert(l == 0)
+				local forced = false;
+				data = p.read(1, timeout, forced);
+				if(type(data) == "integer") assert(data == SqRs232.RS232_ERR_TIMEOUT)
+				//assert(d == nil)
+				//assert(l == 0)
 				 
-				e, l = p.write("ynezz")
-				assert(e == SqRs232.RS232_ERR_NOERROR)
+				e = p.write("ynezz")
+				if(e < 0) assert(e == SqRs232.RS232_ERR_NOERROR)
 				 
 				// althought the write is successful it returns 0 bytes written
 				// in some baud/data/stop/flow combinations...
 				 
-				if (platform != "win32") assert(l == 5);
+				if (platform != "win32") assert(e == 5);
 				 
-				e, l = p.write("ynezz", timeout)
-				assert(e == SqRs232.RS232_ERR_NOERROR);
+				e = p.write("ynezz", timeout)
+				if(e < 0) assert(e == SqRs232.RS232_ERR_NOERROR);
 				 
 				// althought the write is successful it returns 0 bytes written
 				// in some baud/data/stop/flow combinations...
 				 
-				if (platform != "win32") assert(l == 5);
+				if (platform != "win32") assert(e == 5);
 				 
 				local text = p.tostring();
-				assert(text != niull)
+				assert(text != null)
 				print("tostring(p): " + text);
 				 
 				assert(p.close() == SqRs232.RS232_ERR_NOERROR);

+ 2 - 1
SquiLu/samples/test-serial.nut

@@ -1,3 +1,4 @@
 local p = SqRs232();
-p.open("/dev/ttyS0");
+//p.open("/dev/ttyS0");
+p.open("/dev/ttyACM0");
 p.close();