WirelessUART
WirelessUART performs serial communication.
ACT Features.
Communicate between two UART-connected TWELITEs in ASCII format.
how to use act
Required TWELITE
Two of the following devices serially connected to a PC.
TWELITE DIP connected to UART with TWELITE R products/TWE-Lite-DIP/index.html) etc.
Explanation of ACT
setup()
void setup() {
auto&& set = the_twelite.settings.use<STG_STD>();
auto&& nwk = the_twelite.network.use<NWK_SIMPLE>();
/*** INTERACTIE MODE */
// settings: configure items
set << SETTINGS::appname("WirelessUART");
set << SETTINGS::appid_default(DEFAULT_APP_ID); // set default appID
set << SETTINGS::ch_default(DEFAULT_CHANNEL); // set default channel
set << SETTINGS::lid_default(DEFAULT_LID); // set default lid
set.hide_items(E_STGSTD_SETID::OPT_DWORD2, E_STGSTD_SETID::OPT_DWORD3, E_STGSTD_SETID::OPT_DWORD4, E_STGSTD_SETID::ENC_KEY_STRING, E_STGSTD_SETID::ENC_MODE);
set.reload(); // load from EEPROM.
/*** SETUP section */
// the twelite main class
the_twelite
<< set // from iteractive mode (APPID/CH/POWER)
<< TWENET::rx_when_idle(); // open receive circuit (if not set, it can't listen packts from others)
// Register Network
nwk << set; // from interactive mode (LID/REPEAT)
/*** BEGIN section */
SerialParser.begin(PARSER::ASCII, 128); // Initialize the serial parser
the_twelite.begin(); // start twelite!
/*** INIT message */
Serial << "--- WirelessUart (id=" << int(nwk.get_config().u8Lid) << ") ---" << mwx::crlf;
}
Interactive settings mode is initialized. This sample provides two or more devices that have different logical device IDs (LIDs) from each other.
SerialParser.begin(PARSER::ASCII, 128);
Initialize serial parser.
loop()
while(Serial.available()) {
if (SerialParser.parse(Serial.read())) {
Serial << ".." << SerialParser;
const uint8_t* b = SerialParser.get_buf().begin();
uint8_t addr = *b; ++b; // the first byte is destination address.
transmit(addr, b, SerialParser.get_buf().end());
}
}
When data input from the serial is received, one byte is input to the serial parser. When the ASCII format is accepted to the end, SerialParser.parse()
returns true
.
The SerialParser
can access the internal buffer with smplbuf
. In the example above, the first byte of the buffer is taken as the destination address, and the second byte to the end is passed to the transmit()
function.
on_rx_packet()
When a packet is received, a buffer smplbuf_u8<128> buf
containing the payload followed by the source as the first byte is created and output serially from the serial parser serparser_attach pout
for output.
void on_rx_packet(packet_rx& rx, bool_t &handled) {
// check the packet header.
const uint8_t* p = rx.get_payload().begin();
if (rx.get_length() > 4 && !strncmp((const char*)p, (const char*)FOURCHARS, 4)) {
Serial << format("..rx from %08x/%d", rx.get_addr_src_long(), rx.get_addr_src_lid()) << mwx::crlf;
smplbuf_u8<128> buf;
mwx::pack_bytes(buf
, uint8_t(rx.get_addr_src_lid()) // src addr (LID)
, make_pair(p+4, rx.get_payload().end()) ); // data body
serparser_attach pout;
pout.begin(PARSER::ASCII, buf.begin(), buf.size(), buf.size());
Serial << pout;
}
}
command for testing
Test data must be entered into the terminal using the paste function. This is because there is a timeout for input.
Note: To paste in TWE Programmer or TeraTerm, use Alt+V.
example
:FE00112233X
:FE001122339C
Send 00112233
to any Child Node.
example
:03AABBCC00112233X
:03AABBCC0011223366
Send AABBCC00112233
to Child Node #3.
example
:FF00112233X
:00112233X
Sent to any Parent Node or Child Node (0xFF
) and to the Parent Node (0x00
).
最終更新