|
|
@ -40,6 +40,7 @@ static int32_t unit_count = -1; |
|
|
|
|
|
|
|
|
|
|
|
// ---
|
|
|
|
// ---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ureg_add_type(const UnitDriver *driver) |
|
|
|
void ureg_add_type(const UnitDriver *driver) |
|
|
|
{ |
|
|
|
{ |
|
|
|
bool suc = true; |
|
|
|
bool suc = true; |
|
|
@ -72,6 +73,7 @@ void ureg_add_type(const UnitDriver *driver) |
|
|
|
ureg_tail = re; |
|
|
|
ureg_tail = re; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Free unit in a list entry (do not free the list entry itself!) */ |
|
|
|
/** Free unit in a list entry (do not free the list entry itself!) */ |
|
|
|
static void free_le_unit(UlistEntry *le) |
|
|
|
static void free_le_unit(UlistEntry *le) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -84,6 +86,7 @@ static void free_le_unit(UlistEntry *le) |
|
|
|
free_ck(pUnit->name); |
|
|
|
free_ck(pUnit->name); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Add unit to the list, updating references as needed */ |
|
|
|
/** Add unit to the list, updating references as needed */ |
|
|
|
static void add_unit_to_list(UlistEntry *le) |
|
|
|
static void add_unit_to_list(UlistEntry *le) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -96,6 +99,7 @@ static void add_unit_to_list(UlistEntry *le) |
|
|
|
ulist_tail = le; |
|
|
|
ulist_tail = le; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// create a unit instance (not yet loading or initing - just pre-init)
|
|
|
|
// create a unit instance (not yet loading or initing - just pre-init)
|
|
|
|
Unit *ureg_instantiate(const char *driver_name) |
|
|
|
Unit *ureg_instantiate(const char *driver_name) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -141,6 +145,7 @@ Unit *ureg_instantiate(const char *driver_name) |
|
|
|
return NULL; |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ureg_save_units(PayloadBuilder *pb) |
|
|
|
void ureg_save_units(PayloadBuilder *pb) |
|
|
|
{ |
|
|
|
{ |
|
|
|
assert_param(pb->ok); |
|
|
|
assert_param(pb->ok); |
|
|
@ -171,6 +176,7 @@ void ureg_save_units(PayloadBuilder *pb) |
|
|
|
} // end units list
|
|
|
|
} // end units list
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool ureg_load_units(PayloadParser *pp) |
|
|
|
bool ureg_load_units(PayloadParser *pp) |
|
|
|
{ |
|
|
|
{ |
|
|
|
bool suc; |
|
|
|
bool suc; |
|
|
@ -251,6 +257,7 @@ void ureg_remove_all_units(void) |
|
|
|
unit_count = -1; |
|
|
|
unit_count = -1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Create unit instances from the [UNITS] overview section */ |
|
|
|
/** Create unit instances from the [UNITS] overview section */ |
|
|
|
bool ureg_instantiate_by_ini(const char *restrict driver_name, const char *restrict names) |
|
|
|
bool ureg_instantiate_by_ini(const char *restrict driver_name, const char *restrict names) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -297,6 +304,7 @@ bool ureg_instantiate_by_ini(const char *restrict driver_name, const char *restr |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Load unit key-value */ |
|
|
|
/** Load unit key-value */ |
|
|
|
error_t ureg_load_unit_ini_key(const char *restrict name, |
|
|
|
error_t ureg_load_unit_ini_key(const char *restrict name, |
|
|
|
const char *restrict key, |
|
|
|
const char *restrict key, |
|
|
@ -316,6 +324,7 @@ error_t ureg_load_unit_ini_key(const char *restrict name, |
|
|
|
return E_NO_SUCH_UNIT; |
|
|
|
return E_NO_SUCH_UNIT; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Finalize units init. Returns true if all inited OK. */ |
|
|
|
/** Finalize units init. Returns true if all inited OK. */ |
|
|
|
bool ureg_finalize_all_init(void) |
|
|
|
bool ureg_finalize_all_init(void) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -353,6 +362,7 @@ bool ureg_finalize_all_init(void) |
|
|
|
return suc; |
|
|
|
return suc; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** helper foir ureg_build_ini() */ |
|
|
|
static void export_unit_do(UlistEntry *li, IniWriter *iw) |
|
|
|
static void export_unit_do(UlistEntry *li, IniWriter *iw) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Unit *const pUnit = &li->unit; |
|
|
|
Unit *const pUnit = &li->unit; |
|
|
@ -379,6 +389,7 @@ static void export_unit_do(UlistEntry *li, IniWriter *iw) |
|
|
|
pUnit->driver->cfgWriteIni(pUnit, iw); |
|
|
|
pUnit->driver->cfgWriteIni(pUnit, iw); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// unit to INI
|
|
|
|
// unit to INI
|
|
|
|
void ureg_build_ini(IniWriter *iw) |
|
|
|
void ureg_build_ini(IniWriter *iw) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -433,6 +444,7 @@ void ureg_build_ini(IniWriter *iw) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// count units
|
|
|
|
// count units
|
|
|
|
uint32_t ureg_get_num_units(void) |
|
|
|
uint32_t ureg_get_num_units(void) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -450,6 +462,7 @@ uint32_t ureg_get_num_units(void) |
|
|
|
return (uint32_t) unit_count; |
|
|
|
return (uint32_t) unit_count; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern osMutexId mutScratchBufferHandle; |
|
|
|
extern osMutexId mutScratchBufferHandle; |
|
|
|
|
|
|
|
|
|
|
|
/** Deliver message to it's destination unit */ |
|
|
|
/** Deliver message to it's destination unit */ |
|
|
@ -497,6 +510,7 @@ void ureg_deliver_unit_request(TF_Msg *msg) |
|
|
|
assert_param(osOK == osMutexRelease(mutScratchBufferHandle)); |
|
|
|
assert_param(osOK == osMutexRelease(mutScratchBufferHandle)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Send a response for a unit-list request */ |
|
|
|
/** Send a response for a unit-list request */ |
|
|
|
void ureg_report_active_units(TF_ID frame_id) |
|
|
|
void ureg_report_active_units(TF_ID frame_id) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -542,6 +556,7 @@ void ureg_report_active_units(TF_ID frame_id) |
|
|
|
free_ck(buff); |
|
|
|
free_ck(buff); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Unit *ureg_get_rsc_owner(Resource resource) |
|
|
|
Unit *ureg_get_rsc_owner(Resource resource) |
|
|
|
{ |
|
|
|
{ |
|
|
|
UlistEntry *li = ulist_head; |
|
|
|
UlistEntry *li = ulist_head; |
|
|
@ -558,6 +573,7 @@ Unit *ureg_get_rsc_owner(Resource resource) |
|
|
|
return NULL; |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ureg_print_unit_resources(IniWriter *iw) |
|
|
|
void ureg_print_unit_resources(IniWriter *iw) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (iw->count == 0) return; |
|
|
|
if (iw->count == 0) return; |
|
|
@ -584,6 +600,7 @@ void ureg_print_unit_resources(IniWriter *iw) |
|
|
|
iw_newline(iw); |
|
|
|
iw_newline(iw); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ureg_tick_units(void) |
|
|
|
void ureg_tick_units(void) |
|
|
|
{ |
|
|
|
{ |
|
|
|
UlistEntry *li = ulist_head; |
|
|
|
UlistEntry *li = ulist_head; |
|
|
|