mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-21 05:04:46 -07:00
Massive plugins refactoring
Not full refactoring, only small issues is fixed and moved all plugins to furi mutex instead of valuemutex Many small issues was found and fixed due mutex upgrade OFW removed 60 lines of code and it was painful
This commit is contained in:
@@ -34,6 +34,7 @@ typedef enum {
|
||||
} State;
|
||||
|
||||
typedef struct {
|
||||
FuriMutex* mutex;
|
||||
State state;
|
||||
uint8_t table[CELLS_COUNT][CELLS_COUNT];
|
||||
uint32_t score;
|
||||
@@ -104,8 +105,9 @@ static void gray_canvas(Canvas* const canvas) {
|
||||
}
|
||||
|
||||
static void draw_callback(Canvas* const canvas, void* ctx) {
|
||||
const GameState* game_state = acquire_mutex((ValueMutex*)ctx, 25);
|
||||
if(game_state == NULL) return;
|
||||
furi_assert(ctx);
|
||||
const GameState* game_state = ctx;
|
||||
furi_mutex_acquire(game_state->mutex, FuriWaitForever);
|
||||
|
||||
canvas_clear(canvas);
|
||||
|
||||
@@ -181,7 +183,7 @@ static void draw_callback(Canvas* const canvas, void* ctx) {
|
||||
canvas_draw_str_aligned(canvas, 64, 48, AlignCenter, AlignBottom, buf);
|
||||
}
|
||||
|
||||
release_mutex((ValueMutex*)ctx, game_state);
|
||||
furi_mutex_release(game_state->mutex);
|
||||
}
|
||||
|
||||
void calculate_move_to_left(uint8_t arr[], MoveResult* const move_result) {
|
||||
@@ -381,8 +383,8 @@ int32_t game_2048_app() {
|
||||
|
||||
MoveResult* move_result = malloc(sizeof(MoveResult));
|
||||
|
||||
ValueMutex state_mutex;
|
||||
if(!init_mutex(&state_mutex, game_state, sizeof(GameState))) {
|
||||
game_state->mutex = furi_mutex_alloc(FuriMutexTypeNormal);
|
||||
if(!game_state->mutex) {
|
||||
FURI_LOG_E("2048Game", "cannot create mutex\r\n");
|
||||
free(game_state);
|
||||
return 255;
|
||||
@@ -392,7 +394,7 @@ int32_t game_2048_app() {
|
||||
FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(InputEvent));
|
||||
|
||||
ViewPort* view_port = view_port_alloc();
|
||||
view_port_draw_callback_set(view_port, draw_callback, &state_mutex);
|
||||
view_port_draw_callback_set(view_port, draw_callback, game_state);
|
||||
view_port_input_callback_set(view_port, input_callback, event_queue);
|
||||
|
||||
Gui* gui = furi_record_open(RECORD_GUI);
|
||||
@@ -408,7 +410,7 @@ int32_t game_2048_app() {
|
||||
// handle only press event, ignore repeat/release events
|
||||
if(input.type != InputTypePress) continue;
|
||||
|
||||
GameState* game_state = (GameState*)acquire_mutex_block(&state_mutex);
|
||||
furi_mutex_acquire(game_state->mutex, FuriWaitForever);
|
||||
|
||||
switch(game_state->state) {
|
||||
case GameStateMenu:
|
||||
@@ -493,7 +495,7 @@ int32_t game_2048_app() {
|
||||
}
|
||||
|
||||
view_port_update(view_port);
|
||||
release_mutex(&state_mutex, game_state);
|
||||
furi_mutex_release(game_state->mutex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -504,7 +506,7 @@ int32_t game_2048_app() {
|
||||
|
||||
furi_message_queue_free(event_queue);
|
||||
|
||||
delete_mutex(&state_mutex);
|
||||
furi_mutex_free(game_state->mutex);
|
||||
|
||||
free(game_state);
|
||||
free(move_result);
|
||||
|
||||
Reference in New Issue
Block a user