dialogs-api.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "dialogs-i.h"
  2. #include "dialogs-api-lock.h"
  3. /****************** File select ******************/
  4. bool dialog_file_select_show(
  5. DialogsApp* context,
  6. const char* path,
  7. const char* extension,
  8. char* result,
  9. uint8_t result_size,
  10. const char* preselected_filename) {
  11. osSemaphoreId_t semaphore = API_LOCK_INIT_LOCKED();
  12. furi_check(semaphore != NULL);
  13. DialogsAppData data = {
  14. .file_select = {
  15. .path = path,
  16. .extension = extension,
  17. .result = result,
  18. .result_size = result_size,
  19. .preselected_filename = preselected_filename,
  20. }};
  21. DialogsAppReturn return_data;
  22. DialogsAppMessage message = {
  23. .semaphore = semaphore,
  24. .command = DialogsAppCommandFileOpen,
  25. .data = &data,
  26. .return_data = &return_data,
  27. };
  28. furi_check(osMessageQueuePut(context->message_queue, &message, 0, osWaitForever) == osOK);
  29. API_LOCK_WAIT_UNTIL_UNLOCK_AND_FREE(semaphore);
  30. return return_data.bool_value;
  31. }
  32. /****************** Message ******************/
  33. DialogMessageButton dialog_message_show(DialogsApp* context, const DialogMessage* dialog_message) {
  34. osSemaphoreId_t semaphore = API_LOCK_INIT_LOCKED();
  35. furi_check(semaphore != NULL);
  36. DialogsAppData data = {
  37. .dialog = {
  38. .message = dialog_message,
  39. }};
  40. DialogsAppReturn return_data;
  41. DialogsAppMessage message = {
  42. .semaphore = semaphore,
  43. .command = DialogsAppCommandDialog,
  44. .data = &data,
  45. .return_data = &return_data,
  46. };
  47. furi_check(osMessageQueuePut(context->message_queue, &message, 0, osWaitForever) == osOK);
  48. API_LOCK_WAIT_UNTIL_UNLOCK_AND_FREE(semaphore);
  49. return return_data.dialog_value;
  50. }