245
TIDE and Tibbo BASIC User Manual
©2000-2008 Tibbo Technology Inc.
Redirecting Buffers
The following example appeared under
:
sub
on_ser_data_arrival
ser.setdata(ser.getdata(ser.txfree))
ser.send
end
sub
This example shows how to send all data incoming to the RX buffer out from the
TX buffer, in just two lines of code. However fast, this technique still passes all
data through your BASIC code, even though you are not processing (altering,
sampling) it in any way.
A much more efficient and advanced way to do this would be using a technique
called buffer redirection (buffer shorting). With buffer shorting, instead of receiving
the data into the RX buffer of your serial port, you are receiving it directly into the
TX buffer of another object which is supposed to send out this data. This can be a
serial object (the same port or a different one), a socket object, etc.
To use buffer shorting, you invoke the
method and specify the buffer
to which the data is to be redirected. Once this is done, the on_ser_data_arrival
event won't be generated at all, because the data will be going directly to the TX
buffer that you have specified. As soon as the data enters this buffer, it will be
automatically committed for sending.
The ser.redir method will only work if the serial port is closed (
= 0-
NO) at the time when this method is executed. Therefore, it makes sense to check
the result of ser.enabled execution, as in the example below:
sub
on_sys_init
if
ser.redir(PL_REDIR_SER)= PL_REDIR_SER
then
'redirection succeeded
else
'redirection failed (perhaps, the port is opened?)
end
if
end
sub
The performance advantage of buffer shorting is enormous, due to two factors:
first, you are not handling the data programmatically, so the VM isn't involved at
all. And second, the data being received is received directly into the TX buffer from
which it is transmitted, so there is less copying in memory.
Of course you cannot do anything at all with this data -- you are just pumping it
through. However, very often this is precisely what is needed! Additionally, you
can still catch
.
To stop redirection, you can use ser.redir(0), which means "receive data into the
RX buffer in a normal fashion".
Sinking Data
Sometimes it is desirable to ignore all incoming data while still maintaining the
serial port opened. The
property allows you to do just that.
Set the ser.sinkdata to 1- YES, and all incoming data will be automatically
discarded. This means that the
event will not be generated,
will always be returning zero, and so on. No data will be
241
260
251
251
265
258
263