mirror of
https://github.com/DarkFlippers/unleashed-firmware
synced 2024-11-10 06:54:19 +00:00
Fix for spelling (#2051)
* Fix for spelling * Review iteration Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
parent
03140e4349
commit
e121e6a287
36 changed files with 58 additions and 58 deletions
|
@ -2,7 +2,7 @@
|
|||
|
||||
Thank you for investing your time in contributing to our project!
|
||||
|
||||
Read our [Code of Coduct](CODE_OF_CONDUCT.md) to keep our community approachable and respectable.
|
||||
Read our [Code of Conduct](CODE_OF_CONDUCT.md) to keep our community approachable and respectable.
|
||||
|
||||
In this guide you will get an overview of the contribution workflow from opening an issue, creating a PR, reviewing, and merging the PR.
|
||||
|
||||
|
@ -17,12 +17,12 @@ See the [ReadMe](ReadMe.md) to get an overview of the project. Here are some hel
|
|||
|
||||
## Getting started
|
||||
|
||||
Before writing code and creating PR make sure that it aligns with our mission and guidlines:
|
||||
Before writing code and creating PR make sure that it aligns with our mission and guidelines:
|
||||
|
||||
- All our devices are intended for research and education.
|
||||
- PR that contains code intended to commit crimes is not going to be accepted.
|
||||
- Your PR must comply with our [Coding Style](CODING_STYLE.md)
|
||||
- Your PR must contain code compatiable with project [LICENSE](LICENSE).
|
||||
- Your PR must contain code compatible with project [LICENSE](LICENSE).
|
||||
- PR will only be merged if it pass CI/CD.
|
||||
- PR will only be merged if it pass review by code owner.
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ void WIEGAND::end() {
|
|||
}
|
||||
|
||||
void WIEGAND::ReadD0() {
|
||||
_bitCount++; // Increament bit count for Interrupt connected to D0
|
||||
_bitCount++; // Increment bit count for Interrupt connected to D0
|
||||
if(_bitCount > 31) // If bit count more than 31, process high bits
|
||||
{
|
||||
_cardTempHigh |= ((0x80000000 & _cardTemp) >> 31); // shift value to high bits
|
||||
|
|
|
@ -98,7 +98,7 @@ void bt_debug_app_free(BtDebugApp* app) {
|
|||
int32_t bt_debug_app(void* p) {
|
||||
UNUSED(p);
|
||||
if(!furi_hal_bt_is_testing_supported()) {
|
||||
FURI_LOG_E(TAG, "Incorrect radio stack: radio testing fetures are absent.");
|
||||
FURI_LOG_E(TAG, "Incorrect radio stack: radio testing features are absent.");
|
||||
DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS);
|
||||
dialog_message_show_storage_error(dialogs, "Incorrect\nRadioStack");
|
||||
return 255;
|
||||
|
|
|
@ -145,7 +145,7 @@ DisplayTest* display_test_alloc() {
|
|||
view_set_previous_callback(view, display_test_previous_callback);
|
||||
view_dispatcher_add_view(instance->view_dispatcher, DisplayTestViewConfigure, view);
|
||||
|
||||
// Configurtion items
|
||||
// Configuration items
|
||||
VariableItem* item;
|
||||
instance->config_bias = false;
|
||||
instance->config_contrast = 32;
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
extern size_t memmgr_get_free_heap(void);
|
||||
extern size_t memmgr_get_minimum_free_heap(void);
|
||||
|
||||
// current heap managment realization consume:
|
||||
// current heap management realization consume:
|
||||
// X bytes after allocate and 0 bytes after allocate and free,
|
||||
// where X = sizeof(void*) + sizeof(size_t), look to BlockLink_t
|
||||
const size_t heap_overhead_max_size = sizeof(void*) + sizeof(size_t);
|
||||
|
@ -21,7 +21,7 @@ bool heap_equal(size_t heap_size, size_t heap_size_old) {
|
|||
const size_t heap_low = heap_size_old - heap_overhead_max_size;
|
||||
const size_t heap_high = heap_size_old + heap_overhead_max_size;
|
||||
|
||||
// not extact, so we must test it against bigger numbers than "overhead size"
|
||||
// not exact, so we must test it against bigger numbers than "overhead size"
|
||||
const bool result = ((heap_size >= heap_low) && (heap_size <= heap_high));
|
||||
|
||||
// debug allocation info
|
||||
|
|
|
@ -136,7 +136,7 @@ static bool nfc_test_digital_signal_test_encode(
|
|||
ref_timings_sum += ref[i];
|
||||
if(timings_diff > timing_tolerance) {
|
||||
FURI_LOG_E(
|
||||
TAG, "Too big differece in %d timings. Ref: %ld, DUT: %ld", i, ref[i], dut[i]);
|
||||
TAG, "Too big difference in %d timings. Ref: %ld, DUT: %ld", i, ref[i], dut[i]);
|
||||
timing_check_success = false;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -219,21 +219,21 @@ MU_TEST_1(stream_composite_subtest, Stream* stream) {
|
|||
mu_check(stream_eof(stream));
|
||||
mu_assert_int_eq(0, stream_tell(stream));
|
||||
|
||||
// insert formated string at the end of stream
|
||||
// insert formatted string at the end of stream
|
||||
// "" -> "dio666"
|
||||
mu_check(stream_insert_format(stream, "%s%d", "dio", 666));
|
||||
mu_assert_int_eq(6, stream_size(stream));
|
||||
mu_check(stream_eof(stream));
|
||||
mu_assert_int_eq(6, stream_tell(stream));
|
||||
|
||||
// insert formated string at the end of stream
|
||||
// insert formatted string at the end of stream
|
||||
// "dio666" -> "dio666zlo555"
|
||||
mu_check(stream_insert_format(stream, "%s%d", "zlo", 555));
|
||||
mu_assert_int_eq(12, stream_size(stream));
|
||||
mu_check(stream_eof(stream));
|
||||
mu_assert_int_eq(12, stream_tell(stream));
|
||||
|
||||
// insert formated string at the 6 pos
|
||||
// insert formatted string at the 6 pos
|
||||
// "dio666" -> "dio666baba13zlo555"
|
||||
mu_check(stream_seek(stream, 6, StreamOffsetFromStart));
|
||||
mu_check(stream_insert_format(stream, "%s%d", "baba", 13));
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include "../archive_i.h"
|
||||
#include <storage/storage.h>
|
||||
|
||||
#define TAB_RIGHT InputKeyRight // Default tab swith direction
|
||||
#define TAB_RIGHT InputKeyRight // Default tab switch direction
|
||||
#define TAB_DEFAULT ArchiveTabFavorites // Start tab
|
||||
#define FILE_LIST_BUF_LEN 100
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ bool elf_resolve_from_hashtable(const char* name, Elf32_Addr* address) {
|
|||
|
||||
auto find_res = std::lower_bound(elf_api_table.cbegin(), elf_api_table.cend(), key);
|
||||
if((find_res == elf_api_table.cend() || (find_res->hash != gnu_sym_hash))) {
|
||||
FURI_LOG_W(TAG, "Cant find symbol '%s' (hash %lx)!", name, gnu_sym_hash);
|
||||
FURI_LOG_W(TAG, "Can't find symbol '%s' (hash %lx)!", name, gnu_sym_hash);
|
||||
result = false;
|
||||
} else {
|
||||
result = true;
|
||||
|
|
|
@ -25,7 +25,7 @@ TUPLE_DEF2(
|
|||
(frequency, uint32_t),
|
||||
(count, uint8_t),
|
||||
(rssi_max, uint8_t))
|
||||
/* Register globaly the oplist */
|
||||
/* Register globally the oplist */
|
||||
#define M_OPL_SubGhzFrequencyAnalyzerLogItem_t() \
|
||||
TUPLE_OPLIST(SubGhzFrequencyAnalyzerLogItem, M_POD_OPLIST, M_DEFAULT_OPLIST, M_DEFAULT_OPLIST)
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ extern const size_t FLIPPER_DEBUG_APPS_COUNT;
|
|||
extern const FlipperApplication FLIPPER_SYSTEM_APPS[];
|
||||
extern const size_t FLIPPER_SYSTEM_APPS_COUNT;
|
||||
|
||||
/* Seperate scene app holder
|
||||
/* Separate scene app holder
|
||||
* Spawned by loader
|
||||
*/
|
||||
extern const FlipperApplication FLIPPER_SCENE;
|
||||
|
|
|
@ -69,7 +69,7 @@ View* animation_manager_get_animation_view(AnimationManager* animation_manager);
|
|||
void animation_manager_set_context(AnimationManager* animation_manager, void* context);
|
||||
|
||||
/**
|
||||
* Set callback for Animation Manager for defered calls
|
||||
* Set callback for Animation Manager for deferred calls
|
||||
* for animation_manager_new_idle_process().
|
||||
* Animation Manager doesn't have it's own thread, so main thread gives
|
||||
* callbacks to A.M. to call when it should perform some inner manipulations.
|
||||
|
@ -96,7 +96,7 @@ void animation_manager_set_new_idle_callback(
|
|||
void animation_manager_new_idle_process(AnimationManager* animation_manager);
|
||||
|
||||
/**
|
||||
* Set callback for Animation Manager for defered calls
|
||||
* Set callback for Animation Manager for deferred calls
|
||||
* for animation_manager_check_blocking_process().
|
||||
*
|
||||
* @animation_manager instance
|
||||
|
@ -115,7 +115,7 @@ void animation_manager_set_check_callback(
|
|||
void animation_manager_check_blocking_process(AnimationManager* animation_manager);
|
||||
|
||||
/**
|
||||
* Set callback for Animation Manager for defered calls
|
||||
* Set callback for Animation Manager for deferred calls
|
||||
* for animation_manager_interact_process().
|
||||
*
|
||||
* @animation_manager instance
|
||||
|
|
|
@ -90,7 +90,7 @@ void elements_button_center(Canvas* canvas, const char* str);
|
|||
*
|
||||
* @param canvas Canvas instance
|
||||
* @param x, y coordinates based on align param
|
||||
* @param horizontal, vertical aligment of multiline text
|
||||
* @param horizontal, vertical alignment of multiline text
|
||||
* @param text string (possible multiline)
|
||||
*/
|
||||
void elements_multiline_text_aligned(
|
||||
|
|
|
@ -76,8 +76,8 @@ void dialog_ex_set_context(DialogEx* dialog_ex, void* context);
|
|||
* @param text text to be shown, can be multiline
|
||||
* @param x x position
|
||||
* @param y y position
|
||||
* @param horizontal horizontal text aligment
|
||||
* @param vertical vertical text aligment
|
||||
* @param horizontal horizontal text alignment
|
||||
* @param vertical vertical text alignment
|
||||
*/
|
||||
void dialog_ex_set_header(
|
||||
DialogEx* dialog_ex,
|
||||
|
@ -95,8 +95,8 @@ void dialog_ex_set_header(
|
|||
* @param text text to be shown, can be multiline
|
||||
* @param x x position
|
||||
* @param y y position
|
||||
* @param horizontal horizontal text aligment
|
||||
* @param vertical vertical text aligment
|
||||
* @param horizontal horizontal text alignment
|
||||
* @param vertical vertical text alignment
|
||||
*/
|
||||
void dialog_ex_set_text(
|
||||
DialogEx* dialog_ex,
|
||||
|
|
|
@ -64,7 +64,7 @@ void popup_set_context(Popup* popup, void* context);
|
|||
* @param x x position
|
||||
* @param y y position
|
||||
* @param horizontal horizontal alignment
|
||||
* @param vertical vertical aligment
|
||||
* @param vertical vertical alignment
|
||||
*/
|
||||
void popup_set_header(
|
||||
Popup* popup,
|
||||
|
@ -83,7 +83,7 @@ void popup_set_header(
|
|||
* @param x x position
|
||||
* @param y y position
|
||||
* @param horizontal horizontal alignment
|
||||
* @param vertical vertical aligment
|
||||
* @param vertical vertical alignment
|
||||
*/
|
||||
void popup_set_text(
|
||||
Popup* popup,
|
||||
|
|
|
@ -43,7 +43,7 @@ static void text_box_process_up(TextBox* text_box) {
|
|||
model->scroll_pos--;
|
||||
// Reach last symbol of previous line
|
||||
model->text_pos--;
|
||||
// Search prevous line start
|
||||
// Search previous line start
|
||||
while((model->text_pos != model->text) && (*(--model->text_pos) != '\n'))
|
||||
;
|
||||
if(*model->text_pos == '\n') {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
* @file text_input.h
|
||||
* GUI: TextInput keybord view module API
|
||||
* GUI: TextInput keyboard view module API
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
|
|
@ -152,7 +152,7 @@ void view_dispatcher_remove_view(ViewDispatcher* view_dispatcher, uint32_t view_
|
|||
if(view_dispatcher->current_view == view) {
|
||||
view_dispatcher_set_current_view(view_dispatcher, NULL);
|
||||
}
|
||||
// Check if view is recieving input
|
||||
// Check if view is receiving input
|
||||
if(view_dispatcher->ongoing_input_view == view) {
|
||||
view_dispatcher->ongoing_input_view = NULL;
|
||||
}
|
||||
|
|
|
@ -20,8 +20,8 @@ typedef enum {
|
|||
InputTypePress, /**< Press event, emitted after debounce */
|
||||
InputTypeRelease, /**< Release event, emitted after debounce */
|
||||
InputTypeShort, /**< Short event, emitted after InputTypeRelease done withing INPUT_LONG_PRESS interval */
|
||||
InputTypeLong, /**< Long event, emmited after INPUT_LONG_PRESS interval, asynchronouse to InputTypeRelease */
|
||||
InputTypeRepeat, /**< Repeat event, emmited with INPUT_REPEATE_PRESS period after InputTypeLong event */
|
||||
InputTypeLong, /**< Long event, emitted after INPUT_LONG_PRESS_COUNTS interval, asynchronous to InputTypeRelease */
|
||||
InputTypeRepeat, /**< Repeat event, emitted with INPUT_LONG_PRESS_COUNTS period after InputTypeLong event */
|
||||
InputTypeMAX, /**< Special value for exceptional */
|
||||
} InputType;
|
||||
|
||||
|
|
|
@ -86,7 +86,7 @@ FuriPubSub* power_get_pubsub(Power* power);
|
|||
*/
|
||||
bool power_is_battery_healthy(Power* power);
|
||||
|
||||
/** Enable or disable battery low level notification mesage
|
||||
/** Enable or disable battery low level notification message
|
||||
*
|
||||
* @param power Power instance
|
||||
* @param enable true - enable, false - disable
|
||||
|
|
|
@ -25,7 +25,7 @@ typedef void (*RpcSendBytesCallback)(void* context, uint8_t* bytes, size_t bytes
|
|||
typedef void (*RpcBufferIsEmptyCallback)(void* context);
|
||||
/** Callback to notify transport layer that close_session command
|
||||
* is received. Any other actions lays on transport layer.
|
||||
* No destruction or session close preformed. */
|
||||
* No destruction or session close performed. */
|
||||
typedef void (*RpcSessionClosedCallback)(void* context);
|
||||
/** Callback to notify transport layer that session was closed
|
||||
* and all operations were finished */
|
||||
|
|
|
@ -330,7 +330,7 @@ static void rpc_system_storage_read_process(const PB_Main* request, void* contex
|
|||
|
||||
rpc_system_storage_reset_state(rpc_storage, session, true);
|
||||
|
||||
/* use same message memory to send reponse */
|
||||
/* use same message memory to send response */
|
||||
PB_Main* response = malloc(sizeof(PB_Main));
|
||||
const char* path = request->content.storage_read_request.path;
|
||||
Storage* fs_api = furi_record_open(RECORD_STORAGE);
|
||||
|
|
|
@ -25,13 +25,13 @@ typedef enum {
|
|||
typedef enum {
|
||||
FSE_OK, /**< No error */
|
||||
FSE_NOT_READY, /**< FS not ready */
|
||||
FSE_EXIST, /**< File/Dir alrady exist */
|
||||
FSE_EXIST, /**< File/Dir already exist */
|
||||
FSE_NOT_EXIST, /**< File/Dir does not exist */
|
||||
FSE_INVALID_PARAMETER, /**< Invalid API parameter */
|
||||
FSE_DENIED, /**< Access denied */
|
||||
FSE_INVALID_NAME, /**< Invalid name/path */
|
||||
FSE_INTERNAL, /**< Internal error */
|
||||
FSE_NOT_IMPLEMENTED, /**< Functon not implemented */
|
||||
FSE_NOT_IMPLEMENTED, /**< Function not implemented */
|
||||
FSE_ALREADY_OPEN, /**< File/Dir already opened */
|
||||
} FS_Error;
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ typedef enum {
|
|||
struct File {
|
||||
uint32_t file_id; /**< File ID for internal references */
|
||||
FileType type;
|
||||
FS_Error error_id; /**< Standart API error from FS_Error enum */
|
||||
FS_Error error_id; /**< Standard API error from FS_Error enum */
|
||||
int32_t internal_error_id; /**< Internal API error value */
|
||||
void* storage;
|
||||
};
|
||||
|
|
|
@ -255,19 +255,19 @@ FS_Error storage_common_fs_info(
|
|||
const char* storage_error_get_desc(FS_Error error_id);
|
||||
|
||||
/** Retrieves the error id from the file object
|
||||
* @param file pointer to file object. Pointer must not point to NULL. YOU CANNOT RETREIVE THE ERROR ID IF THE FILE HAS BEEN CLOSED
|
||||
* @param file pointer to file object. Pointer must not point to NULL. YOU CANNOT RETRIEVE THE ERROR ID IF THE FILE HAS BEEN CLOSED
|
||||
* @return FS_Error error id
|
||||
*/
|
||||
FS_Error storage_file_get_error(File* file);
|
||||
|
||||
/** Retrieves the internal (storage-specific) error id from the file object
|
||||
* @param file pointer to file object. Pointer must not point to NULL. YOU CANNOT RETREIVE THE INTERNAL ERROR ID IF THE FILE HAS BEEN CLOSED
|
||||
* @param file pointer to file object. Pointer must not point to NULL. YOU CANNOT RETRIEVE THE INTERNAL ERROR ID IF THE FILE HAS BEEN CLOSED
|
||||
* @return FS_Error error id
|
||||
*/
|
||||
int32_t storage_file_get_internal_error(File* file);
|
||||
|
||||
/** Retrieves the error text from the file object
|
||||
* @param file pointer to file object. Pointer must not point to NULL. YOU CANNOT RETREIVE THE ERROR TEXT IF THE FILE HAS BEEN CLOSED
|
||||
* @param file pointer to file object. Pointer must not point to NULL. YOU CANNOT RETRIEVE THE ERROR TEXT IF THE FILE HAS BEEN CLOSED
|
||||
* @return const char* error text
|
||||
*/
|
||||
const char* storage_file_get_error_desc(File* file);
|
||||
|
|
|
@ -26,7 +26,7 @@ typedef struct {
|
|||
NotificationApp* notification;
|
||||
Storage* fs_api;
|
||||
|
||||
// view managment
|
||||
// view management
|
||||
SceneManager* scene_manager;
|
||||
ViewDispatcher* view_dispatcher;
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ typedef struct {
|
|||
Widget* widget;
|
||||
NotificationApp* notifications;
|
||||
|
||||
// view managment
|
||||
// view management
|
||||
SceneManager* scene_manager;
|
||||
ViewDispatcher* view_dispatcher;
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ To run cleanup (think of `make clean`) for specified targets, add `-c` option.
|
|||
|
||||
- `fw_dist` - build & publish firmware to `dist` folder. This is a default target, when no other are specified
|
||||
- `fap_dist` - build external plugins & publish to `dist` folder
|
||||
- `updater_package`, `updater_minpackage` - build self-update package. Minimal version only inclues firmware's DFU file; full version also includes radio stack & resources for SD card
|
||||
- `updater_package`, `updater_minpackage` - build self-update package. Minimal version only includes firmware's DFU file; full version also includes radio stack & resources for SD card
|
||||
- `copro_dist` - bundle Core2 FUS+stack binaries for qFlipper
|
||||
- `flash` - flash attached device with OpenOCD over ST-Link
|
||||
- `flash_usb`, `flash_usb_full` - build, upload and install update package to device over USB. See details on `updater_package`, `updater_minpackage`
|
||||
|
|
|
@ -32,7 +32,7 @@ COPRO_STACK_TYPE = "ble_light"
|
|||
# Leave 0 to let scripts automatically calculate it
|
||||
COPRO_STACK_ADDR = "0x0"
|
||||
|
||||
# If you override COPRO_CUBE_DIR on commandline, override this aswell
|
||||
# If you override COPRO_CUBE_DIR on commandline, override this as well
|
||||
COPRO_STACK_BIN_DIR = posixpath.join(
|
||||
COPRO_CUBE_DIR,
|
||||
"Projects",
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
typedef struct {
|
||||
FuriLogLevel log_level;
|
||||
FuriLogPuts puts;
|
||||
FuriLogTimestamp timetamp;
|
||||
FuriLogTimestamp timestamp;
|
||||
FuriMutex* mutex;
|
||||
} FuriLogParams;
|
||||
|
||||
|
@ -18,7 +18,7 @@ void furi_log_init() {
|
|||
// Set default logging parameters
|
||||
furi_log.log_level = FURI_LOG_LEVEL_DEFAULT;
|
||||
furi_log.puts = furi_hal_console_puts;
|
||||
furi_log.timetamp = furi_get_tick;
|
||||
furi_log.timestamp = furi_get_tick;
|
||||
furi_log.mutex = furi_mutex_alloc(FuriMutexTypeNormal);
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,7 @@ void furi_log_print_format(FuriLogLevel level, const char* tag, const char* form
|
|||
furi_string_printf(
|
||||
string,
|
||||
"%lu %s[%s][%s] " FURI_LOG_CLR_RESET,
|
||||
furi_log.timetamp(),
|
||||
furi_log.timestamp(),
|
||||
color,
|
||||
log_letter,
|
||||
tag);
|
||||
|
@ -98,5 +98,5 @@ void furi_log_set_puts(FuriLogPuts puts) {
|
|||
|
||||
void furi_log_set_timestamp(FuriLogTimestamp timestamp) {
|
||||
furi_assert(timestamp);
|
||||
furi_log.timetamp = timestamp;
|
||||
furi_log.timestamp = timestamp;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
* @file memmgr.h
|
||||
* Furi: memory managment API and glue
|
||||
* Furi: memory management API and glue
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
* @file memmgr_heap.h
|
||||
* Furi: heap memory managment API and allocator
|
||||
* Furi: heap memory management API and allocator
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
|
|
@ -48,7 +48,7 @@ typedef int32_t (*FuriThreadCallback)(void* context);
|
|||
*/
|
||||
typedef void (*FuriThreadStdoutWriteCallback)(const char* data, size_t size);
|
||||
|
||||
/** FuriThread state change calback called upon thread state change
|
||||
/** FuriThread state change callback called upon thread state change
|
||||
* @param state new thread state
|
||||
* @param context callback context
|
||||
*/
|
||||
|
@ -194,7 +194,7 @@ size_t furi_thread_get_heap_size(FuriThread* thread);
|
|||
*/
|
||||
int32_t furi_thread_get_return_code(FuriThread* thread);
|
||||
|
||||
/** Thread releated methods that doesn't involve FuriThread directly */
|
||||
/** Thread related methods that doesn't involve FuriThread directly */
|
||||
|
||||
/** Get FreeRTOS FuriThreadId for current thread
|
||||
*
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
bool init_mutex(ValueMutex* valuemutex, void* value, size_t size) {
|
||||
// mutex without name,
|
||||
// no attributes (unfortunatly robust mutex is not supported by FreeRTOS),
|
||||
// no attributes (unfortunately robust mutex is not supported by FreeRTOS),
|
||||
// with dynamic memory allocation
|
||||
valuemutex->mutex = furi_mutex_alloc(FuriMutexTypeNormal);
|
||||
if(valuemutex->mutex == NULL) return false;
|
||||
|
|
|
@ -39,7 +39,7 @@ bool delete_mutex(ValueMutex* valuemutex);
|
|||
void* acquire_mutex(ValueMutex* valuemutex, uint32_t timeout);
|
||||
|
||||
/**
|
||||
* Helper: infinitly wait for mutex
|
||||
* Helper: infinitely wait for mutex
|
||||
*/
|
||||
static inline void* acquire_mutex_block(ValueMutex* valuemutex) {
|
||||
return acquire_mutex(valuemutex, FuriWaitForever);
|
||||
|
@ -135,7 +135,7 @@ void consumer_app(void* _p) {
|
|||
flapp_exit(NULL);
|
||||
}
|
||||
|
||||
// continously read value every 1s
|
||||
// continuously read value every 1s
|
||||
uint32_t counter;
|
||||
while(1) {
|
||||
if(read_mutex(counter_mutex, &counter, sizeof(counter), OsWaitForever)) {
|
||||
|
|
|
@ -15,9 +15,9 @@ void furi_run() {
|
|||
furi_assert(xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED);
|
||||
|
||||
#if(__ARM_ARCH_7A__ == 0U)
|
||||
/* Service Call interrupt might be configured before kernel start */
|
||||
/* and when its priority is lower or equal to BASEPRI, svc intruction */
|
||||
/* causes a Hard Fault. */
|
||||
/* Service Call interrupt might be configured before kernel start */
|
||||
/* and when its priority is lower or equal to BASEPRI, svc instruction */
|
||||
/* causes a Hard Fault. */
|
||||
NVIC_SetPriority(SVCall_IRQn, 0U);
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in a new issue