95 k_mutex_init(&lifecycle_mutex_);
105 k_mutex_lock(&lifecycle_mutex_, K_FOREVER);
106 HwReturn ret = HwReturn::ERROR;
107 if (state_ == HwState::UNCONFIGURED)
109 ret = on_configure();
110 if (ret == HwReturn::OK)
112 state_ = HwState::INACTIVE;
115 k_mutex_unlock(&lifecycle_mutex_);
121 k_mutex_lock(&lifecycle_mutex_, K_FOREVER);
122 HwReturn ret = HwReturn::ERROR;
123 if (state_ == HwState::INACTIVE)
126 if (ret == HwReturn::OK)
128 state_ = HwState::ACTIVE;
131 k_mutex_unlock(&lifecycle_mutex_);
135 HwReturn deactivate()
137 k_mutex_lock(&lifecycle_mutex_, K_FOREVER);
138 HwReturn ret = HwReturn::ERROR;
139 if (state_ == HwState::ACTIVE)
141 ret = on_deactivate();
142 if (ret == HwReturn::OK)
144 state_ = HwState::INACTIVE;
147 k_mutex_unlock(&lifecycle_mutex_);
153 k_mutex_lock(&lifecycle_mutex_, K_FOREVER);
154 HwReturn ret = on_cleanup();
155 if (ret == HwReturn::OK)
157 state_ = HwState::FINALIZED;
159 k_mutex_unlock(&lifecycle_mutex_);
165 if (state_ != HwState::ACTIVE)
167 return HwReturn::ERROR;
174 if (state_ != HwState::ACTIVE)
176 return HwReturn::ERROR;
181 HwState state()
const {
return state_; }
182 std::string_view name()
const {
return name_; }
185 virtual HwReturn on_configure() {
return HwReturn::OK; }
186 virtual HwReturn on_activate() {
return HwReturn::OK; }
187 virtual HwReturn on_deactivate() {
return HwReturn::OK; }
188 virtual HwReturn on_cleanup() {
return HwReturn::OK; }
189 virtual HwReturn on_read() = 0;
190 virtual HwReturn on_write() = 0;
195 uint8_t n_command_{0};
198 std::string_view name_;
199 HwState state_{HwState::UNCONFIGURED};
200 struct k_mutex lifecycle_mutex_;