@@ -73,6 +73,7 @@ typedef enum {
73
73
} MfkeyState ;
74
74
75
75
typedef struct {
76
+ FuriMutex * mutex ;
76
77
MfkeyError err ;
77
78
MfkeyState mfkey_state ;
78
79
int cracked ;
@@ -999,11 +1000,9 @@ void mfkey32(ProgramState* const program_state) {
999
1000
1000
1001
// Screen is 128x64 px
1001
1002
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 );
1007
1006
char draw_str [32 ] = {};
1008
1007
canvas_clear (canvas );
1009
1008
canvas_draw_frame (canvas , 0 , 0 , 128 , 64 );
@@ -1060,7 +1059,7 @@ static void render_callback(Canvas* const canvas, void* ctx) {
1060
1059
} else {
1061
1060
// Unhandled program state
1062
1061
}
1063
- release_mutex (( ValueMutex * ) ctx , program_state );
1062
+ furi_mutex_release ( program_state -> mutex );
1064
1063
}
1065
1064
1066
1065
static void input_callback (InputEvent * input_event , FuriMessageQueue * event_queue ) {
@@ -1103,16 +1102,16 @@ int32_t mfkey32_main() {
1103
1102
1104
1103
mfkey32_state_init (program_state );
1105
1104
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 ) {
1108
1107
FURI_LOG_E (TAG , "cannot create mutex\r\n" );
1109
1108
free (program_state );
1110
1109
return 255 ;
1111
1110
}
1112
1111
1113
1112
// Set system callbacks
1114
1113
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 );
1116
1115
view_port_input_callback_set (view_port , input_callback , event_queue );
1117
1116
1118
1117
// Open GUI and register view_port
@@ -1130,7 +1129,7 @@ int32_t mfkey32_main() {
1130
1129
for (bool main_loop = true; main_loop ;) {
1131
1130
FuriStatus event_status = furi_message_queue_get (event_queue , & event , 100 );
1132
1131
1133
- ProgramState * program_state = ( ProgramState * ) acquire_mutex_block ( & state_mutex );
1132
+ furi_mutex_acquire ( program_state -> mutex , FuriWaitForever );
1134
1133
1135
1134
if (event_status == FuriStatusOk ) {
1136
1135
// press events
@@ -1174,13 +1173,10 @@ int32_t mfkey32_main() {
1174
1173
}
1175
1174
}
1176
1175
}
1177
- } else {
1178
- FURI_LOG_D (TAG , "FuriMessageQueue: event timeout" );
1179
- // event timeout
1180
1176
}
1181
1177
1182
1178
view_port_update (view_port );
1183
- release_mutex ( & state_mutex , program_state );
1179
+ furi_mutex_release ( program_state -> mutex );
1184
1180
}
1185
1181
1186
1182
furi_thread_free (program_state -> mfkeythread );
@@ -1189,7 +1185,7 @@ int32_t mfkey32_main() {
1189
1185
furi_record_close ("gui" );
1190
1186
view_port_free (view_port );
1191
1187
furi_message_queue_free (event_queue );
1192
- delete_mutex ( & state_mutex );
1188
+ furi_mutex_free ( program_state -> mutex );
1193
1189
free (program_state );
1194
1190
1195
1191
return 0 ;
0 commit comments