113 int16_t
begin(uint32_t baudRate, uint8_t
pin, uint8_t rxPin, uint8_t txPin,uint8_t HWinterface = 1 )
118 if (HWinterface == 2)
125 else if (HWinterface == 1)
173 return _sw.sendPacket(tx, rx);
182 uint8_t tx[8] = { 201,
_pin,
_pinMode, 0,0x55,0x55,0x55,0x55 };
184 _sw.sendPacket(tx, rx);
193 uint8_t tx[8] = { 202,
_pin,
_pinMode, 1,0x55,0x55,0x55,0x55 };
195 if (
_sw.sendPacket(tx, rx) < 0)
216 _sw.sendPacket(tx, rx);
224 uint8_t tx[8] = { 203,
_pin,
_pinMode,0x55,0x55,0x55,0x55,0x55 };
226 _sw.sendPacket(tx, rx);
249 uint8_t tx[8] = { 201,
_pin,
_pinMode,1,data,0x55,0x55,0x55 };
266 virtual size_t write(
const uint8_t* buffer,
size_t size)
268 size_t bytesAvailable = 0;
270 uint32_t timeoutMillis = millis() +
timeout;
272 for (bytesSent = 0; bytesSent < size ;)
275 while (bytesAvailable < 4)
277 uint8_t peektx[8] = { 203,
_pin,
_pinMode,0x55,0x55,0x55,0x55,0x55 };
279 _sw.sendPacket(peektx, peekrx);
280 bytesAvailable = peekrx[3];
281 if (timeoutMillis < millis())
287 timeoutMillis = millis() +
timeout;
289 while (bytesSent < size && bytesAvailable > 0)
292 if ((size - bytesSent) < 7 || bytesAvailable < 7)
294 uint8_t tx[8] = { 201,
_pin,
_pinMode,0,0x55,0x55,0x55,0x55 };
298 for (txLen = 0; txLen < 4 && txLen < bytesAvailable && bytesSent < size; ++txLen)
300 tx[4 + txLen] = buffer[bytesSent];
304 _sw.sendPacket(tx, rx);
305 bytesAvailable = rx[3];
309 uint8_t tx[8] = {
_tx7Command, 0x55,0x55,0x55,0x55,0x55,0x55,0x55 };
312 for (txLen = 0; txLen < 7 ; ++txLen)
314 tx[1 + txLen] = buffer[bytesSent];
330 uint8_t peektx[8] = { 203,
_pin,
_pinMode,0x55,0x55,0x55,0x55,0x55 };
332 _sw.sendPacket(peektx, peekrx);
348 int bytesAvailable = 0;
349 uint32_t timeoutMillis = millis() +
timeout;
350 while (length > 0 && timeoutMillis > millis())
360 uint8_t tx[8] = { 202,
_pin,
_pinMode, (uint8_t) bytecount,0x55,0x55,0x55,0x55 };
362 _sw.sendPacket(tx, rx);
363 bytesAvailable = rx[3];
365 if (bytesAvailable == 0)
371 timeoutMillis = millis() +
timeout;
373 uint8_t bytesReturned = bytecount;
374 if (rx[3] < bytecount)
376 bytesReturned = rx[3];
378 for (
int i = 0; i < bytesReturned; ++i)
380 buffer[index] = rx[i + 4];
387 while (bytesAvailable >= 7 && length >= 7)
389 uint8_t tx[8] = {
_rx7Command, 0x55,0x55,0x55,0x55,0x55,0x55,0x55 };
391 _sw.sendPacket(tx, rx);
392 for (
int i = 0; i <7; ++i)
394 buffer[index] = rx[i + 1];
494 int16_t
begin(uint32_t baudRate, uint8_t
pin, uint8_t rxPin, uint8_t txPin, uint16_t userMemoryOffset, uint16_t rxLength, uint16_t txLength)
541 int16_t result =
_sw.sendPacket(tx, rx);
546 int16_t rxoffset = 0;
553 rxoffset =
rxQueue.begin(userMemoryOffset, rxLength);
556 userMemoryOffset += rxoffset;
564 int16_t txoffset = 0;
571 txoffset =
txQueue.begin(userMemoryOffset, txLength);
574 userMemoryOffset += txoffset;
583 result =
_sw.sendPacket(tx5);
584 if (result < 0)
return (result);
588 result =
_sw.sendPacket(tx6);
589 if (result < 0)
return (result);
591 return (txoffset + rxoffset);
597 int16_t
begin(uint32_t baudRate, uint8_t
pin, uint8_t rxPin, uint8_t txPin, uint8_t HWinterface = 1)
647 int16_t result =
_sw.sendPacket(tx, rx);
662 size_t write(
const uint8_t* buffer,
size_t size)
664 if (
txQueue.startIndex != 0xFFFF)
666 return (
txQueue.write(buffer, size));
673 uint8_t bytesToSend = 4;
674 if ((size - sent) < bytesToSend)
676 bytesToSend = size - sent;
678 uint8_t tx[8] = { 201,
_pin,
_pinMode, bytesToSend, 0x55,0x55,0x55,0x55};
680 for (
int i = 0; i < bytesToSend; ++i)
682 tx[4 + i] = buffer[sent + i];
684 _sw.sendPacket(tx, rx);
708 if (
rxQueue.startIndex != 0xFFFF)
710 return (
rxQueue.readBytes(buffer, length));
714 size_t bytesAvailable = 1;
715 size_t bytesReceived = 0;
716 while (bytesAvailable && (bytesReceived < length))
718 uint8_t bytesRequested = 4;
719 if (length - bytesReceived < 4)
721 bytesRequested = length - bytesReceived;
723 uint8_t tx[8] = { 202,
_pin,
_pinMode, bytesRequested, 0x55,0x55,0x55,0x55};
725 _sw.sendPacket(tx, rx);
730 for (
int i = 0; i < rx[3]; ++i)
732 buffer[bytesReceived] = rx[4 + i];
735 bytesAvailable = rx[3];
738 return (bytesReceived);
755 uint8_t tx[8] = { 203,
_pin,
_pinMode, 0x55, 0x55,0x55,0x55,0x55};
757 if(
_sw.sendPacket(tx, rx) >= 0)
#define SW_LE16(_a)
Convert a uint16_t to two bytes in little endian format for array initialization.
@ COMMAND_UART1_RX_7BYTES
(0xB3)
@ COMMAND_UART0_TX_7BYTES
(0xB0)
@ COMMAND_UART1_TX_7BYTES
(0xB2)
@ COMMAND_UART0_RX_7BYTES
(0xB1)
@ PIN_MODE_UART_RX_TX
(17)
@ PIN_MODE_UART1_RX_TX
(23)
Class for a Serial Wombat chip. Each Serial Wombat chip on a project should have its own instance.
SerialWombatPin(SerialWombatChip &serialWombatChip)
Instantiates a Serial Wombat Pin.
uint8_t pin()
Returns the current SW pin number. Used primarily for virtual calls by derived classes.
A Class representing a Queue in the User Ram area on the Serial Wombat Chip.
SerialWombatQueue txQueue
SerialWombatQueue created on the Serial Wombat chip for data to be sent by the SerialWombatSWUART.
uint8_t bytesToTransmit()
size_t readBytes(char *buffer, size_t length)
Reads a specified number of bytes from the SerialWombatUART RX queue.
SerialWombatQueue rxQueue
SerialWombatQueue created on the Serial Wombat chip for data received by the SerialWombatSWUART.
int16_t begin(uint32_t baudRate, uint8_t pin, uint8_t rxPin, uint8_t txPin, uint16_t userMemoryOffset, uint16_t rxLength, uint16_t txLength)
size_t write(const uint8_t *buffer, size_t size)
Write bytes to the SerialWombatUART for Transmit.
int16_t begin(uint32_t baudRate, uint8_t pin, uint8_t rxPin, uint8_t txPin, uint8_t HWinterface=1)
This method uses 32 byte buffers in pin memory rather than user ram.
SerialWombatSWUART(SerialWombatChip &serialWombatChip)
virtual size_t write(const uint8_t *buffer, size_t size)
Write bytes to the SerialWombatUART for Transmit.
SerialWombatUART(SerialWombatChip &serialWombat)
Constructor for the SerialWombatUART class. Only one instance is allowed per SerialWombatChip 4B.
virtual void setTimeout(long timeout_mS)
int16_t begin(uint32_t baudRate, uint8_t pin, uint8_t rxPin, uint8_t txPin, uint8_t HWinterface=1)
virtual size_t readBytes(char *buffer, size_t length)
Reads a specified number of bytes from the SerialWombatUART RX queue.
virtual int available()
Queries the SerialWombatUART for number bytes available to read.
virtual int availableForWrite()
Queries the SerialWombatUART for the amount of free TX queue space.
virtual size_t write(uint8_t data)
Write a byte to the SerialWombatUART for Transmit.
virtual void flush()
Discard all received bytes.
virtual int peek()
Query the SerialWombatUART for the next avaialble byte, but don't remove it from the queue.
virtual int read()
Reads a byte from the SerialWombatUART.