46#if (CH_CFG_USE_FACTORY == TRUE) || defined(__DOXYGEN__)
55#if (CH_CFG_USE_MUTEXES == TRUE) || defined(__DOXYGEN__)
56#define F_LOCK() chMtxLock(&ch_factory.mtx)
57#define F_UNLOCK() chMtxUnlock(&ch_factory.mtx)
59#define F_LOCK() (void) chSemWait(&ch_factory.sem)
60#define F_UNLOCK() chSemSignal(&ch_factory.sem)
95 }
while ((c != (
char)0) && (i > 0U));
122 if (prev->
next == element) {
141#if CH_FACTORY_REQUIRES_HEAP || defined(__DOXYGEN__)
197#if CH_FACTORY_REQUIRES_POOLS || defined(__DOXYGEN__)
279#if (CH_CFG_USE_MUTEXES == TRUE) || defined(__DOXYGEN__)
285#if CH_CFG_FACTORY_OBJECTS_REGISTRY == TRUE
291#if CH_CFG_FACTORY_GENERIC_BUFFERS == TRUE
294#if CH_CFG_FACTORY_SEMAPHORES == TRUE
300#if CH_CFG_FACTORY_MAILBOXES == TRUE
303#if CH_CFG_FACTORY_OBJ_FIFOS == TRUE
306#if CH_CFG_FACTORY_PIPES == TRUE
311#if (CH_CFG_FACTORY_OBJECTS_REGISTRY == TRUE) || defined(__DOXIGEN__)
388 while ((
void *)rop != (
void *)&
ch_factory.obj_list) {
389 if (rop->
objp == objp) {
428#if (CH_CFG_FACTORY_GENERIC_BUFFERS == TRUE) || defined(__DOXIGEN__)
455 memset((
void *)(dbp + 1), 0, size);
508#if (CH_CFG_FACTORY_SEMAPHORES == TRUE) || defined(__DOXIGEN__)
589#if (CH_CFG_FACTORY_MAILBOXES == TRUE) || defined(__DOXIGEN__)
613 (n *
sizeof (
msg_t)),
670#if (CH_CFG_FACTORY_OBJ_FIFOS == TRUE) || defined(__DOXIGEN__)
703 size2 = objn * objsize;
712 uint8_t *objbuf = (uint8_t *)dofp + size1;
716 (
void *)objbuf, msgbuf);
770#if (CH_CFG_FACTORY_PIPES == TRUE) || defined(__DOXIGEN__)
#define chSemObjectInit(sp, n)
Initializes a semaphore with the specified counter value.
#define chDbgAssert(c, r)
Condition assertion.
#define chDbgCheck(c)
Function parameters check.
#define CH_CFG_FACTORY_MAX_NAMES_LENGTH
Maximum length for object names.
#define MEM_ALIGN_NEXT(p, a)
Aligns to the next aligned memory address.
void chMtxObjectInit(mutex_t *mp)
Initializes s mutex_t structure.
void chMBObjectInit(mailbox_t *mbp, msg_t *buf, size_t n)
Initializes a mailbox_t object.
static void * chCoreAllocAlignedI(size_t size, unsigned align)
Allocates a memory block.
void chHeapFree(void *p)
Frees a previously allocated memory block.
void * chHeapAllocAligned(memory_heap_t *heapp, size_t size, unsigned align)
Allocates a block of memory from the heap by using the first-fit algorithm.
#define CH_HEAP_ALIGNMENT
Minimum alignment used for heap.
void * chPoolAlloc(memory_pool_t *mp)
Allocates an object from a memory pool.
static void chPoolObjectInit(memory_pool_t *mp, size_t size, memgetfunc_t provider)
Initializes an empty memory pool.
void chPoolFree(memory_pool_t *mp, void *objp)
Releases an object into a memory pool.
struct ch_dyn_objects_fifo dyn_objects_fifo_t
Type of a dynamic buffer object.
struct ch_dyn_element dyn_element_t
Type of a dynamic object list element.
dyn_mailbox_t * chFactoryFindMailbox(const char *name)
Retrieves a dynamic mailbox object.
static dyn_element_t * dyn_list_unlink(dyn_element_t *prev)
void chFactoryReleaseObjectsFIFO(dyn_objects_fifo_t *dofp)
Releases a dynamic "objects FIFO" object.
static void copy_name(const char *sp, char *dp)
struct ch_dyn_object dyn_buffer_t
Type of a dynamic buffer object.
static dyn_element_t * dyn_create_object_pool(const char *name, dyn_list_t *dlp, memory_pool_t *mp)
void chFactoryReleaseObject(registered_object_t *rop)
Releases a registered object.
struct ch_dyn_list dyn_list_t
Type of a dynamic object list.
objects_factory_t ch_factory
Factory object static instance.
struct ch_dyn_semaphore dyn_semaphore_t
Type of a dynamic semaphore.
dyn_semaphore_t * chFactoryCreateSemaphore(const char *name, cnt_t n)
Creates a dynamic semaphore object.
dyn_objects_fifo_t * chFactoryFindObjectsFIFO(const char *name)
Retrieves a dynamic "objects FIFO" object.
static void dyn_release_object_heap(dyn_element_t *dep, dyn_list_t *dlp)
registered_object_t * chFactoryFindObjectByPointer(void *objp)
Retrieves a registered object by pointer.
void chFactoryReleaseSemaphore(dyn_semaphore_t *dsp)
Releases a dynamic semaphore object.
dyn_buffer_t * chFactoryFindBuffer(const char *name)
Retrieves a dynamic buffer object.
dyn_semaphore_t * chFactoryFindSemaphore(const char *name)
Retrieves a dynamic semaphore object.
static dyn_element_t * dyn_create_object_heap(const char *name, dyn_list_t *dlp, size_t size, unsigned align)
dyn_pipe_t * chFactoryCreatePipe(const char *name, size_t size)
Creates a dynamic pipe object.
static void dyn_list_init(dyn_list_t *dlp)
void chFactoryReleasePipe(dyn_pipe_t *dpp)
Releases a dynamic pipe object.
struct ch_dyn_pipe dyn_pipe_t
Type of a dynamic pipe object.
struct ch_dyn_mailbox dyn_mailbox_t
Type of a dynamic buffer object.
dyn_mailbox_t * chFactoryCreateMailbox(const char *name, size_t n)
Creates a dynamic mailbox object.
dyn_objects_fifo_t * chFactoryCreateObjectsFIFO(const char *name, size_t objsize, size_t objn, unsigned objalign)
Creates a dynamic "objects FIFO" object.
registered_object_t * chFactoryFindObject(const char *name)
Retrieves a registered object.
void chFactoryReleaseBuffer(dyn_buffer_t *dbp)
Releases a dynamic buffer object.
void __factory_init(void)
Initializes the objects factory.
void chFactoryReleaseMailbox(dyn_mailbox_t *dmp)
Releases a dynamic mailbox object.
static dyn_element_t * dyn_list_find_prev(dyn_element_t *element, dyn_list_t *dlp)
struct ch_registered_static_object registered_object_t
Type of a registered object.
struct ch_objects_factory objects_factory_t
Type of the factory main object.
static dyn_element_t * dyn_list_find(const char *name, dyn_list_t *dlp)
registered_object_t * chFactoryRegisterObject(const char *name, void *objp)
Registers a generic object.
static dyn_element_t * dyn_find_object(const char *name, dyn_list_t *dlp)
dyn_buffer_t * chFactoryCreateBuffer(const char *name, size_t size)
Creates a generic dynamic buffer object.
dyn_pipe_t * chFactoryFindPipe(const char *name)
Retrieves a dynamic pipe object.
static void dyn_release_object_pool(dyn_element_t *dep, dyn_list_t *dlp, memory_pool_t *mp)
static void chFifoObjectInitAligned(objects_fifo_t *ofp, size_t objsize, size_t objn, unsigned objalign, void *objbuf, msg_t *msgbuf)
Initializes a FIFO object.
void chPipeObjectInit(pipe_t *pp, uint8_t *buf, size_t n)
Initializes a mailbox_t object.
char name[CH_CFG_FACTORY_MAX_NAMES_LENGTH]
struct ch_dyn_element * next
Next dynamic object in the list.
ucnt_t refs
Number of references to this object.
mailbox_t mbx
The mailbox.
dyn_element_t element
List element of the dynamic buffer object.
dyn_element_t element
List element of the dynamic buffer object.
objects_fifo_t fifo
The objects FIFO.
dyn_element_t element
List element of the dynamic buffer object.
dyn_element_t element
List element of the dynamic pipe object.
semaphore_t sem
The semaphore.
dyn_element_t element
List element of the dynamic semaphore.
void * objp
Pointer to the object.
dyn_element_t element
List element of the registered object.