1
mirror of https://github.com/DarkFlippers/unleashed-firmware.git synced 2025-12-12 12:42:30 +04:00

Reduce expansion control thread stack size, add comments

This commit is contained in:
Georgii Surkov
2024-02-06 16:38:54 +03:00
parent 6846e808cf
commit 3721a71eab
3 changed files with 62 additions and 4 deletions

View File

@@ -11,7 +11,7 @@
#define TAG "ExpansionSrv"
#define EXPANSION_CONTROL_QUEUE_SIZE (8UL)
#define EXPANSION_CONTROL_STACK_SIZE (1024UL)
#define EXPANSION_CONTROL_STACK_SIZE (768UL)
typedef enum {
ExpansionStateDisabled,

View File

@@ -367,8 +367,8 @@ static int32_t expansion_worker(void* context) {
ExpansionWorker* expansion_worker_alloc(FuriHalSerialId serial_id) {
ExpansionWorker* instance = malloc(sizeof(ExpansionWorker));
instance->thread =
furi_thread_alloc_ex(TAG, EXPANSION_WORKER_STACK_SZIE, expansion_worker, instance);
instance->thread = furi_thread_alloc_ex(
TAG "Worker", EXPANSION_WORKER_STACK_SZIE, expansion_worker, instance);
instance->rx_buf = furi_stream_buffer_alloc(EXPANSION_WORKER_BUFFER_SIZE, 1);
instance->serial_id = serial_id;

View File

@@ -1,20 +1,78 @@
/**
* @file expansion_worker.h
* @brief Expansion module handling thread wrapper.
*
* The worker is started each time an expansion module is detected
* and handles all of the communication protocols. Likewise, it is stopped
* upon module disconnection or communication error.
*
* @warning This file is a private implementation detail. Please do not attempt to use it in applications.
*/
#pragma once
#include <furi_hal_serial_types.h>
/**
* @brief Expansion worker opaque type declaration.
*/
typedef struct ExpansionWorker ExpansionWorker;
typedef void (*ExpansionWorkerCallback)(void*);
/**
* @brief Worker callback type.
*
* @see expansion_worker_set_callback()
*
* @param[in,out] context pointer to a user-defined object.
*/
typedef void (*ExpansionWorkerCallback)(void* context);
/**
* @brief Create an expansion worker instance.
*
* @param[in] serial_id numerical identifier of the serial to be used by the worker.
* @returns pointer to the created instance.
*/
ExpansionWorker* expansion_worker_alloc(FuriHalSerialId serial_id);
/**
* @brief Delete an expansion worker instance.
*
* @param[in,out] instance pointer to the instance to be deleted.
*/
void expansion_worker_free(ExpansionWorker* instance);
/**
* @brief Set the module disconnect callback.
*
* The callback will be triggered upon worker stop EXCEPT
* when it was stopped via an expansion_worker_stop() call.
*
* In other words, the callback will ONLY be triggered if the worker was
* stopped due to the user disconnecting/resetting/powering down the module,
* or due to some communication error.
*
* @param[in,out] instance pointer to the worker instance to be modified.
* @param[in] callback pointer to the callback function to be called under the above conditions.
* @param[in] context pointer to a user-defined object, will be passed as a parameter to the callback.
*/
void expansion_worker_set_callback(
ExpansionWorker* instance,
ExpansionWorkerCallback callback,
void* context);
/**
* @brief Start the expansion module worker.
*
* @param[in,out] instance pointer to the worker instance to be started.
*/
void expansion_worker_start(ExpansionWorker* instance);
/**
* @brief Stop the expansion module worker.
*
* If the worker was stopped via this call (and not because of module disconnect/
* protocol error), the callback will not be triggered.
*
* @param[in,out] instance pointer to the worker instance to be stopped.
*/
void expansion_worker_stop(ExpansionWorker* instance);