Serial Wombat Arduino Library
SerialWombat.h
Go to the documentation of this file.
1 #ifndef SERIAL_WOMBAT_H__
2 #define SERIAL_WOMBAT_H__
3 
4 /*
5 Copyright 2020-2021 Broadwell Consulting Inc.
6 
7 "Serial Wombat" is a registered trademark of Broadwell Consulting Inc. in
8 the United States. See SerialWombat.com for usage guidance.
9 
10 Permission is hereby granted, free of charge, to any person obtaining a
11  * copy of this software and associated documentation files (the "Software"),
12  * to deal in the Software without restriction, including without limitation
13  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
14  * and/or sell copies of the Software, and to permit persons to whom the
15  * Software is furnished to do so, subject to the following conditions:
16 
17 The above copyright notice and this permission notice shall be included in
18  * all copies or substantial portions of the Software.
19 
20 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26  * OTHER DEALINGS IN THE SOFTWARE.
27 */
28 
29 #include <stdint.h>
30 #include "Stream.h"
31 #include "HardwareSerial.h" // Using "" rather than <> for compatibility with Visual C++ simulation project
32 #include "Wire.h"// Using "" rather than <> for compatibility with Visual C++ simulation project
33 #include "Arduino.h"
34 
35 
36 
40 typedef enum
41 {
42  SW_LOW = 0,
43  SW_HIGH = 1,
44  SW_INPUT = 2,
46 
47 
50 
71 // SW_DATA_SOURCE_PIN_20 = 20,
72 // SW_DATA_SOURCE_PIN_21 = 21,
73 // SW_DATA_SOURCE_PIN_22 = 22,
74 // SW_DATA_SOURCE_PIN_23 = 23,
75 // SW_DATA_SOURCE_PIN_24 = 24,
76 // SW_DATA_SOURCE_PIN_25 = 25,
77 // SW_DATA_SOURCE_PIN_26 = 26,
78 // SW_DATA_SOURCE_PIN_27 = 27,
79 // SW_DATA_SOURCE_PIN_28 = 28,
80 // SW_DATA_SOURCE_PIN_29 = 29,
81 // SW_DATA_SOURCE_PIN_30 = 30,
82 // SW_DATA_SOURCE_PIN_31 = 31,
83 // SW_DATA_SOURCE_PIN_32 = 32,
84 // SW_DATA_SOURCE_PIN_33 = 33,
85 // SW_DATA_SOURCE_PIN_34 = 34,
86 // SW_DATA_SOURCE_PIN_35 = 35,
87 // SW_DATA_SOURCE_PIN_36 = 36,
88 // SW_DATA_SOURCE_PIN_37 = 37,
89 // SW_DATA_SOURCE_PIN_38 = 38,
90 // SW_DATA_SOURCE_PIN_39 = 39,
91 // SW_DATA_SOURCE_PIN_40 = 40,
92 // SW_DATA_SOURCE_PIN_41 = 41,
93 // SW_DATA_SOURCE_PIN_42 = 42,
94 // SW_DATA_SOURCE_PIN_43 = 43,
95 // SW_DATA_SOURCE_PIN_44 = 44,
96 // SW_DATA_SOURCE_PIN_45 = 45,
97 // SW_DATA_SOURCE_PIN_46 = 46,
98 // SW_DATA_SOURCE_PIN_47 = 47,
99 // SW_DATA_SOURCE_PIN_48 = 48,
100 // SW_DATA_SOURCE_PIN_49 = 49,
101 // SW_DATA_SOURCE_PIN_50 = 50,
102 // SW_DATA_SOURCE_PIN_51 = 51,
103 // SW_DATA_SOURCE_PIN_52 = 52,
104 // SW_DATA_SOURCE_PIN_53 = 53,
105 // SW_DATA_SOURCE_PIN_54 = 54,
106 // SW_DATA_SOURCE_PIN_55 = 55,
107 // SW_DATA_SOURCE_PIN_56 = 56,
108 // SW_DATA_SOURCE_PIN_57 = 57,
109 // SW_DATA_SOURCE_PIN_58 = 58,
110 // SW_DATA_SOURCE_PIN_59 = 59,
111 // SW_DATA_SOURCE_PIN_60 = 60,
112 // SW_DATA_SOURCE_PIN_61 = 61,
113 // SW_DATA_SOURCE_PIN_62 = 62,
114 // SW_DATA_SOURCE_PIN_63 = 63,
122  SW_DATA_SOURCE_ERRORS = 72,
127  SW_DATA_SOURCE_LFSR = 78,
128  SW_DATA_SOURCE_0x55 = 85,
134  //NOT ANALOG SW_DATA_SOURCE_PIN_5_MV = 105,
135  //NOT ANALOG SW_DATA_SOURCE_PIN_6_MV = 106,
136  //NOT ANALOG SW_DATA_SOURCE_PIN_7_MV = 107,
137  //NOT ANALOG SW_DATA_SOURCE_PIN_8_MV = 108,
138  //NOT ANALOG SW_DATA_SOURCE_PIN_9_MV = 109,
139  //NOT ANALOG SW_DATA_SOURCE_PIN_10_MV = 110,
140  //NOT ANALOG SW_DATA_SOURCE_PIN_11_MV = 111,
141  //NOT ANALOG SW_DATA_SOURCE_PIN_12_MV = 112,
142  //NOT ANALOG SW_DATA_SOURCE_PIN_13_MV = 113,
143  //NOT ANALOG SW_DATA_SOURCE_PIN_14_MV = 114,
144  //NOT ANALOG SW_DATA_SOURCE_PIN_15_MV = 115,
151 // SW_DATA_SOURCE_2HZ_SIN = 166,
154 // SW_DATA_SOURCE_1HZ_SIN = 169,
157 // SW_DATA_SOURCE_2SEC_SIN = 172,
160 // SW_DATA_SOURCE_8SEC_SIN = 175,
163 // SW_DATA_SOURCE_65SEC_SIN = 178,
164  SW_DATA_SOURCE_NONE = 255,
165 };
166 
167 #define ERROR_HOST_INCORRECT_NUMBER_BYTES_WRITTEN 0x10000
168 #define ERROR_HOST_DATA_TOO_LONG 0x10001
169 #define ERROR_HOST_NACK_ADDRESS 0x10002
170 #define ERROR_HOST_NACK_DATA 0x10003
171 #define ERROR_HOST_OTHER_I2C_ERROR 0x10004
172 
173 #define WOMBAT_MAXIMUM_PINS 20
174 
176 {
177  CMD_ECHO ='!',
178  CMD_READ_BUFFER_ASCII = 'G',
179  CMD_ASCII_SET_PIN ='P',
180  CMD_RESET = 'R',
181  CMD_SET_BUFFER_ASCII = 'S',
182  CMD_RESYNC = 'U',
183  CMD_VERSION = 'V',
184  CMD_SUPPLYVOLTAGE = 'v',
195  COMMAND_BINARY_CONFIGURE = 0x9F,
196  COMMAND_BINARY_READ_RAM = 0xA0,
199  COMMAND_BINARY_WRITE_RAM = 0xA3,
201  COMMAND_CALIBRATE_ANALOG = 0xA5,
202  COMMAND_ENABLE_2ND_UART = 0xA6,
204  COMMAND_UART0_TX_7BYTES = 0xB0,
205  COMMAND_UART0_RX_7BYTES = 0xB1,
206  COMMAND_UART1_TX_7BYTES = 0xB2,
207  COMMAND_UART1_RX_7BYTES = 0xB3,
208  CONFIGURE_PIN_MODE0 = 200,
209  CONFIGURE_PIN_MODE1 = 201,
210  CONFIGURE_PIN_MODE2 = 202,
211  CONFIGURE_PIN_MODE3 = 203,
212  CONFIGURE_PIN_MODE4 = 204,
213  CONFIGURE_PIN_MODE5 = 205,
214  CONFIGURE_PIN_MODE6 = 206,
215  CONFIGURE_PIN_MODE7 = 207,
216  CONFIGURE_PIN_MODE8 = 208,
217  CONFIGURE_PIN_MODE9 = 209,
218  CONFIGURE_PIN_MODE10 = 210,
225 
226 };
227 
228 
229 typedef enum {
257 
258 class SerialWombatChip;
259 
260 typedef void (*SerialWombatErrorHandler_t) (uint16_t errorNumber, SerialWombatChip* sw);
261 
268 {
269 public:
278  int16_t begin(HardwareSerial &serial);
290  int16_t begin(HardwareSerial& serial, bool reset);
291 
300  int16_t begin(TwoWire &wire, uint8_t i2cAddress);
301 
309  int16_t begin(uint8_t i2cAddress);
310 
322  int16_t begin(TwoWire& wire, uint8_t i2cAddress, bool reset);
324 
333  int sendPacket( uint8_t tx[], uint8_t rx[]);
334 
342  int sendPacket(uint8_t tx[]);
343 
351 
352  int sendPacketNoResponse(uint8_t tx[]);
353 
360  char* readVersion(void);
361 
369  uint16_t readPublicData(uint8_t pin);
370 
378  uint16_t readPublicData(SerialWombatDataSource dataSource);
379 
383  uint16_t writePublicData(uint8_t pin, uint16_t value);
384 
392  uint16_t readSupplyVoltage_mV(void);
393 
402  int16_t readTemperature_100thsDegC(void);
403 
404 
409  void hardwareReset();
410 
420  void pinMode(uint8_t pin, uint8_t mode);
421 
429  void pinMode(uint8_t pin, uint8_t mode, bool pullDown, bool openDrain);
430 
437  void digitalWrite(uint8_t pin, uint8_t val);
438 
442  int digitalRead(uint8_t pin);
443 
451  int analogRead(uint8_t pin);
452 
462  void analogWrite(uint8_t pin, int val);
463 
464 
473  bool queryVersion();
474 
479  uint32_t readFramesExecuted();
480 
486 
487  uint16_t readOverflowFrames();
488 
496  void jumpToBoot();
497 
516  uint8_t readRamAddress(uint16_t address);
517 
535 
536  int16_t writeRamAddress(uint16_t address, uint8_t value);
537 
550 
551  uint32_t readFlashAddress(uint32_t address);
552 
561  void sleep();
562 
564  void wake();
565 
567  bool isSW18();
568 
570  int16_t eraseFlashPage(uint32_t address);
572  int16_t writeFlashRow(uint32_t address);
573 
578  uint16_t _supplyVoltagemV = 0;
579 
581  uint8_t model[4] = { 0 };
582 
584  uint8_t fwVersion[4] = { 0 };
585 
589  uint8_t uniqueIdentifier[16];
590 
594 
600  uint16_t deviceRevision;
602  uint16_t errorCount = 0;
603 
605  bool inBoot = false;
606 
614  int16_t setThroughputPin(uint8_t pin);
615 
621  int writeUserBuffer(uint16_t index, uint8_t* buffer, uint16_t count);
622 
628  int writeUserBuffer(uint16_t index, char* s);
629 
635  int writeUserBuffer(uint16_t index, const char s[]);
636 
642 
643  int readUserBuffer(uint16_t index, uint8_t* buffer, uint16_t count);
644 
650  int16_t enable2ndCommandInterface(bool enabled);
651 
652 
653 
660 
666  static uint8_t find(bool keepTrying = false);
667 
669  int16_t lastErrorCode = 0;
670 
675  int16_t readLastErrorCommand(uint8_t* cmd);
676 
680 
682  uint8_t address = 0;
683 
684  int16_t echo(uint8_t data[], uint8_t count = 7);
685  int16_t echo(char* data);
686 
687  uint32_t readBirthday();
688  int16_t readBrand(char* data);
689 private:
690 
691 
692  char version[8] = { 0 };
693  HardwareSerial * Serial = NULL;
694  TwoWire* i2cInterface = NULL;
695  uint8_t _pinmode[WOMBAT_MAXIMUM_PINS]={}; // Includes Pullup
696  bool _pullDown[WOMBAT_MAXIMUM_PINS]={};
697  bool _openDrain[WOMBAT_MAXIMUM_PINS]={};
698  bool _highLow[WOMBAT_MAXIMUM_PINS] = {};
699  bool _asleep = false;
700  void configureDigitalPin(uint8_t pin, uint8_t highLow);
701  uint32_t sendReadyTime = 0;
702  int16_t initialize();
703  void readUniqueIdentifier();
704  void readDeviceIdentifier();
705  uint16_t returnErrorCode(uint8_t* rx);
706  SerialWombatErrorHandler_t errorHandler = NULL;
707 };
708 
710 class SerialWombat : public SerialWombatChip {};
712 #define SW_LE16(_a) (uint8_t)((_a) & 0xFF), (uint8_t)((_a) >>8)
713 
715 #define SW_LE32(_a) (uint8_t)((_a) & 0xFF), (uint8_t)((_a) >>8) , (uint8_t)((_a) >>16), (uint8_t)((_a) >>24)
716 
717 
728 {
729 public:
732  SerialWombatPin(SerialWombatChip& serialWombatChip);
733 
737  SerialWombatPin(SerialWombatChip& serialWombatChip, uint8_t pin);
738 
743  uint16_t readPublicData()
744  {
745  return _sw.readPublicData(_pin);
746  };
747 
756  void pinMode(uint8_t mode);
757 
764  void pinMode(uint8_t mode, bool pullDown, bool openDrain);
765 
772  void digitalWrite(uint8_t val);
773 
779  int digitalRead();
780 
781 
784  uint16_t writePublicData(uint16_t value)
785  { return _sw.writePublicData(_pin, value); }
786 
789  uint8_t pin() {return _pin;}
790 
793  uint8_t swPinModeNumber() { return _pinMode; }
794 
795 
796 protected:
797  uint8_t _pin = 255;
799  uint8_t _pinMode = 0;
800 
801 };
802 
803 
809 void SerialWombatSerialErrorHandlerBrief(uint16_t error, SerialWombatChip* sw);
811 
812 #include "SerialWombatErrors.h"
813 #include "SerialWombatQueue.h"
817 #include "SerialWombat18CapTouch.h"
818 #include "SerialWombatAnalogInput.h"
825 #include "SerialWombatPulseTimer.h"
826 #include "SerialWombatPWM.h"
827 #include "SerialWombatQuadEnc.h"
829 #include "SerialWombatServo.h"
830 #include "SerialWombatTM1637.h"
831 #include "SerialWombatUART.h"
833 #include "SerialWombatWatchdog.h"
834 #include "SerialWombatWS2812.h"
836 
837 #endif
SerialWombatPulseOnChange.h
SerialWombatDataSource::SW_DATA_SOURCE_1HZ_SAW
@ SW_DATA_SOURCE_1HZ_SAW
(168) Sawtooth wave that goes from 0 to 65535 to 0 every 1024 frames
SerialWombatCommands::CONFIGURE_PIN_MODE10
@ CONFIGURE_PIN_MODE10
(210)
SerialWombatCommands::CMD_READ_BUFFER_ASCII
@ CMD_READ_BUFFER_ASCII
('G')
SerialWombatChip
Class for a Serial Wombat chip. Each Serial Wombat chip on a project should have its own instance.
Definition: SerialWombat.h:267
SerialWombatChip::begin
int16_t begin(HardwareSerial &serial)
initialize a Serial Wombat chip to use a Serial Interface.
Definition: SerialWombat.cpp:41
PIN_MODE_ANALOGINPUT
@ PIN_MODE_ANALOGINPUT
(2)
Definition: SerialWombat.h:232
SerialWombatCommands::COMMAND_READ_LAST_ERROR_PACKET
@ COMMAND_READ_LAST_ERROR_PACKET
(0xA7)
SerialWombatCommands::COMMAND_ENABLE_2ND_UART
@ COMMAND_ENABLE_2ND_UART
(0xA6)
SerialWombatChip::jumpToBoot
void jumpToBoot()
Jump to Bootloader and wait for a UART download of new firmware.
Definition: SerialWombat.cpp:502
SerialWombatQuadEnc.h
SerialWombatCommands::CMD_VERSION
@ CMD_VERSION
('V')
SerialWombatDataSource::SW_DATA_SOURCE_PIN_8
@ SW_DATA_SOURCE_PIN_8
(8) 16 bit public data provided by Pin 8
SerialWombatWatchdog.h
PIN_MODE_PULSE_ON_CHANGE
@ PIN_MODE_PULSE_ON_CHANGE
(25)
Definition: SerialWombat.h:251
PIN_MODE_SW18AB_CAPTOUCH
@ PIN_MODE_SW18AB_CAPTOUCH
(22)
Definition: SerialWombat.h:248
PIN_MODE_UART1_RX_TX
@ PIN_MODE_UART1_RX_TX
(23)
Definition: SerialWombat.h:249
SerialWombatCommands::COMMAND_BINARY_QUEUE_INFORMATION
@ COMMAND_BINARY_QUEUE_INFORMATION
(0x94)
SerialWombatWS2812.h
PIN_MODE_DEBOUNCE
@ PIN_MODE_DEBOUNCE
(10)
Definition: SerialWombat.h:238
SerialWombatDataSource::SW_DATA_SOURCE_1024mvCounts
@ SW_DATA_SOURCE_1024mvCounts
(66) The number of ADC counts that result from a 1.024V reading
SerialWombatCommands::CONFIGURE_PIN_MODE0
@ CONFIGURE_PIN_MODE0
(200)
SerialWombatErrorHandler_t
void(* SerialWombatErrorHandler_t)(uint16_t errorNumber, SerialWombatChip *sw)
Definition: SerialWombat.h:260
SerialWombatCommands::COMMAND_UART0_RX_7BYTES
@ COMMAND_UART0_RX_7BYTES
(0xB1)
SerialWombatChip::lastErrorCode
int16_t lastErrorCode
The last error code returned as part of a protocol error message expressed as a positive integer.
Definition: SerialWombat.h:669
SerialWombatDataSource::SW_DATA_SOURCE_PIN_9
@ SW_DATA_SOURCE_PIN_9
(9) 16 bit public data provided by Pin 9
SerialWombatChip::digitalRead
int digitalRead(uint8_t pin)
Reads the state of a Pin.
Definition: SerialWombat.cpp:434
SerialWombatChip::sendPacketNoResponse
int sendPacketNoResponse(uint8_t tx[])
Send an 8 byte packet to the Serial Wombat chip, don't wait for a response.
Definition: SerialWombat.cpp:278
SerialWombatPinMode_t
SerialWombatPinMode_t
Definition: SerialWombat.h:229
SerialWombatAnalogInput.h
SerialWombatChip::analogRead
int analogRead(uint8_t pin)
Configures pin as analog input and does an immediate A/D conversion.
Definition: SerialWombat.cpp:446
SerialWombatPin::SerialWombatPin
SerialWombatPin(SerialWombatChip &serialWombatChip)
Instantiates a Serial Wombat Pin.
Definition: SerialWombat.cpp:895
SerialWombatPin::swPinModeNumber
uint8_t swPinModeNumber()
Returns the Mode number. Used primarily by derived classes to populate packet data.
Definition: SerialWombat.h:793
SerialWombatAbstractButton.h
SerialWombatDataSource::SW_DATA_SOURCE_LFSR
@ SW_DATA_SOURCE_LFSR
(78) A Linear Feedback Shift Register that produces a Pseudo random sequence of 16 bit values
SerialWombatDataSource::SW_DATA_SOURCE_PIN_15
@ SW_DATA_SOURCE_PIN_15
(15) 16 bit public data provided by Pin 15
SerialWombatPin::_sw
SerialWombatChip & _sw
Definition: SerialWombat.h:798
SerialWombatDataSource::SW_DATA_SOURCE_PIN_16_MV
@ SW_DATA_SOURCE_PIN_16_MV
(116) Pin 16 public output expressed in mV (for analog modes only)
SerialWombatCommands::CONFIGURE_PIN_MODE7
@ CONFIGURE_PIN_MODE7
(207)
SerialWombatChip::analogWrite
void analogWrite(uint8_t pin, int val)
Set a pin to PWM output.
Definition: SerialWombat.cpp:454
PIN_MODE_WATCHDOG
@ PIN_MODE_WATCHDOG
(7)
Definition: SerialWombat.h:236
PIN_MODE_CONTROLLED
@ PIN_MODE_CONTROLLED
(1)
Definition: SerialWombat.h:231
PIN_MODE_SW_UART
@ PIN_MODE_SW_UART
(13)
Definition: SerialWombat.h:241
SerialWombatChip::queryVersion
bool queryVersion()
Send a version request to the Serial Wombat chip.
Definition: SerialWombat.cpp:466
SerialWombatChip::setThroughputPin
int16_t setThroughputPin(uint8_t pin)
Set a pin to be a throughput monitoring pin.
Definition: SerialWombat.cpp:565
SerialWombatPin::writePublicData
uint16_t writePublicData(uint16_t value)
Write a 16 bit value to this pin.
Definition: SerialWombat.h:784
SerialWombatPin::pinMode
void pinMode(uint8_t mode)
Set pin to INPUT or OUTPUT.
Definition: SerialWombat.cpp:900
SerialWombatLiquidCrystal.h
SerialWombatChip::readSupplyVoltage_mV
uint16_t readSupplyVoltage_mV(void)
Measure the Serial Wombat chip's Supply voltage.
Definition: SerialWombat.cpp:365
SerialWombatCommands::CONFIGURE_PIN_MODE3
@ CONFIGURE_PIN_MODE3
(203)
SerialWombatChip::inBoot
bool inBoot
Set to true if boot mode is indicated by a version query.
Definition: SerialWombat.h:605
SerialWombatChip::_supplyVoltagemV
uint16_t _supplyVoltagemV
Definition: SerialWombat.h:578
SerialWombat18CapTouch.h
PIN_MODE_RESISTANCEINPUT
@ PIN_MODE_RESISTANCEINPUT
(24)
Definition: SerialWombat.h:250
SerialWombatChip::readFramesExecuted
uint32_t readFramesExecuted()
Get the number of 1mS frames that have been executed since Serial Wombat chip reset.
Definition: SerialWombat.cpp:488
SerialWombatDataSource::SW_DATA_SOURCE_2SEC_SAW
@ SW_DATA_SOURCE_2SEC_SAW
(171)Sawtooth wave that goes from 0 to 65535 to 0 every 2048 frames
SerialWombatDataSource::SW_DATA_SOURCE_VBG_COUNTS_VS_VREF
@ SW_DATA_SOURCE_VBG_COUNTS_VS_VREF
(76) A/D conversion of VBG against VRef . Used for mfg calibration
PIN_MODE_TM1637
@ PIN_MODE_TM1637
(11)
Definition: SerialWombat.h:239
SerialWombatChip::wake
void wake()
Called to send a dummy packet to the Serial Wombat chip to wake it from sleep and ready it for other ...
Definition: SerialWombat.cpp:537
SerialWombatDataSource::SW_DATA_SOURCE_PIN_17_MV
@ SW_DATA_SOURCE_PIN_17_MV
(117) Pin 17 public output expressed in mV (for analog modes only)
PIN_MODE_PWM
@ PIN_MODE_PWM
(16)
Definition: SerialWombat.h:244
SerialWombatDataSource::SW_DATA_SOURCE_2HZ_SAW
@ SW_DATA_SOURCE_2HZ_SAW
(165) Sawtooth wave that goes from 0 to 65535 to 0 every 512 frames
SerialWombatCommands::COMMAND_BINARY_WRITE_RAM
@ COMMAND_BINARY_WRITE_RAM
(0xA3)
SerialWombatServo.h
SerialWombatCommands::COMMAND_BINARY_WRITE_USER_BUFFER
@ COMMAND_BINARY_WRITE_USER_BUFFER
(0x84)
SerialWombatProtectedOutput.h
SerialWombatCommands::CONFIGURE_PIN_MODE8
@ CONFIGURE_PIN_MODE8
(208)
SerialWombatCommands::COMMAND_UART1_TX_7BYTES
@ COMMAND_UART1_TX_7BYTES
(0xB2)
SerialWombatDataSource::SW_DATA_SOURCE_PIN_4_MV
@ SW_DATA_SOURCE_PIN_4_MV
(104) Pin 4 public output expressed in mV (for analog modes only)
PIN_MODE_SERVO
@ PIN_MODE_SERVO
(3)
Definition: SerialWombat.h:233
SerialWombatDataSource::SW_DATA_SOURCE_SYSTEM_UTILIZATION
@ SW_DATA_SOURCE_SYSTEM_UTILIZATION
(74) A number between 0 and 65535 that scales to the average length of pin processing frames between ...
SerialWombatCommands::COMMAND_BINARY_QUEUE_READ_BYTES
@ COMMAND_BINARY_QUEUE_READ_BYTES
(0x93)
SerialWombatPWM.h
SerialWombatCommands::CONFIGURE_PIN_MODE4
@ CONFIGURE_PIN_MODE4
(204)
SerialWombatSerialErrorHandlerBrief
void SerialWombatSerialErrorHandlerBrief(uint16_t error, SerialWombatChip *sw)
a sample error handler that can be registered with registerErrorHandler to report protocol errors on ...
Definition: SerialWombat.cpp:955
SerialWombatChip::SerialWombatChip
SerialWombatChip()
Definition: SerialWombat.cpp:30
SerialWombatDataSource::SW_DATA_SOURCE_65SEC_SAW
@ SW_DATA_SOURCE_65SEC_SAW
(177 )Sawtooth wave that goes from 0 to 65535 to 0 every 65536 frames
SerialWombatQueue.h
SerialWombatChip::hardwareReset
void hardwareReset()
Send a reset command to the Serial Wombat chip.
Definition: SerialWombat.cpp:404
PIN_MODE_PULSETIMER
@ PIN_MODE_PULSETIMER
(18)
Definition: SerialWombat.h:246
SerialWombatChip::uniqueIdentifierLength
uint8_t uniqueIdentifierLength
Definition: SerialWombat.h:593
SerialWombatPin::digitalRead
int digitalRead()
Reads the state of the Pin.
Definition: SerialWombat.cpp:923
SerialWombatChip::eraseFlashPage
int16_t eraseFlashPage(uint32_t address)
Erases a page in flash. Intended for use with the Bootloader, not by end users outside of bootloading...
Definition: SerialWombat.cpp:548
SerialWombatChip::readLastErrorCommand
int16_t readLastErrorCommand(uint8_t *cmd)
Returns the last Serial Wombat command that produced a protocol error.
Definition: SerialWombat.cpp:928
SerialWombatDataSource::SW_DATA_SOURCE_NONE
@ SW_DATA_SOURCE_NONE
(255 ) Used to mean "No Source Selected"
SW_HIGH
@ SW_HIGH
Definition: SerialWombat.h:43
SerialWombatTM1637.h
SerialWombatDataSource::SW_DATA_SOURCE_PIN_2
@ SW_DATA_SOURCE_PIN_2
(2) 16 bit public data provided by Pin 2
SerialWombatChip::find
static uint8_t find(bool keepTrying=false)
Search the I2C Bus addresses 0x68 to 0x6F for I2C devices, and test to see if they respond to Serial ...
Definition: SerialWombat.cpp:572
SerialWombatDataSource::SW_DATA_SOURCE_FRAMES_RUN_LSW
@ SW_DATA_SOURCE_FRAMES_RUN_LSW
(67) The number of frames run since reset, least significant 16 bits
SerialWombatAbstractProcessedInput.h
SerialWombatDataSource::SW_DATA_SOURCE_DROPPED_FRAMES
@ SW_DATA_SOURCE_DROPPED_FRAMES
(73) The number of times since reset that a frame ran so far behind that it crossed two subsequent 1m...
SerialWombatCommands::COMMAND_BINARY_WRITE_USER_BUFFER_CONTINUE
@ COMMAND_BINARY_WRITE_USER_BUFFER_CONTINUE
(0x85)
SerialWombatDataSource::SW_DATA_SOURCE_VCC_mVOLTS
@ SW_DATA_SOURCE_VCC_mVOLTS
(75) The system source voltage in mV
SerialWombatChip::digitalWrite
void digitalWrite(uint8_t pin, uint8_t val)
Set an output pin High or Low.
Definition: SerialWombat.cpp:428
SerialWombatDataSource::SW_DATA_SOURCE_TEMPERATURE
@ SW_DATA_SOURCE_TEMPERATURE
(70)The internal core temperature expressed in 100ths deg C
SerialWombatCommands::CMD_SET_BUFFER_ASCII
@ CMD_SET_BUFFER_ASCII
('S')
SerialWombatDataSource::SW_DATA_SOURCE_PIN_14
@ SW_DATA_SOURCE_PIN_14
(14) 16 bit public data provided by Pin 14
PIN_MODE_MATRIX_KEYPAD
@ PIN_MODE_MATRIX_KEYPAD
(15)
Definition: SerialWombat.h:243
SerialWombatDataSource::SW_DATA_SOURCE_PIN_0_MV
@ SW_DATA_SOURCE_PIN_0_MV
(100) Pin 0 public output expressed in mV (for analog modes only)
SerialWombatChip::readUserBuffer
int readUserBuffer(uint16_t index, uint8_t *buffer, uint16_t count)
Read bytes from the User Memory Buffer in the Serial Wombat chip.
Definition: SerialWombat.cpp:611
SerialWombatChip::readOverflowFrames
uint16_t readOverflowFrames()
Get the number of times an overflow Frame has occured.
Definition: SerialWombat.cpp:497
SerialWombatCommands::CONFIGURE_PIN_MODE9
@ CONFIGURE_PIN_MODE9
(209)
SerialWombatChip::deviceIdentifier
uint16_t deviceIdentifier
Definition: SerialWombat.h:597
SerialWombatDataSource::SW_DATA_SOURCE_8SEC_SAW
@ SW_DATA_SOURCE_8SEC_SAW
(174)Sawtooth wave that goes from 0 to 65535 to 0 every 8192 frames
SerialWombatCommands
SerialWombatCommands
Definition: SerialWombat.h:175
SerialWombatChip::readPublicData
uint16_t readPublicData(uint8_t pin)
Read the 16 Bit public data associated with a Serial Wombat Pin Mode.
Definition: SerialWombat.cpp:692
SerialWombatUART.h
SerialWombatPin
Describes a Serial Wombat Pin. Is base class for other pin modes.
Definition: SerialWombat.h:727
SerialWombatDataSource::SW_DATA_SOURCE_PIN_0
@ SW_DATA_SOURCE_PIN_0
(0) 16 bit public data provided by Pin 0
SerialWombatChip::readFlashAddress
uint32_t readFlashAddress(uint32_t address)
Read Address from Flash based on 32 bit address.
Definition: SerialWombat.cpp:522
SerialWombatChip::readTemperature_100thsDegC
int16_t readTemperature_100thsDegC(void)
Measure the Serial Wombat chip's internal temperature.
Definition: SerialWombat.cpp:387
SerialWombatChip::uniqueIdentifier
uint8_t uniqueIdentifier[16]
Definition: SerialWombat.h:589
WOMBAT_MAXIMUM_PINS
#define WOMBAT_MAXIMUM_PINS
Definition: SerialWombat.h:173
SerialWombatCommands::CONFIGURE_CHANNEL_MODE_HW_3
@ CONFIGURE_CHANNEL_MODE_HW_3
(223)
SerialWombatChip::pinMode
void pinMode(uint8_t pin, uint8_t mode)
Set a pin to INPUT or OUTPUT.
Definition: SerialWombat.cpp:411
SerialWombatChip::writeFlashRow
int16_t writeFlashRow(uint32_t address)
Writes a row in flash. Intended for use with the Bootloader, not by end users outside of bootloading ...
Definition: SerialWombat.cpp:557
SerialWombatChip::errorCount
uint16_t errorCount
Incremented every time a communication or command error is detected.
Definition: SerialWombat.h:602
SerialWombatChip::readRamAddress
uint8_t readRamAddress(uint16_t address)
Read Address from RAM based on 16 bit address.
Definition: SerialWombat.cpp:508
SerialWombatPin::_pinMode
uint8_t _pinMode
Definition: SerialWombat.h:799
SerialWombatChip::readBirthday
uint32_t readBirthday()
Definition: SerialWombat.cpp:852
SerialWombatDataSource::SW_DATA_SOURCE_PIN_3
@ SW_DATA_SOURCE_PIN_3
(3) 16 bit public data provided by Pin 3
SerialWombatChip::writeRamAddress
int16_t writeRamAddress(uint16_t address, uint8_t value)
Write byte to Address in RAM based on 16 bit address.
Definition: SerialWombat.cpp:516
SerialWombatCommands::COMMAND_BINARY_READ_FLASH
@ COMMAND_BINARY_READ_FLASH
(0xA1)
SerialWombatCommands::CMD_ASCII_SET_PIN
@ CMD_ASCII_SET_PIN
('P')
SerialWombatDataSource::SW_DATA_SOURCE_PACKETS_RECEIVED
@ SW_DATA_SOURCE_PACKETS_RECEIVED
(71) The nubmer of incoming command packets that have been processed since reset (rolls over at 65535...
SerialWombatCommands::CONFIGURE_CHANNEL_MODE_HW_2
@ CONFIGURE_CHANNEL_MODE_HW_2
(222)
SerialWombatChip::sendPacket
int sendPacket(uint8_t tx[], uint8_t rx[])
Send an 8 byte packet to the Serial Wombat chip and wait for 8 bytes back.
Definition: SerialWombat.cpp:174
SerialWombatCommands::CONFIGURE_PIN_MODE_HW_0
@ CONFIGURE_PIN_MODE_HW_0
(220)
PIN_MODE_WS2812
@ PIN_MODE_WS2812
(12)
Definition: SerialWombat.h:240
PIN_MODE_UNKNOWN
@ PIN_MODE_UNKNOWN
(0xFF)
Definition: SerialWombat.h:255
SerialWombatCommands::COMMAND_CALIBRATE_ANALOG
@ COMMAND_CALIBRATE_ANALOG
(0xA5)
SerialWombatDataSource::SW_DATA_SOURCE_PIN_10
@ SW_DATA_SOURCE_PIN_10
(10) 16 bit public data provided by Pin 10
SerialWombatCommands::COMMAND_BINARY_WRITE_FLASH
@ COMMAND_BINARY_WRITE_FLASH
(0xA4)
SerialWombatChip::deviceRevision
uint16_t deviceRevision
Definition: SerialWombat.h:600
SerialWombatPin::readPublicData
uint16_t readPublicData()
Read the 16 Bit public data associated with this pin.
Definition: SerialWombat.h:743
SerialWombatDataSource::SW_DATA_SOURCE_PIN_16
@ SW_DATA_SOURCE_PIN_16
(16) 16 bit public data provided by Pin 16
SerialWombatDataSource::SW_DATA_SOURCE_PIN_1
@ SW_DATA_SOURCE_PIN_1
(1) 16 bit public data provided by Pin 1
SerialWombatDataSource::SW_DATA_SOURCE_2SEC_SQUARE
@ SW_DATA_SOURCE_2SEC_SQUARE
(170)Square wave that alternates between 0 and 65535 every 1024 frames
SerialWombatChip::sleep
void sleep()
Shuts down most functions of the Serial Wombat chip reducing power consumption.
Definition: SerialWombat.cpp:530
SerialWombatChip::writePublicData
uint16_t writePublicData(uint8_t pin, uint16_t value)
Write a 16 bit value to a Serial Wombat pin Mode.
Definition: SerialWombat.cpp:700
SerialWombatErrors.h
SerialWombatDataSource::SW_DATA_SOURCE_FRAMES_RUN_MSW
@ SW_DATA_SOURCE_FRAMES_RUN_MSW
(68) The number of frames run since reset, most significant 16 bits
SerialWombatUltrasonicDistanceSensor.h
SerialWombatChip::writeUserBuffer
int writeUserBuffer(uint16_t index, uint8_t *buffer, uint16_t count)
Write bytes to the User Memory Buffer in the Serial Wombat chip.
Definition: SerialWombat.cpp:708
SerialWombatDataSource::SW_DATA_SOURCE_PIN_3_MV
@ SW_DATA_SOURCE_PIN_3_MV
(103) Pin 3 public output expressed in mV (for analog modes only)
SerialWombatPinState_t
SerialWombatPinState_t
Definition: SerialWombat.h:40
SerialWombatCommands::CONFIGURE_PIN_OUTPUTSCALE
@ CONFIGURE_PIN_OUTPUTSCALE
(210)
SerialWombatCommands::COMMAND_BINARY_CONFIGURE
@ COMMAND_BINARY_CONFIGURE
(0x9F)
SerialWombatChip::fwVersion
uint8_t fwVersion[4]
Contains the last firmware Version retreived by queryVersion() as a zero-terminated string.
Definition: SerialWombat.h:584
SW_INPUT
@ SW_INPUT
Definition: SerialWombat.h:44
SerialWombatChip::~SerialWombatChip
~SerialWombatChip()
Definition: SerialWombat.cpp:36
SerialWombatPin::pin
uint8_t pin()
Returns the current SW pin number. Used primarily for virtual calls by derived classes.
Definition: SerialWombat.h:789
SerialWombatDataSource::SW_DATA_SOURCE_INCREMENTING_NUMBER
@ SW_DATA_SOURCE_INCREMENTING_NUMBER
(65) An number that increments each time it is accessed.
SerialWombat
This class name is depricated. Do not use for new development. Use SerialWombatChip instead.
Definition: SerialWombat.h:710
SerialWombatCommands::CONFIGURE_CHANNEL_MODE_HW_1
@ CONFIGURE_CHANNEL_MODE_HW_1
(221)
SW_LOW
@ SW_LOW
Definition: SerialWombat.h:42
PIN_MODE_THROUGHPUT_CONSUMER
@ PIN_MODE_THROUGHPUT_CONSUMER
(4)
Definition: SerialWombat.h:234
SerialWombatMatrixKeypad.h
SerialWombatCommands::CMD_RESYNC
@ CMD_RESYNC
('U')
SerialWombatDataSource::SW_DATA_SOURCE_PIN_18
@ SW_DATA_SOURCE_PIN_18
(18) 16 bit public data provided by Pin 18
SerialWombatDataSource::SW_DATA_SOURCE_PIN_4
@ SW_DATA_SOURCE_PIN_4
(4) 16 bit public data provided by Pin 4
SerialWombatDataSource
SerialWombatDataSource
A list of Serial Wombat public data sources.
Definition: SerialWombat.h:49
PIN_MODE_INPUT_PROCESSOR
@ PIN_MODE_INPUT_PROCESSOR
(14)
Definition: SerialWombat.h:242
SerialWombatCommands::COMMAND_UART1_RX_7BYTES
@ COMMAND_UART1_RX_7BYTES
(0xB3)
SerialWombatChip::echo
int16_t echo(uint8_t data[], uint8_t count=7)
Definition: SerialWombat.cpp:831
SerialWombatDataSource::SW_DATA_SOURCE_PIN_13
@ SW_DATA_SOURCE_PIN_13
(13) 16 bit public data provided by Pin 13
SerialWombatPin::_pin
uint8_t _pin
Definition: SerialWombat.h:797
SerialWombatCommands::COMMAND_BINARY_READ_USER_BUFFER
@ COMMAND_BINARY_READ_USER_BUFFER
(0x83)
SerialWombatChip::enable2ndCommandInterface
int16_t enable2ndCommandInterface(bool enabled)
Enable UART command interface in addition to I2C (SW18AB Only)
Definition: SerialWombat.cpp:807
SerialWombatProcessedInputPin.h
SerialWombatDataSource::SW_DATA_SOURCE_PIN_1_MV
@ SW_DATA_SOURCE_PIN_1_MV
(101) Pin 1 public output expressed in mV (for analog modes only)
SerialWombatDataSource::SW_DATA_SOURCE_PIN_17
@ SW_DATA_SOURCE_PIN_17
(17) 16 bit public data provided by Pin 17
SerialWombatDataSource::SW_DATA_SOURCE_PIN_19_MV
@ SW_DATA_SOURCE_PIN_19_MV
(119) Pin 19 public output expressed in mV (for analog modes only)
PIN_MODE_QUADRATUREENCODER
@ PIN_MODE_QUADRATUREENCODER
(5)
Definition: SerialWombat.h:235
SerialWombatThroughputConsumer.h
SerialWombatCommands::CONFIGURE_PIN_MODE2
@ CONFIGURE_PIN_MODE2
(202)
SerialWombatCommands::CMD_RESET
@ CMD_RESET
('R')
SerialWombatDebouncedInput.h
PIN_MODE_FRAME_TIMER
@ PIN_MODE_FRAME_TIMER
(21)
Definition: SerialWombat.h:247
SerialWombatCommands::CONFIGURE_PIN_INPUTPROCESS
@ CONFIGURE_PIN_INPUTPROCESS
(211)
PIN_MODE_LIQUIDCRYSTAL
@ PIN_MODE_LIQUIDCRYSTAL
(28)
Definition: SerialWombat.h:254
SerialWombatCommands::COMMAND_BINARY_READ_PIN_BUFFFER
@ COMMAND_BINARY_READ_PIN_BUFFFER
(0x81)
SerialWombatAbstractScaledOutput.h
PIN_MODE_PROTECTED_OUTPUT
@ PIN_MODE_PROTECTED_OUTPUT
(8)
Definition: SerialWombat.h:237
SerialWombatChip::readVersion
char * readVersion(void)
Request version string (combined model and firmware) and return pointer to it.
Definition: SerialWombat.cpp:348
SerialWombatChip::model
uint8_t model[4]
Contains the last model retreived by queryVersion() as a zero-terminated string.
Definition: SerialWombat.h:581
SerialWombatDataSource::SW_DATA_SOURCE_ERRORS
@ SW_DATA_SOURCE_ERRORS
(72)The number of incoming packets that have caused errors since reset (rolls over at 65535)
SerialWombatPin::digitalWrite
void digitalWrite(uint8_t val)
Set output pin High or Low.
Definition: SerialWombat.cpp:910
SerialWombatDataSource::SW_DATA_SOURCE_65SEC_SQUARE
@ SW_DATA_SOURCE_65SEC_SQUARE
(176) Square wave that alternates between 0 and 65535 every 32768 frames
SerialWombatDataSource::SW_DATA_SOURCE_0x55
@ SW_DATA_SOURCE_0x55
(85) 0x55 is a reserved value for resyncing. Returns 0x55 0x55
SerialWombatDataSource::SW_DATA_SOURCE_PIN_7
@ SW_DATA_SOURCE_PIN_7
(7) 16 bit public data provided by Pin 7
SerialWombatChip::registerErrorHandler
void registerErrorHandler(SerialWombatErrorHandler_t handler)
Registers an error handler that is called by the SerialWombatChip sendPacket() command when a protoco...
Definition: SerialWombat.cpp:639
SerialWombatDataSource::SW_DATA_SOURCE_2HZ_SQUARE
@ SW_DATA_SOURCE_2HZ_SQUARE
(164) Square wave that alternates between 0 and 65535 every 256 frames
SerialWombatChip::isSW18
bool isSW18()
Returns true if the instance received a model number corresponding to the Serial Wombat 18 series of ...
Definition: SerialWombat.cpp:543
SerialWombatDataSource::SW_DATA_SOURCE_PIN_5
@ SW_DATA_SOURCE_PIN_5
(5) 16 bit public data provided by Pin 5
SerialWombatCommands::CONFIGURE_PIN_MODE5
@ CONFIGURE_PIN_MODE5
(205)
PIN_MODE_ULTRASONIC_DISTANCE
@ PIN_MODE_ULTRASONIC_DISTANCE
(27)
Definition: SerialWombat.h:253
PIN_MODE_DIGITALIO
@ PIN_MODE_DIGITALIO
(0)
Definition: SerialWombat.h:230
SerialWombatDataSource::SW_DATA_SOURCE_PIN_19
@ SW_DATA_SOURCE_PIN_19
(19) 16 bit public data provided by Pin 19
SerialWombatDataSource::SW_DATA_SOURCE_8SEC_SQUARE
@ SW_DATA_SOURCE_8SEC_SQUARE
(173)Square wave that alternates between 0 and 65535 every 4096 frames
SerialWombatCommands::CMD_SUPPLYVOLTAGE
@ CMD_SUPPLYVOLTAGE
('v')
SerialWombatChip::readBrand
int16_t readBrand(char *data)
Definition: SerialWombat.cpp:868
SerialWombatCommands::CONFIGURE_PIN_MODE1
@ CONFIGURE_PIN_MODE1
(201)
SerialWombatCommands::COMMAND_BINARY_READ_RAM
@ COMMAND_BINARY_READ_RAM
(0xA0)
SerialWombatCommands::CONFIGURE_PIN_MODE6
@ CONFIGURE_PIN_MODE6
(206)
SerialWombatDataSource::SW_DATA_SOURCE_PIN_6
@ SW_DATA_SOURCE_PIN_6
(6) 16 bit public data provided by Pin 6
SerialWombatSerialErrorHandlerVerbose
void SerialWombatSerialErrorHandlerVerbose(uint16_t error, SerialWombatChip *sw)
SerialWombatCommands::CMD_ECHO
@ CMD_ECHO
('!')
SerialWombatCommands::COMMAND_BINARY_QUEUE_ADD_7BYTES
@ COMMAND_BINARY_QUEUE_ADD_7BYTES
(0x92)
SerialWombatDataSource::SW_DATA_SOURCE_PIN_12
@ SW_DATA_SOURCE_PIN_12
(12) 16 bit public data provided by Pin 12
SerialWombatDataSource::SW_DATA_SOURCE_PIN_2_MV
@ SW_DATA_SOURCE_PIN_2_MV
(102) Pin 2 public output expressed in mV (for analog modes only)
SerialWombatCommands::COMMAND_BINARY_SET_PIN_BUFFFER
@ COMMAND_BINARY_SET_PIN_BUFFFER
(0x82)
PIN_MODE_UART_RX_TX
@ PIN_MODE_UART_RX_TX
(17)
Definition: SerialWombat.h:245
SerialWombatDataSource::SW_DATA_SOURCE_1HZ_SQUARE
@ SW_DATA_SOURCE_1HZ_SQUARE
(167) Square wave that alternates between 0 and 65535 every 512 frames
SerialWombatDataSource::SW_DATA_SOURCE_PIN_18_MV
@ SW_DATA_SOURCE_PIN_18_MV
(118) Pin 18 public output expressed in mV (for analog modes only)
PIN_MODE_HS_SERVO
@ PIN_MODE_HS_SERVO
(26)
Definition: SerialWombat.h:252
SerialWombatPulseTimer.h
SerialWombatResistanceInput.h
SerialWombatCommands::COMMAND_BINARY_QUEUE_INITIALIZE
@ COMMAND_BINARY_QUEUE_INITIALIZE
(0x90)
SerialWombatChip::address
uint8_t address
The I2C address of the SerialWombatChip instance.
Definition: SerialWombat.h:682
SerialWombatCommands::COMMAND_BINARY_READ_EEPROM
@ COMMAND_BINARY_READ_EEPROM
(0xA2)
SerialWombatCommands::COMMAND_UART0_TX_7BYTES
@ COMMAND_UART0_TX_7BYTES
(0xB0)
SerialWombatDataSource::SW_DATA_SOURCE_OVERRUN_FRAMES
@ SW_DATA_SOURCE_OVERRUN_FRAMES
(69) The number of frames that ran more than 1mS
SerialWombatCommands::COMMAND_BINARY_QUEUE_ADD_BYTES
@ COMMAND_BINARY_QUEUE_ADD_BYTES
(0x91)
SerialWombatDataSource::SW_DATA_SOURCE_PIN_11
@ SW_DATA_SOURCE_PIN_11
(11) 16 bit public data provided by Pin 11