#pragma once #include #include class MenuComponent; class DisplayCenter; class KeyMonitor; class IRegsAccess; class WakeUp; enum class DisType; enum class ClearScreen; class StateControl{ typedef union reg6 { struct{ unsigned int work_mode : 3; unsigned int func_clean_passthro : 1; unsigned int func_feed_low : 1; unsigned int func_feed_mid : 1; unsigned int func_feed_high : 1; unsigned int key_sound : 1; unsigned int key_endouble_feed : 1; unsigned int func_encount : 1; unsigned int func_clear_count : 1; unsigned int motor_choose : 2; unsigned int wr_en : 1; unsigned int motor_addr : 8; unsigned int key_stop_enable : 1; unsigned int lift_init_set: 2; unsigned int unused: 3; unsigned int motor_disable : 1; }param; unsigned int value; } REG6; public: StateControl(std::shared_ptr m_regsAccess,std::shared_ptr wake); ~StateControl(); void PutMsg(DisType type,int value,ClearScreen clearscreen); void setrunstate(bool value); bool getrunstate(); void setcoverstate(bool value); bool getcoverstate(); void setmenuindex(int menu); void lcdcontrol(int led); void setautopaperflag(bool enable,bool enkey); void setautopaperstopcallback(std::function func); private: void menu_func(DisType type); uint getpapercount(); void clearcount(); std::shared_ptr m_menu; std::shared_ptr m_discenter; std::shared_ptr m_keymonitor; std::shared_ptr m_regs; std::shared_ptr m_wake; std::function autopaperstop; volatile bool is_runing; volatile bool is_cover_open; volatile bool is_autopaper; volatile bool en_autopaper_key; };