locale.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #include "locale.h"
  2. #define TAG "LocaleSrv"
  3. LocaleMeasurementUnits locale_get_measurement_unit(void) {
  4. return (LocaleMeasurementUnits)furi_hal_rtc_get_locale_units();
  5. }
  6. void locale_set_measurement_unit(LocaleMeasurementUnits format) {
  7. furi_hal_rtc_set_locale_units((FuriHalRtcLocaleUnits)format);
  8. }
  9. LocaleTimeFormat locale_get_time_format(void) {
  10. return (LocaleTimeFormat)furi_hal_rtc_get_locale_timeformat();
  11. }
  12. void locale_set_time_format(LocaleTimeFormat format) {
  13. furi_hal_rtc_set_locale_timeformat((FuriHalRtcLocaleTimeFormat)format);
  14. }
  15. LocaleDateFormat locale_get_date_format(void) {
  16. return (LocaleDateFormat)furi_hal_rtc_get_locale_dateformat();
  17. }
  18. void locale_set_date_format(LocaleDateFormat format) {
  19. furi_hal_rtc_set_locale_dateformat((FuriHalRtcLocaleDateFormat)format);
  20. }
  21. float locale_fahrenheit_to_celsius(float temp_f) {
  22. return (temp_f - 32.f) / 1.8f;
  23. }
  24. float locale_celsius_to_fahrenheit(float temp_c) {
  25. return (temp_c * 1.8f + 32.f);
  26. }
  27. void locale_format_time(
  28. FuriString* out_str,
  29. const FuriHalRtcDateTime* datetime,
  30. const LocaleTimeFormat format,
  31. const bool show_seconds) {
  32. furi_assert(out_str);
  33. furi_assert(datetime);
  34. uint8_t hours = datetime->hour;
  35. uint8_t am_pm = 0;
  36. if(format == LocaleTimeFormat12h) {
  37. if(hours > 12) {
  38. hours -= 12;
  39. am_pm = 2;
  40. } else {
  41. am_pm = 1;
  42. }
  43. }
  44. if(show_seconds) {
  45. furi_string_printf(out_str, "%02u:%02u:%02u", hours, datetime->minute, datetime->second);
  46. } else {
  47. furi_string_printf(out_str, "%02u:%02u", hours, datetime->minute);
  48. }
  49. if(am_pm > 0) {
  50. furi_string_cat_printf(out_str, " %s", (am_pm == 1) ? ("AM") : ("PM"));
  51. }
  52. }
  53. void locale_format_date(
  54. FuriString* out_str,
  55. const FuriHalRtcDateTime* datetime,
  56. const LocaleDateFormat format,
  57. const char* separator) {
  58. furi_assert(out_str);
  59. furi_assert(datetime);
  60. furi_assert(separator);
  61. if(format == LocaleDateFormatDMY) {
  62. furi_string_printf(
  63. out_str,
  64. "%02u%s%02u%s%04u",
  65. datetime->day,
  66. separator,
  67. datetime->month,
  68. separator,
  69. datetime->year);
  70. } else if(format == LocaleDateFormatMDY) {
  71. furi_string_printf(
  72. out_str,
  73. "%02u%s%02u%s%04u",
  74. datetime->month,
  75. separator,
  76. datetime->day,
  77. separator,
  78. datetime->year);
  79. } else {
  80. furi_string_printf(
  81. out_str,
  82. "%04u%s%02u%s%02u",
  83. datetime->year,
  84. separator,
  85. datetime->month,
  86. separator,
  87. datetime->day);
  88. }
  89. }
  90. int32_t locale_on_system_start(void* p) {
  91. UNUSED(p);
  92. return 0;
  93. }