* fix system reboot after poweroff

This commit is contained in:
lxowalle
2025-11-07 14:28:50 +08:00
parent 20c9be31d9
commit ea00850a59
4 changed files with 28 additions and 10 deletions

View File

@@ -17,6 +17,15 @@ namespace maix::sys
} }
} }
void poweroff()
{
int ret = system("poweroff");
if (ret != 0)
{
throw err::Exception(err::Err::ERR_RUNTIME, "power off failed");
}
}
void register_default_signal_handle() { void register_default_signal_handle() {
signal(SIGINT, signal_handle); signal(SIGINT, signal_handle);
} }

View File

@@ -12,7 +12,6 @@ namespace maix::sys
raise(SIGINT); raise(SIGINT);
#endif #endif
util::do_exit_function(); util::do_exit_function();
signal(SIGINT, nullptr); signal(SIGINT, nullptr);
signal(SIGILL, nullptr); signal(SIGILL, nullptr);
signal(SIGTRAP, nullptr); signal(SIGTRAP, nullptr);
@@ -23,6 +22,19 @@ namespace maix::sys
signal(SIGSEGV, nullptr); signal(SIGSEGV, nullptr);
} }
void poweroff()
{
util::do_exit_function();
system("devmem 0x4840000 32 0x0"); // disable wdt0
// system("devmem 0x2230000 32 0x0"); // disable wdt1
system("devmem 0x6040000 32 0x0"); // disable wdt2
int ret = system("poweroff");
if (ret != 0)
{
throw err::Exception(err::Err::ERR_RUNTIME, "power off failed");
}
}
void register_default_signal_handle() { void register_default_signal_handle() {
signal(SIGILL, signal_handle); signal(SIGILL, signal_handle);
signal(SIGTRAP, signal_handle); signal(SIGTRAP, signal_handle);

View File

@@ -985,15 +985,6 @@ namespace maix::sys
return partitions; return partitions;
} }
void poweroff()
{
int ret = system("poweroff");
if (ret != 0)
{
log::error("power off failed, ret: %d", ret);
throw err::Exception(err::Err::ERR_RUNTIME, "power off failed");
}
}
void reboot() void reboot()
{ {

View File

@@ -43,6 +43,7 @@ namespace maix::display
static int __g_ch[2]; static int __g_ch[2];
static maixcam2::SYS *__g_sys[2]; static maixcam2::SYS *__g_sys[2];
static maixcam2::VO * __g_vo[2]; static maixcam2::VO * __g_vo[2];
static pwm::PWM * __g_pwm[2];
static void __release_layer(int layer) { static void __release_layer(int layer) {
auto &mod_param = maixcam2::AxModuleParam::getInstance(); auto &mod_param = maixcam2::AxModuleParam::getInstance();
@@ -58,6 +59,10 @@ namespace maix::display
delete __g_sys[layer]; delete __g_sys[layer];
__g_sys[layer] = nullptr; __g_sys[layer] = nullptr;
} }
if (__g_pwm[layer]) {
__g_pwm[layer]->duty(0);
}
__g_mutex.unlock(); __g_mutex.unlock();
} }
@@ -475,6 +480,7 @@ namespace maix::display
__g_mutex.lock(); __g_mutex.lock();
__g_vo[this->_layer] = __vo; __g_vo[this->_layer] = __vo;
__g_sys[this->_layer] = __sys; __g_sys[this->_layer] = __sys;
__g_pwm[this->_layer] = _bl_pwm;
__g_ch[this->_layer] = 0; __g_ch[this->_layer] = 0;
__g_mutex.unlock(); __g_mutex.unlock();
} }