main.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include <furi.h>
  2. #include <furi_hal.h>
  3. #include <flipper.h>
  4. #include <alt_boot.h>
  5. #include <semphr.h>
  6. #define TAG "Main"
  7. #ifdef FURI_RAM_EXEC
  8. int main() {
  9. // Initialize FURI layer
  10. furi_init();
  11. // Flipper critical FURI HAL
  12. furi_hal_init_early();
  13. // Flipper FURI HAL
  14. furi_hal_init();
  15. // Init flipper
  16. flipper_init();
  17. furi_run();
  18. while(1) {
  19. }
  20. }
  21. #else
  22. int main() {
  23. // Initialize FURI layer
  24. furi_init();
  25. // Flipper critical FURI HAL
  26. furi_hal_init_early();
  27. furi_hal_light_sequence("RGB");
  28. // Delay is for button sampling
  29. furi_hal_delay_ms(100);
  30. FuriHalRtcBootMode boot_mode = furi_hal_rtc_get_boot_mode();
  31. if(boot_mode == FuriHalRtcBootModeDfu || !furi_hal_gpio_read(&gpio_button_left)) {
  32. furi_hal_light_sequence("rgb WB");
  33. furi_hal_rtc_set_boot_mode(FuriHalRtcBootModeNormal);
  34. flipper_boot_dfu_exec();
  35. furi_hal_power_reset();
  36. } else if(boot_mode == FuriHalRtcBootModeUpdate) {
  37. furi_hal_light_sequence("rgb BR");
  38. flipper_boot_update_exec();
  39. // if things go nice, we shouldn't reach this point.
  40. // But if we do, abandon to avoid bootloops
  41. furi_hal_rtc_set_boot_mode(FuriHalRtcBootModeNormal);
  42. furi_hal_power_reset();
  43. } else {
  44. furi_hal_light_sequence("rgb G");
  45. // Flipper FURI HAL
  46. furi_hal_init();
  47. // Init flipper
  48. flipper_init();
  49. furi_run();
  50. }
  51. while(1) {
  52. }
  53. }
  54. #endif
  55. void Error_Handler(void) {
  56. furi_crash("ErrorHandler");
  57. }
  58. #ifdef USE_FULL_ASSERT
  59. /**
  60. * @brief Reports the name of the source file and the source line number
  61. * where the assert_param error has occurred.
  62. * @param file: pointer to the source file name
  63. * @param line: assert_param error line source number
  64. * @retval None
  65. */
  66. void assert_failed(uint8_t* file, uint32_t line) {
  67. furi_crash("HAL assert failed");
  68. }
  69. #endif /* USE_FULL_ASSERT */