[FL-3052] WS: add choice fahrenheit/celsius (#2149)
* WS: add choice fahrenheit/celsius * WS: fix syntax Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		@@ -3,7 +3,7 @@
 | 
				
			|||||||
#include <furi.h>
 | 
					#include <furi.h>
 | 
				
			||||||
#include <furi_hal.h>
 | 
					#include <furi_hal.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define WS_VERSION_APP "0.6"
 | 
					#define WS_VERSION_APP "0.6.1"
 | 
				
			||||||
#define WS_DEVELOPED "SkorP"
 | 
					#define WS_DEVELOPED "SkorP"
 | 
				
			||||||
#define WS_GITHUB "https://github.com/flipperdevices/flipperzero-firmware"
 | 
					#define WS_GITHUB "https://github.com/flipperdevices/flipperzero-firmware"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -134,8 +134,8 @@ static void ws_protocol_ambient_weather_remote_controller(WSBlockGeneric* instan
 | 
				
			|||||||
    instance->id = (instance->data >> 32) & 0xFF;
 | 
					    instance->id = (instance->data >> 32) & 0xFF;
 | 
				
			||||||
    instance->battery_low = (instance->data >> 31) & 1;
 | 
					    instance->battery_low = (instance->data >> 31) & 1;
 | 
				
			||||||
    instance->channel = ((instance->data >> 28) & 0x07) + 1;
 | 
					    instance->channel = ((instance->data >> 28) & 0x07) + 1;
 | 
				
			||||||
    instance->temp = ws_block_generic_fahrenheit_to_celsius(
 | 
					    instance->temp =
 | 
				
			||||||
        ((float)((instance->data >> 16) & 0x0FFF) - 400.0f) / 10.0f);
 | 
					        locale_fahrenheit_to_celsius(((float)((instance->data >> 16) & 0x0FFF) - 400.0f) / 10.0f);
 | 
				
			||||||
    instance->humidity = (instance->data >> 8) & 0xFF;
 | 
					    instance->humidity = (instance->data >> 8) & 0xFF;
 | 
				
			||||||
    instance->btn = WS_NO_BTN;
 | 
					    instance->btn = WS_NO_BTN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -143,8 +143,8 @@ static void ws_protocol_infactory_remote_controller(WSBlockGeneric* instance) {
 | 
				
			|||||||
    instance->id = instance->data >> 32;
 | 
					    instance->id = instance->data >> 32;
 | 
				
			||||||
    instance->battery_low = (instance->data >> 26) & 1;
 | 
					    instance->battery_low = (instance->data >> 26) & 1;
 | 
				
			||||||
    instance->btn = WS_NO_BTN;
 | 
					    instance->btn = WS_NO_BTN;
 | 
				
			||||||
    instance->temp = ws_block_generic_fahrenheit_to_celsius(
 | 
					    instance->temp =
 | 
				
			||||||
        ((float)((instance->data >> 12) & 0x0FFF) - 900.0f) / 10.0f);
 | 
					        locale_fahrenheit_to_celsius(((float)((instance->data >> 12) & 0x0FFF) - 900.0f) / 10.0f);
 | 
				
			||||||
    instance->humidity =
 | 
					    instance->humidity =
 | 
				
			||||||
        (((instance->data >> 8) & 0x0F) * 10) + ((instance->data >> 4) & 0x0F); // BCD, 'A0'=100%rH
 | 
					        (((instance->data >> 8) & 0x0F) * 10) + ((instance->data >> 4) & 0x0F); // BCD, 'A0'=100%rH
 | 
				
			||||||
    instance->channel = instance->data & 0x03;
 | 
					    instance->channel = instance->data & 0x03;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -209,7 +209,3 @@ bool ws_block_generic_deserialize(WSBlockGeneric* instance, FlipperFormat* flipp
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return res;
 | 
					    return res;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
float ws_block_generic_fahrenheit_to_celsius(float fahrenheit) {
 | 
					 | 
				
			||||||
    return (fahrenheit - 32.0f) / 1.8f;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -8,6 +8,7 @@
 | 
				
			|||||||
#include "furi.h"
 | 
					#include "furi.h"
 | 
				
			||||||
#include "furi_hal.h"
 | 
					#include "furi_hal.h"
 | 
				
			||||||
#include <lib/subghz/types.h>
 | 
					#include <lib/subghz/types.h>
 | 
				
			||||||
 | 
					#include <locale/locale.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __cplusplus
 | 
					#ifdef __cplusplus
 | 
				
			||||||
extern "C" {
 | 
					extern "C" {
 | 
				
			||||||
@@ -62,8 +63,6 @@ bool ws_block_generic_serialize(
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
bool ws_block_generic_deserialize(WSBlockGeneric* instance, FlipperFormat* flipper_format);
 | 
					bool ws_block_generic_deserialize(WSBlockGeneric* instance, FlipperFormat* flipper_format);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
float ws_block_generic_fahrenheit_to_celsius(float fahrenheit);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef __cplusplus
 | 
					#ifdef __cplusplus
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -81,13 +81,33 @@ void ws_view_receiver_info_draw(Canvas* canvas, WSReceiverInfoModel* model) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if(model->generic->temp != WS_NO_TEMPERATURE) {
 | 
					    if(model->generic->temp != WS_NO_TEMPERATURE) {
 | 
				
			||||||
        canvas_draw_icon(canvas, 6, 43, &I_Therm_7x16);
 | 
					        canvas_draw_icon(canvas, 6, 43, &I_Therm_7x16);
 | 
				
			||||||
        snprintf(buffer, sizeof(buffer), "%3.1f C", (double)model->generic->temp);
 | 
					
 | 
				
			||||||
        uint8_t temp_x1 = 47;
 | 
					        uint8_t temp_x1 = 0;
 | 
				
			||||||
        uint8_t temp_x2 = 38;
 | 
					        uint8_t temp_x2 = 0;
 | 
				
			||||||
        if(model->generic->temp < -9.0) {
 | 
					        if(furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric) {
 | 
				
			||||||
            temp_x1 = 49;
 | 
					            snprintf(buffer, sizeof(buffer), "%3.1f C", (double)model->generic->temp);
 | 
				
			||||||
            temp_x2 = 40;
 | 
					            if(model->generic->temp < -9.0f) {
 | 
				
			||||||
 | 
					                temp_x1 = 49;
 | 
				
			||||||
 | 
					                temp_x2 = 40;
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                temp_x1 = 47;
 | 
				
			||||||
 | 
					                temp_x2 = 38;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            snprintf(
 | 
				
			||||||
 | 
					                buffer,
 | 
				
			||||||
 | 
					                sizeof(buffer),
 | 
				
			||||||
 | 
					                "%3.1f F",
 | 
				
			||||||
 | 
					                (double)locale_celsius_to_fahrenheit(model->generic->temp));
 | 
				
			||||||
 | 
					            if((model->generic->temp < -27.77f) || (model->generic->temp > 37.77f)) {
 | 
				
			||||||
 | 
					                temp_x1 = 50;
 | 
				
			||||||
 | 
					                temp_x2 = 42;
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                temp_x1 = 48;
 | 
				
			||||||
 | 
					                temp_x2 = 40;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        canvas_draw_str_aligned(canvas, temp_x1, 47, AlignRight, AlignTop, buffer);
 | 
					        canvas_draw_str_aligned(canvas, temp_x1, 47, AlignRight, AlignTop, buffer);
 | 
				
			||||||
        canvas_draw_circle(canvas, temp_x2, 46, 1);
 | 
					        canvas_draw_circle(canvas, temp_x2, 46, 1);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user