- unsigned i;
- for(i=0; (lowest_bit>>i)>1; ++i) ;
- active_index = i;
- acc.state.set(acc.state^lowest_bit);
- PendingCommand cmd(acc, Accessory::ACTIVATE, i);
- command_queue.push(cmd);
+ if(lowest_bit>>acc.bits)
+ {
+ // All remaining changes are in non-physical bits
+ acc.state.set(acc.state^changes);
+ acc.state.commit(acc.state.serial);
+ }
+ else
+ {
+ unsigned mask = (lowest_bit ? lowest_bit : acc.uncertain);
+ for(active_index=0; (mask>>active_index)>1; ++active_index) ;
+ acc.state.set(acc.state^lowest_bit);
+ PendingCommand cmd(acc, Accessory::ACTIVATE, active_index);
+ command_queue.push(cmd);
+ active_accessory = &acc;
+
+ monitor.reset_peak();
+ }