DUDS
Distributed Update of Data from Something
Todo List
Member duds::data::ExtendedUnit::ExtendedUnit (Unit u, std::uint32_t s)
Maybe make this public along with some macro to set s? Doing so would allow easy creation of constant ExtendedUnit objects, like the Units in Units.hpp. May have to specify the offset it pieces, though.
Member duds::data::ExtendedUnit::ExtendedUnit (Unit u, O o, int s)
Document the offset and scalar better.
Class duds::data::GenericSample< VT, QT >
Should the unit field be for the quality fields, or should the quality fields be changed to Quantity objects?
Member duds::data::GenericSample< VT, QT >::isClear () const
Reconsider the checked condition.
Member duds::data::GenericValue
Maybe a map with UUID keys, too?
Member duds::data::GenericValueStringVisitor::operator() (const Quantity &q) const
Include the unit name.
Member duds::data::GenericValueStringVisitor::operator() (const ExtendedQuantity< Q > &q) const
Include the unit name.
Class duds::data::Quantity
Consider allowing user-defined literals with common units.
Class duds::data::Unit
Rename to SiUnit? Not sure.
Namespace duds::data::units
Add ability to get a string, both long formal names in multiple languages and short symbols, that represents what the Unit contains.
Class duds::general::BitFlags< Tag, BitsType >

Write something that is not part of this class that can serialize the flags in a human readable manner with names for the flags that does not impose a particular order on the flags for input.

Write support for stream I/O, or at least stream output, with human readable flags. Even better if it has I18N support, at least for output.

Member duds::general::BitFlags< Tag, BitsType >::bitsType
I do not like the case of the typedef, but do like the case of the template parameter. Such a bother.
Member duds::general::LanguageTaggedString::operator< (const LanguageTaggedString &lts) const
Should this use both strings? How will that work with std::multiset?
Class duds::general::NddArray< T >
The functions begin() and end() allow for iterating over the elements already using a pointer as the iterator. Would be nice to have an iterator that provides position-value pairs, too, so the array position of the element can be easily queried.
Member duds::general::NddArray< T >::makeArray ()
Handle overflow of elems.
Member duds::general::NddArray< T >::resize (const Dim &dims)
Make another version (noexcept?) of this function that uses the move assignment operator. Failures will recover slower, but successes could be much faster.
Member duds::general::NddArray< T >::resize (const DimList &dims)
Make another version (noexcept?) of this function that uses the move assignment operator. Failures will recover slower, but successes could be much faster.
Class duds::general::NddArrayError
Consider dropping this in favor of using more general exception classes.
Class duds::hardware::devices::clocks::GenericClock< SVT, SQT, TVT, TQT >
Need to include a way to get a UUID for the clock from a config file.
Member duds::hardware::devices::clocks::GenericClock< SVT, SQT, TVT, TQT >::GenericClock (const boost::uuids::uuid &id)

Allow naming the clock sensor object.

Provide the name of the clock to the Something base class.

Class duds::hardware::devices::DeviceError
Expand the set of general device errors to handle a wider variety of errors to limit the need for device specific errors. However, maybe all errors from a device should also be derived from a single class using multiple inheritance.
Class duds::hardware::devices::displays::HD44780
Support the brightness control available on some VFDs.
Member duds::hardware::devices::GenericDevice< SVT, SQT, TVT, TQT >::currentMeasurement (unsigned int sIdx=0) const
Throw exception if index is bad.
Class duds::hardware::devices::GenericDevice< SVT, SQT, TVT, TQT >::DestructCounter
Would this be useful in a generic form outside this class?
Member duds::hardware::devices::GenericDevice< SVT, SQT, TVT, TQT >::sample ()=0
Is this needed, or should sample(const ClockSptr &) be called with an empty shared pointer?
Member duds::hardware::devices::GenericDevice< SVT, SQT, TVT, TQT >::sensor (unsigned int sIdx=0) const
Throw exception if index is bad.
Member duds::hardware::devices::GenericSensor< SVT, SQT, TVT, TQT >::idx
Remove above note if this value will remain private.
Member duds::hardware::devices::instruments::AM2320::sample ()
Record time of sample to assign to data read by the next call to sample(). Skip using wake if the last call to sample() was less than 3 seconds (maybe 2.5 to avoid issues if system running slow).
Member duds::hardware::devices::instruments::APDS9301::irradiance () const
Avoid a map lookup.
Member duds::hardware::devices::instruments::APDS9301::period () const
Offer a way to report potential error on the remote clock. Maybe a maximum period function.
Member duds::hardware::devices::instruments::FXOS8700CQ::Settings::threadedSample
Implement a thread for reading.
Member duds::hardware::devices::instruments::INA219::INA219 (std::unique_ptr< duds::hardware::interface::Smbus > &c, double sr)
Find way to reject bad SMBus config.
Member duds::hardware::devices::instruments::LSM9DS1_internal::matchDataRate (std::int8_t &destVal, float &actualRate, float reqRate, const std::map< float, int > &rateMap)
Make something generic like this.
Member duds::hardware::devices::instruments::MCP9808::MCP9808 (std::unique_ptr< duds::hardware::interface::Smbus > &c)
Find way to reject bad SMBus config. Maybe find way to produce SMBus config.
Class duds::hardware::GenericMeasurementSignalQueue< SVT, SQT, TVT, TQT, IS, ISArgs >
Could make a derived class that can resend the signals using GenericMeasurementSignalSource.
Class duds::hardware::interface::ChipBinarySelectManager
Change select() and deselect() to ensure that the operations force a state change, at least momentarily, on the select line.
Class duds::hardware::interface::ConversationExternal
Rename to ConversationBuffer.
Member duds::hardware::interface::ConversationPart::mpf
Change this to cpf.
Member duds::hardware::interface::ConversationPart::MpfInput
Change to CpfInput.
Member duds::hardware::interface::DigitalPinAccessBase::port () const
Throw if dp is null?
Member duds::hardware::interface::DigitalPinCap::ControllablePulldown
Support this.
Member duds::hardware::interface::DigitalPinCap::ControllablePullup
Support this.
Member duds::hardware::interface::DigitalPinConfig::InputState
This is not yet implemented in DigitalPort.
Member duds::hardware::interface::DigitalPinConfig::maxOutputCurrent
Rethink usage; may be useless; not currently used.
Member duds::hardware::interface::DigitalPinConfig::OutputState
This is not yet implemented in DigitalPort.
Member duds::hardware::interface::DigitalPinConfig::reverseCombine (const DigitalPinConfig &oldCfg)
Finish this comment.
Member duds::hardware::interface::DigitalPinMasterSyncSerial::chipAcc
Maybe use multiple classes so that the ChipSelect object exists only for serial interfaces that require it.
Member duds::hardware::interface::DigitalPinMasterSyncSerial::sel
Maybe use multiple classes so that the ChipSelect object exists only for serial interfaces that require it.
Class duds::hardware::interface::DigitalPinSetAccess
Allow a DigitalPort implementation to provide bit flags for use as a mask of the pins to access. The size of the mask will need to be dynamic, like std::vector<bool>. The mask will need to be available as integers with the flags, sort of like std::bitset<T>::to_ulong(). The size of the mask must not be limited to what fits in a single integer, unlike std::bitset.
Class duds::hardware::interface::DigitalPort
Investigate ways to limit the locking of block before using pins. Some read operations likely do not need a lock if certain conditions can be met.
Member duds::hardware::interface::DigitalPort::block
Consider blocking access to port config and port I/O separately.
Member duds::hardware::interface::DigitalPort::configRef (unsigned int localPinId) const
Check fot use of this function.
Member duds::hardware::interface::DigitalPort::input (unsigned int gid, DigitalPinAccessBase::PortData *pdata)
Are these required? A -1 could get through an access object.
Member duds::hardware::interface::DigitalPort::input (const std::vector< unsigned int > &pvec, DigitalPinAccessBase::PortData *pdata)
Are these required? A -1 could get through an access object.
Member duds::hardware::interface::DigitalPort::output (unsigned int gid, bool state, DigitalPinAccessBase::PortData *pdata)
Are these required? A -1 could get through an access object.
Member duds::hardware::interface::DigitalPort::output (const std::vector< unsigned int > &pvec, const std::vector< bool > &state, DigitalPinAccessBase::PortData *pdata)
Are these required? A -1 could get through an access object.
Class duds::hardware::interface::DigitalPortDependentPins
Implement a port made of a string of 74595s as an example.
Member duds::hardware::interface::DigitalPortDependentPins::inspectProposal (unsigned int localPinId, std::vector< DigitalPinConfig > &proposed, std::vector< DigitalPinConfig > &initial) const =0
Are the configs here concrete, or may no-change values still be present?
Member duds::hardware::interface::linux::GpioDevPort::GpioDevPort (const std::vector< unsigned int > &ids, const std::string &path="/dev/gpiochip0", unsigned int firstid=0, const std::string &username="DUDS")
The doc on ids is incorrect; copied from Sysfs. Fix that. Also, maybe change the behavior. Could just specify pins to use and ignore position of pin in the vector.
Class duds::hardware::interface::linux::SpiMasterSyncSerial
Many errors are reported with SyncSerialIoError exceptions; change this to provide better information on what failed.
Member duds::hardware::interface::linux::SpiMasterSyncSerial::open (const std::string &path, Flags flags=MssSpiMode0, int freq=100000)
Report errors better to know what exactly failed.
Member duds::hardware::interface::linux::SysFsPort::FsPin::open (DigitalPinConfig &conf, DigitalPinCap &cap, unsigned int pin)
Flag events and interrupts when support is added.
Member duds::hardware::interface::MasterSyncSerial::configFlags () const noexcept
Change name to flags; change name of member flags.
Member duds::hardware::interface::MasterSyncSerial::retire (MasterSyncSerialAccess *acc)
Maybe only throw in debug builds.
Member duds::hardware::interface::PinConfiguration::Port::typeval
Used for device file path in duds::hardware::interface::linux::GpioDevPort::makeConfiguredPort(), so maybe change the name.
Class duds::hardware::interface::Smbus
Add ability to query SMBus master's capabilities.
Member duds::hardware::interface::test::VirtualPort::inputImpl (const std::vector< unsigned int > &pvec, DigitalPinAccessBase::PortData *pdata)
Provide a way for test code to set the input result.
Member duds::hardware::interface::test::VirtualPort::inputImpl (unsigned int gid, DigitalPinAccessBase::PortData *pdata)
Provide a way for test code to set the input result.
Class duds::hardware::PartModel

One day, read these from a database on demand.

Support adding information, maybe in derived classes, that describe the part. Things like common factory calibration, accuracy, and precision data for various sensors.

Member duds::Something::getName () const
Implement properly.
Class duds::SomethingRef< ST >

Add templated conversions between compatible SomethingRef types using different ST.

Decide if this should be used.

Class duds::SomethingWeakRef< ST >

Add templated conversions between compatible SomethingWeakRef types using different ST.

Decide if this should be used.

Member duds::time::interstellar::Nanoseconds
Maybe this should be signed.
Class duds::time::planetary::LeapSeconds
Allow for leap seconds that occur regularly in a more efficent manner. This will be useful to handle all possible cases of days or Sols or whatnot with lengths including fractional seconds when there is an insistance on using a whole number of seconds to describe the period.
Member duds::time::planetary::LeapSeconds::block
Consider having functions first get a shared pointrt to leaps and then use that shared pointer rather than the member.
Member duds::time::planetary::LeapSeconds::leapMap () const
Justify the need or remove this function. Maybe quit using a shared pointer, too. Or make a copy in add() and set().
Member duds::ui::graphics::BppFont::add (char32_t gc, const ConstBppImageSptr &img)
change param names; the image is the glyph.
Class duds::ui::graphics::BppImage
Complete documentation.
Member duds::ui::graphics::BppImage::ConstPixel::operator++ ()

All direction increments are suboptimal; can be improved.

Maybe refactor; split incrmenets into functions to ease implementation of decrement operator. Maybe work this into ImageLocation?

Member duds::ui::graphics::BppImage::write (const BppImage *const src, const ImageLocation &destLoc, const ImageLocation &srcLoc, const ImageDimensions &srcSize, Direction srcDir=HorizInc, Operation op=OpSet)
Redo, at least for non-rotated images, using drawBox() implementation to operate on more than one pixel at a time.
Class duds::ui::menu::renderers::BppMenuRenderer

Horizontal ordering needs testing; assume broken for now.

Support rendering the selected menu item's description text somewhere.

Page Interstellar Time
Determine if using Barycentric Coordinate Time (TCB) might be a better option, and if so, how to implement it.