1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 <2017> 2018 2019 2020 2021 2022 2023 2024 | Index | 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 <2017> 2018 2019 2020 2021 2022 2023 2024 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: string fanout or stringout after conditional check? |
From: | Jeong Han Lee <[email protected]> |
To: | Eric Norum <[email protected]> |
Cc: | [email protected] |
Date: | Thu, 18 May 2017 17:22:45 +0200 |
Hi Eric, On 05/18/2017 05:08 PM, Eric Norum wrote:
To guard against buffer overrun issues it’s best to specify a maximum length in the protocol entry: read_raw { in “%39c"; }
Thanks for your comments.
Or, if the input terminator is set to a single ‘\r’ or ‘\n’ and the device sends a "\r\n” you could use: read_raw { in “%39[^\r\n]"; }
By the way, I have the terminator in "st.cmd" as follows: asynOctetSetInputEos("L0", 0, "\r\n") Thanks, Han
On May 18, 2017, at 6:37 AM, Jeong Han Lee <[email protected] <mailto:[email protected]>> wrote: I have the bar code scanner, so, the string input is the arbitrary ascii and numbers from bar codes, generated by myself, whenever I scan it. For example, case 1 : user,123456789,U002C007 case 2 : ABCDEFGHIZ0123456789 case 3 : office,248795493,M01B21 case 4 : .... case N : SUBMIT Note that case 1..N-1 can be done without order. The scanner has a typical RS232 connection. I wrote the very simple IOC with asyn and Stream. It has only one record and one function in db and proto file as follows: --- snip snip --- record(stringin, "$(SYSDEV)RawScanData") { field(DESC, "RAW Scanned data") field(DTYP, "stream") field( INP, "@scanner.proto read_raw $(PORT)") field(SCAN, "I/O Intr") field(PINI, "YES") } read_raw { in "%s"; } --- snip snip ---------- Is this enough? Thanks, Han
-- Eric Norum [email protected] <mailto:[email protected]>