locale.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. if(hours == 0) {
  44. hours = 12;
  45. }
  46. }
  47. if(show_seconds) {
  48. furi_string_printf(out_str, "%02u:%02u:%02u", hours, datetime->minute, datetime->second);
  49. } else {
  50. furi_string_printf(out_str, "%02u:%02u", hours, datetime->minute);
  51. }
  52. if(am_pm > 0) {
  53. furi_string_cat_printf(out_str, " %s", (am_pm == 1) ? ("AM") : ("PM"));
  54. }
  55. }
  56. void locale_format_date(
  57. FuriString* out_str,
  58. const FuriHalRtcDateTime* datetime,
  59. const LocaleDateFormat format,
  60. const char* separator) {
  61. furi_assert(out_str);
  62. furi_assert(datetime);
  63. furi_assert(separator);
  64. if(format == LocaleDateFormatDMY) {
  65. furi_string_printf(
  66. out_str,
  67. "%02u%s%02u%s%04u",
  68. datetime->day,
  69. separator,
  70. datetime->month,
  71. separator,
  72. datetime->year);
  73. } else if(format == LocaleDateFormatMDY) {
  74. furi_string_printf(
  75. out_str,
  76. "%02u%s%02u%s%04u",
  77. datetime->month,
  78. separator,
  79. datetime->day,
  80. separator,
  81. datetime->year);
  82. } else {
  83. furi_string_printf(
  84. out_str,
  85. "%04u%s%02u%s%02u",
  86. datetime->year,
  87. separator,
  88. datetime->month,
  89. separator,
  90. datetime->day);
  91. }
  92. }
  93. int32_t locale_on_system_start(void* p) {
  94. UNUSED(p);
  95. return 0;
  96. }