rpc_desktop.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "flipper.pb.h"
  2. #include "rpc_i.h"
  3. #include <desktop/desktop.h>
  4. #include "desktop.pb.h"
  5. #define TAG "RpcDesktop"
  6. typedef struct {
  7. RpcSession* session;
  8. Desktop* desktop;
  9. } RpcDesktop;
  10. static void rpc_desktop_on_is_locked_request(const PB_Main* request, void* context) {
  11. furi_assert(request);
  12. furi_assert(context);
  13. furi_assert(request->which_content == PB_Main_desktop_is_locked_request_tag);
  14. FURI_LOG_D(TAG, "IsLockedRequest");
  15. RpcDesktop* rpc_desktop = context;
  16. RpcSession* session = rpc_desktop->session;
  17. PB_CommandStatus ret = desktop_api_is_locked(rpc_desktop->desktop) ? PB_CommandStatus_OK :
  18. PB_CommandStatus_ERROR;
  19. rpc_send_and_release_empty(session, request->command_id, ret);
  20. }
  21. static void rpc_desktop_on_unlock_request(const PB_Main* request, void* context) {
  22. furi_assert(request);
  23. furi_assert(context);
  24. furi_assert(request->which_content == PB_Main_desktop_unlock_request_tag);
  25. FURI_LOG_D(TAG, "UnlockRequest");
  26. RpcDesktop* rpc_desktop = context;
  27. RpcSession* session = rpc_desktop->session;
  28. desktop_api_unlock(rpc_desktop->desktop);
  29. rpc_send_and_release_empty(session, request->command_id, PB_CommandStatus_OK);
  30. }
  31. void* rpc_desktop_alloc(RpcSession* session) {
  32. furi_assert(session);
  33. RpcDesktop* rpc_desktop = malloc(sizeof(RpcDesktop));
  34. rpc_desktop->desktop = furi_record_open(RECORD_DESKTOP);
  35. rpc_desktop->session = session;
  36. RpcHandler rpc_handler = {
  37. .message_handler = NULL,
  38. .decode_submessage = NULL,
  39. .context = rpc_desktop,
  40. };
  41. rpc_handler.message_handler = rpc_desktop_on_is_locked_request;
  42. rpc_add_handler(session, PB_Main_desktop_is_locked_request_tag, &rpc_handler);
  43. rpc_handler.message_handler = rpc_desktop_on_unlock_request;
  44. rpc_add_handler(session, PB_Main_desktop_unlock_request_tag, &rpc_handler);
  45. return rpc_desktop;
  46. }
  47. void rpc_desktop_free(void* context) {
  48. furi_assert(context);
  49. RpcDesktop* rpc_desktop = context;
  50. furi_assert(rpc_desktop->desktop);
  51. furi_record_close(RECORD_DESKTOP);
  52. rpc_desktop->session = NULL;
  53. free(rpc_desktop);
  54. }