int main(int argc, char *argv[]) { int r = 0; if (sol_init() < 0) return EXIT_FAILURE; printf("Initial platform state: %d\n", sol_platform_get_state()); sol_platform_add_state_monitor(on_state_change, NULL); if (argc > 2) { cmds = argv + 1; n_cmds = argc - 1; timeout_handle = sol_timeout_add(CMD_TICK, on_timeout_cmd, NULL); } sol_run(); if (timeout_handle) sol_timeout_del(timeout_handle); sol_platform_del_state_monitor(on_state_change, NULL); sol_shutdown(); return r; }
static void startup(void) { const char **itr; int pin = parse_cmdline_pin(); if (pin < 0) pin = parse_kcmdline_pin(); if (pin >= 0) { struct sol_gpio_config cfg = { .api_version = SOL_GPIO_CONFIG_API_VERSION, .dir = SOL_GPIO_DIR_OUT, }; gpio = sol_gpio_open(pin, &cfg); if (gpio) printf("blinking led on gpio pin=%d\n", pin); else fprintf(stderr, "failed to open gpio pin=%d for writing.\n", pin); } timeout = sol_timeout_add(1000, on_timeout, NULL); sol_platform_add_state_monitor(on_platform_state_change, NULL); printf("platform state: %d\n", sol_platform_get_state()); for (itr = services; *itr != NULL; itr++) { sol_platform_add_service_monitor(on_service_change, *itr, NULL); printf("service %s state: %d\n", *itr, sol_platform_get_service_state(*itr)); } }
static int platform_open(struct sol_flow_node *node, void *data, const struct sol_flow_node_options *options) { struct platform_data *mdata = data; mdata->node = node; sol_platform_add_state_monitor(on_state_changed, mdata); mdata->state = sol_platform_get_state(); return state_dispatch_ready(mdata); }
if (pin >= 0) { struct sol_gpio_config cfg = { SOL_SET_API_VERSION(.api_version = SOL_GPIO_CONFIG_API_VERSION, ) .dir = SOL_GPIO_DIR_OUT, }; gpio = sol_gpio_open(pin, &cfg); if (gpio) printf("blinking led on gpio pin=%d\n", pin); else fprintf(stderr, "failed to open gpio pin=%d for writing.\n", pin); } timeout = sol_timeout_add(1000, on_timeout, NULL); sol_platform_add_state_monitor(on_platform_state_change, NULL); printf("platform state: %d\n", sol_platform_get_state()); for (itr = services; *itr != NULL; itr++) { sol_platform_add_service_monitor(on_service_change, *itr, NULL); printf("service %s state: %d\n", *itr, sol_platform_get_service_state(*itr)); } } static void shutdown(void) { const char **itr; if (gpio) sol_gpio_close(gpio); sol_timeout_del(timeout);