app-template.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #include "flipper.h"
  2. #include "flipper_v2.h"
  3. #include "app-template.h"
  4. /*
  5. To use this example you need to rename
  6. AppExampleState - class to hold app state
  7. AppExampleEvent - class to hold app event
  8. AppExample - app class
  9. app_cpp_example - function that launch app
  10. */
  11. // event enumeration type
  12. typedef uint8_t event_t;
  13. // app state class
  14. class AppExampleState {
  15. public:
  16. // state data
  17. uint8_t example_data;
  18. // state initializer
  19. AppExampleState() {
  20. example_data = 12;
  21. }
  22. };
  23. // app events class
  24. class AppExampleEvent {
  25. public:
  26. // events enum
  27. static const event_t EventTypeTick = 0;
  28. static const event_t EventTypeKey = 1;
  29. // payload
  30. union {
  31. InputEvent input;
  32. } value;
  33. // event type
  34. event_t type;
  35. };
  36. // our app derived from base AppTemplate class
  37. // with template variables <state, events>
  38. class AppExample : public AppTemplate<AppExampleState, AppExampleEvent> {
  39. public:
  40. void run();
  41. void render(CanvasApi* canvas);
  42. };
  43. // start app
  44. void AppExample::run() {
  45. AppExampleEvent event;
  46. while(1) {
  47. if(get_event(&event, 1000)) {
  48. if(event.type == AppExampleEvent::EventTypeKey) {
  49. // press events
  50. if(event.value.input.state && event.value.input.input == InputBack) {
  51. printf("bye!\n");
  52. exit();
  53. }
  54. if(event.value.input.state && event.value.input.input == InputUp) {
  55. // to read or write state you need to execute
  56. // acquire modify release state
  57. acquire_state();
  58. state.example_data = 24;
  59. release_state();
  60. }
  61. }
  62. }
  63. // signal to force gui update
  64. update_gui();
  65. };
  66. }
  67. // render app
  68. void AppExample::render(CanvasApi* canvas) {
  69. // here you dont need to call acquire_state or release_state
  70. // to read or write app state, that already handled by caller
  71. canvas->set_color(canvas, ColorBlack);
  72. canvas->set_font(canvas, FontPrimary);
  73. canvas->draw_str(canvas, 2, state.example_data, "Example app");
  74. }
  75. // app enter function
  76. extern "C" void app_cpp_example(void* p) {
  77. AppExample* app = new AppExample();
  78. app->run();
  79. }