12 namespace duds {
namespace hardware {
namespace interface {
28 const std::vector<unsigned int> &pvec,
29 std::vector<DigitalPinConfig> &propConf,
30 std::vector<DigitalPinConfig> &initConf,
34 if ((propConf.size() != pvec.size()) || (
35 !initConf.empty() && initConf.size() != pvec.size()
42 if (initConf.empty()) {
50 std::vector<unsigned int>::const_iterator piter = pvec.cbegin();
51 std::vector<DigitalPinConfig>::iterator pConfIter = propConf.begin();
52 std::vector<DigitalPinConfig>::iterator iConfIter = initConf.begin();
54 for (; piter != pvec.cend(); ++piter, ++pConfIter, ++iConfIter) {
60 if ((*piter >=
pins.size()) || (!
pins[*piter] && (
67 }
else if (
pins[*piter]) {
71 *iConfIter =
pins[*piter].conf;
74 pConfIter->reverseCombine(*iConfIter);
76 err =
pins[*piter].cap.compatible(*pConfIter);
94 std::vector<DigitalPinConfig> &propConf,
95 std::vector<DigitalPinConfig> &initConf,
99 if ((propConf.size() !=
pins.size()) || (
100 !initConf.empty() && initConf.size() !=
pins.size()
107 if (initConf.empty()) {
111 std::vector<DigitalPinConfig>::iterator pConfIter = propConf.begin();
112 std::vector<DigitalPinConfig>::iterator iConfIter = initConf.begin();
113 PinVector::const_iterator pvIter =
pins.begin();
114 unsigned int pos = 0;
116 for (; pvIter !=
pins.cend(); ++pos, ++iConfIter, ++ pConfIter, ++pvIter) {
127 }
else if (*pvIter) {
129 pConfIter->reverseCombine(*iConfIter);
131 err =
pins[pos].cap.compatible(*pConfIter);
153 unsigned int lid =
localId(gid);
154 if ((lid >=
pins.size()) || !
pins[lid]) {
160 iconf =
pins[lid].conf;
164 return pins[lid].cap.compatible(pconf);
168 const std::vector<DigitalPinConfig> &cfgs,
171 std::vector<DigitalPinConfig>::const_iterator iter = cfgs.cbegin();
172 for (
unsigned int lid = 0; iter != cfgs.end(); ++lid, ++iter) {
virtual DigitalPinRejectedConfiguration::Reason proposeConfigImpl(unsigned int gid, DigitalPinConfig &pconf, DigitalPinConfig &iconf) const
Considers the proposed configuration for one pin.
Defines the configuration for a digital general purpose I/O pin.
unsigned int localId(unsigned int globalId) const
Returns the local ID for a pin given the global ID.
virtual bool independentConfig() const
Always true.
constexpr Reason Unsupported
Completely unsupported.
A type for holding arbitrary port-specific data within a DigitalPinAccess or DigitalPinSetAccess obje...
boost::error_info< struct Info_DigitalPortAffected, const DigitalPort * > DigitalPortAffected
Added to exceptions thrown by DigitalPort objects.
void reverseCombine(const DigitalPinConfig &oldCfg)
Combines an old (initial) configuration with a new configuration in this object and stores the result...
constexpr Reason NotRejected
There is no error with the requested pin configuration for the referenced pin.
A type-safe bit flag storage class.
virtual bool proposeFullConfigImpl(std::vector< DigitalPinConfig > &propConf, std::vector< DigitalPinConfig > &initConf, std::function< void(DigitalPinRejectedConfiguration::Reason)> insertReason=std::function< void(DigitalPinRejectedConfiguration::Reason)>()) const
Considers the proposed configuration one pin at a time for all pins in the port.
Indicates that the specified configuration data includes too many or too few items, or has parallel data structures of inconsistent sizes.
static constexpr Flags OperationNoChange
No change to any pin operation.
std::vector< DigitalPinConfig > configurationImpl() const
Returns the configuration of all pins in the port.
PinVector pins
Data on each pin handled by the port.
virtual void configurePort(const std::vector< DigitalPinConfig > &cfgs, DigitalPinAccessBase::PortData *pdata)
Changes the hardware configuration for the whole port by calling configurePort(const DigitalPinConfig...
#define DUDS_THROW_EXCEPTION(x)
Works like BOOST_THROW_EXCEPTION, but includes a stack trace if DUDS_ERRORS_VERBOSE is defined...