Serial Wombat Arduino Library
SerialWombat.h
Go to the documentation of this file.
1 #ifndef SERIAL_WOMBAT_H__
2 #define SERIAL_WOMBAT_H__
3 #include <stdint.h>
4 #include "HardwareSerial.h" // Using "" rather than <> for compatibility with Visual C++ simulation project
5 #include "Wire.h"// Using "" rather than <> for compatibility with Visual C++ simulation project
6 #include "Arduino.h"
7 
11 typedef enum
12 {
13  SW_LOW = 0,
14  SW_HIGH = 1,
15  SW_INPUT = 2,
17 
18 #define ERROR_HOST_INCORRECT_NUMBER_BYTES_WRITTEN 0x10000
19 #define ERROR_HOST_DATA_TOO_LONG 0x10001
20 #define ERROR_HOST_NACK_ADDRESS 0x10002
21 #define ERROR_HOST_NACK_DATA 0x10003
22 #define ERROR_HOST_OTHER_I2C_ERROR 0x10004
23 
24 #define WOMBAT_MAXIMUM_PINS 19
25 typedef enum
26 {
27  CMD_ECHO ='!',
30  CMD_RESET = 'R',
32  CMD_RESYNC = 'U',
33  CMD_VERSION = 'V',
47 
49 
50 
51 typedef enum {
64 
65 
66 
73 {
74 public:
75  SerialWombat();
83  void begin(HardwareSerial &serial);
95  void begin(HardwareSerial& serial, bool reset);
96 
105  void begin(TwoWire &wire, uint8_t i2cAddress);
106 
114  void begin(uint8_t i2cAddress);
115 
127  void begin(TwoWire& wire, uint8_t i2cAddress, bool reset);
128  ~SerialWombat();
129 
139  int sendPacket( uint8_t tx[], uint8_t rx[]);
140 
148  int sendPacket(uint8_t tx[]);
149 
156  char* readVersion(void);
157 
165  uint16_t readPublicData(uint8_t pin);
166 
170  uint16_t writePublicData(uint8_t pin, uint16_t value);
171 
179  uint16_t readSupplyVoltage_mV(void);
180 
185  void hardwareReset();
186 
196  void pinMode(uint8_t pin, uint8_t mode);
197 
205  void pinMode(uint8_t pin, uint8_t mode, bool pullDown, bool openDrain);
206 
213  void digitalWrite(uint8_t pin, uint8_t val);
214 
218  int digitalRead(uint8_t pin);
219 
227  int analogRead(uint8_t pin);
228 
238  void analogWrite(uint8_t pin, int val);
239 
240 
249  bool queryVersion();
250 
255  uint32_t readFramesExecuted();
256 
262 
263  uint16_t readOverflowFrames();
264 
272  void jumpToBoot();
273 
292  uint8_t readRamAddress(uint16_t address);
293 
311 
312  void writeRamAddress(uint16_t address, uint8_t value);
313 
326 
327  uint32_t readFlashAddress(uint32_t address);
328 
337  void sleep();
338 
340  void wake();
341 
346  uint16_t _supplyVoltagemV = 0;
347 
349  uint8_t model[4] = { 0 };
350 
352  uint8_t fwVersion[4] = { 0 };
353 
354  uint8_t uniqueIdentifier[16];
356 
358  uint16_t deviceRevision;
360  uint32_t errorCount = 0;
361 
363  uint32_t errorNum = 0;
364 
365 
366 private:
367 
368  uint8_t address = 0;
369  char version[8] = { 0 };
370  HardwareSerial * Serial = NULL;
371  TwoWire* i2cInterface = NULL;
372  uint8_t _pinmode[WOMBAT_MAXIMUM_PINS]={}; // Includes Pullup
373  bool _pullDown[WOMBAT_MAXIMUM_PINS]={};
374  bool _openDrain[WOMBAT_MAXIMUM_PINS]={};
375  bool _asleep = false;
376  void configureDigitalPin(uint8_t pin, uint8_t highLow);
377  unsigned long sendReadyTime = 0;
378  void initialize();
379  void readUniqueIdentifier();
380  void readDeviceIdentifier();
381 
382 };
383 
385 #define SW_LE16(_a) (uint8_t)(_a & 0xFF), (uint8_t)(_a >>8)
386 
387 #include "SerialWombatServo.h"
388 #include "SerialWombatPWM.h"
389 #include "SerialWombatAnalogInput.h"
391 #include "SerialWombatQuadEnc.h"
393 #include "SerialWombatPulseTimer.h"
394 #include "SerialWombatUART.h"
395 #include "SerialWombatWatchdog.h"
396 
397 #endif
SerialWombat::analogRead
int analogRead(uint8_t pin)
Configures pin as analog input and does an immediate A/D conversion.
Definition: SerialWombat.cpp:272
SerialWombat::hardwareReset
void hardwareReset()
Send a reset command to the Serial Wombat chip.
Definition: SerialWombat.cpp:230
SerialWombat::analogWrite
void analogWrite(uint8_t pin, int val)
Set a pin to PWM output.
Definition: SerialWombat.cpp:280
CMD_SET_PIN_MODE4
@ CMD_SET_PIN_MODE4
Definition: SerialWombat.h:41
PIN_MODE_ANALOGINPUT
@ PIN_MODE_ANALOGINPUT
Definition: SerialWombat.h:54
SerialWombat::readPublicData
uint16_t readPublicData(uint8_t pin)
Read the 16 Bit public data associated with a Serial Wombat Pin Mode.
Definition: SerialWombat.cpp:411
CMD_SUPPLYVOLTAGE
@ CMD_SUPPLYVOLTAGE
Definition: SerialWombat.h:34
SerialWombatQuadEnc.h
SerialWombatWatchdog.h
SerialWombat::errorNum
uint32_t errorNum
The last error number reported.
Definition: SerialWombat.h:363
CMD_VERSION
@ CMD_VERSION
Definition: SerialWombat.h:33
SerialWombat::digitalRead
int digitalRead(uint8_t pin)
Reads the state of a Pin.
Definition: SerialWombat.cpp:260
SerialWombat::digitalWrite
void digitalWrite(uint8_t pin, uint8_t val)
Set an output pin High or Low.
Definition: SerialWombat.cpp:254
SerialWombatPinMode_t
SerialWombatPinMode_t
Definition: SerialWombat.h:51
SerialWombatAnalogInput.h
SerialWombat::readRamAddress
uint8_t readRamAddress(uint16_t address)
Read Address from RAM based on 16 bit address.
Definition: SerialWombat.cpp:332
SerialWombat::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:361
SerialWombat::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:107
SerialWombat::errorCount
uint32_t errorCount
Incremented every time a communication or command error is detected.
Definition: SerialWombat.h:360
SerialWombat::model
uint8_t model[4]
Contains the last model retreived by queryVersion() as a zero-terminated string.
Definition: SerialWombat.h:349
PIN_MODE_WATCHDOG
@ PIN_MODE_WATCHDOG
Definition: SerialWombat.h:57
PIN_MODE_CONTROLLED
@ PIN_MODE_CONTROLLED
Definition: SerialWombat.h:53
SerialWombat::writePublicData
uint16_t writePublicData(uint8_t pin, uint16_t value)
Write a 16 bit value to a Serial Wombat pin Mode.
Definition: SerialWombat.cpp:419
SerialWombat::_supplyVoltagemV
uint16_t _supplyVoltagemV
Definition: SerialWombat.h:346
PIN_MODE_PWM
@ PIN_MODE_PWM
Definition: SerialWombat.h:59
SerialWombatServo.h
SerialWombatProtectedOutput.h
CMD_SET_PIN_MODE3
@ CMD_SET_PIN_MODE3
Definition: SerialWombat.h:40
PIN_MODE_SERVO
@ PIN_MODE_SERVO
Definition: SerialWombat.h:55
SerialWombat::readOverflowFrames
uint16_t readOverflowFrames()
Get the number of times an overflow Frame has occured.
Definition: SerialWombat.cpp:321
SerialWombatPWM.h
CMD_READ_BUFFER_ASCII
@ CMD_READ_BUFFER_ASCII
Definition: SerialWombat.h:28
PIN_MODE_PULSETIMER
@ PIN_MODE_PULSETIMER
Definition: SerialWombat.h:61
SW_HIGH
@ SW_HIGH
Definition: SerialWombat.h:14
CMD_SET_PIN_MODE8
@ CMD_SET_PIN_MODE8
Definition: SerialWombat.h:45
CMD_SET_PIN_MODE9
@ CMD_SET_PIN_MODE9
Definition: SerialWombat.h:46
CMD_SET_PIN_MODE1
@ CMD_SET_PIN_MODE1
Definition: SerialWombat.h:38
SerialWombat::readSupplyVoltage_mV
uint16_t readSupplyVoltage_mV(void)
Measure the Serial Wombat chip's Supply voltage.
Definition: SerialWombat.cpp:222
SerialWombatUART.h
SerialWombat::deviceIdentifier
uint16_t deviceIdentifier
Definition: SerialWombat.h:357
SerialWombat::uniqueIdentifier
uint8_t uniqueIdentifier[16]
Definition: SerialWombat.h:354
CMD_SET_PIN_MODE2
@ CMD_SET_PIN_MODE2
Definition: SerialWombat.h:39
WOMBAT_MAXIMUM_PINS
#define WOMBAT_MAXIMUM_PINS
Definition: SerialWombat.h:24
CMD_ASCII_SET_PIN
@ CMD_ASCII_SET_PIN
Definition: SerialWombat.h:29
SerialWombat::readVersion
char * readVersion(void)
Request version string (combined model and firmware) and return pointer to it.
Definition: SerialWombat.cpp:212
PIN_MODE_UNKNOWN
@ PIN_MODE_UNKNOWN
Definition: SerialWombat.h:62
CMD_SET_PIN_MODE0
@ CMD_SET_PIN_MODE0
Definition: SerialWombat.h:37
SerialWombat::readFlashAddress
uint32_t readFlashAddress(uint32_t address)
Read Address from Flash based on 32 bit address.
Definition: SerialWombat.cpp:346
CMD_SET_BUFFER_ASCII
@ CMD_SET_BUFFER_ASCII
Definition: SerialWombat.h:31
SerialWombatCommand_t
SerialWombatCommand_t
Definition: SerialWombat.h:25
CMD_SETBUFFERBINARY
@ CMD_SETBUFFERBINARY
Definition: SerialWombat.h:36
SerialWombatPinState_t
SerialWombatPinState_t
Definition: SerialWombat.h:11
CMD_READBUFFERBINARY
@ CMD_READBUFFERBINARY
Definition: SerialWombat.h:35
CMD_RESYNC
@ CMD_RESYNC
Definition: SerialWombat.h:32
SW_INPUT
@ SW_INPUT
Definition: SerialWombat.h:15
SerialWombat
Definition: SerialWombat.h:72
SW_LOW
@ SW_LOW
Definition: SerialWombat.h:13
SerialWombat::sleep
void sleep()
Shuts down most functions of the Serial Wombat chip reducing power consumption.
Definition: SerialWombat.cpp:354
SerialWombat::writeRamAddress
void writeRamAddress(uint16_t address, uint8_t value)
Write byte to Address in RAM based on 16 bit address.
Definition: SerialWombat.cpp:340
CMD_RESET
@ CMD_RESET
Definition: SerialWombat.h:30
CMD_SET_PIN_MODE7
@ CMD_SET_PIN_MODE7
Definition: SerialWombat.h:44
PIN_MODE_QUADRATUREENCODER
@ PIN_MODE_QUADRATUREENCODER
Definition: SerialWombat.h:56
CMD_SET_PIN_MODE5
@ CMD_SET_PIN_MODE5
Definition: SerialWombat.h:42
SerialWombatDebouncedInput.h
SerialWombat::jumpToBoot
void jumpToBoot()
Jump to Bootloader and wait for a UART download of new firmware.
Definition: SerialWombat.cpp:326
SerialWombat::~SerialWombat
~SerialWombat()
Definition: SerialWombat.cpp:13
PIN_MODE_PROTECTED_OUTPUT
@ PIN_MODE_PROTECTED_OUTPUT
Definition: SerialWombat.h:58
SerialWombat::pinMode
void pinMode(uint8_t pin, uint8_t mode)
Set a pin to INPUT or OUTPUT.
Definition: SerialWombat.cpp:237
SerialWombat::SerialWombat
SerialWombat()
Definition: SerialWombat.cpp:7
SerialWombat::deviceRevision
uint16_t deviceRevision
Definition: SerialWombat.h:358
PIN_MODE_DIGITALIO
@ PIN_MODE_DIGITALIO
Definition: SerialWombat.h:52
SerialWombat::uniqueIdentifierLength
uint8_t uniqueIdentifierLength
Definition: SerialWombat.h:355
CMD_ECHO
@ CMD_ECHO
Definition: SerialWombat.h:27
CMD_SET_PIN_MODE6
@ CMD_SET_PIN_MODE6
Definition: SerialWombat.h:43
SerialWombat::queryVersion
bool queryVersion()
Send a version request to the Serial Wombat chip.
Definition: SerialWombat.cpp:292
SerialWombat::readFramesExecuted
uint32_t readFramesExecuted()
Get the number of 1mS frames that have been executed since Serial Wombat chip reset.
Definition: SerialWombat.cpp:312
PIN_MODE_UART_RX_TX
@ PIN_MODE_UART_RX_TX
Definition: SerialWombat.h:60
SerialWombatPulseTimer.h
SerialWombat::begin
void begin(HardwareSerial &serial)
initialize a Serial Wombat chip to use a Serial Interface.
Definition: SerialWombat.cpp:18
SerialWombat::fwVersion
uint8_t fwVersion[4]
Contains the last firmware Version retreived by queryVersion() as a zero-terminated string.
Definition: SerialWombat.h:352