Skip to content

Commit 816ad14

Browse files
committed
pbio/sys/core: Update to pbio/os.
Also add a de-init to stop updating lights. Critical poll processes keep running.
1 parent 13fbafb commit 816ad14

File tree

1 file changed

+38
-32
lines changed

1 file changed

+38
-32
lines changed

lib/pbio/sys/core.c

Lines changed: 38 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -15,50 +15,54 @@
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

6468
void 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

8185
void 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

Comments
 (0)