1515#include <pbsys/host.h>
1616#include <pbsys/status.h>
1717
18-
1918#include "hmi.h"
2019#include "light.h"
2120#include "storage.h"
2221#include "program_stop.h"
2322
24- PROCESS (pbsys_system_process , "System" );
23+ static pbio_os_process_t pbsys_system_poll_process ;
24+
25+ static pbio_error_t pbsys_system_poll_process_thread (pbio_os_state_t * state , void * context ) {
2526
26- PROCESS_THREAD (pbsys_system_process , ev , data ) {
27- static struct etimer timer ;
27+ static pbio_os_timer_t timer ;
2828
29- PROCESS_BEGIN ( );
29+ PBIO_OS_ASYNC_BEGIN ( state );
3030
31- etimer_set (& timer , 50 );
31+ pbio_os_timer_set (& timer , 50 );
3232
3333 for (;;) {
34- PROCESS_WAIT_EVENT ();
35-
36- if (ev == PROCESS_EVENT_TIMER && etimer_expired (& timer )) {
37- etimer_reset (& timer );
38- pbsys_battery_poll ();
39- pbsys_program_stop_poll ();
40- pbsys_status_light_poll ();
41-
42- // Monitor USB state.
43- if (pbdrv_usb_connection_is_active ()) {
44- pbsys_status_set (PBIO_PYBRICKS_STATUS_USB_HOST_CONNECTED );
45- } else {
46- pbsys_status_clear (PBIO_PYBRICKS_STATUS_USB_HOST_CONNECTED );
47- }
48-
49- // Monitor BLE state.
50- if (pbdrv_bluetooth_is_connected (PBDRV_BLUETOOTH_CONNECTION_PYBRICKS )) {
51- pbsys_status_set (PBIO_PYBRICKS_STATUS_BLE_HOST_CONNECTED );
52- } else {
53- pbsys_status_clear (PBIO_PYBRICKS_STATUS_BLE_HOST_CONNECTED );
54- }
55-
56- // keep the hub from resetting itself
57- pbdrv_watchdog_update ();
34+ PBIO_OS_AWAIT_UNTIL (state , pbio_os_timer_is_expired (& timer ));
35+ pbio_os_timer_extend (& timer );
36+
37+ pbsys_battery_poll ();
38+ pbsys_program_stop_poll ();
39+ pbsys_status_light_poll ();
40+
41+ // keep the hub from resetting itself
42+ pbdrv_watchdog_update ();
43+
44+ if (pbsys_system_poll_process .request == PBIO_OS_PROCESS_REQUEST_TYPE_CANCEL ) {
45+ // After shutdown we only poll critical system processes.
46+ continue ;
47+ }
48+
49+ // Monitor USB state.
50+ if (pbdrv_usb_connection_is_active ()) {
51+ pbsys_status_set (PBIO_PYBRICKS_STATUS_USB_HOST_CONNECTED );
52+ } else {
53+ pbsys_status_clear (PBIO_PYBRICKS_STATUS_USB_HOST_CONNECTED );
54+ }
55+
56+ // Monitor BLE state.
57+ if (pbdrv_bluetooth_is_connected (PBDRV_BLUETOOTH_CONNECTION_PYBRICKS )) {
58+ pbsys_status_set (PBIO_PYBRICKS_STATUS_BLE_HOST_CONNECTED );
59+ } else {
60+ pbsys_status_clear (PBIO_PYBRICKS_STATUS_BLE_HOST_CONNECTED );
5861 }
5962 }
6063
61- PROCESS_END ();
64+ // Unreachable
65+ PBIO_OS_ASYNC_END (PBIO_ERROR_FAILED );
6266}
6367
6468void pbsys_init (void ) {
@@ -71,7 +75,7 @@ void pbsys_init(void) {
7175 pbsys_host_init ();
7276 pbsys_status_light_init ();
7377
74- process_start ( & pbsys_system_process );
78+ pbio_os_process_start ( & pbsys_system_poll_process , pbsys_system_poll_process_thread , NULL );
7579
7680 while (pbio_busy_count_busy ()) {
7781 pbio_os_run_processes_once ();
@@ -80,6 +84,8 @@ void pbsys_init(void) {
8084
8185void pbsys_deinit (void ) {
8286
87+ pbio_os_process_make_request (& pbsys_system_poll_process , PBIO_OS_PROCESS_REQUEST_TYPE_CANCEL );
88+
8389 pbsys_storage_deinit ();
8490 pbsys_hmi_deinit ();
8591
0 commit comments