G>А какие события вызывают переключение состояния. Может лучше создать несколько методов SetState_statename_() и использовать new и delete для объектов состояний, тогда можно логику enter и exit вынести в конструктор и деструктор.
Забыл уточнить. Переходы между состояниями происходят в следующих случаях:
если при выполнении poll() или process_command() произошла ошибка (отказ оборудования) -> переход в состояние неисправность.
при получении команды выполняется переход в другое состояние, зависящее от вида команды и текущего состояния.
по истечении какого-то времени, т.е. ранее была дана команда устройству на выполнение какого-то действия, по окончанию которого происходит переход в другое состояние.