SparkFun Toolkit  v1.0.5-6-g34ffa30
Core Functionality Library
Loading...
Searching...
No Matches
sfTkIBus.h
Go to the documentation of this file.
1
14#pragma once
15
16#include "sfToolkit.h"
17#include <stddef.h>
18
29
34
39
44
49
54
59
64
73{
74 public:
79 {
81 }
82
93 virtual sfTkError_t writeRegister(uint8_t *devReg, size_t regLength, const uint8_t *data, size_t length) = 0;
94
103 virtual sfTkError_t writeData(uint8_t data)
104 {
105 return writeRegister(nullptr, 0, &data, sizeof(uint8_t));
106 }
107
117 {
118 return writeData(data);
119 }
120
128 virtual sfTkError_t writeData(uint16_t data)
129 {
130 // byte swap?
132 data = sftk_byte_swap(data);
133
134 return writeRegister(nullptr, 0, (uint8_t *)&data, sizeof(uint16_t));
135 }
136
145 {
146 return writeData(data);
147 }
148
157 virtual sfTkError_t writeData(uint32_t data)
158 {
159 // byte swap?
161 data = sftk_byte_swap(data);
162
163 return writeRegister(nullptr, 0, (uint8_t *)&data, sizeof(uint32_t));
164 }
165
175 {
176 return writeData(data);
177 }
187 virtual sfTkError_t writeData(const uint8_t *data, size_t length)
188 {
189 return writeRegister(nullptr, 0, data, length);
190 }
191
201 sfTkError_t writeRegister(uint8_t devReg, uint8_t data)
202 {
203 return writeRegister(&devReg, sizeof(devReg), &data, sizeof(uint8_t));
204 }
205
215 sfTkError_t writeRegisterUInt8(uint8_t reg, uint8_t data)
216 {
217 return writeRegister(reg, data);
218 }
219
229 virtual sfTkError_t writeRegister(uint8_t devReg, const uint16_t data)
230 {
231 // swap the data?
232 uint16_t value = data;
234 value = sftk_byte_swap(value);
235
236 return writeRegister(&devReg, sizeof(devReg), (uint8_t *)&value, sizeof(value));
237 }
238
248 sfTkError_t writeRegisterUInt16(uint8_t reg, uint16_t data)
249 {
250 return writeRegister(reg, data);
251 }
252
264 virtual sfTkError_t writeRegister(uint8_t devReg, const uint32_t data)
265 {
266 uint32_t value = data;
267 // swap the data?
269 value = sftk_byte_swap(value);
270
271 return writeRegister(&devReg, sizeof(devReg), (uint8_t *)&value, sizeof(data));
272 }
273
285 sfTkError_t writeRegisterUInt32(uint8_t reg, uint32_t data)
286 {
287 return writeRegister(reg, data);
288 }
289
300 virtual sfTkError_t writeRegister(uint8_t devReg, const uint8_t *data, size_t length)
301 {
302 return writeRegister(&devReg, sizeof(devReg), data, length);
303 }
304
316 virtual sfTkError_t writeRegister(uint16_t devReg, const uint8_t *data, size_t length)
317 {
319 devReg = sftk_byte_swap(devReg);
320
321 return writeRegister((uint8_t *)&devReg, sizeof(devReg), data, length);
322 }
323
336 virtual sfTkError_t writeRegister(uint16_t devReg, const uint8_t data)
337 {
338 return writeRegister(devReg, &data, 1);
339 }
340
353 sfTkError_t writeRegisterUInt8(uint16_t reg, const uint8_t data)
354 {
355 return writeRegister(reg, data);
356 }
368 virtual sfTkError_t writeRegister(uint16_t devReg, const uint16_t data)
369 {
370 return writeRegister(devReg, &data, sizeof(data));
371 }
372
384 sfTkError_t writeRegisterUInt16(uint16_t reg, const uint16_t data)
385 {
386 return writeRegister(reg, data);
387 }
388
401 virtual sfTkError_t writeRegister(uint16_t devReg, const uint32_t data)
402 {
403 uint32_t value = data;
404 // do we need to swap the data value? Note the address is swapped in the called writeReg16 method
406 value = sftk_byte_swap(data);
407
408 return writeRegister(devReg, (const uint8_t *)&value, sizeof(uint32_t));
409 }
410
423 sfTkError_t writeRegisterUInt32(uint16_t reg, const uint32_t data)
424 {
425 return writeRegister(reg, data);
426 }
438 virtual sfTkError_t writeRegister(uint16_t devReg, const uint16_t *data, size_t length)
439 {
440 // if the system byte order is the same as the desired order, just send the buffer
442 return writeRegister(devReg, (const uint8_t *)data, length * sizeof(uint16_t));
443
444 // swap data
445 uint16_t data16[length];
446
447 for (size_t i = 0; i < length; i++)
448 data16[i] = sftk_byte_swap(data[i]);
449 return writeRegister(devReg, (const uint8_t *)data16, length * sizeof(uint16_t));
450 }
451
452 //---------------------------------------------------------------------------
453 // Read Methods
454 //---------------------------------------------------------------------------
455
456 // The method that must be implemented - at a minimum.
468 virtual sfTkError_t readRegister(uint8_t *devReg, size_t regLength, uint8_t *data, size_t numBytes,
469 size_t &readBytes, uint32_t read_delay = 0) = 0;
479 virtual sfTkError_t readRegister(uint8_t devReg, uint8_t &data)
480 {
481 size_t nRead;
482 sfTkError_t retVal = readRegister(&devReg, sizeof(devReg), &data, sizeof(data), nRead);
483
484 return (retVal == ksfTkErrOk && nRead == sizeof(uint8_t) ? ksfTkErrOk : retVal);
485 }
486
496 sfTkError_t readRegisterUInt8(uint8_t devReg, uint8_t &data)
497 {
498 return readRegister(devReg, data);
499 }
500
509 virtual sfTkError_t readRegister(uint8_t devReg, uint16_t &data)
510 {
511 size_t nRead;
512 sfTkError_t retVal = readRegister(&devReg, sizeof(devReg), (uint8_t *)&data, sizeof(data), nRead);
513
514 // The data is a uint16 - byte swap the result?
515 if (retVal == ksfTkErrOk && sftk_system_byteorder() != _byteOrder)
516 data = sftk_byte_swap(data);
517
518 return (retVal == ksfTkErrOk && nRead == sizeof(uint16_t) ? ksfTkErrOk : retVal);
519 }
520
529 sfTkError_t readRegisterUInt16(uint8_t devReg, uint16_t &data)
530 {
531 return readRegister(devReg, data);
532 }
533
542 virtual sfTkError_t readRegister(uint8_t devReg, uint32_t &data)
543 {
544 size_t nRead;
545 sfTkError_t retVal = readRegister(&devReg, sizeof(devReg), (uint8_t *)&data, sizeof(data), nRead);
546
547 // The data is a uint32 - byte swap the result?
548 if (retVal == ksfTkErrOk && sftk_system_byteorder() != _byteOrder)
549 data = sftk_byte_swap(data);
550
551 return (retVal == ksfTkErrOk && nRead == sizeof(uint32_t) ? ksfTkErrOk : retVal);
552 }
553
562 sfTkError_t readRegisterUInt32(uint8_t devReg, uint32_t &data)
563 {
564 return readRegister(devReg, data);
565 }
566
578 virtual sfTkError_t readRegister(uint8_t devReg, uint8_t *data, size_t numBytes, size_t &readBytes)
579 {
580 return readRegister(&devReg, sizeof(devReg), data, numBytes, readBytes);
581 }
582
593 virtual sfTkError_t readRegister(uint16_t reg, uint8_t &value)
594 {
595 size_t readBytes = 0;
596
597 // this is a reg 16 address - so call the method to manage this. Note - it manages the
598 // byte swapping of the address.
599 sfTkError_t retValue = readRegister(reg, (uint8_t *)&value, sizeof(value), readBytes);
600
601 return retValue;
602 }
603
614 sfTkError_t readRegisterUInt8(uint16_t devReg, uint8_t &data)
615 {
616 return readRegister(devReg, data);
617 }
618
629 virtual sfTkError_t readRegister(uint16_t reg, uint16_t &value)
630 {
631 size_t readBytes = 0;
632
633 // this is a reg 16 address - so call the method to manage this. Note - it manages the
634 // byte swapping of the address.
635 sfTkError_t retValue = readRegister(reg, (uint8_t *)&value, sizeof(value), readBytes);
636
637 // The data is a uint16 - byte swap the result?
638 if (retValue == ksfTkErrOk && sftk_system_byteorder() != _byteOrder)
639 value = sftk_byte_swap(value);
640
641 return retValue;
642 }
643
654 sfTkError_t readRegisterUInt16(uint16_t devReg, uint16_t &data)
655 {
656 return readRegister(devReg, data);
657 }
658
669 virtual sfTkError_t readRegister(uint16_t reg, uint32_t &value)
670 {
671 size_t readBytes = 0;
672
673 // this is a reg 16 address - so call the method to manage this. Note - it manages the
674 // byte swapping of the address.
675 sfTkError_t retValue = readRegister(reg, (uint8_t *)&value, sizeof(uint32_t), readBytes);
676
677 // The data is a uint32 - byte swap the result?
678 if (retValue == ksfTkErrOk && sftk_system_byteorder() != _byteOrder)
679 value = sftk_byte_swap(value);
680
681 return retValue;
682 }
683
694 sfTkError_t readRegisterUInt32(uint16_t devReg, uint32_t &data)
695 {
696 return readRegister(devReg, data);
697 }
698
699 // Overload version
711 sfTkError_t readRegister(uint16_t devReg, uint8_t *data, size_t numBytes, size_t &readBytes)
712 {
713 // The address is a uint16 - byte swap?
715 devReg = sftk_byte_swap(devReg);
716
717 return readRegister((uint8_t *)&devReg, sizeof(devReg), data, numBytes, readBytes);
718 }
719
731 virtual sfTkError_t readRegister(uint16_t reg, uint16_t *data, size_t length, size_t &read16)
732 {
733 sfTkError_t retValue = readRegister(reg, (uint8_t *)data, length * 2, read16);
734
735 // Do we need to flip the byte order?
736 if (retValue == ksfTkErrOk && sftk_system_byteorder() != _byteOrder)
737 {
738 for (size_t i = 0; i < length; i++)
739 data[i] = sftk_byte_swap(data[i]);
740 }
741 read16 = read16 / 2; // convert to words
742 return retValue; // added return statement to return status
743 }
744
754 virtual uint8_t type(void)
755 {
756 return 0;
757 }
765 {
766 _byteOrder = order;
767 }
768
775 {
776 return _byteOrder;
777 }
778
779 protected:
784};
Interface that defines the communication bus for the SparkFun Electronics Toolkit.
Definition: sfTkIBus.h:73
sfTkError_t writeRegisterUInt32(uint16_t reg, const uint32_t data)
Writes a 32-bit data value to a specified device register.
Definition: sfTkIBus.h:423
sfTkError_t writeRegisterUInt8(uint16_t reg, const uint8_t data)
Writes a 8-bit data value to a specified device register.
Definition: sfTkIBus.h:353
sfTkError_t readRegisterUInt32(uint8_t devReg, uint32_t &data)
Read a 32 bit value from the given register.
Definition: sfTkIBus.h:562
virtual sfTkError_t writeRegister(uint16_t devReg, const uint32_t data)
Writes a 32-bit data value to a specified device register.
Definition: sfTkIBus.h:401
virtual sfTkError_t writeData(const uint8_t *data, size_t length)
Writes an array.
Definition: sfTkIBus.h:187
sfTkByteOrder byteOrder(void)
Get the current byte order.
Definition: sfTkIBus.h:774
sfTkError_t readRegisterUInt8(uint8_t devReg, uint8_t &data)
Read a single byte from the given register.
Definition: sfTkIBus.h:496
sfTkError_t readRegisterUInt16(uint8_t devReg, uint16_t &data)
Read a single word (16 bit) from the given register.
Definition: sfTkIBus.h:529
virtual sfTkError_t writeRegister(uint8_t *devReg, size_t regLength, const uint8_t *data, size_t length)=0
Writes an array of bytes to a register on the target address. Supports any address size.
virtual sfTkError_t writeRegister(uint16_t devReg, const uint16_t data)
Writes a 16-bit data value to a specified device 16bit register.
Definition: sfTkIBus.h:368
virtual sfTkError_t writeData(uint16_t data)
Send a 16 bit value to the device.
Definition: sfTkIBus.h:128
virtual sfTkError_t writeRegister(uint16_t devReg, const uint8_t data)
Writes a 8-bit data value to a specified device register.
Definition: sfTkIBus.h:336
virtual sfTkError_t readRegister(uint16_t reg, uint32_t &value)
Overloaded function to read a 32-bit value from the given 16-bit register address.
Definition: sfTkIBus.h:669
sfTkIBus()
Constructor.
Definition: sfTkIBus.h:78
sfTkByteOrder _byteOrder
Definition: sfTkIBus.h:783
sfTkError_t writeRegisterUInt16(uint16_t reg, const uint16_t data)
Writes a 16-bit data value to a specified device 16bit register.
Definition: sfTkIBus.h:384
virtual sfTkError_t readRegister(uint16_t reg, uint8_t &value)
Overloaded function to read a 8-bit value from the given 16-bit register address.
Definition: sfTkIBus.h:593
virtual sfTkError_t writeRegister(uint8_t devReg, const uint16_t data)
Write a single word (16 bit) to the given register.
Definition: sfTkIBus.h:229
sfTkError_t readRegisterUInt8(uint16_t devReg, uint8_t &data)
Overloaded function to read a 8-bit value from the given 16-bit register address.
Definition: sfTkIBus.h:614
virtual sfTkError_t writeRegister(uint8_t devReg, const uint32_t data)
Writes a 32-bit data value to a specified device register.
Definition: sfTkIBus.h:264
sfTkError_t readRegisterUInt32(uint16_t devReg, uint32_t &data)
Overloaded function to read a 32-bit value from the given 16-bit register address.
Definition: sfTkIBus.h:694
virtual sfTkError_t readRegister(uint16_t reg, uint16_t &value)
Overloaded function to read a 16-bit value from the given 16-bit register address.
Definition: sfTkIBus.h:629
virtual sfTkError_t writeData(uint8_t data)
Writes a 8-bit data value.
Definition: sfTkIBus.h:103
virtual sfTkError_t readRegister(uint8_t devReg, uint32_t &data)
Read a 32 bit value from the given register.
Definition: sfTkIBus.h:542
sfTkError_t writeRegisterUInt8(uint8_t reg, uint8_t data)
Write a single byte (8 bit) to the given register.
Definition: sfTkIBus.h:215
sfTkError_t writeRegister(uint8_t devReg, uint8_t data)
Write a single byte (8 bit) to the given register.
Definition: sfTkIBus.h:201
virtual sfTkError_t readRegister(uint8_t devReg, uint16_t &data)
Read a single word (16 bit) from the given register.
Definition: sfTkIBus.h:509
sfTkError_t writeUInt16(uint16_t data)
Send a 16 bit value to the device.
Definition: sfTkIBus.h:144
virtual sfTkError_t writeRegister(uint8_t devReg, const uint8_t *data, size_t length)
Writes a number of bytes starting at the given register's address.
Definition: sfTkIBus.h:300
sfTkError_t readRegister(uint16_t devReg, uint8_t *data, size_t numBytes, size_t &readBytes)
Reads a specified number of bytes from a given register with a 16bit address.
Definition: sfTkIBus.h:711
virtual sfTkError_t writeRegister(uint16_t devReg, const uint16_t *data, size_t length)
Writes a number of uint16's starting at the given register's 16-bit address.
Definition: sfTkIBus.h:438
virtual uint8_t type(void)
Get the type of the object.
Definition: sfTkIBus.h:754
sfTkError_t writeUInt32(uint32_t data)
Writes a 32-bit data value.
Definition: sfTkIBus.h:174
sfTkError_t writeRegisterUInt16(uint8_t reg, uint16_t data)
Write a single word (16 bit) to the given register.
Definition: sfTkIBus.h:248
virtual sfTkError_t readRegister(uint8_t *devReg, size_t regLength, uint8_t *data, size_t numBytes, size_t &readBytes, uint32_t read_delay=0)=0
Reads an array of bytes to a register on the target address. Supports any address size.
sfTkError_t writeUInt8(uint8_t data)
Writes a 8-bit data value.
Definition: sfTkIBus.h:116
virtual sfTkError_t readRegister(uint8_t devReg, uint8_t *data, size_t numBytes, size_t &readBytes)
Reads data from a specified register.
Definition: sfTkIBus.h:578
virtual sfTkError_t writeRegister(uint16_t devReg, const uint8_t *data, size_t length)
Writes a number of bytes starting at the given register's 16-bit address.
Definition: sfTkIBus.h:316
sfTkError_t readRegisterUInt16(uint16_t devReg, uint16_t &data)
Overloaded function to read a 16-bit value from the given 16-bit register address.
Definition: sfTkIBus.h:654
void setByteOrder(sfTkByteOrder order)
Set the byte order for multi-byte data transfers.
Definition: sfTkIBus.h:764
virtual sfTkError_t writeData(uint32_t data)
Writes a 32-bit data value.
Definition: sfTkIBus.h:157
sfTkError_t writeRegisterUInt32(uint8_t reg, uint32_t data)
Writes a 32-bit data value to a specified device register.
Definition: sfTkIBus.h:285
virtual sfTkError_t readRegister(uint16_t reg, uint16_t *data, size_t length, size_t &read16)
Reads a 16-bit block of data from the given 16-bit register address.
Definition: sfTkIBus.h:731
virtual sfTkError_t readRegister(uint8_t devReg, uint8_t &data)
Read a single byte from the given register.
Definition: sfTkIBus.h:479
const sfTkError_t ksfTkErrBaseBus
A base value for bus errors. All bus errors are greater than this value, in the 1000 range.
Definition: sfTkError.h:56
const sfTkError_t ksfTkErrOk
The error code value for success. This is always 0.
Definition: sfTkError.h:46
int32_t sfTkError_t
Definition: sfTkError.h:35
const sfTkError_t ksfTkErrFail
General error code for a failure. Note all errors are negative.
Definition: sfTkError.h:42
const sfTkError_t ksfTkErrBusTimeout
Returned when a bus system times out.
Definition: sfTkIBus.h:33
const sfTkError_t ksfTkErrBusUnderRead
Returned when the bus is under read. Warning.
Definition: sfTkIBus.h:58
const sfTkError_t ksfTkErrBusNotEnabled
Returned when the bus is not enabled. Warning.
Definition: sfTkIBus.h:63
const sfTkError_t ksfTkErrBusNullSettings
Returned when the bus settings are null, invalid or on set/initialised.
Definition: sfTkIBus.h:48
const sfTkError_t ksfTkErrBusNullBuffer
Returned when the buffer is null or invalid.
Definition: sfTkIBus.h:53
const sfTkError_t ksfTkErrBusNoResponse
Returned when a bus system does not respond.
Definition: sfTkIBus.h:38
const sfTkError_t ksfTkErrBusDataTooLong
Returned when the data to be sent is too long or received is too short.
Definition: sfTkIBus.h:43
const sfTkError_t ksfTkErrBusNotInit
Define our error codes for the bus. Note Errors are negative, warnings/info positive,...
Definition: sfTkIBus.h:28
sfTkByteOrder sftk_system_byteorder(void)
C function - Runtime check for system byte order.
Definition: sfToolkit.cpp:24
uint8_t sftk_byte_swap(uint8_t i)
to catch 8 bit calls for byte swap
Definition: sfToolkit.cpp:35
Header file for the SparkFun Toolkit.
sfTkByteOrder
Common include file for the core of the SparkFun Electronics Toolkit.
Definition: sfToolkit.h:27