unsigned int rs232_simple_test(void) { unsigned int try = 0; unsigned int bytes = 0; unsigned char data[1]; unsigned int ret = 0; struct rs232_port_t *p = NULL; p = rs232_init(); if (p == NULL) return 1; #ifdef WIN32 rs232_set_device(p, "COM1"); #else rs232_set_device(p, "/dev/ttyS1"); #endif ret = rs232_open(p); if (ret) { rs232_end(p); return err(ret); } rs232_set_baud(p, RS232_BAUD_115200); printf("[*] port settings: %s\n", rs232_to_string(p)); rs232_flush(p); while (try++ < 10) { printf("%02d. [*] read: ", try); data[0] = 0x00; ret = rs232_read_timeout(p, data, 1, &bytes, 1000); if (ret) err(ret); else printf("0x%02x len: %d\n", data[0], bytes); data[0] = 0x05; bytes = 0; printf("%02d. [*] write: ", try); ret = rs232_write_timeout(p, data, 1, &bytes, 1000); if (ret) err(ret); else printf("len: %d\n", bytes); } rs232_end(p); return 0; }
QString QRS232::readTimeout(int max, int timeout) { unsigned int len = 0; unsigned char *buf = (unsigned char *)malloc(max+1); if (buf == NULL) return QString(); memset(buf, 0, max+1); unsigned int ret = rs232_read_timeout(m_port, buf, max, &len, timeout); if ((ret == RS232_ERR_NOERROR) && (len > 0)) { QString data = QString::fromLatin1((const char *)buf, len); free(buf); return data; } free(buf); return QString(); }
/* * error, data, read_len = port:read(max_read_len [[, timeout_ms], forced]) * * if forced > 0 then read() blocks until 'timeout_ms' or there's 'max_read_len' * bytes available */ static int lua_port_read(lua_State *L) { int ret = 0; int argc = 0; int forced = 0; unsigned int timeout = 0; unsigned int len = 0; unsigned int bytes_read = 0; unsigned char *data = NULL; struct rs232_port_t *p = NULL; p = *(struct rs232_port_t**) luaL_checkudata(L, 1, MODULE_NAMESPACE); lua_remove(L, 1); if (p == NULL || !rs232_port_open(p)) { lua_pushinteger(L, RS232_ERR_PORT_CLOSED); lua_pushnil(L); lua_pushinteger(L, 0); return 3; } argc = lua_gettop(L); switch (argc) { case 1: len = (unsigned int) luaL_checkinteger(L, 1); data = (unsigned char*) malloc(len * sizeof(unsigned char *)); memset(data, 0, len); ret = rs232_read(p, data, len, &bytes_read); break; case 2: case 3: len = (unsigned int) luaL_checknumber(L, 1); data = (unsigned char*) malloc(len * sizeof(unsigned char *)); memset(data, 0, len); timeout = (unsigned int) luaL_checknumber(L, 2); forced = luaL_optint(L, 3, 0); if (forced > 0) ret = rs232_read_timeout_forced(p, data, len, &bytes_read, timeout); else ret = rs232_read_timeout(p, data, len, &bytes_read, timeout); break; default: lua_pushinteger(L, RS232_ERR_UNKNOWN); lua_pushnil(L); lua_pushinteger(L, 0); return 3; } DBG("ret=%d hex='%s' bytes_read=%d\n", ret, rs232_hex_dump(data, bytes_read), bytes_read); lua_pushinteger(L, ret); if (bytes_read > 0) lua_pushlstring(L, (char *) data, bytes_read); else lua_pushnil(L); if (data) free(data); lua_pushinteger(L, bytes_read); return 3; }