FRES_BLOCK_BASIC,
FRES_BLOCK_TIMING_REQS,
FRES_BLOCK_SPARE_CAPACITY,
+ FRES_BLOCK_DUMMY_SCHED, /** See resources/dummy/res_dummy_idl.idl */
FRES_NUM_BLOCKS
};
default_CONFIG = CONFIG_RESOURCE_DUMMY=y
bin_PROGRAMS = frm_dummy
-frm_dummy_SOURCES = frm_dummy.c
+frm_dummy_SOURCES = frm_dummy.c dummy_block.c
+frm_dummy_CLIENT_IDL = res_dummy_idl.idl
frm_dummy_LIBS = frm forb contract fosa rt ulut fcb_client
shared_LIBRARIES = frs_dummy
-frs_dummy_SOURCES = frs_dummy.c
+frs_dummy_SOURCES = frs_dummy.c dummy_block.c
frs_dummy_LIBS = frs
+frs_dummy_CLIENT_IDL = res_dummy_idl.idl
include_HEADERS = res_dummy.h
+include_GEN_HEADERS = res_dummy_idl.h
--- /dev/null
+/**
+ * @file dummy_block.c
+ * @author Michal Sojka <sojkam1@fel.cvut.cz>
+ * @date Thu Oct 30 14:35:05 2008
+ *
+ * @brief Description contract blocks specific to dummy resource
+ *
+ *
+ */
+#include <res_dummy.h>
+#include <fres_container.h>
+
+static const struct fres_block_desc dummy_block_desc = {
+ .size = sizeof(fres_block_dummy_sched),
+ .serialize = (fres_block_serialize_fnc_t*)fres_block_dummy_sched_serialize,
+ .deserialize = (fres_block_deserialize_fnc_t*)fres_block_dummy_sched_deserialize,
+ .duplicate = fres_block_duplicate_default
+};
+
+int fres_block_register_dummy()
+{
+ return fres_block_register(FRES_BLOCK_DUMMY_SCHED,
+ &dummy_block_desc);
+}
fres_sa_scenario_for_each_contract(scenario, c) {
fres_block_basic *basic;
+ fres_block_dummy_sched *dummy_sched;
char id[40];
fres_contract_id_to_string(id, &c->contract->id, sizeof(id));
basic = fres_contract_get_basic(c->contract);
- printf(" processing: id=%s, period=%ld ms, budget=%ld ms\n",
- id,
+ if (c->status == FRES_SA_CONTRACT_NEW) {
+ /* Add data for scheduler to the new contracts */
+ dummy_sched = malloc(sizeof(*dummy_sched));
+ if (!dummy_sched) return false;
+ dummy_sched->priority = 100 - fosa_rel_time_to_msec(basic->budget);
+ fres_contract_add_block(c->contract, FRES_BLOCK_DUMMY_SCHED, dummy_sched);
+ } else {
+ dummy_sched = fres_contract_get_block(c->contract, FRES_BLOCK_DUMMY_SCHED);
+ }
+
+ printf(" %s contract: id=%s, period=%ld ms, budget=%ld ms, priority=%d\n",
+ c->status == FRES_SA_CONTRACT_NEW ? "new" : "old", id,
fosa_rel_time_to_msec(basic->period),
- fosa_rel_time_to_msec(basic->budget));
+ fosa_rel_time_to_msec(basic->budget), dummy_sched->priority);
+
}
schedulable = scenario->num_contracts <= 3;
orb = forb_init(&argc, &argv, "frm_dummy");
if (!orb) error(1, errno, "forb_init");
+ /* Register fres_block_dummy_sched to contract handling
+ * functions */
+ fres_block_register_dummy();
+
ret = frm_register_and_run(orb, &frm);
if (ret != 0) {
{
int *my_data = priv;
fres_block_basic *basic;
+ fres_block_dummy_sched *dummy_sched;
char id[40];
(*my_data)++;
fres_contract_id_to_string(id, &vres->contract->id, sizeof(id));
basic = fres_contract_get_basic(vres->contract);
- printf("Creating VRes #%d (id=%s, period=%ld ms, budget=%ld ms)\n",
+ dummy_sched = fres_contract_get_block(vres->contract, FRES_BLOCK_DUMMY_SCHED);
+ printf("Creating VRes #%d (id=%s, period=%ld ms, budget=%ld ms, priority=%d)\n",
*my_data, id,
fosa_rel_time_to_msec(basic->period),
- fosa_rel_time_to_msec(basic->budget));
+ fosa_rel_time_to_msec(basic->budget),
+ dummy_sched ? dummy_sched->priority : -1);
return 0;
}
int cancel_vres(fres_vres_t *vres, void *priv)
{
int *my_data = priv;
fres_block_basic *basic;
+ fres_block_dummy_sched *dummy_sched;
char id[40];
fres_contract_id_to_string(id, &vres->contract->id, sizeof(id));
basic = fres_contract_get_basic(vres->contract);
- printf("Creating VRes #%d (id=%s, period=%ld ms, budget=%ld ms)\n",
+ dummy_sched = fres_contract_get_block(vres->contract, FRES_BLOCK_DUMMY_SCHED);
+
+ printf("Canceling VRes #%d (id=%s, period=%ld ms, budget=%ld ms, priority=%d)\n",
*my_data, id,
fosa_rel_time_to_msec(basic->period),
- fosa_rel_time_to_msec(basic->budget));
+ fosa_rel_time_to_msec(basic->budget),
+ dummy_sched ? dummy_sched->priority : 999);
(*my_data)--;
return 0;
int frs_dummy_init(forb_orb orb, fres_contract_broker fcb, forb_executor_t *executor)
{
+ fres_block_register_dummy();
return frs_register(orb, fcb, executor, &dummy_scheduler);
}
#include <forb.h>
#include <fcb.h>
+#include <res_dummy_idl.h>
#define DUMMY_RESOURCE_TYPE FRSH_RT_PROCESSOR
#define DUMMY_RESOURCE_ID 0
int frs_dummy_init(forb_orb orb, fres_contract_broker fcb, forb_executor_t *executor);
+int fres_block_register_dummy(void);
#endif
--- /dev/null
+/**
+ * @file res_dummy_idl.idl
+ * @author Michal Sojka <sojkam1@fel.cvut.cz>
+ * @date Thu Oct 30 14:27:12 2008
+ *
+ * @brief Contract data block for dummy resource
+ *
+ *
+ */
+module fres {
+ module block {
+ /// Dummy data to demonstrate information transfer from
+ // manager to scheduler
+ struct dummy_sched {
+ long priority;
+ };
+ };
+};