Skip to content

Commit a7f0302

Browse files
authored
Remove ValueMutex (close #4)
1 parent 2ef93be commit a7f0302

File tree

1 file changed

+11
-15
lines changed

1 file changed

+11
-15
lines changed

fap/mfkey32.c

+11-15
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ typedef enum {
7373
} MfkeyState;
7474

7575
typedef struct {
76+
FuriMutex* mutex;
7677
MfkeyError err;
7778
MfkeyState mfkey_state;
7879
int cracked;
@@ -999,11 +1000,9 @@ void mfkey32(ProgramState* const program_state) {
9991000

10001001
// Screen is 128x64 px
10011002
static void render_callback(Canvas* const canvas, void* ctx) {
1002-
UNUSED(ctx);
1003-
const ProgramState* program_state = acquire_mutex((ValueMutex*)ctx, 25);
1004-
if (program_state == NULL) {
1005-
return;
1006-
}
1003+
furi_assert(ctx);
1004+
const ProgramState* program_state = ctx;
1005+
furi_mutex_acquire(program_state->mutex, FuriWaitForever);
10071006
char draw_str[32] = {};
10081007
canvas_clear(canvas);
10091008
canvas_draw_frame(canvas, 0, 0, 128, 64);
@@ -1060,7 +1059,7 @@ static void render_callback(Canvas* const canvas, void* ctx) {
10601059
} else {
10611060
// Unhandled program state
10621061
}
1063-
release_mutex((ValueMutex*)ctx, program_state);
1062+
furi_mutex_release(program_state->mutex);
10641063
}
10651064

10661065
static void input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) {
@@ -1103,16 +1102,16 @@ int32_t mfkey32_main() {
11031102

11041103
mfkey32_state_init(program_state);
11051104

1106-
ValueMutex state_mutex;
1107-
if(!init_mutex(&state_mutex, program_state, sizeof(ProgramState))) {
1105+
program_state->mutex = furi_mutex_alloc(FuriMutexTypeNormal);
1106+
if(!program_state->mutex) {
11081107
FURI_LOG_E(TAG, "cannot create mutex\r\n");
11091108
free(program_state);
11101109
return 255;
11111110
}
11121111

11131112
// Set system callbacks
11141113
ViewPort* view_port = view_port_alloc();
1115-
view_port_draw_callback_set(view_port, render_callback, &state_mutex);
1114+
view_port_draw_callback_set(view_port, render_callback, program_state);
11161115
view_port_input_callback_set(view_port, input_callback, event_queue);
11171116

11181117
// Open GUI and register view_port
@@ -1130,7 +1129,7 @@ int32_t mfkey32_main() {
11301129
for(bool main_loop = true; main_loop;) {
11311130
FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100);
11321131

1133-
ProgramState* program_state = (ProgramState*)acquire_mutex_block(&state_mutex);
1132+
furi_mutex_acquire(program_state->mutex, FuriWaitForever);
11341133

11351134
if(event_status == FuriStatusOk) {
11361135
// press events
@@ -1174,13 +1173,10 @@ int32_t mfkey32_main() {
11741173
}
11751174
}
11761175
}
1177-
} else {
1178-
FURI_LOG_D(TAG, "FuriMessageQueue: event timeout");
1179-
// event timeout
11801176
}
11811177

11821178
view_port_update(view_port);
1183-
release_mutex(&state_mutex, program_state);
1179+
furi_mutex_release(program_state->mutex);
11841180
}
11851181

11861182
furi_thread_free(program_state->mfkeythread);
@@ -1189,7 +1185,7 @@ int32_t mfkey32_main() {
11891185
furi_record_close("gui");
11901186
view_port_free(view_port);
11911187
furi_message_queue_free(event_queue);
1192-
delete_mutex(&state_mutex);
1188+
furi_mutex_free(program_state->mutex);
11931189
free(program_state);
11941190

11951191
return 0;

0 commit comments

Comments
 (0)