hurricane/marble/main.c

/*******************************************************************************
* # License
* Copyright 2019 Silicon Laboratories Inc. www.silabs.com
*******************************************************************************
*
* The licensor of this software is Silicon Laboratories Inc. Your use of this
* software is governed by the terms of Silicon Labs Master Software License
* Agreement (MSLA) available at
* www.silabs.com/about-us/legal/master-software-license-agreement. This
* software is distributed to you in Source Code format and is governed by the
* sections of the MSLA applicable to Source Code.
*
******************************************************************************/
#include "gos.h"
#include "hurricane.h"
#include "marble.h"
#define DEMO_NAME "Marble"
#define BUTTON_DEBOUNCE_TIME_MS 50
#define BUTTON_CLICK_TIME_MS 500
#define BUTTON_PRESS_TIME_MS 1000
#define MARBLE_GAME_HANDLER_PERIOD_MS 10
#define MARBLE_REPLAY_BUTTON 2
#define MARBLE_SETUP_BUTTON 1
#define SETTINGS_MAGIC_NUMBER 0x010000
static void start_demo_handler(void *arg);
static void stop_demo_handler(void *arg);
static void game_handler(void *arg);
static void button_clicked_event_handler(void *arg);
static gos_button_config_t button_config =
{
.active_level = PLATFORM_BUTTON_ACTIVE_STATE,
.debounce = BUTTON_DEBOUNCE_TIME_MS,
.click_time = BUTTON_CLICK_TIME_MS,
.press_time = BUTTON_PRESS_TIME_MS,
.event_handler.press = NULL,
.event_handler.click = button_clicked_event_handler,
.event_handler.toggle = NULL,
.event_handler.changing = NULL,
.execution_context = GOS_BUTTON_CONTEXT_DEFAULT,
};
hurricane_demo_t demo_info =
{ .demo_name = DEMO_NAME,
.start_demo_callback = start_demo_handler,
.stop_demo_callback = stop_demo_handler,
.draw_splash_screen_callback = HURRICANE_SPLASH_DEFAULT_FUNCTION,
.demo_splash_screen_arg = "marble_splash.jpg",
.splash_font_color = HURRICANE_SPLASH_DEFAULT_FONT_COLOR,
};
void gos_app_init(void)
{ gos_result_t result;
hurricane_init(&demo_info);
if(GOS_FAILED(result, gos_load_app_settings_once("settings.ini", SETTINGS_MAGIC_NUMBER)))
{
GOS_LOG("Failed to load settings, err:%d", result);
}
}
void gos_app_deinit(void)
{
gos_event_unregister_all(game_handler);
}
void gos_app_idle(void)
{
}
static void game_handler(void *arg)
{ bool done;
done = marble_frame();
if(done == true)
{
gos_event_unregister_all(game_handler);
}
}
static void start_demo_handler(void *arg)
{
GOS_LOG("Marble Maze Escape");
gos_button_init(HURRICANE_BUTTON1, &button_config, (void*)MARBLE_SETUP_BUTTON);
gos_button_init(HURRICANE_BUTTON2, &button_config, (void*)MARBLE_REPLAY_BUTTON);
marble_init();
gos_event_register_periodic(game_handler, NULL, MARBLE_GAME_HANDLER_PERIOD_MS, GOS_EVENT_FLAG_NONE);
}
static void stop_demo_handler(void *arg)
{
gos_event_unregister_all(game_handler);
}
static void button_clicked_event_handler(void *arg)
{
if((uint32_t)arg == MARBLE_SETUP_BUTTON)
{
gos_event_unregister_all(game_handler);
hurricane_enter_setup_mode();
}
else if((uint32_t)arg == MARBLE_REPLAY_BUTTON)
{ gos_event_unregister_all(game_handler);
marble_init();
gos_event_register_periodic(game_handler, NULL, MARBLE_GAME_HANDLER_PERIOD_MS, GOS_EVENT_FLAG_NONE);
}
}