M*LIB: non-inlined strings, FuriString primitive (#1795)
* Quicksave 1 * Header stage complete * Source stage complete * Lint & merge fixes * Includes * Documentation step 1 * FBT: output free size considering BT STACK * Documentation step 2 * py lint * Fix music player plugin * unit test stage 1: string allocator, mem, getters, setters, appends, compare, search. * unit test: string equality * unit test: string replace * unit test: string start_with, end_with * unit test: string trim * unit test: utf-8 * Rename * Revert fw_size changes * Simplify CLI backspace handling * Simplify CLI character insert * Merge fixes * Furi: correct filenaming and spelling * Bt: remove furi string include Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
@@ -340,7 +340,7 @@ bool furi_hal_bt_clear_white_list() {
|
||||
return status != BLE_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
void furi_hal_bt_dump_state(string_t buffer) {
|
||||
void furi_hal_bt_dump_state(FuriString* buffer) {
|
||||
if(furi_hal_bt_is_alive()) {
|
||||
uint8_t HCI_Version;
|
||||
uint16_t HCI_Revision;
|
||||
@@ -351,7 +351,7 @@ void furi_hal_bt_dump_state(string_t buffer) {
|
||||
tBleStatus ret = hci_read_local_version_information(
|
||||
&HCI_Version, &HCI_Revision, &LMP_PAL_Version, &Manufacturer_Name, &LMP_PAL_Subversion);
|
||||
|
||||
string_cat_printf(
|
||||
furi_string_cat_printf(
|
||||
buffer,
|
||||
"Ret: %d, HCI_Version: %d, HCI_Revision: %d, LMP_PAL_Version: %d, Manufacturer_Name: %d, LMP_PAL_Subversion: %d",
|
||||
ret,
|
||||
@@ -361,7 +361,7 @@ void furi_hal_bt_dump_state(string_t buffer) {
|
||||
Manufacturer_Name,
|
||||
LMP_PAL_Subversion);
|
||||
} else {
|
||||
string_cat_printf(buffer, "BLE not ready");
|
||||
furi_string_cat_printf(buffer, "BLE not ready");
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -4,7 +4,6 @@
|
||||
#include <stdbool.h>
|
||||
#include <stm32wbxx_ll_gpio.h>
|
||||
#include <stm32wbxx_ll_usart.h>
|
||||
#include <m-string.h>
|
||||
|
||||
#include <utilities_conf.h>
|
||||
|
||||
@@ -88,13 +87,13 @@ void furi_hal_console_tx_with_new_line(const uint8_t* buffer, size_t buffer_size
|
||||
}
|
||||
|
||||
void furi_hal_console_printf(const char format[], ...) {
|
||||
string_t string;
|
||||
FuriString* string;
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
string_init_vprintf(string, format, args);
|
||||
string = furi_string_alloc_vprintf(format, args);
|
||||
va_end(args);
|
||||
furi_hal_console_tx((const uint8_t*)string_get_cstr(string), string_size(string));
|
||||
string_clear(string);
|
||||
furi_hal_console_tx((const uint8_t*)furi_string_get_cstr(string), furi_string_size(string));
|
||||
furi_string_free(string);
|
||||
}
|
||||
|
||||
void furi_hal_console_puts(const char* data) {
|
||||
|
@@ -5,12 +5,12 @@
|
||||
#include <furi_hal_crypto.h>
|
||||
|
||||
#include <interface/patterns/ble_thread/shci/shci.h>
|
||||
#include <m-string.h>
|
||||
#include <furi.h>
|
||||
#include <protobuf_version.h>
|
||||
|
||||
void furi_hal_info_get(FuriHalInfoValueCallback out, void* context) {
|
||||
string_t value;
|
||||
string_init(value);
|
||||
FuriString* value;
|
||||
value = furi_string_alloc();
|
||||
|
||||
// Device Info version
|
||||
out("device_info_major", "2", false, context);
|
||||
@@ -20,36 +20,36 @@ void furi_hal_info_get(FuriHalInfoValueCallback out, void* context) {
|
||||
out("hardware_model", furi_hal_version_get_model_name(), false, context);
|
||||
|
||||
// Unique ID
|
||||
string_reset(value);
|
||||
furi_string_reset(value);
|
||||
const uint8_t* uid = furi_hal_version_uid();
|
||||
for(size_t i = 0; i < furi_hal_version_uid_size(); i++) {
|
||||
string_cat_printf(value, "%02X", uid[i]);
|
||||
furi_string_cat_printf(value, "%02X", uid[i]);
|
||||
}
|
||||
out("hardware_uid", string_get_cstr(value), false, context);
|
||||
out("hardware_uid", furi_string_get_cstr(value), false, context);
|
||||
|
||||
// OTP Revision
|
||||
string_printf(value, "%d", furi_hal_version_get_otp_version());
|
||||
out("hardware_otp_ver", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%lu", furi_hal_version_get_hw_timestamp());
|
||||
out("hardware_timestamp", string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", furi_hal_version_get_otp_version());
|
||||
out("hardware_otp_ver", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%lu", furi_hal_version_get_hw_timestamp());
|
||||
out("hardware_timestamp", furi_string_get_cstr(value), false, context);
|
||||
|
||||
// Board Revision
|
||||
string_printf(value, "%d", furi_hal_version_get_hw_version());
|
||||
out("hardware_ver", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%d", furi_hal_version_get_hw_target());
|
||||
out("hardware_target", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%d", furi_hal_version_get_hw_body());
|
||||
out("hardware_body", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%d", furi_hal_version_get_hw_connect());
|
||||
out("hardware_connect", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%d", furi_hal_version_get_hw_display());
|
||||
out("hardware_display", string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", furi_hal_version_get_hw_version());
|
||||
out("hardware_ver", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", furi_hal_version_get_hw_target());
|
||||
out("hardware_target", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", furi_hal_version_get_hw_body());
|
||||
out("hardware_body", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", furi_hal_version_get_hw_connect());
|
||||
out("hardware_connect", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", furi_hal_version_get_hw_display());
|
||||
out("hardware_display", furi_string_get_cstr(value), false, context);
|
||||
|
||||
// Board Personification
|
||||
string_printf(value, "%d", furi_hal_version_get_hw_color());
|
||||
out("hardware_color", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%d", furi_hal_version_get_hw_region());
|
||||
out("hardware_region", string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", furi_hal_version_get_hw_color());
|
||||
out("hardware_color", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", furi_hal_version_get_hw_region());
|
||||
out("hardware_region", furi_string_get_cstr(value), false, context);
|
||||
out("hardware_region_provisioned", furi_hal_region_get_name(), false, context);
|
||||
const char* name = furi_hal_version_get_name_ptr();
|
||||
if(name) {
|
||||
@@ -68,8 +68,8 @@ void furi_hal_info_get(FuriHalInfoValueCallback out, void* context) {
|
||||
out("firmware_branch_num", version_get_gitbranchnum(firmware_version), false, context);
|
||||
out("firmware_version", version_get_version(firmware_version), false, context);
|
||||
out("firmware_build_date", version_get_builddate(firmware_version), false, context);
|
||||
string_printf(value, "%d", version_get_target(firmware_version));
|
||||
out("firmware_target", string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", version_get_target(firmware_version));
|
||||
out("firmware_target", furi_string_get_cstr(value), false, context);
|
||||
}
|
||||
|
||||
if(furi_hal_bt_is_alive()) {
|
||||
@@ -78,64 +78,64 @@ void furi_hal_info_get(FuriHalInfoValueCallback out, void* context) {
|
||||
out("radio_mode", ble_c2_info->mode == BleGlueC2ModeFUS ? "FUS" : "Stack", false, context);
|
||||
|
||||
// FUS Info
|
||||
string_printf(value, "%d", ble_c2_info->FusVersionMajor);
|
||||
out("radio_fus_major", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%d", ble_c2_info->FusVersionMinor);
|
||||
out("radio_fus_minor", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%d", ble_c2_info->FusVersionSub);
|
||||
out("radio_fus_sub", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%dK", ble_c2_info->FusMemorySizeSram2B);
|
||||
out("radio_fus_sram2b", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%dK", ble_c2_info->FusMemorySizeSram2A);
|
||||
out("radio_fus_sram2a", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%dK", ble_c2_info->FusMemorySizeFlash * 4);
|
||||
out("radio_fus_flash", string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", ble_c2_info->FusVersionMajor);
|
||||
out("radio_fus_major", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", ble_c2_info->FusVersionMinor);
|
||||
out("radio_fus_minor", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", ble_c2_info->FusVersionSub);
|
||||
out("radio_fus_sub", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%dK", ble_c2_info->FusMemorySizeSram2B);
|
||||
out("radio_fus_sram2b", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%dK", ble_c2_info->FusMemorySizeSram2A);
|
||||
out("radio_fus_sram2a", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%dK", ble_c2_info->FusMemorySizeFlash * 4);
|
||||
out("radio_fus_flash", furi_string_get_cstr(value), false, context);
|
||||
|
||||
// Stack Info
|
||||
string_printf(value, "%d", ble_c2_info->StackType);
|
||||
out("radio_stack_type", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%d", ble_c2_info->VersionMajor);
|
||||
out("radio_stack_major", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%d", ble_c2_info->VersionMinor);
|
||||
out("radio_stack_minor", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%d", ble_c2_info->VersionSub);
|
||||
out("radio_stack_sub", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%d", ble_c2_info->VersionBranch);
|
||||
out("radio_stack_branch", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%d", ble_c2_info->VersionReleaseType);
|
||||
out("radio_stack_release", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%dK", ble_c2_info->MemorySizeSram2B);
|
||||
out("radio_stack_sram2b", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%dK", ble_c2_info->MemorySizeSram2A);
|
||||
out("radio_stack_sram2a", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%dK", ble_c2_info->MemorySizeSram1);
|
||||
out("radio_stack_sram1", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%dK", ble_c2_info->MemorySizeFlash * 4);
|
||||
out("radio_stack_flash", string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", ble_c2_info->StackType);
|
||||
out("radio_stack_type", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", ble_c2_info->VersionMajor);
|
||||
out("radio_stack_major", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", ble_c2_info->VersionMinor);
|
||||
out("radio_stack_minor", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", ble_c2_info->VersionSub);
|
||||
out("radio_stack_sub", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", ble_c2_info->VersionBranch);
|
||||
out("radio_stack_branch", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", ble_c2_info->VersionReleaseType);
|
||||
out("radio_stack_release", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%dK", ble_c2_info->MemorySizeSram2B);
|
||||
out("radio_stack_sram2b", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%dK", ble_c2_info->MemorySizeSram2A);
|
||||
out("radio_stack_sram2a", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%dK", ble_c2_info->MemorySizeSram1);
|
||||
out("radio_stack_sram1", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%dK", ble_c2_info->MemorySizeFlash * 4);
|
||||
out("radio_stack_flash", furi_string_get_cstr(value), false, context);
|
||||
|
||||
// Mac address
|
||||
string_reset(value);
|
||||
furi_string_reset(value);
|
||||
const uint8_t* ble_mac = furi_hal_version_get_ble_mac();
|
||||
for(size_t i = 0; i < 6; i++) {
|
||||
string_cat_printf(value, "%02X", ble_mac[i]);
|
||||
furi_string_cat_printf(value, "%02X", ble_mac[i]);
|
||||
}
|
||||
out("radio_ble_mac", string_get_cstr(value), false, context);
|
||||
out("radio_ble_mac", furi_string_get_cstr(value), false, context);
|
||||
|
||||
// Signature verification
|
||||
uint8_t enclave_keys = 0;
|
||||
uint8_t enclave_valid_keys = 0;
|
||||
bool enclave_valid = furi_hal_crypto_verify_enclave(&enclave_keys, &enclave_valid_keys);
|
||||
string_printf(value, "%d", enclave_valid_keys);
|
||||
out("enclave_valid_keys", string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", enclave_valid_keys);
|
||||
out("enclave_valid_keys", furi_string_get_cstr(value), false, context);
|
||||
out("enclave_valid", enclave_valid ? "true" : "false", false, context);
|
||||
} else {
|
||||
out("radio_alive", "false", false, context);
|
||||
}
|
||||
|
||||
string_printf(value, "%u", PROTOBUF_MAJOR_VERSION);
|
||||
out("protobuf_version_major", string_get_cstr(value), false, context);
|
||||
string_printf(value, "%u", PROTOBUF_MINOR_VERSION);
|
||||
out("protobuf_version_minor", string_get_cstr(value), true, context);
|
||||
furi_string_printf(value, "%u", PROTOBUF_MAJOR_VERSION);
|
||||
out("protobuf_version_major", furi_string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%u", PROTOBUF_MINOR_VERSION);
|
||||
out("protobuf_version_minor", furi_string_get_cstr(value), true, context);
|
||||
|
||||
string_clear(value);
|
||||
furi_string_free(value);
|
||||
}
|
||||
|
@@ -4,7 +4,6 @@
|
||||
#include <st25r3916_irq.h>
|
||||
#include <rfal_rf.h>
|
||||
#include <furi.h>
|
||||
#include <m-string.h>
|
||||
|
||||
#include <lib/digital_signal/digital_signal.h>
|
||||
#include <furi_hal_spi.h>
|
||||
@@ -743,7 +742,8 @@ void furi_hal_nfc_sleep() {
|
||||
rfalLowPowerModeStart();
|
||||
}
|
||||
|
||||
FuriHalNfcReturn furi_hal_nfc_ll_set_mode(FuriHalNfcMode mode, FuriHalNfcBitrate txBR, FuriHalNfcBitrate rxBR) {
|
||||
FuriHalNfcReturn
|
||||
furi_hal_nfc_ll_set_mode(FuriHalNfcMode mode, FuriHalNfcBitrate txBR, FuriHalNfcBitrate rxBR) {
|
||||
return rfalSetMode((rfalMode)mode, (rfalBitRate)txBR, (rfalBitRate)rxBR);
|
||||
}
|
||||
|
||||
|
@@ -529,8 +529,8 @@ void furi_hal_power_suppress_charge_exit() {
|
||||
void furi_hal_power_info_get(FuriHalPowerInfoCallback out, void* context) {
|
||||
furi_assert(out);
|
||||
|
||||
string_t value;
|
||||
string_init(value);
|
||||
FuriString* value;
|
||||
value = furi_string_alloc();
|
||||
|
||||
// Power Info version
|
||||
out("power_info_major", "1", false, context);
|
||||
@@ -538,45 +538,45 @@ void furi_hal_power_info_get(FuriHalPowerInfoCallback out, void* context) {
|
||||
|
||||
uint8_t charge = furi_hal_power_get_pct();
|
||||
|
||||
string_printf(value, "%u", charge);
|
||||
out("charge_level", string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%u", charge);
|
||||
out("charge_level", furi_string_get_cstr(value), false, context);
|
||||
|
||||
if(furi_hal_power_is_charging()) {
|
||||
if(charge < 100) {
|
||||
string_printf(value, "charging");
|
||||
furi_string_printf(value, "charging");
|
||||
} else {
|
||||
string_printf(value, "charged");
|
||||
furi_string_printf(value, "charged");
|
||||
}
|
||||
} else {
|
||||
string_printf(value, "discharging");
|
||||
furi_string_printf(value, "discharging");
|
||||
}
|
||||
out("charge_state", string_get_cstr(value), false, context);
|
||||
out("charge_state", furi_string_get_cstr(value), false, context);
|
||||
|
||||
uint16_t voltage =
|
||||
(uint16_t)(furi_hal_power_get_battery_voltage(FuriHalPowerICFuelGauge) * 1000.f);
|
||||
string_printf(value, "%u", voltage);
|
||||
out("battery_voltage", string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%u", voltage);
|
||||
out("battery_voltage", furi_string_get_cstr(value), false, context);
|
||||
|
||||
int16_t current =
|
||||
(int16_t)(furi_hal_power_get_battery_current(FuriHalPowerICFuelGauge) * 1000.f);
|
||||
string_printf(value, "%d", current);
|
||||
out("battery_current", string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", current);
|
||||
out("battery_current", furi_string_get_cstr(value), false, context);
|
||||
|
||||
int16_t temperature = (int16_t)furi_hal_power_get_battery_temperature(FuriHalPowerICFuelGauge);
|
||||
string_printf(value, "%d", temperature);
|
||||
out("gauge_temp", string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%d", temperature);
|
||||
out("gauge_temp", furi_string_get_cstr(value), false, context);
|
||||
|
||||
string_printf(value, "%u", furi_hal_power_get_bat_health_pct());
|
||||
out("battery_health", string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%u", furi_hal_power_get_bat_health_pct());
|
||||
out("battery_health", furi_string_get_cstr(value), false, context);
|
||||
|
||||
string_printf(value, "%u", furi_hal_power_get_battery_remaining_capacity());
|
||||
out("capacity_remain", string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%u", furi_hal_power_get_battery_remaining_capacity());
|
||||
out("capacity_remain", furi_string_get_cstr(value), false, context);
|
||||
|
||||
string_printf(value, "%u", furi_hal_power_get_battery_full_capacity());
|
||||
out("capacity_full", string_get_cstr(value), false, context);
|
||||
furi_string_printf(value, "%u", furi_hal_power_get_battery_full_capacity());
|
||||
out("capacity_full", furi_string_get_cstr(value), false, context);
|
||||
|
||||
string_printf(value, "%u", furi_hal_power_get_battery_design_capacity());
|
||||
out("capacity_design", string_get_cstr(value), true, context);
|
||||
furi_string_printf(value, "%u", furi_hal_power_get_battery_design_capacity());
|
||||
out("capacity_design", furi_string_get_cstr(value), true, context);
|
||||
|
||||
string_clear(value);
|
||||
furi_string_free(value);
|
||||
}
|
||||
|
Reference in New Issue
Block a user