Merge branch 'dev' into zlo/tlsf-and-a-temple-of-memcorrupt

This commit is contained in:
SG
2024-06-03 13:00:50 +01:00
20 changed files with 434 additions and 99 deletions

13
.clangd Normal file
View File

@@ -0,0 +1,13 @@
CompileFlags:
Add:
- -Wno-unknown-warning-option
- -Wno-format
Remove:
- -mword-relocations
---
If:
PathMatch: .*\.h
Diagnostics:
UnusedIncludes: None

3
.gitignore vendored
View File

@@ -12,6 +12,9 @@ compile_commands.json
# JetBrains IDEs # JetBrains IDEs
.idea/ .idea/
# Sublime Text
.sublime-project.sublime-workspace
# Python VirtEnvironments # Python VirtEnvironments
.env .env
.venv .venv

21
.sublime-project vendored Normal file
View File

@@ -0,0 +1,21 @@
{
"folders":
[
{
"path": ".",
}
],
"settings": {
"LSP": {
"clangd": {
"initializationOptions": {
"clangd.compile-commands-dir": "build/latest",
"clangd.header-insertion": null,
"clangd.query-driver": "**",
"clangd.clang-tidy": true,
},
"enabled": true,
},
},
},
}

View File

@@ -19,6 +19,8 @@
"clangd.arguments": [ "clangd.arguments": [
// We might be able to tighten this a bit more to only include the correct toolchain. // We might be able to tighten this a bit more to only include the correct toolchain.
"--query-driver=**", "--query-driver=**",
"--compile-commands-dir=${workspaceFolder}/build/latest" "--compile-commands-dir=${workspaceFolder}/build/latest",
"--clang-tidy",
"--header-insertion=never"
] ]
} }

View File

@@ -6,8 +6,9 @@
#include <gui/view_dispatcher.h> #include <gui/view_dispatcher.h>
#include <gui/modules/submenu.h> #include <gui/modules/submenu.h>
#include <gui/gui.h> #include <gui/gui.h>
#include "iso7816_callbacks.h"
#include "iso7816_t0_apdu.h" #include "iso7816_t0_apdu.h"
#include "iso7816_atr.h"
typedef enum { typedef enum {
EventTypeInput, EventTypeInput,
@@ -33,38 +34,6 @@ typedef enum {
CcidTestSubmenuIndexInsertSmartcardReader CcidTestSubmenuIndexInsertSmartcardReader
} SubmenuIndex; } SubmenuIndex;
void icc_power_on_callback(uint8_t* atrBuffer, uint32_t* atrlen, void* context) {
UNUSED(context);
iso7816_answer_to_reset(atrBuffer, atrlen);
}
//dataBlock points to the buffer
//dataBlockLen tells reader how nany bytes should be read
void xfr_datablock_callback(
const uint8_t* dataBlock,
uint32_t dataBlockLen,
uint8_t* responseDataBlock,
uint32_t* responseDataBlockLen,
void* context) {
UNUSED(context);
struct ISO7816_Command_APDU commandAPDU;
iso7816_read_command_apdu(&commandAPDU, dataBlock, dataBlockLen);
struct ISO7816_Response_APDU responseAPDU;
//class not supported
responseAPDU.SW1 = 0x6E;
responseAPDU.SW2 = 0x00;
iso7816_write_response_apdu(&responseAPDU, responseDataBlock, responseDataBlockLen);
}
static const CcidCallbacks ccid_cb = {
icc_power_on_callback,
xfr_datablock_callback,
};
static void ccid_test_app_render_callback(Canvas* canvas, void* ctx) { static void ccid_test_app_render_callback(Canvas* canvas, void* ctx) {
UNUSED(ctx); UNUSED(ctx);
canvas_clear(canvas); canvas_clear(canvas);
@@ -127,6 +96,86 @@ void ccid_test_app_free(CcidTestApp* app) {
free(app); free(app);
} }
void ccid_icc_power_on_callback(uint8_t* atrBuffer, uint32_t* atrlen, void* context) {
UNUSED(context);
iso7816_icc_power_on_callback(atrBuffer, atrlen);
}
void ccid_xfr_datablock_callback(
const uint8_t* pcToReaderDataBlock,
uint32_t pcToReaderDataBlockLen,
uint8_t* readerToPcDataBlock,
uint32_t* readerToPcDataBlockLen,
void* context) {
UNUSED(context);
iso7816_xfr_datablock_callback(
pcToReaderDataBlock, pcToReaderDataBlockLen, readerToPcDataBlock, readerToPcDataBlockLen);
}
static const CcidCallbacks ccid_cb = {
ccid_icc_power_on_callback,
ccid_xfr_datablock_callback,
};
void iso7816_answer_to_reset(Iso7816Atr* atr) {
//minimum valid ATR: https://smartcard-atr.apdu.fr/parse?ATR=3B+00
atr->TS = 0x3B;
atr->T0 = 0x00;
}
void iso7816_process_command(
const struct ISO7816_Command_APDU* commandAPDU,
struct ISO7816_Response_APDU* responseAPDU,
const uint8_t* commandApduDataBuffer,
uint8_t commandApduDataBufferLen,
uint8_t* responseApduDataBuffer,
uint8_t* responseApduDataBufferLen) {
//example 1: sends a command with no body, receives a response with no body
//sends APDU 0x01:0x02:0x00:0x00
//receives SW1=0x90, SW2=0x00
if(commandAPDU->CLA == 0x01 && commandAPDU->INS == 0x01) {
responseAPDU->SW1 = 0x90;
responseAPDU->SW2 = 0x00;
}
//example 2: sends a command with no body, receives a response with a body with two bytes
//sends APDU 0x01:0x02:0x00:0x00
//receives 'bc' (0x62, 0x63) SW1=0x80, SW2=0x10
else if(commandAPDU->CLA == 0x01 && commandAPDU->INS == 0x02) {
responseApduDataBuffer[0] = 0x62;
responseApduDataBuffer[1] = 0x63;
*responseApduDataBufferLen = 2;
responseAPDU->SW1 = 0x90;
responseAPDU->SW2 = 0x00;
}
//example 3: ends a command with a body with two bytes, receives a response with a body with two bytes
//sends APDU 0x01:0x03:0x00:0x00:0x02:CA:FE
//receives (0xCA, 0xFE) SW1=0x90, SW2=0x02
else if(
commandAPDU->CLA == 0x01 && commandAPDU->INS == 0x03 && commandApduDataBufferLen == 2 &&
commandAPDU->Lc == 2) {
//echo command body to response body
responseApduDataBuffer[0] = commandApduDataBuffer[0];
responseApduDataBuffer[1] = commandApduDataBuffer[1];
*responseApduDataBufferLen = 2;
responseAPDU->SW1 = 0x90;
responseAPDU->SW2 = 0x00;
} else {
responseAPDU->SW1 = 0x6A;
responseAPDU->SW2 = 0x00;
}
}
static const Iso7816Callbacks iso87816_cb = {
iso7816_answer_to_reset,
iso7816_process_command,
};
int32_t ccid_test_app(void* p) { int32_t ccid_test_app(void* p) {
UNUSED(p); UNUSED(p);
@@ -135,14 +184,16 @@ int32_t ccid_test_app(void* p) {
//setup CCID USB //setup CCID USB
// On linux: set VID PID using: /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist // On linux: set VID PID using: /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist
app->ccid_cfg.vid = 0x1234; app->ccid_cfg.vid = 0x076B;
app->ccid_cfg.pid = 0x5678; app->ccid_cfg.pid = 0x3A21;
FuriHalUsbInterface* usb_mode_prev = furi_hal_usb_get_config(); FuriHalUsbInterface* usb_mode_prev = furi_hal_usb_get_config();
furi_hal_usb_unlock(); furi_hal_usb_unlock();
furi_hal_ccid_set_callbacks((CcidCallbacks*)&ccid_cb); furi_hal_ccid_set_callbacks((CcidCallbacks*)&ccid_cb, NULL);
furi_check(furi_hal_usb_set_config(&usb_ccid, &app->ccid_cfg) == true); furi_check(furi_hal_usb_set_config(&usb_ccid, &app->ccid_cfg) == true);
iso7816_set_callbacks((Iso7816Callbacks*)&iso87816_cb);
//handle button events //handle button events
CcidTestAppEvent event; CcidTestAppEvent event;
while(1) { while(1) {
@@ -161,7 +212,9 @@ int32_t ccid_test_app(void* p) {
//tear down USB //tear down USB
furi_hal_usb_set_config(usb_mode_prev, NULL); furi_hal_usb_set_config(usb_mode_prev, NULL);
furi_hal_ccid_set_callbacks(NULL); furi_hal_ccid_set_callbacks(NULL, NULL);
iso7816_set_callbacks(NULL);
//teardown view //teardown view
ccid_test_app_free(app); ccid_test_app_free(app);

View File

@@ -0,0 +1,9 @@
#ifndef _ISO7816_ATR_H_
#define _ISO7816_ATR_H_
typedef struct {
uint8_t TS;
uint8_t T0;
} Iso7816Atr;
#endif //_ISO7816_ATR_H_

View File

@@ -0,0 +1,76 @@
// transforms low level calls such as XFRCallback or ICC Power on to a structured one
// an application can register these calls and listen for the callbacks defined in Iso7816Callbacks
#include "iso7816_t0_apdu.h"
#include "iso7816_atr.h"
#include "iso7816_callbacks.h"
#include <stdint.h>
#include <stddef.h>
#include <furi.h>
#define ISO7816_RESPONSE_BUFFER_SIZE 255
static Iso7816Callbacks* callbacks = NULL;
void iso7816_set_callbacks(Iso7816Callbacks* cb) {
callbacks = cb;
}
void iso7816_icc_power_on_callback(uint8_t* atrBuffer, uint32_t* atrlen) {
Iso7816Atr atr;
callbacks->iso7816_answer_to_reset(&atr);
furi_assert(atr.T0 == 0x00);
uint8_t AtrBuffer[2] = {atr.TS, atr.T0};
*atrlen = 2;
memcpy(atrBuffer, AtrBuffer, sizeof(uint8_t) * (*atrlen));
}
//dataBlock points to the buffer
//dataBlockLen tells reader how nany bytes should be read
void iso7816_xfr_datablock_callback(
const uint8_t* pcToReaderDataBlock,
uint32_t pcToReaderDataBlockLen,
uint8_t* readerToPcDataBlock,
uint32_t* readerToPcDataBlockLen) {
struct ISO7816_Response_APDU responseAPDU;
uint8_t responseApduDataBuffer[ISO7816_RESPONSE_BUFFER_SIZE];
uint8_t responseApduDataBufferLen = 0;
if(callbacks != NULL) {
struct ISO7816_Command_APDU commandAPDU;
const uint8_t* commandApduDataBuffer = NULL;
uint8_t commandApduDataBufferLen = 0;
iso7816_read_command_apdu(&commandAPDU, pcToReaderDataBlock, pcToReaderDataBlockLen);
if(commandAPDU.Lc > 0) {
commandApduDataBufferLen = commandAPDU.Lc;
commandApduDataBuffer = &pcToReaderDataBlock[5];
}
callbacks->iso7816_process_command(
&commandAPDU,
&responseAPDU,
commandApduDataBuffer,
commandApduDataBufferLen,
responseApduDataBuffer,
&responseApduDataBufferLen);
} else {
//class not supported
responseAPDU.SW1 = 0x6E;
responseAPDU.SW2 = 0x00;
}
iso7816_write_response_apdu(
&responseAPDU,
readerToPcDataBlock,
readerToPcDataBlockLen,
responseApduDataBuffer,
responseApduDataBufferLen);
}

View File

@@ -0,0 +1,28 @@
#ifndef _ISO7816_CALLBACKS_H_
#define _ISO7816_CALLBACKS_H_
#include <stdint.h>
#include "iso7816_atr.h"
#include "iso7816_t0_apdu.h"
typedef struct {
void (*iso7816_answer_to_reset)(Iso7816Atr* atr);
void (*iso7816_process_command)(
const struct ISO7816_Command_APDU* command,
struct ISO7816_Response_APDU* response,
const uint8_t* commandApduDataBuffer,
uint8_t commandApduDataBufferLen,
uint8_t* responseApduDataBuffer,
uint8_t* responseApduDataBufferLen);
} Iso7816Callbacks;
void iso7816_set_callbacks(Iso7816Callbacks* cb);
void iso7816_icc_power_on_callback(uint8_t* atrBuffer, uint32_t* atrlen);
void iso7816_xfr_datablock_callback(
const uint8_t* dataBlock,
uint32_t dataBlockLen,
uint8_t* responseDataBlock,
uint32_t* responseDataBlockLen);
#endif //_ISO7816_CALLBACKS_H_

View File

@@ -4,22 +4,14 @@
#include <furi.h> #include <furi.h>
#include "iso7816_t0_apdu.h" #include "iso7816_t0_apdu.h"
void iso7816_answer_to_reset(uint8_t* dataBuffer, uint32_t* atrlen) { //reads dataBuffer with dataLen size, translate it into a ISO7816_Command_APDU type
//minimum valid ATR: https://smartcard-atr.apdu.fr/parse?ATR=3B+00 //extra data will be pointed to commandDataBuffer
uint8_t AtrBuffer[2] = {
0x3B, //TS (direct convention)
0x00 // T0 (Y(1): b0000, K: 0 (historical bytes))
};
*atrlen = 2;
memcpy(dataBuffer, AtrBuffer, sizeof(uint8_t) * (*atrlen));
}
void iso7816_read_command_apdu( void iso7816_read_command_apdu(
struct ISO7816_Command_APDU* command, struct ISO7816_Command_APDU* command,
const uint8_t* dataBuffer, const uint8_t* dataBuffer,
uint32_t dataLen) { uint32_t dataLen) {
UNUSED(dataLen); UNUSED(dataLen);
command->CLA = dataBuffer[0]; command->CLA = dataBuffer[0];
command->INS = dataBuffer[1]; command->INS = dataBuffer[1];
command->P1 = dataBuffer[2]; command->P1 = dataBuffer[2];
@@ -27,11 +19,30 @@ void iso7816_read_command_apdu(
command->Lc = dataBuffer[4]; command->Lc = dataBuffer[4];
} }
//data buffer countains the whole APU response (response + trailer (SW1+SW2))
void iso7816_write_response_apdu( void iso7816_write_response_apdu(
const struct ISO7816_Response_APDU* response, const struct ISO7816_Response_APDU* response,
uint8_t* dataBuffer, uint8_t* readerToPcDataBlock,
uint32_t* dataLen) { uint32_t* readerToPcDataBlockLen,
dataBuffer[0] = response->SW1; uint8_t* responseDataBuffer,
dataBuffer[1] = response->SW2; uint32_t responseDataLen) {
*dataLen = 2; uint32_t responseDataBufferIndex = 0;
//response body
if(responseDataLen > 0) {
while(responseDataBufferIndex < responseDataLen) {
readerToPcDataBlock[responseDataBufferIndex] =
responseDataBuffer[responseDataBufferIndex];
responseDataBufferIndex++;
}
}
//trailer
readerToPcDataBlock[responseDataBufferIndex] = response->SW1;
responseDataBufferIndex++;
readerToPcDataBlock[responseDataBufferIndex] = response->SW2;
responseDataBufferIndex++;
*readerToPcDataBlockLen = responseDataBufferIndex;
} }

View File

@@ -2,6 +2,8 @@
#define _ISO7816_T0_APDU_H_ #define _ISO7816_T0_APDU_H_
#include <stdint.h> #include <stdint.h>
#include "iso7816_atr.h"
#include "core/common_defines.h"
struct ISO7816_Command_APDU { struct ISO7816_Command_APDU {
//header //header
@@ -20,13 +22,15 @@ struct ISO7816_Response_APDU {
uint8_t SW2; uint8_t SW2;
} FURI_PACKED; } FURI_PACKED;
void iso7816_answer_to_reset(uint8_t* atrBuffer, uint32_t* atrlen); void iso7816_answer_to_reset(Iso7816Atr* atr);
void iso7816_read_command_apdu( void iso7816_read_command_apdu(
struct ISO7816_Command_APDU* command, struct ISO7816_Command_APDU* command,
const uint8_t* dataBuffer, const uint8_t* dataBuffer,
uint32_t dataLen); uint32_t dataLen);
void iso7816_write_response_apdu( void iso7816_write_response_apdu(
const struct ISO7816_Response_APDU* response, const struct ISO7816_Response_APDU* response,
uint8_t* dataBuffer, uint8_t* readerToPcDataBlock,
uint32_t* dataLen); uint32_t* readerToPcDataBlockLen,
uint8_t* responseDataBuffer,
uint32_t responseDataLen);
#endif //_ISO7816_T0_APDU_H_ #endif //_ISO7816_T0_APDU_H_

View File

@@ -80,6 +80,14 @@ SubGhzProtocolStatus subghz_txrx_gen_data_protocol_and_te(
FURI_LOG_E(TAG, "Unable to update Te"); FURI_LOG_E(TAG, "Unable to update Te");
} }
} }
if(ret == SubGhzProtocolStatusOk) {
uint32_t guard_time = 30;
if(!flipper_format_update_uint32(
instance->fff_data, "Guard_time", (uint32_t*)&guard_time, 1)) {
ret = SubGhzProtocolStatusErrorParserOthers;
FURI_LOG_E(TAG, "Unable to update Guard_time");
}
}
return ret; return ret;
} }

View File

@@ -20,6 +20,7 @@ env = ENV.Clone(
"fbt_resources", "fbt_resources",
], ],
COMPILATIONDB_USE_ABSPATH=False, COMPILATIONDB_USE_ABSPATH=False,
COMPILATIONDB_USE_BINARY_ABSPATH=True,
BUILD_DIR=fw_build_meta["build_dir"], BUILD_DIR=fw_build_meta["build_dir"],
IS_BASE_FIRMWARE=fw_build_meta["type"] == "firmware", IS_BASE_FIRMWARE=fw_build_meta["type"] == "firmware",
FW_FLAVOR=fw_build_meta["flavor"], FW_FLAVOR=fw_build_meta["flavor"],

View File

@@ -13,6 +13,7 @@
*/ */
#define TAG "SubGhzProtocolPrinceton" #define TAG "SubGhzProtocolPrinceton"
#define PRINCETON_GUARD_TIME_DEFALUT 30 //GUARD_TIME = PRINCETON_GUARD_TIME_DEFALUT * TE
static const SubGhzBlockConst subghz_protocol_princeton_const = { static const SubGhzBlockConst subghz_protocol_princeton_const = {
.te_short = 390, .te_short = 390,
@@ -29,6 +30,7 @@ struct SubGhzProtocolDecoderPrinceton {
uint32_t te; uint32_t te;
uint32_t last_data; uint32_t last_data;
uint32_t guard_time;
}; };
struct SubGhzProtocolEncoderPrinceton { struct SubGhzProtocolEncoderPrinceton {
@@ -38,6 +40,7 @@ struct SubGhzProtocolEncoderPrinceton {
SubGhzBlockGeneric generic; SubGhzBlockGeneric generic;
uint32_t te; uint32_t te;
uint32_t guard_time;
}; };
typedef enum { typedef enum {
@@ -135,8 +138,9 @@ static bool
//Send Stop bit //Send Stop bit
instance->encoder.upload[index++] = level_duration_make(true, (uint32_t)instance->te); instance->encoder.upload[index++] = level_duration_make(true, (uint32_t)instance->te);
//Send PT_GUARD //Send PT_GUARD_TIME
instance->encoder.upload[index++] = level_duration_make(false, (uint32_t)instance->te * 30); instance->encoder.upload[index++] =
level_duration_make(false, (uint32_t)instance->te * instance->guard_time);
return true; return true;
} }
@@ -165,6 +169,11 @@ SubGhzProtocolStatus
break; break;
} }
//optional parameter parameter //optional parameter parameter
if(!flipper_format_read_uint32(
flipper_format, "Guard_time", (uint32_t*)&instance->guard_time, 1)) {
instance->guard_time = PRINCETON_GUARD_TIME_DEFALUT;
}
flipper_format_read_uint32( flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1); flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
@@ -235,6 +244,7 @@ void subghz_protocol_decoder_princeton_feed(void* context, bool level, uint32_t
instance->decoder.decode_data = 0; instance->decoder.decode_data = 0;
instance->decoder.decode_count_bit = 0; instance->decoder.decode_count_bit = 0;
instance->te = 0; instance->te = 0;
instance->guard_time = PRINCETON_GUARD_TIME_DEFALUT;
} }
break; break;
case PrincetonDecoderStepSaveDuration: case PrincetonDecoderStepSaveDuration:
@@ -257,6 +267,7 @@ void subghz_protocol_decoder_princeton_feed(void* context, bool level, uint32_t
instance->generic.data = instance->decoder.decode_data; instance->generic.data = instance->decoder.decode_data;
instance->generic.data_count_bit = instance->decoder.decode_count_bit; instance->generic.data_count_bit = instance->decoder.decode_count_bit;
instance->guard_time = round((float)duration / instance->te);
if(instance->base.callback) if(instance->base.callback)
instance->base.callback(&instance->base, instance->base.context); instance->base.callback(&instance->base, instance->base.context);
@@ -323,6 +334,12 @@ SubGhzProtocolStatus subghz_protocol_decoder_princeton_serialize(
FURI_LOG_E(TAG, "Unable to add TE"); FURI_LOG_E(TAG, "Unable to add TE");
ret = SubGhzProtocolStatusErrorParserTe; ret = SubGhzProtocolStatusErrorParserTe;
} }
if((ret == SubGhzProtocolStatusOk) &&
!flipper_format_write_uint32(flipper_format, "Guard_time", &instance->guard_time, 1)) {
FURI_LOG_E(TAG, "Unable to add Guard_time");
ret = SubGhzProtocolStatusErrorParserOthers;
}
return ret; return ret;
} }
@@ -349,6 +366,10 @@ SubGhzProtocolStatus
ret = SubGhzProtocolStatusErrorParserTe; ret = SubGhzProtocolStatusErrorParserTe;
break; break;
} }
if(!flipper_format_read_uint32(
flipper_format, "Guard_time", (uint32_t*)&instance->guard_time, 1)) {
instance->guard_time = PRINCETON_GUARD_TIME_DEFALUT;
}
} while(false); } while(false);
return ret; return ret;

View File

@@ -12,3 +12,4 @@ def generate(env):
env["LINK"] = env["CXX"] env["LINK"] = env["CXX"]
env["CXX_NOCACHE"] = env["CXX"] env["CXX_NOCACHE"] = env["CXX"]
env["CXX"] = "$CCACHE $CXX_NOCACHE" env["CXX"] = "$CCACHE $CXX_NOCACHE"
env.AppendUnique(COMPILATIONDB_OMIT_BINARIES=["ccache"])

View File

@@ -32,7 +32,7 @@ which is the name that most clang tools search for by default.
import fnmatch import fnmatch
import itertools import itertools
import json import json
from shlex import quote from shlex import join, split
import SCons import SCons
from SCons.Tool.asm import ASPPSuffixes, ASSuffixes from SCons.Tool.asm import ASPPSuffixes, ASSuffixes
@@ -108,6 +108,10 @@ def make_emit_compilation_DB_entry(comstr):
return emit_compilation_db_entry return emit_compilation_db_entry
def __is_value_true(value):
return value in [True, 1, "True", "true"]
def compilation_db_entry_action(target, source, env, **kw): def compilation_db_entry_action(target, source, env, **kw):
""" """
Create a dictionary with evaluated command line, target, source Create a dictionary with evaluated command line, target, source
@@ -126,16 +130,19 @@ def compilation_db_entry_action(target, source, env, **kw):
env=env["__COMPILATIONDB_ENV"], env=env["__COMPILATIONDB_ENV"],
) )
# We assume first non-space character is the executable cmdline = split(command)
executable = command.split(" ", 1)[0] binaries_to_omit = env["COMPILATIONDB_OMIT_BINARIES"]
if not (tool_path := _TOOL_PATH_CACHE.get(executable, None)): while (executable := cmdline[0]) in binaries_to_omit:
tool_path = env.WhereIs(executable) or executable cmdline.pop(0)
_TOOL_PATH_CACHE[executable] = tool_path
# If there are spaces in the executable path, we need to quote it if __is_value_true(env["COMPILATIONDB_USE_BINARY_ABSPATH"]):
if " " in tool_path: if not (tool_path := _TOOL_PATH_CACHE.get(executable, None)):
tool_path = quote(tool_path) tool_path = env.WhereIs(executable) or executable
# Replacing the executable with the full path _TOOL_PATH_CACHE[executable] = tool_path
command = tool_path + command[len(executable) :] # Replacing the executable with the full path
executable = tool_path
command = join((executable, *cmdline[1:]))
entry = { entry = {
"directory": env.Dir("#").abspath, "directory": env.Dir("#").abspath,
@@ -150,7 +157,7 @@ def compilation_db_entry_action(target, source, env, **kw):
def write_compilation_db(target, source, env): def write_compilation_db(target, source, env):
entries = [] entries = []
use_abspath = env["COMPILATIONDB_USE_ABSPATH"] in [True, 1, "True", "true"] use_abspath = __is_value_true(env["COMPILATIONDB_USE_ABSPATH"])
use_path_filter = env.subst("$COMPILATIONDB_PATH_FILTER") use_path_filter = env.subst("$COMPILATIONDB_PATH_FILTER")
use_srcpath_filter = env.subst("$COMPILATIONDB_SRCPATH_FILTER") use_srcpath_filter = env.subst("$COMPILATIONDB_SRCPATH_FILTER")
@@ -225,6 +232,8 @@ def generate(env, **kwargs):
COMPILATIONDB_USE_ABSPATH=False, COMPILATIONDB_USE_ABSPATH=False,
COMPILATIONDB_PATH_FILTER="", COMPILATIONDB_PATH_FILTER="",
COMPILATIONDB_SRCPATH_FILTER="", COMPILATIONDB_SRCPATH_FILTER="",
COMPILATIONDB_OMIT_BINARIES=[],
COMPILATIONDB_USE_BINARY_ABSPATH=False,
) )
components_by_suffix = itertools.chain( components_by_suffix = itertools.chain(

View File

@@ -102,6 +102,7 @@ env = core_env.Clone(
core_env.subst("$SDK_DEFINITION"), load_version_only=True core_env.subst("$SDK_DEFINITION"), load_version_only=True
).version, ).version,
APPCHECK_COMSTR="\tAPPCHK\t${SOURCE}\n\t\tTarget: ${TARGET_HW}, API: ${UFBT_API_VERSION}", APPCHECK_COMSTR="\tAPPCHK\t${SOURCE}\n\t\tTarget: ${TARGET_HW}, API: ${UFBT_API_VERSION}",
COMPILATIONDB_USE_BINARY_ABSPATH=True,
) )
wrap_tempfile(env, "LINKCOM") wrap_tempfile(env, "LINKCOM")

View File

@@ -1,6 +1,7 @@
entry,status,name,type,params entry,status,name,type,params
Version,+,62.0,, Version,+,63.0,,
Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/bt/bt_service/bt_keys_storage.h,,
Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli.h,,
Header,+,applications/services/cli/cli_vcp.h,, Header,+,applications/services/cli/cli_vcp.h,,
Header,+,applications/services/dialogs/dialogs.h,, Header,+,applications/services/dialogs/dialogs.h,,
@@ -156,10 +157,12 @@ Header,+,lib/toolbox/hex.h,,
Header,+,lib/toolbox/keys_dict.h,, Header,+,lib/toolbox/keys_dict.h,,
Header,+,lib/toolbox/manchester_decoder.h,, Header,+,lib/toolbox/manchester_decoder.h,,
Header,+,lib/toolbox/manchester_encoder.h,, Header,+,lib/toolbox/manchester_encoder.h,,
Header,+,lib/toolbox/md5_calc.h,,
Header,+,lib/toolbox/name_generator.h,, Header,+,lib/toolbox/name_generator.h,,
Header,+,lib/toolbox/path.h,, Header,+,lib/toolbox/path.h,,
Header,+,lib/toolbox/pretty_format.h,, Header,+,lib/toolbox/pretty_format.h,,
Header,+,lib/toolbox/protocols/protocol_dict.h,, Header,+,lib/toolbox/protocols/protocol_dict.h,,
Header,+,lib/toolbox/pulse_protocols/pulse_glue.h,,
Header,+,lib/toolbox/saved_struct.h,, Header,+,lib/toolbox/saved_struct.h,,
Header,+,lib/toolbox/simple_array.h,, Header,+,lib/toolbox/simple_array.h,,
Header,+,lib/toolbox/stream/buffered_file_stream.h,, Header,+,lib/toolbox/stream/buffered_file_stream.h,,
@@ -168,6 +171,7 @@ Header,+,lib/toolbox/stream/stream.h,,
Header,+,lib/toolbox/stream/string_stream.h,, Header,+,lib/toolbox/stream/string_stream.h,,
Header,+,lib/toolbox/tar/tar_archive.h,, Header,+,lib/toolbox/tar/tar_archive.h,,
Header,+,lib/toolbox/value_index.h,, Header,+,lib/toolbox/value_index.h,,
Header,+,lib/toolbox/varint.h,,
Header,+,lib/toolbox/version.h,, Header,+,lib/toolbox/version.h,,
Header,+,targets/f18/furi_hal/furi_hal_resources.h,, Header,+,targets/f18/furi_hal/furi_hal_resources.h,,
Header,+,targets/f18/furi_hal/furi_hal_spi_config.h,, Header,+,targets/f18/furi_hal/furi_hal_spi_config.h,,
@@ -516,7 +520,9 @@ Function,-,acosh,double,double
Function,-,acoshf,float,float Function,-,acoshf,float,float
Function,-,acoshl,long double,long double Function,-,acoshl,long double,long double
Function,-,acosl,long double,long double Function,-,acosl,long double,long double
Function,+,aligned_alloc,void*,"size_t, size_t" Function,-,aligned_alloc,void*,"size_t, size_t"
Function,+,aligned_free,void,void*
Function,+,aligned_malloc,void*,"size_t, size_t"
Function,-,arc4random,__uint32_t, Function,-,arc4random,__uint32_t,
Function,-,arc4random_buf,void,"void*, size_t" Function,-,arc4random_buf,void,"void*, size_t"
Function,-,arc4random_uniform,__uint32_t,__uint32_t Function,-,arc4random_uniform,__uint32_t,__uint32_t
@@ -678,8 +684,15 @@ Function,+,ble_svc_serial_update_tx,_Bool,"BleServiceSerial*, uint8_t*, uint16_t
Function,-,bsearch,void*,"const void*, const void*, size_t, size_t, __compar_fn_t" Function,-,bsearch,void*,"const void*, const void*, size_t, size_t, __compar_fn_t"
Function,+,bt_disconnect,void,Bt* Function,+,bt_disconnect,void,Bt*
Function,+,bt_forget_bonded_devices,void,Bt* Function,+,bt_forget_bonded_devices,void,Bt*
Function,+,bt_keys_storage_alloc,BtKeysStorage*,const char*
Function,+,bt_keys_storage_delete,_Bool,BtKeysStorage*
Function,+,bt_keys_storage_free,void,BtKeysStorage*
Function,+,bt_keys_storage_load,_Bool,BtKeysStorage*
Function,+,bt_keys_storage_set_default_path,void,Bt* Function,+,bt_keys_storage_set_default_path,void,Bt*
Function,+,bt_keys_storage_set_file_path,void,"BtKeysStorage*, const char*"
Function,+,bt_keys_storage_set_ram_params,void,"BtKeysStorage*, uint8_t*, uint16_t"
Function,+,bt_keys_storage_set_storage_path,void,"Bt*, const char*" Function,+,bt_keys_storage_set_storage_path,void,"Bt*, const char*"
Function,+,bt_keys_storage_update,_Bool,"BtKeysStorage*, uint8_t*, uint32_t"
Function,+,bt_profile_restore_default,_Bool,Bt* Function,+,bt_profile_restore_default,_Bool,Bt*
Function,+,bt_profile_start,FuriHalBleProfileBase*,"Bt*, const FuriHalBleProfileTemplate*, FuriHalBleProfileParams" Function,+,bt_profile_start,FuriHalBleProfileBase*,"Bt*, const FuriHalBleProfileTemplate*, FuriHalBleProfileParams"
Function,+,bt_set_status_changed_callback,void,"Bt*, BtStatusChangedCallback, void*" Function,+,bt_set_status_changed_callback,void,"Bt*, BtStatusChangedCallback, void*"
@@ -771,7 +784,7 @@ Function,+,compress_alloc,Compress*,uint16_t
Function,+,compress_decode,_Bool,"Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*" Function,+,compress_decode,_Bool,"Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*"
Function,+,compress_encode,_Bool,"Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*" Function,+,compress_encode,_Bool,"Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*"
Function,+,compress_free,void,Compress* Function,+,compress_free,void,Compress*
Function,+,compress_icon_alloc,CompressIcon*, Function,+,compress_icon_alloc,CompressIcon*,size_t
Function,+,compress_icon_decode,void,"CompressIcon*, const uint8_t*, uint8_t**" Function,+,compress_icon_decode,void,"CompressIcon*, const uint8_t*, uint8_t**"
Function,+,compress_icon_free,void,CompressIcon* Function,+,compress_icon_free,void,CompressIcon*
Function,-,copysign,double,"double, double" Function,-,copysign,double,"double, double"
@@ -1144,7 +1157,7 @@ Function,+,furi_hal_bus_is_enabled,_Bool,FuriHalBus
Function,+,furi_hal_bus_reset,void,FuriHalBus Function,+,furi_hal_bus_reset,void,FuriHalBus
Function,+,furi_hal_ccid_ccid_insert_smartcard,void, Function,+,furi_hal_ccid_ccid_insert_smartcard,void,
Function,+,furi_hal_ccid_ccid_remove_smartcard,void, Function,+,furi_hal_ccid_ccid_remove_smartcard,void,
Function,+,furi_hal_ccid_set_callbacks,void,CcidCallbacks* Function,+,furi_hal_ccid_set_callbacks,void,"CcidCallbacks*, void*"
Function,+,furi_hal_cdc_get_ctrl_line_state,uint8_t,uint8_t Function,+,furi_hal_cdc_get_ctrl_line_state,uint8_t,uint8_t
Function,+,furi_hal_cdc_get_port_settings,usb_cdc_line_coding*,uint8_t Function,+,furi_hal_cdc_get_port_settings,usb_cdc_line_coding*,uint8_t
Function,+,furi_hal_cdc_receive,int32_t,"uint8_t, uint8_t*, uint16_t" Function,+,furi_hal_cdc_receive,int32_t,"uint8_t, uint8_t*, uint16_t"
@@ -1488,7 +1501,7 @@ Function,+,furi_mutex_free,void,FuriMutex*
Function,+,furi_mutex_get_owner,FuriThreadId,FuriMutex* Function,+,furi_mutex_get_owner,FuriThreadId,FuriMutex*
Function,+,furi_mutex_release,FuriStatus,FuriMutex* Function,+,furi_mutex_release,FuriStatus,FuriMutex*
Function,+,furi_pubsub_alloc,FuriPubSub*, Function,+,furi_pubsub_alloc,FuriPubSub*,
Function,-,furi_pubsub_free,void,FuriPubSub* Function,+,furi_pubsub_free,void,FuriPubSub*
Function,+,furi_pubsub_publish,void,"FuriPubSub*, void*" Function,+,furi_pubsub_publish,void,"FuriPubSub*, void*"
Function,+,furi_pubsub_subscribe,FuriPubSubSubscription*,"FuriPubSub*, FuriPubSubCallback, void*" Function,+,furi_pubsub_subscribe,FuriPubSubSubscription*,"FuriPubSub*, FuriPubSubCallback, void*"
Function,+,furi_pubsub_unsubscribe,void,"FuriPubSub*, FuriPubSubSubscription*" Function,+,furi_pubsub_unsubscribe,void,"FuriPubSub*, FuriPubSubSubscription*"
@@ -1673,8 +1686,10 @@ Function,+,icon_animation_set_update_callback,void,"IconAnimation*, IconAnimatio
Function,+,icon_animation_start,void,IconAnimation* Function,+,icon_animation_start,void,IconAnimation*
Function,+,icon_animation_stop,void,IconAnimation* Function,+,icon_animation_stop,void,IconAnimation*
Function,+,icon_get_data,const uint8_t*,const Icon* Function,+,icon_get_data,const uint8_t*,const Icon*
Function,+,icon_get_height,uint8_t,const Icon* Function,+,icon_get_frame_count,uint32_t,const Icon*
Function,+,icon_get_width,uint8_t,const Icon* Function,+,icon_get_frame_data,const uint8_t*,"const Icon*, uint32_t"
Function,+,icon_get_height,uint16_t,const Icon*
Function,+,icon_get_width,uint16_t,const Icon*
Function,-,ilogb,int,double Function,-,ilogb,int,double
Function,-,ilogbf,int,float Function,-,ilogbf,int,float
Function,-,ilogbl,int,long double Function,-,ilogbl,int,long double
@@ -1978,13 +1993,14 @@ Function,-,mbedtls_sha256_update,int,"mbedtls_sha256_context*, const unsigned ch
Function,-,mblen,int,"const char*, size_t" Function,-,mblen,int,"const char*, size_t"
Function,-,mbstowcs,size_t,"wchar_t*, const char*, size_t" Function,-,mbstowcs,size_t,"wchar_t*, const char*, size_t"
Function,-,mbtowc,int,"wchar_t*, const char*, size_t" Function,-,mbtowc,int,"wchar_t*, const char*, size_t"
Function,+,md5_calc_file,_Bool,"File*, const char*, unsigned char[16], FS_Error*"
Function,+,md5_string_calc_file,_Bool,"File*, const char*, FuriString*, FS_Error*"
Function,-,memccpy,void*,"void*, const void*, int, size_t" Function,-,memccpy,void*,"void*, const void*, int, size_t"
Function,+,memchr,void*,"const void*, int, size_t" Function,+,memchr,void*,"const void*, int, size_t"
Function,+,memcmp,int,"const void*, const void*, size_t" Function,+,memcmp,int,"const void*, const void*, size_t"
Function,+,memcpy,void*,"void*, const void*, size_t" Function,+,memcpy,void*,"void*, const void*, size_t"
Function,-,memmem,void*,"const void*, size_t, const void*, size_t" Function,-,memmem,void*,"const void*, size_t, const void*, size_t"
Function,+,memmgr_aux_pool_alloc,void*,size_t Function,-,memmgr_alloc_from_pool,void*,size_t
Function,+,memmgr_aux_pool_get_free,size_t,
Function,+,memmgr_get_free_heap,size_t, Function,+,memmgr_get_free_heap,size_t,
Function,+,memmgr_get_minimum_free_heap,size_t, Function,+,memmgr_get_minimum_free_heap,size_t,
Function,+,memmgr_get_total_heap,size_t, Function,+,memmgr_get_total_heap,size_t,
@@ -1992,7 +2008,8 @@ Function,+,memmgr_heap_disable_thread_trace,void,FuriThreadId
Function,+,memmgr_heap_enable_thread_trace,void,FuriThreadId Function,+,memmgr_heap_enable_thread_trace,void,FuriThreadId
Function,+,memmgr_heap_get_max_free_block,size_t, Function,+,memmgr_heap_get_max_free_block,size_t,
Function,+,memmgr_heap_get_thread_memory,size_t,FuriThreadId Function,+,memmgr_heap_get_thread_memory,size_t,FuriThreadId
Function,+,memmgr_heap_walk_blocks,void,"BlockWalker, void*" Function,+,memmgr_heap_printf_free_blocks,void,
Function,-,memmgr_pool_get_free,size_t,
Function,-,memmgr_pool_get_max_block,size_t, Function,-,memmgr_pool_get_max_block,size_t,
Function,+,memmove,void*,"void*, const void*, size_t" Function,+,memmove,void*,"void*, const void*, size_t"
Function,-,mempcpy,void*,"void*, const void*, size_t" Function,-,mempcpy,void*,"void*, const void*, size_t"
@@ -2252,6 +2269,11 @@ Function,+,protocol_dict_render_brief_data,void,"ProtocolDict*, FuriString*, siz
Function,+,protocol_dict_render_data,void,"ProtocolDict*, FuriString*, size_t" Function,+,protocol_dict_render_data,void,"ProtocolDict*, FuriString*, size_t"
Function,+,protocol_dict_render_uid,void,"ProtocolDict*, FuriString*, size_t" Function,+,protocol_dict_render_uid,void,"ProtocolDict*, FuriString*, size_t"
Function,+,protocol_dict_set_data,void,"ProtocolDict*, size_t, const uint8_t*, size_t" Function,+,protocol_dict_set_data,void,"ProtocolDict*, size_t, const uint8_t*, size_t"
Function,+,pulse_glue_alloc,PulseGlue*,
Function,+,pulse_glue_free,void,PulseGlue*
Function,+,pulse_glue_pop,void,"PulseGlue*, uint32_t*, uint32_t*"
Function,+,pulse_glue_push,_Bool,"PulseGlue*, _Bool, uint32_t"
Function,+,pulse_glue_reset,void,PulseGlue*
Function,-,pulse_reader_alloc,PulseReader*,"const GpioPin*, uint32_t" Function,-,pulse_reader_alloc,PulseReader*,"const GpioPin*, uint32_t"
Function,-,pulse_reader_free,void,PulseReader* Function,-,pulse_reader_free,void,PulseReader*
Function,-,pulse_reader_receive,uint32_t,"PulseReader*, int" Function,-,pulse_reader_receive,uint32_t,"PulseReader*, int"
@@ -2640,6 +2662,12 @@ Function,+,variable_item_list_set_selected_item,void,"VariableItemList*, uint8_t
Function,+,variable_item_set_current_value_index,void,"VariableItem*, uint8_t" Function,+,variable_item_set_current_value_index,void,"VariableItem*, uint8_t"
Function,+,variable_item_set_current_value_text,void,"VariableItem*, const char*" Function,+,variable_item_set_current_value_text,void,"VariableItem*, const char*"
Function,+,variable_item_set_values_count,void,"VariableItem*, uint8_t" Function,+,variable_item_set_values_count,void,"VariableItem*, uint8_t"
Function,+,varint_int32_length,size_t,int32_t
Function,+,varint_int32_pack,size_t,"int32_t, uint8_t*"
Function,+,varint_int32_unpack,size_t,"int32_t*, const uint8_t*, size_t"
Function,+,varint_uint32_length,size_t,uint32_t
Function,+,varint_uint32_pack,size_t,"uint32_t, uint8_t*"
Function,+,varint_uint32_unpack,size_t,"uint32_t*, const uint8_t*, size_t"
Function,-,vasiprintf,int,"char**, const char*, __gnuc_va_list" Function,-,vasiprintf,int,"char**, const char*, __gnuc_va_list"
Function,-,vasniprintf,char*,"char*, size_t*, const char*, __gnuc_va_list" Function,-,vasniprintf,char*,"char*, size_t*, const char*, __gnuc_va_list"
Function,-,vasnprintf,char*,"char*, size_t*, const char*, __gnuc_va_list" Function,-,vasnprintf,char*,"char*, size_t*, const char*, __gnuc_va_list"
1 entry status name type params
2 Version + 62.0 63.0
3 Header + applications/services/bt/bt_service/bt.h
4 Header + applications/services/bt/bt_service/bt_keys_storage.h
5 Header + applications/services/cli/cli.h
6 Header + applications/services/cli/cli_vcp.h
7 Header + applications/services/dialogs/dialogs.h
157 Header + lib/toolbox/keys_dict.h
158 Header + lib/toolbox/manchester_decoder.h
159 Header + lib/toolbox/manchester_encoder.h
160 Header + lib/toolbox/md5_calc.h
161 Header + lib/toolbox/name_generator.h
162 Header + lib/toolbox/path.h
163 Header + lib/toolbox/pretty_format.h
164 Header + lib/toolbox/protocols/protocol_dict.h
165 Header + lib/toolbox/pulse_protocols/pulse_glue.h
166 Header + lib/toolbox/saved_struct.h
167 Header + lib/toolbox/simple_array.h
168 Header + lib/toolbox/stream/buffered_file_stream.h
171 Header + lib/toolbox/stream/string_stream.h
172 Header + lib/toolbox/tar/tar_archive.h
173 Header + lib/toolbox/value_index.h
174 Header + lib/toolbox/varint.h
175 Header + lib/toolbox/version.h
176 Header + targets/f18/furi_hal/furi_hal_resources.h
177 Header + targets/f18/furi_hal/furi_hal_spi_config.h
520 Function - acoshf float float
521 Function - acoshl long double long double
522 Function - acosl long double long double
523 Function + - aligned_alloc void* size_t, size_t
524 Function + aligned_free void void*
525 Function + aligned_malloc void* size_t, size_t
526 Function - arc4random __uint32_t
527 Function - arc4random_buf void void*, size_t
528 Function - arc4random_uniform __uint32_t __uint32_t
684 Function - bsearch void* const void*, const void*, size_t, size_t, __compar_fn_t
685 Function + bt_disconnect void Bt*
686 Function + bt_forget_bonded_devices void Bt*
687 Function + bt_keys_storage_alloc BtKeysStorage* const char*
688 Function + bt_keys_storage_delete _Bool BtKeysStorage*
689 Function + bt_keys_storage_free void BtKeysStorage*
690 Function + bt_keys_storage_load _Bool BtKeysStorage*
691 Function + bt_keys_storage_set_default_path void Bt*
692 Function + bt_keys_storage_set_file_path void BtKeysStorage*, const char*
693 Function + bt_keys_storage_set_ram_params void BtKeysStorage*, uint8_t*, uint16_t
694 Function + bt_keys_storage_set_storage_path void Bt*, const char*
695 Function + bt_keys_storage_update _Bool BtKeysStorage*, uint8_t*, uint32_t
696 Function + bt_profile_restore_default _Bool Bt*
697 Function + bt_profile_start FuriHalBleProfileBase* Bt*, const FuriHalBleProfileTemplate*, FuriHalBleProfileParams
698 Function + bt_set_status_changed_callback void Bt*, BtStatusChangedCallback, void*
784 Function + compress_decode _Bool Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*
785 Function + compress_encode _Bool Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*
786 Function + compress_free void Compress*
787 Function + compress_icon_alloc CompressIcon* size_t
788 Function + compress_icon_decode void CompressIcon*, const uint8_t*, uint8_t**
789 Function + compress_icon_free void CompressIcon*
790 Function - copysign double double, double
1157 Function + furi_hal_bus_reset void FuriHalBus
1158 Function + furi_hal_ccid_ccid_insert_smartcard void
1159 Function + furi_hal_ccid_ccid_remove_smartcard void
1160 Function + furi_hal_ccid_set_callbacks void CcidCallbacks* CcidCallbacks*, void*
1161 Function + furi_hal_cdc_get_ctrl_line_state uint8_t uint8_t
1162 Function + furi_hal_cdc_get_port_settings usb_cdc_line_coding* uint8_t
1163 Function + furi_hal_cdc_receive int32_t uint8_t, uint8_t*, uint16_t
1501 Function + furi_mutex_get_owner FuriThreadId FuriMutex*
1502 Function + furi_mutex_release FuriStatus FuriMutex*
1503 Function + furi_pubsub_alloc FuriPubSub*
1504 Function - + furi_pubsub_free void FuriPubSub*
1505 Function + furi_pubsub_publish void FuriPubSub*, void*
1506 Function + furi_pubsub_subscribe FuriPubSubSubscription* FuriPubSub*, FuriPubSubCallback, void*
1507 Function + furi_pubsub_unsubscribe void FuriPubSub*, FuriPubSubSubscription*
1686 Function + icon_animation_start void IconAnimation*
1687 Function + icon_animation_stop void IconAnimation*
1688 Function + icon_get_data const uint8_t* const Icon*
1689 Function + icon_get_height icon_get_frame_count uint8_t uint32_t const Icon*
1690 Function + icon_get_width icon_get_frame_data uint8_t const uint8_t* const Icon* const Icon*, uint32_t
1691 Function + icon_get_height uint16_t const Icon*
1692 Function + icon_get_width uint16_t const Icon*
1693 Function - ilogb int double
1694 Function - ilogbf int float
1695 Function - ilogbl int long double
1993 Function - mblen int const char*, size_t
1994 Function - mbstowcs size_t wchar_t*, const char*, size_t
1995 Function - mbtowc int wchar_t*, const char*, size_t
1996 Function + md5_calc_file _Bool File*, const char*, unsigned char[16], FS_Error*
1997 Function + md5_string_calc_file _Bool File*, const char*, FuriString*, FS_Error*
1998 Function - memccpy void* void*, const void*, int, size_t
1999 Function + memchr void* const void*, int, size_t
2000 Function + memcmp int const void*, const void*, size_t
2001 Function + memcpy void* void*, const void*, size_t
2002 Function - memmem void* const void*, size_t, const void*, size_t
2003 Function + - memmgr_aux_pool_alloc memmgr_alloc_from_pool void* size_t
Function + memmgr_aux_pool_get_free size_t
2004 Function + memmgr_get_free_heap size_t
2005 Function + memmgr_get_minimum_free_heap size_t
2006 Function + memmgr_get_total_heap size_t
2008 Function + memmgr_heap_enable_thread_trace void FuriThreadId
2009 Function + memmgr_heap_get_max_free_block size_t
2010 Function + memmgr_heap_get_thread_memory size_t FuriThreadId
2011 Function + memmgr_heap_walk_blocks memmgr_heap_printf_free_blocks void BlockWalker, void*
2012 Function - memmgr_pool_get_free size_t
2013 Function - memmgr_pool_get_max_block size_t
2014 Function + memmove void* void*, const void*, size_t
2015 Function - mempcpy void* void*, const void*, size_t
2269 Function + protocol_dict_render_data void ProtocolDict*, FuriString*, size_t
2270 Function + protocol_dict_render_uid void ProtocolDict*, FuriString*, size_t
2271 Function + protocol_dict_set_data void ProtocolDict*, size_t, const uint8_t*, size_t
2272 Function + pulse_glue_alloc PulseGlue*
2273 Function + pulse_glue_free void PulseGlue*
2274 Function + pulse_glue_pop void PulseGlue*, uint32_t*, uint32_t*
2275 Function + pulse_glue_push _Bool PulseGlue*, _Bool, uint32_t
2276 Function + pulse_glue_reset void PulseGlue*
2277 Function - pulse_reader_alloc PulseReader* const GpioPin*, uint32_t
2278 Function - pulse_reader_free void PulseReader*
2279 Function - pulse_reader_receive uint32_t PulseReader*, int
2662 Function + variable_item_set_current_value_index void VariableItem*, uint8_t
2663 Function + variable_item_set_current_value_text void VariableItem*, const char*
2664 Function + variable_item_set_values_count void VariableItem*, uint8_t
2665 Function + varint_int32_length size_t int32_t
2666 Function + varint_int32_pack size_t int32_t, uint8_t*
2667 Function + varint_int32_unpack size_t int32_t*, const uint8_t*, size_t
2668 Function + varint_uint32_length size_t uint32_t
2669 Function + varint_uint32_pack size_t uint32_t, uint8_t*
2670 Function + varint_uint32_unpack size_t uint32_t*, const uint8_t*, size_t
2671 Function - vasiprintf int char**, const char*, __gnuc_va_list
2672 Function - vasniprintf char* char*, size_t*, const char*, __gnuc_va_list
2673 Function - vasnprintf char* char*, size_t*, const char*, __gnuc_va_list

View File

@@ -1,7 +1,8 @@
entry,status,name,type,params entry,status,name,type,params
Version,+,62.0,, Version,+,63.0,,
Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,, Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,,
Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/bt/bt_service/bt_keys_storage.h,,
Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli.h,,
Header,+,applications/services/cli/cli_vcp.h,, Header,+,applications/services/cli/cli_vcp.h,,
Header,+,applications/services/dialogs/dialogs.h,, Header,+,applications/services/dialogs/dialogs.h,,
@@ -158,6 +159,7 @@ Header,+,lib/nfc/protocols/mf_ultralight/mf_ultralight_listener.h,,
Header,+,lib/nfc/protocols/mf_ultralight/mf_ultralight_poller.h,, Header,+,lib/nfc/protocols/mf_ultralight/mf_ultralight_poller.h,,
Header,+,lib/nfc/protocols/mf_ultralight/mf_ultralight_poller_sync.h,, Header,+,lib/nfc/protocols/mf_ultralight/mf_ultralight_poller_sync.h,,
Header,+,lib/nfc/protocols/slix/slix.h,, Header,+,lib/nfc/protocols/slix/slix.h,,
Header,+,lib/nfc/protocols/slix/slix_poller.h,,
Header,+,lib/nfc/protocols/st25tb/st25tb.h,, Header,+,lib/nfc/protocols/st25tb/st25tb.h,,
Header,+,lib/nfc/protocols/st25tb/st25tb_poller.h,, Header,+,lib/nfc/protocols/st25tb/st25tb_poller.h,,
Header,+,lib/nfc/protocols/st25tb/st25tb_poller_sync.h,, Header,+,lib/nfc/protocols/st25tb/st25tb_poller_sync.h,,
@@ -206,6 +208,7 @@ Header,+,lib/subghz/protocols/public_api.h,,
Header,+,lib/subghz/protocols/raw.h,, Header,+,lib/subghz/protocols/raw.h,,
Header,+,lib/subghz/receiver.h,, Header,+,lib/subghz/receiver.h,,
Header,+,lib/subghz/registry.h,, Header,+,lib/subghz/registry.h,,
Header,+,lib/subghz/subghz_file_encoder_worker.h,,
Header,+,lib/subghz/subghz_protocol_registry.h,, Header,+,lib/subghz/subghz_protocol_registry.h,,
Header,+,lib/subghz/subghz_setting.h,, Header,+,lib/subghz/subghz_setting.h,,
Header,+,lib/subghz/subghz_tx_rx_worker.h,, Header,+,lib/subghz/subghz_tx_rx_worker.h,,
@@ -222,10 +225,12 @@ Header,+,lib/toolbox/hex.h,,
Header,+,lib/toolbox/keys_dict.h,, Header,+,lib/toolbox/keys_dict.h,,
Header,+,lib/toolbox/manchester_decoder.h,, Header,+,lib/toolbox/manchester_decoder.h,,
Header,+,lib/toolbox/manchester_encoder.h,, Header,+,lib/toolbox/manchester_encoder.h,,
Header,+,lib/toolbox/md5_calc.h,,
Header,+,lib/toolbox/name_generator.h,, Header,+,lib/toolbox/name_generator.h,,
Header,+,lib/toolbox/path.h,, Header,+,lib/toolbox/path.h,,
Header,+,lib/toolbox/pretty_format.h,, Header,+,lib/toolbox/pretty_format.h,,
Header,+,lib/toolbox/protocols/protocol_dict.h,, Header,+,lib/toolbox/protocols/protocol_dict.h,,
Header,+,lib/toolbox/pulse_protocols/pulse_glue.h,,
Header,+,lib/toolbox/saved_struct.h,, Header,+,lib/toolbox/saved_struct.h,,
Header,+,lib/toolbox/simple_array.h,, Header,+,lib/toolbox/simple_array.h,,
Header,+,lib/toolbox/stream/buffered_file_stream.h,, Header,+,lib/toolbox/stream/buffered_file_stream.h,,
@@ -234,6 +239,7 @@ Header,+,lib/toolbox/stream/stream.h,,
Header,+,lib/toolbox/stream/string_stream.h,, Header,+,lib/toolbox/stream/string_stream.h,,
Header,+,lib/toolbox/tar/tar_archive.h,, Header,+,lib/toolbox/tar/tar_archive.h,,
Header,+,lib/toolbox/value_index.h,, Header,+,lib/toolbox/value_index.h,,
Header,+,lib/toolbox/varint.h,,
Header,+,lib/toolbox/version.h,, Header,+,lib/toolbox/version.h,,
Header,+,targets/f7/ble_glue/furi_ble/event_dispatcher.h,, Header,+,targets/f7/ble_glue/furi_ble/event_dispatcher.h,,
Header,+,targets/f7/ble_glue/furi_ble/gatt.h,, Header,+,targets/f7/ble_glue/furi_ble/gatt.h,,
@@ -587,7 +593,9 @@ Function,-,acosh,double,double
Function,-,acoshf,float,float Function,-,acoshf,float,float
Function,-,acoshl,long double,long double Function,-,acoshl,long double,long double
Function,-,acosl,long double,long double Function,-,acosl,long double,long double
Function,+,aligned_alloc,void*,"size_t, size_t" Function,-,aligned_alloc,void*,"size_t, size_t"
Function,+,aligned_free,void,void*
Function,+,aligned_malloc,void*,"size_t, size_t"
Function,-,arc4random,__uint32_t, Function,-,arc4random,__uint32_t,
Function,-,arc4random_buf,void,"void*, size_t" Function,-,arc4random_buf,void,"void*, size_t"
Function,-,arc4random_uniform,__uint32_t,__uint32_t Function,-,arc4random_uniform,__uint32_t,__uint32_t
@@ -749,8 +757,15 @@ Function,+,ble_svc_serial_update_tx,_Bool,"BleServiceSerial*, uint8_t*, uint16_t
Function,-,bsearch,void*,"const void*, const void*, size_t, size_t, __compar_fn_t" Function,-,bsearch,void*,"const void*, const void*, size_t, size_t, __compar_fn_t"
Function,+,bt_disconnect,void,Bt* Function,+,bt_disconnect,void,Bt*
Function,+,bt_forget_bonded_devices,void,Bt* Function,+,bt_forget_bonded_devices,void,Bt*
Function,+,bt_keys_storage_alloc,BtKeysStorage*,const char*
Function,+,bt_keys_storage_delete,_Bool,BtKeysStorage*
Function,+,bt_keys_storage_free,void,BtKeysStorage*
Function,+,bt_keys_storage_load,_Bool,BtKeysStorage*
Function,+,bt_keys_storage_set_default_path,void,Bt* Function,+,bt_keys_storage_set_default_path,void,Bt*
Function,+,bt_keys_storage_set_file_path,void,"BtKeysStorage*, const char*"
Function,+,bt_keys_storage_set_ram_params,void,"BtKeysStorage*, uint8_t*, uint16_t"
Function,+,bt_keys_storage_set_storage_path,void,"Bt*, const char*" Function,+,bt_keys_storage_set_storage_path,void,"Bt*, const char*"
Function,+,bt_keys_storage_update,_Bool,"BtKeysStorage*, uint8_t*, uint32_t"
Function,+,bt_profile_restore_default,_Bool,Bt* Function,+,bt_profile_restore_default,_Bool,Bt*
Function,+,bt_profile_start,FuriHalBleProfileBase*,"Bt*, const FuriHalBleProfileTemplate*, FuriHalBleProfileParams" Function,+,bt_profile_start,FuriHalBleProfileBase*,"Bt*, const FuriHalBleProfileTemplate*, FuriHalBleProfileParams"
Function,+,bt_set_status_changed_callback,void,"Bt*, BtStatusChangedCallback, void*" Function,+,bt_set_status_changed_callback,void,"Bt*, BtStatusChangedCallback, void*"
@@ -842,7 +857,7 @@ Function,+,compress_alloc,Compress*,uint16_t
Function,+,compress_decode,_Bool,"Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*" Function,+,compress_decode,_Bool,"Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*"
Function,+,compress_encode,_Bool,"Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*" Function,+,compress_encode,_Bool,"Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*"
Function,+,compress_free,void,Compress* Function,+,compress_free,void,Compress*
Function,+,compress_icon_alloc,CompressIcon*, Function,+,compress_icon_alloc,CompressIcon*,size_t
Function,+,compress_icon_decode,void,"CompressIcon*, const uint8_t*, uint8_t**" Function,+,compress_icon_decode,void,"CompressIcon*, const uint8_t*, uint8_t**"
Function,+,compress_icon_free,void,CompressIcon* Function,+,compress_icon_free,void,CompressIcon*
Function,-,copysign,double,"double, double" Function,-,copysign,double,"double, double"
@@ -1241,7 +1256,7 @@ Function,+,furi_hal_bus_is_enabled,_Bool,FuriHalBus
Function,+,furi_hal_bus_reset,void,FuriHalBus Function,+,furi_hal_bus_reset,void,FuriHalBus
Function,+,furi_hal_ccid_ccid_insert_smartcard,void, Function,+,furi_hal_ccid_ccid_insert_smartcard,void,
Function,+,furi_hal_ccid_ccid_remove_smartcard,void, Function,+,furi_hal_ccid_ccid_remove_smartcard,void,
Function,+,furi_hal_ccid_set_callbacks,void,CcidCallbacks* Function,+,furi_hal_ccid_set_callbacks,void,"CcidCallbacks*, void*"
Function,+,furi_hal_cdc_get_ctrl_line_state,uint8_t,uint8_t Function,+,furi_hal_cdc_get_ctrl_line_state,uint8_t,uint8_t
Function,+,furi_hal_cdc_get_port_settings,usb_cdc_line_coding*,uint8_t Function,+,furi_hal_cdc_get_port_settings,usb_cdc_line_coding*,uint8_t
Function,+,furi_hal_cdc_receive,int32_t,"uint8_t, uint8_t*, uint16_t" Function,+,furi_hal_cdc_receive,int32_t,"uint8_t, uint8_t*, uint16_t"
@@ -1694,7 +1709,7 @@ Function,+,furi_mutex_free,void,FuriMutex*
Function,+,furi_mutex_get_owner,FuriThreadId,FuriMutex* Function,+,furi_mutex_get_owner,FuriThreadId,FuriMutex*
Function,+,furi_mutex_release,FuriStatus,FuriMutex* Function,+,furi_mutex_release,FuriStatus,FuriMutex*
Function,+,furi_pubsub_alloc,FuriPubSub*, Function,+,furi_pubsub_alloc,FuriPubSub*,
Function,-,furi_pubsub_free,void,FuriPubSub* Function,+,furi_pubsub_free,void,FuriPubSub*
Function,+,furi_pubsub_publish,void,"FuriPubSub*, void*" Function,+,furi_pubsub_publish,void,"FuriPubSub*, void*"
Function,+,furi_pubsub_subscribe,FuriPubSubSubscription*,"FuriPubSub*, FuriPubSubCallback, void*" Function,+,furi_pubsub_subscribe,FuriPubSubSubscription*,"FuriPubSub*, FuriPubSubCallback, void*"
Function,+,furi_pubsub_unsubscribe,void,"FuriPubSub*, FuriPubSubSubscription*" Function,+,furi_pubsub_unsubscribe,void,"FuriPubSub*, FuriPubSubSubscription*"
@@ -1918,8 +1933,10 @@ Function,+,icon_animation_set_update_callback,void,"IconAnimation*, IconAnimatio
Function,+,icon_animation_start,void,IconAnimation* Function,+,icon_animation_start,void,IconAnimation*
Function,+,icon_animation_stop,void,IconAnimation* Function,+,icon_animation_stop,void,IconAnimation*
Function,+,icon_get_data,const uint8_t*,const Icon* Function,+,icon_get_data,const uint8_t*,const Icon*
Function,+,icon_get_height,uint8_t,const Icon* Function,+,icon_get_frame_count,uint32_t,const Icon*
Function,+,icon_get_width,uint8_t,const Icon* Function,+,icon_get_frame_data,const uint8_t*,"const Icon*, uint32_t"
Function,+,icon_get_height,uint16_t,const Icon*
Function,+,icon_get_width,uint16_t,const Icon*
Function,-,ilogb,int,double Function,-,ilogb,int,double
Function,-,ilogbf,int,float Function,-,ilogbf,int,float
Function,-,ilogbl,int,long double Function,-,ilogbl,int,long double
@@ -2388,13 +2405,14 @@ Function,-,mbedtls_sha256_update,int,"mbedtls_sha256_context*, const unsigned ch
Function,-,mblen,int,"const char*, size_t" Function,-,mblen,int,"const char*, size_t"
Function,-,mbstowcs,size_t,"wchar_t*, const char*, size_t" Function,-,mbstowcs,size_t,"wchar_t*, const char*, size_t"
Function,-,mbtowc,int,"wchar_t*, const char*, size_t" Function,-,mbtowc,int,"wchar_t*, const char*, size_t"
Function,+,md5_calc_file,_Bool,"File*, const char*, unsigned char[16], FS_Error*"
Function,+,md5_string_calc_file,_Bool,"File*, const char*, FuriString*, FS_Error*"
Function,-,memccpy,void*,"void*, const void*, int, size_t" Function,-,memccpy,void*,"void*, const void*, int, size_t"
Function,+,memchr,void*,"const void*, int, size_t" Function,+,memchr,void*,"const void*, int, size_t"
Function,+,memcmp,int,"const void*, const void*, size_t" Function,+,memcmp,int,"const void*, const void*, size_t"
Function,+,memcpy,void*,"void*, const void*, size_t" Function,+,memcpy,void*,"void*, const void*, size_t"
Function,-,memmem,void*,"const void*, size_t, const void*, size_t" Function,-,memmem,void*,"const void*, size_t, const void*, size_t"
Function,+,memmgr_aux_pool_alloc,void*,size_t Function,-,memmgr_alloc_from_pool,void*,size_t
Function,+,memmgr_aux_pool_get_free,size_t,
Function,+,memmgr_get_free_heap,size_t, Function,+,memmgr_get_free_heap,size_t,
Function,+,memmgr_get_minimum_free_heap,size_t, Function,+,memmgr_get_minimum_free_heap,size_t,
Function,+,memmgr_get_total_heap,size_t, Function,+,memmgr_get_total_heap,size_t,
@@ -2402,7 +2420,8 @@ Function,+,memmgr_heap_disable_thread_trace,void,FuriThreadId
Function,+,memmgr_heap_enable_thread_trace,void,FuriThreadId Function,+,memmgr_heap_enable_thread_trace,void,FuriThreadId
Function,+,memmgr_heap_get_max_free_block,size_t, Function,+,memmgr_heap_get_max_free_block,size_t,
Function,+,memmgr_heap_get_thread_memory,size_t,FuriThreadId Function,+,memmgr_heap_get_thread_memory,size_t,FuriThreadId
Function,+,memmgr_heap_walk_blocks,void,"BlockWalker, void*" Function,+,memmgr_heap_printf_free_blocks,void,
Function,-,memmgr_pool_get_free,size_t,
Function,-,memmgr_pool_get_max_block,size_t, Function,-,memmgr_pool_get_max_block,size_t,
Function,+,memmove,void*,"void*, const void*, size_t" Function,+,memmove,void*,"void*, const void*, size_t"
Function,-,mempcpy,void*,"void*, const void*, size_t" Function,-,mempcpy,void*,"void*, const void*, size_t"
@@ -2850,6 +2869,11 @@ Function,+,protocol_dict_render_brief_data,void,"ProtocolDict*, FuriString*, siz
Function,+,protocol_dict_render_data,void,"ProtocolDict*, FuriString*, size_t" Function,+,protocol_dict_render_data,void,"ProtocolDict*, FuriString*, size_t"
Function,+,protocol_dict_render_uid,void,"ProtocolDict*, FuriString*, size_t" Function,+,protocol_dict_render_uid,void,"ProtocolDict*, FuriString*, size_t"
Function,+,protocol_dict_set_data,void,"ProtocolDict*, size_t, const uint8_t*, size_t" Function,+,protocol_dict_set_data,void,"ProtocolDict*, size_t, const uint8_t*, size_t"
Function,+,pulse_glue_alloc,PulseGlue*,
Function,+,pulse_glue_free,void,PulseGlue*
Function,+,pulse_glue_pop,void,"PulseGlue*, uint32_t*, uint32_t*"
Function,+,pulse_glue_push,_Bool,"PulseGlue*, _Bool, uint32_t"
Function,+,pulse_glue_reset,void,PulseGlue*
Function,-,pulse_reader_alloc,PulseReader*,"const GpioPin*, uint32_t" Function,-,pulse_reader_alloc,PulseReader*,"const GpioPin*, uint32_t"
Function,-,pulse_reader_free,void,PulseReader* Function,-,pulse_reader_free,void,PulseReader*
Function,-,pulse_reader_receive,uint32_t,"PulseReader*, int" Function,-,pulse_reader_receive,uint32_t,"PulseReader*, int"
@@ -2990,6 +3014,11 @@ Function,+,slix_is_counter_increment_protected,_Bool,const SlixData*
Function,+,slix_is_equal,_Bool,"const SlixData*, const SlixData*" Function,+,slix_is_equal,_Bool,"const SlixData*, const SlixData*"
Function,+,slix_is_privacy_mode,_Bool,const SlixData* Function,+,slix_is_privacy_mode,_Bool,const SlixData*
Function,+,slix_load,_Bool,"SlixData*, FlipperFormat*, uint32_t" Function,+,slix_load,_Bool,"SlixData*, FlipperFormat*, uint32_t"
Function,+,slix_poller_get_nxp_system_info,SlixError,"SlixPoller*, SlixSystemInfo*"
Function,+,slix_poller_get_random_number,SlixError,"SlixPoller*, SlixRandomNumber*"
Function,+,slix_poller_read_signature,SlixError,"SlixPoller*, SlixSignature*"
Function,+,slix_poller_send_frame,SlixError,"SlixPoller*, const BitBuffer*, BitBuffer*, uint32_t"
Function,+,slix_poller_set_password,SlixError,"SlixPoller*, SlixPasswordType, SlixPassword, SlixRandomNumber"
Function,+,slix_reset,void,SlixData* Function,+,slix_reset,void,SlixData*
Function,+,slix_save,_Bool,"const SlixData*, FlipperFormat*" Function,+,slix_save,_Bool,"const SlixData*, FlipperFormat*"
Function,+,slix_set_uid,_Bool,"SlixData*, const uint8_t*, size_t" Function,+,slix_set_uid,_Bool,"SlixData*, const uint8_t*, size_t"
@@ -3242,6 +3271,13 @@ Function,+,subghz_environment_set_alutech_at_4n_rainbow_table_file_name,void,"Su
Function,+,subghz_environment_set_came_atomo_rainbow_table_file_name,void,"SubGhzEnvironment*, const char*" Function,+,subghz_environment_set_came_atomo_rainbow_table_file_name,void,"SubGhzEnvironment*, const char*"
Function,+,subghz_environment_set_nice_flor_s_rainbow_table_file_name,void,"SubGhzEnvironment*, const char*" Function,+,subghz_environment_set_nice_flor_s_rainbow_table_file_name,void,"SubGhzEnvironment*, const char*"
Function,+,subghz_environment_set_protocol_registry,void,"SubGhzEnvironment*, const SubGhzProtocolRegistry*" Function,+,subghz_environment_set_protocol_registry,void,"SubGhzEnvironment*, const SubGhzProtocolRegistry*"
Function,+,subghz_file_encoder_worker_alloc,SubGhzFileEncoderWorker*,
Function,+,subghz_file_encoder_worker_callback_end,void,"SubGhzFileEncoderWorker*, SubGhzFileEncoderWorkerCallbackEnd, void*"
Function,+,subghz_file_encoder_worker_free,void,SubGhzFileEncoderWorker*
Function,+,subghz_file_encoder_worker_get_level_duration,LevelDuration,void*
Function,+,subghz_file_encoder_worker_is_running,_Bool,SubGhzFileEncoderWorker*
Function,+,subghz_file_encoder_worker_start,_Bool,"SubGhzFileEncoderWorker*, const char*, const char*"
Function,+,subghz_file_encoder_worker_stop,void,SubGhzFileEncoderWorker*
Function,-,subghz_keystore_alloc,SubGhzKeystore*, Function,-,subghz_keystore_alloc,SubGhzKeystore*,
Function,-,subghz_keystore_free,void,SubGhzKeystore* Function,-,subghz_keystore_free,void,SubGhzKeystore*
Function,-,subghz_keystore_get_data,SubGhzKeyArray_t*,SubGhzKeystore* Function,-,subghz_keystore_get_data,SubGhzKeyArray_t*,SubGhzKeystore*
@@ -3440,6 +3476,12 @@ Function,+,variable_item_list_set_selected_item,void,"VariableItemList*, uint8_t
Function,+,variable_item_set_current_value_index,void,"VariableItem*, uint8_t" Function,+,variable_item_set_current_value_index,void,"VariableItem*, uint8_t"
Function,+,variable_item_set_current_value_text,void,"VariableItem*, const char*" Function,+,variable_item_set_current_value_text,void,"VariableItem*, const char*"
Function,+,variable_item_set_values_count,void,"VariableItem*, uint8_t" Function,+,variable_item_set_values_count,void,"VariableItem*, uint8_t"
Function,+,varint_int32_length,size_t,int32_t
Function,+,varint_int32_pack,size_t,"int32_t, uint8_t*"
Function,+,varint_int32_unpack,size_t,"int32_t*, const uint8_t*, size_t"
Function,+,varint_uint32_length,size_t,uint32_t
Function,+,varint_uint32_pack,size_t,"uint32_t, uint8_t*"
Function,+,varint_uint32_unpack,size_t,"uint32_t*, const uint8_t*, size_t"
Function,-,vasiprintf,int,"char**, const char*, __gnuc_va_list" Function,-,vasiprintf,int,"char**, const char*, __gnuc_va_list"
Function,-,vasniprintf,char*,"char*, size_t*, const char*, __gnuc_va_list" Function,-,vasniprintf,char*,"char*, size_t*, const char*, __gnuc_va_list"
Function,-,vasnprintf,char*,"char*, size_t*, const char*, __gnuc_va_list" Function,-,vasnprintf,char*,"char*, size_t*, const char*, __gnuc_va_list"
1 entry status name type params
2 Version + 62.0 63.0
3 Header + applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h
4 Header + applications/services/bt/bt_service/bt.h
5 Header + applications/services/bt/bt_service/bt_keys_storage.h
6 Header + applications/services/cli/cli.h
7 Header + applications/services/cli/cli_vcp.h
8 Header + applications/services/dialogs/dialogs.h
159 Header + lib/nfc/protocols/mf_ultralight/mf_ultralight_poller.h
160 Header + lib/nfc/protocols/mf_ultralight/mf_ultralight_poller_sync.h
161 Header + lib/nfc/protocols/slix/slix.h
162 Header + lib/nfc/protocols/slix/slix_poller.h
163 Header + lib/nfc/protocols/st25tb/st25tb.h
164 Header + lib/nfc/protocols/st25tb/st25tb_poller.h
165 Header + lib/nfc/protocols/st25tb/st25tb_poller_sync.h
208 Header + lib/subghz/protocols/raw.h
209 Header + lib/subghz/receiver.h
210 Header + lib/subghz/registry.h
211 Header + lib/subghz/subghz_file_encoder_worker.h
212 Header + lib/subghz/subghz_protocol_registry.h
213 Header + lib/subghz/subghz_setting.h
214 Header + lib/subghz/subghz_tx_rx_worker.h
225 Header + lib/toolbox/keys_dict.h
226 Header + lib/toolbox/manchester_decoder.h
227 Header + lib/toolbox/manchester_encoder.h
228 Header + lib/toolbox/md5_calc.h
229 Header + lib/toolbox/name_generator.h
230 Header + lib/toolbox/path.h
231 Header + lib/toolbox/pretty_format.h
232 Header + lib/toolbox/protocols/protocol_dict.h
233 Header + lib/toolbox/pulse_protocols/pulse_glue.h
234 Header + lib/toolbox/saved_struct.h
235 Header + lib/toolbox/simple_array.h
236 Header + lib/toolbox/stream/buffered_file_stream.h
239 Header + lib/toolbox/stream/string_stream.h
240 Header + lib/toolbox/tar/tar_archive.h
241 Header + lib/toolbox/value_index.h
242 Header + lib/toolbox/varint.h
243 Header + lib/toolbox/version.h
244 Header + targets/f7/ble_glue/furi_ble/event_dispatcher.h
245 Header + targets/f7/ble_glue/furi_ble/gatt.h
593 Function - acoshf float float
594 Function - acoshl long double long double
595 Function - acosl long double long double
596 Function + - aligned_alloc void* size_t, size_t
597 Function + aligned_free void void*
598 Function + aligned_malloc void* size_t, size_t
599 Function - arc4random __uint32_t
600 Function - arc4random_buf void void*, size_t
601 Function - arc4random_uniform __uint32_t __uint32_t
757 Function - bsearch void* const void*, const void*, size_t, size_t, __compar_fn_t
758 Function + bt_disconnect void Bt*
759 Function + bt_forget_bonded_devices void Bt*
760 Function + bt_keys_storage_alloc BtKeysStorage* const char*
761 Function + bt_keys_storage_delete _Bool BtKeysStorage*
762 Function + bt_keys_storage_free void BtKeysStorage*
763 Function + bt_keys_storage_load _Bool BtKeysStorage*
764 Function + bt_keys_storage_set_default_path void Bt*
765 Function + bt_keys_storage_set_file_path void BtKeysStorage*, const char*
766 Function + bt_keys_storage_set_ram_params void BtKeysStorage*, uint8_t*, uint16_t
767 Function + bt_keys_storage_set_storage_path void Bt*, const char*
768 Function + bt_keys_storage_update _Bool BtKeysStorage*, uint8_t*, uint32_t
769 Function + bt_profile_restore_default _Bool Bt*
770 Function + bt_profile_start FuriHalBleProfileBase* Bt*, const FuriHalBleProfileTemplate*, FuriHalBleProfileParams
771 Function + bt_set_status_changed_callback void Bt*, BtStatusChangedCallback, void*
857 Function + compress_decode _Bool Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*
858 Function + compress_encode _Bool Compress*, uint8_t*, size_t, uint8_t*, size_t, size_t*
859 Function + compress_free void Compress*
860 Function + compress_icon_alloc CompressIcon* size_t
861 Function + compress_icon_decode void CompressIcon*, const uint8_t*, uint8_t**
862 Function + compress_icon_free void CompressIcon*
863 Function - copysign double double, double
1256 Function + furi_hal_bus_reset void FuriHalBus
1257 Function + furi_hal_ccid_ccid_insert_smartcard void
1258 Function + furi_hal_ccid_ccid_remove_smartcard void
1259 Function + furi_hal_ccid_set_callbacks void CcidCallbacks* CcidCallbacks*, void*
1260 Function + furi_hal_cdc_get_ctrl_line_state uint8_t uint8_t
1261 Function + furi_hal_cdc_get_port_settings usb_cdc_line_coding* uint8_t
1262 Function + furi_hal_cdc_receive int32_t uint8_t, uint8_t*, uint16_t
1709 Function + furi_mutex_get_owner FuriThreadId FuriMutex*
1710 Function + furi_mutex_release FuriStatus FuriMutex*
1711 Function + furi_pubsub_alloc FuriPubSub*
1712 Function - + furi_pubsub_free void FuriPubSub*
1713 Function + furi_pubsub_publish void FuriPubSub*, void*
1714 Function + furi_pubsub_subscribe FuriPubSubSubscription* FuriPubSub*, FuriPubSubCallback, void*
1715 Function + furi_pubsub_unsubscribe void FuriPubSub*, FuriPubSubSubscription*
1933 Function + icon_animation_start void IconAnimation*
1934 Function + icon_animation_stop void IconAnimation*
1935 Function + icon_get_data const uint8_t* const Icon*
1936 Function + icon_get_height icon_get_frame_count uint8_t uint32_t const Icon*
1937 Function + icon_get_width icon_get_frame_data uint8_t const uint8_t* const Icon* const Icon*, uint32_t
1938 Function + icon_get_height uint16_t const Icon*
1939 Function + icon_get_width uint16_t const Icon*
1940 Function - ilogb int double
1941 Function - ilogbf int float
1942 Function - ilogbl int long double
2405 Function - mblen int const char*, size_t
2406 Function - mbstowcs size_t wchar_t*, const char*, size_t
2407 Function - mbtowc int wchar_t*, const char*, size_t
2408 Function + md5_calc_file _Bool File*, const char*, unsigned char[16], FS_Error*
2409 Function + md5_string_calc_file _Bool File*, const char*, FuriString*, FS_Error*
2410 Function - memccpy void* void*, const void*, int, size_t
2411 Function + memchr void* const void*, int, size_t
2412 Function + memcmp int const void*, const void*, size_t
2413 Function + memcpy void* void*, const void*, size_t
2414 Function - memmem void* const void*, size_t, const void*, size_t
2415 Function + - memmgr_aux_pool_alloc memmgr_alloc_from_pool void* size_t
Function + memmgr_aux_pool_get_free size_t
2416 Function + memmgr_get_free_heap size_t
2417 Function + memmgr_get_minimum_free_heap size_t
2418 Function + memmgr_get_total_heap size_t
2420 Function + memmgr_heap_enable_thread_trace void FuriThreadId
2421 Function + memmgr_heap_get_max_free_block size_t
2422 Function + memmgr_heap_get_thread_memory size_t FuriThreadId
2423 Function + memmgr_heap_walk_blocks memmgr_heap_printf_free_blocks void BlockWalker, void*
2424 Function - memmgr_pool_get_free size_t
2425 Function - memmgr_pool_get_max_block size_t
2426 Function + memmove void* void*, const void*, size_t
2427 Function - mempcpy void* void*, const void*, size_t
2869 Function + protocol_dict_render_data void ProtocolDict*, FuriString*, size_t
2870 Function + protocol_dict_render_uid void ProtocolDict*, FuriString*, size_t
2871 Function + protocol_dict_set_data void ProtocolDict*, size_t, const uint8_t*, size_t
2872 Function + pulse_glue_alloc PulseGlue*
2873 Function + pulse_glue_free void PulseGlue*
2874 Function + pulse_glue_pop void PulseGlue*, uint32_t*, uint32_t*
2875 Function + pulse_glue_push _Bool PulseGlue*, _Bool, uint32_t
2876 Function + pulse_glue_reset void PulseGlue*
2877 Function - pulse_reader_alloc PulseReader* const GpioPin*, uint32_t
2878 Function - pulse_reader_free void PulseReader*
2879 Function - pulse_reader_receive uint32_t PulseReader*, int
3014 Function + slix_is_equal _Bool const SlixData*, const SlixData*
3015 Function + slix_is_privacy_mode _Bool const SlixData*
3016 Function + slix_load _Bool SlixData*, FlipperFormat*, uint32_t
3017 Function + slix_poller_get_nxp_system_info SlixError SlixPoller*, SlixSystemInfo*
3018 Function + slix_poller_get_random_number SlixError SlixPoller*, SlixRandomNumber*
3019 Function + slix_poller_read_signature SlixError SlixPoller*, SlixSignature*
3020 Function + slix_poller_send_frame SlixError SlixPoller*, const BitBuffer*, BitBuffer*, uint32_t
3021 Function + slix_poller_set_password SlixError SlixPoller*, SlixPasswordType, SlixPassword, SlixRandomNumber
3022 Function + slix_reset void SlixData*
3023 Function + slix_save _Bool const SlixData*, FlipperFormat*
3024 Function + slix_set_uid _Bool SlixData*, const uint8_t*, size_t
3271 Function + subghz_environment_set_came_atomo_rainbow_table_file_name void SubGhzEnvironment*, const char*
3272 Function + subghz_environment_set_nice_flor_s_rainbow_table_file_name void SubGhzEnvironment*, const char*
3273 Function + subghz_environment_set_protocol_registry void SubGhzEnvironment*, const SubGhzProtocolRegistry*
3274 Function + subghz_file_encoder_worker_alloc SubGhzFileEncoderWorker*
3275 Function + subghz_file_encoder_worker_callback_end void SubGhzFileEncoderWorker*, SubGhzFileEncoderWorkerCallbackEnd, void*
3276 Function + subghz_file_encoder_worker_free void SubGhzFileEncoderWorker*
3277 Function + subghz_file_encoder_worker_get_level_duration LevelDuration void*
3278 Function + subghz_file_encoder_worker_is_running _Bool SubGhzFileEncoderWorker*
3279 Function + subghz_file_encoder_worker_start _Bool SubGhzFileEncoderWorker*, const char*, const char*
3280 Function + subghz_file_encoder_worker_stop void SubGhzFileEncoderWorker*
3281 Function - subghz_keystore_alloc SubGhzKeystore*
3282 Function - subghz_keystore_free void SubGhzKeystore*
3283 Function - subghz_keystore_get_data SubGhzKeyArray_t* SubGhzKeystore*
3476 Function + variable_item_set_current_value_index void VariableItem*, uint8_t
3477 Function + variable_item_set_current_value_text void VariableItem*, const char*
3478 Function + variable_item_set_values_count void VariableItem*, uint8_t
3479 Function + varint_int32_length size_t int32_t
3480 Function + varint_int32_pack size_t int32_t, uint8_t*
3481 Function + varint_int32_unpack size_t int32_t*, const uint8_t*, size_t
3482 Function + varint_uint32_length size_t uint32_t
3483 Function + varint_uint32_pack size_t uint32_t, uint8_t*
3484 Function + varint_uint32_unpack size_t uint32_t*, const uint8_t*, size_t
3485 Function - vasiprintf int char**, const char*, __gnuc_va_list
3486 Function - vasniprintf char* char*, size_t*, const char*, __gnuc_va_list
3487 Function - vasnprintf char* char*, size_t*, const char*, __gnuc_va_list

View File

@@ -184,6 +184,7 @@ static usbd_device* usb_dev;
static bool connected = false; static bool connected = false;
static bool smartcard_inserted = true; static bool smartcard_inserted = true;
static CcidCallbacks* callbacks[CCID_TOTAL_SLOTS] = {NULL}; static CcidCallbacks* callbacks[CCID_TOTAL_SLOTS] = {NULL};
static void* cb_ctx[CCID_TOTAL_SLOTS];
static void* ccid_set_string_descr(char* str) { static void* ccid_set_string_descr(char* str) {
furi_check(str); furi_check(str);
@@ -330,7 +331,9 @@ void CALLBACK_CCID_IccPowerOn(
if(smartcard_inserted) { if(smartcard_inserted) {
if(callbacks[CCID_SLOT_INDEX] != NULL) { if(callbacks[CCID_SLOT_INDEX] != NULL) {
callbacks[CCID_SLOT_INDEX]->icc_power_on_callback( callbacks[CCID_SLOT_INDEX]->icc_power_on_callback(
responseDataBlock->abData, &responseDataBlock->dwLength, NULL); responseDataBlock->abData,
&responseDataBlock->dwLength,
cb_ctx[CCID_SLOT_INDEX]);
responseDataBlock->bStatus = CCID_COMMANDSTATUS_PROCESSEDWITHOUTERROR | responseDataBlock->bStatus = CCID_COMMANDSTATUS_PROCESSEDWITHOUTERROR |
CCID_ICCSTATUS_PRESENTANDACTIVE; CCID_ICCSTATUS_PRESENTANDACTIVE;
} else { } else {
@@ -364,7 +367,7 @@ void CALLBACK_CCID_XfrBlock(
receivedXfrBlock->dwLength, receivedXfrBlock->dwLength,
responseDataBlock->abData, responseDataBlock->abData,
&responseDataBlock->dwLength, &responseDataBlock->dwLength,
NULL); cb_ctx[CCID_SLOT_INDEX]);
responseDataBlock->bStatus = CCID_COMMANDSTATUS_PROCESSEDWITHOUTERROR | responseDataBlock->bStatus = CCID_COMMANDSTATUS_PROCESSEDWITHOUTERROR |
CCID_ICCSTATUS_PRESENTANDACTIVE; CCID_ICCSTATUS_PRESENTANDACTIVE;
} else { } else {
@@ -389,8 +392,9 @@ void furi_hal_ccid_ccid_remove_smartcard(void) {
smartcard_inserted = false; smartcard_inserted = false;
} }
void furi_hal_ccid_set_callbacks(CcidCallbacks* cb) { void furi_hal_ccid_set_callbacks(CcidCallbacks* cb, void* context) {
callbacks[CCID_SLOT_INDEX] = cb; callbacks[CCID_SLOT_INDEX] = cb;
cb_ctx[CCID_SLOT_INDEX] = context;
} }
static void ccid_rx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) { static void ccid_rx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) {

View File

@@ -19,14 +19,14 @@ typedef struct {
typedef struct { typedef struct {
void (*icc_power_on_callback)(uint8_t* dataBlock, uint32_t* dataBlockLen, void* context); void (*icc_power_on_callback)(uint8_t* dataBlock, uint32_t* dataBlockLen, void* context);
void (*xfr_datablock_callback)( void (*xfr_datablock_callback)(
const uint8_t* dataBlock, const uint8_t* pcToReaderDataBlock,
uint32_t dataBlockLen, uint32_t pcToReaderDataBlockLen,
uint8_t* responseDataBlock, uint8_t* readerToPcDataBlock,
uint32_t* responseDataBlockLen, uint32_t* readerToPcDataBlockLen,
void* context); void* context);
} CcidCallbacks; } CcidCallbacks;
void furi_hal_ccid_set_callbacks(CcidCallbacks* cb); void furi_hal_ccid_set_callbacks(CcidCallbacks* cb, void* context);
void furi_hal_ccid_ccid_insert_smartcard(void); void furi_hal_ccid_ccid_insert_smartcard(void);
void furi_hal_ccid_ccid_remove_smartcard(void); void furi_hal_ccid_ccid_remove_smartcard(void);