Merge branch 'ofw-dev' into dev

This commit is contained in:
MX 2023-08-16 16:52:43 +03:00
commit 15ac511dea
No known key found for this signature in database
GPG key ID: 7CCC66B7DBDD1C83
12 changed files with 77 additions and 11 deletions

9
.vscode/.gitignore vendored
View file

@ -1,4 +1,5 @@
./c_cpp_properties.json /c_cpp_properties.json
./launch.json /extensions.json
./settings.json /launch.json
./tasks.json /settings.json
/tasks.json

19
.vscode/example/clangd/extensions.json vendored Normal file
View file

@ -0,0 +1,19 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations.
// Extension identifier format: ${publisher}.${name}. Example: vscode.csharp
// List of extensions which should be recommended for users of this workspace.
"recommendations": [
"ms-python.black-formatter",
"llvm-vs-code-extensions.vscode-clangd",
"amiralizadeh9480.cpp-helper",
"marus25.cortex-debug",
"zxh404.vscode-proto3",
"augustocdias.tasks-shell-input"
],
// List of extensions recommended by VS Code that should not be recommended for users of this workspace.
"unwantedRecommendations": [
"twxs.cmake",
"ms-vscode.cpptools",
"ms-vscode.cmake-tools"
]
}

View file

@ -13,6 +13,7 @@
], ],
// List of extensions recommended by VS Code that should not be recommended for users of this workspace. // List of extensions recommended by VS Code that should not be recommended for users of this workspace.
"unwantedRecommendations": [ "unwantedRecommendations": [
"llvm-vs-code-extensions.vscode-clangd",
"twxs.cmake", "twxs.cmake",
"ms-vscode.cmake-tools" "ms-vscode.cmake-tools"
] ]

View file

@ -21,5 +21,10 @@
"SConscript": "python", "SConscript": "python",
"SConstruct": "python", "SConstruct": "python",
"*.fam": "python", "*.fam": "python",
} },
"clangd.arguments": [
// We might be able to tighten this a bit more to only include the correct toolchain.
"--query-driver=**",
"--compile-commands-dir=${workspaceFolder}/build/latest"
]
} }

View file

@ -45,6 +45,7 @@ distenv = coreenv.Clone(
], ],
ENV=os.environ, ENV=os.environ,
UPDATE_BUNDLE_DIR="dist/${DIST_DIR}/f${TARGET_HW}-update-${DIST_SUFFIX}", UPDATE_BUNDLE_DIR="dist/${DIST_DIR}/f${TARGET_HW}-update-${DIST_SUFFIX}",
VSCODE_LANG_SERVER=ARGUMENTS.get("LANG_SERVER", "cpptools"),
) )
firmware_env = distenv.AddFwProject( firmware_env = distenv.AddFwProject(
@ -348,7 +349,14 @@ distenv.PhonyTarget(
) )
# Prepare vscode environment # Prepare vscode environment
vscode_dist = distenv.Install("#.vscode", distenv.Glob("#.vscode/example/*")) VSCODE_LANG_SERVER = cmd_environment["LANG_SERVER"]
vscode_dist = distenv.Install(
"#.vscode",
[
distenv.Glob("#.vscode/example/*.json"),
distenv.Glob(f"#.vscode/example/{VSCODE_LANG_SERVER}/*.json"),
],
)
distenv.Precious(vscode_dist) distenv.Precious(vscode_dist)
distenv.NoClean(vscode_dist) distenv.NoClean(vscode_dist)
distenv.Alias("vscode_dist", vscode_dist) distenv.Alias("vscode_dist", vscode_dist)

View file

@ -3,6 +3,7 @@ App(
apptype=FlipperAppType.STARTUP, apptype=FlipperAppType.STARTUP,
entry_point="unit_tests_on_system_start", entry_point="unit_tests_on_system_start",
cdefines=["APP_UNIT_TESTS"], cdefines=["APP_UNIT_TESTS"],
requires=["system_settings"],
provides=["delay_test"], provides=["delay_test"],
order=100, order=100,
) )

View file

@ -330,7 +330,12 @@ bool subghz_hal_async_tx_test_run(SubGhzHalAsyncTxTestType type) {
return false; return false;
} }
FuriHalCortexTimer timer = furi_hal_cortex_timer_get(30000000);
while(!furi_hal_subghz_is_async_tx_complete()) { while(!furi_hal_subghz_is_async_tx_complete()) {
if(furi_hal_cortex_timer_is_expired(timer)) {
return false;
}
furi_delay_ms(10); furi_delay_ms(10);
} }
furi_hal_subghz_stop_async_tx(); furi_hal_subghz_stop_async_tx();

View file

@ -10,6 +10,19 @@
static_assert(!has_hash_collisions(elf_api_table), "Detected API method hash collision!"); static_assert(!has_hash_collisions(elf_api_table), "Detected API method hash collision!");
#ifdef APP_UNIT_TESTS
constexpr HashtableApiInterface mock_elf_api_interface{
{
.api_version_major = 0,
.api_version_minor = 0,
.resolver_callback = &elf_resolve_from_hashtable,
},
.table_cbegin = nullptr,
.table_cend = nullptr,
};
const ElfApiInterface* const firmware_api_interface = &mock_elf_api_interface;
#else
constexpr HashtableApiInterface elf_api_interface{ constexpr HashtableApiInterface elf_api_interface{
{ {
.api_version_major = (elf_api_version >> 16), .api_version_major = (elf_api_version >> 16),
@ -19,10 +32,10 @@ constexpr HashtableApiInterface elf_api_interface{
.table_cbegin = elf_api_table.cbegin(), .table_cbegin = elf_api_table.cbegin(),
.table_cend = elf_api_table.cend(), .table_cend = elf_api_table.cend(),
}; };
const ElfApiInterface* const firmware_api_interface = &elf_api_interface; const ElfApiInterface* const firmware_api_interface = &elf_api_interface;
#endif
extern "C" void furi_hal_info_get_api_version(uint16_t* major, uint16_t* minor) { extern "C" void furi_hal_info_get_api_version(uint16_t* major, uint16_t* minor) {
*major = elf_api_interface.api_version_major; *major = firmware_api_interface->api_version_major;
*minor = elf_api_interface.api_version_minor; *minor = firmware_api_interface->api_version_minor;
} }

View file

@ -46,6 +46,8 @@ To run cleanup (think of `make clean`) for specified targets, add the `-c` optio
`fbt` includes basic development environment configuration for VS Code. Run `./fbt vscode_dist` to deploy it. That will copy the initial environment configuration to the `.vscode` folder. After that, you can use that configuration by starting VS Code and choosing the firmware root folder in the "File > Open Folder" menu. `fbt` includes basic development environment configuration for VS Code. Run `./fbt vscode_dist` to deploy it. That will copy the initial environment configuration to the `.vscode` folder. After that, you can use that configuration by starting VS Code and choosing the firmware root folder in the "File > Open Folder" menu.
To use language servers other than the default VS Code C/C++ language server, use `./fbt vscode_dist LANG_SERVER=<language-server>` instead. Currently `fbt` supports the default language server (`cpptools`) and `clangd`.
- On the first start, you'll be prompted to install recommended plugins. We highly recommend installing them for the best development experience. _You can find a list of them in `.vscode/extensions.json`._ - On the first start, you'll be prompted to install recommended plugins. We highly recommend installing them for the best development experience. _You can find a list of them in `.vscode/extensions.json`._
- Basic build tasks are invoked in the Ctrl+Shift+B menu. - Basic build tasks are invoked in the Ctrl+Shift+B menu.
- Debugging requires a supported probe. That includes: - Debugging requires a supported probe. That includes:

View file

@ -2,6 +2,8 @@ import subprocess
import gdb import gdb
import objdump import objdump
import shutil
import strip import strip
from SCons.Action import _subproc from SCons.Action import _subproc
from SCons.Errors import StopError from SCons.Errors import StopError
@ -11,7 +13,7 @@ from SCons.Tool import ar, asm, gcc, gnulink, gxx
def prefix_commands(env, command_prefix, cmd_list): def prefix_commands(env, command_prefix, cmd_list):
for command in cmd_list: for command in cmd_list:
if command in env: if command in env:
env[command] = command_prefix + env[command] env[command] = shutil.which(command_prefix + env[command])
def _get_tool_version(env, tool): def _get_tool_version(env, tool):

View file

@ -253,6 +253,15 @@ vars.AddVariables(
"Full port name of Flipper to use, if multiple Flippers are connected", "Full port name of Flipper to use, if multiple Flippers are connected",
"auto", "auto",
), ),
EnumVariable(
"LANG_SERVER",
help="Language server type for vscode_dist.",
default="cpptools",
allowed_values=[
"cpptools",
"clangd",
],
),
) )
Return("vars") Return("vars")