msg_begin = msg;
+ DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG,
+ "MC send mode_change_type:0x%X\n", data->mode_change_type);
+
// type: FRESCAN_GN_MESSAGE
*((uint8_t *)msg) = (uint8_t)FRESCAN_BWRES_REQ_MC;
bytes_written = sizeof(uint8_t);
bytes_written = sizeof(frsh_sa_prio_t);
msg = msg + bytes_written;
}
+
+ DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG,
+ "ss:%d c:%d t:%d p:%d\n",
+ vres->ss, vres->old_c, vres->old_t, vres->old_p);
}
*size = msg - msg_begin;
frescan_bwres_vres_t *vres;
frescan_node_t me;
- DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG, "MC message\n");
+ DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG, "MC message received\n");
msg = (uint8_t *)msg_to_parse;
me = frescan_data[data->net].local_node;
msg = msg + bytes_read;
}
- if (data->mode_change_type & (FRESCAN_BWRES_MC_PERIOD_INC |
+ if (vres->mode_change_type & (FRESCAN_BWRES_MC_PERIOD_INC |
FRESCAN_BWRES_MC_PERIOD_DEC)) {
vres->old_t = *((frsh_sa_time_t *)msg);
bytes_read = sizeof(frsh_sa_time_t);
msg = msg + bytes_read;
}
- if (data->mode_change_type & (FRESCAN_BWRES_MC_PRIO_INC |
+ if (vres->mode_change_type & (FRESCAN_BWRES_MC_PRIO_INC |
FRESCAN_BWRES_MC_PRIO_DEC)) {
vres->old_p = *((frsh_sa_prio_t *)msg);
bytes_read = sizeof(frsh_sa_prio_t);
}
data->mode_change_type |= vres->mode_change_type;
+
+ DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG,
+ "mc:0x%X ss:%d vres->ss:%d c:%d t:%d p:%d\n",
+ vres->mode_change_type, ss, vres->ss,
+ vres->old_c, vres->old_t, vres->old_p);
}
return 0;
bytes_written = sizeof(uint8_t);
msg = msg + bytes_written;
+ DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG,
+ "req:%d return:%s\n", data->req,
+ (data->return_value == FRESCAN_BWRES_REQ_ACCEPTED)?"OK":"FAIL");
+
if (data->return_value == FRESCAN_BWRES_REQ_ACCEPTED) {
// new ss values
for(i=0; i<data->contracts_to_neg->size; i++) {
msg = msg + bytes_written;
DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG,
- "ss[%d]:%u\n", i, data->ss_new->ss[i]);
+ "ss[%d]:%u b:%d t:%d p:%d\n",
+ i, data->ss_new->ss[i],
+ vres->old_c, vres->old_t, vres->old_p);
}
}
size_t bytes_read;
frescan_ss_t ss;
frescan_server_params_t server_params;
+ frescan_bwres_vres_t *vres;
+ frescan_node_t me;
+
+ me = frescan_data[data->net].local_node;
msg = (uint8_t *)msg_to_parse;
bytes_read = sizeof(uint8_t);
msg = msg + bytes_read;
+ DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG,
+ "req:%d return:%s\n", data->req,
+ (data->return_value == FRESCAN_BWRES_REQ_ACCEPTED)?"OK":"FAIL");
+
+ if (data->return_value != FRESCAN_BWRES_REQ_ACCEPTED) return 0;
+
// create the new sporadic servers
data->ss_new->size = 0;
bytes_read = sizeof(uint16_t);
msg = msg + bytes_read;
+ // Set values in the scenario (for mode changes)
+ vres = &frescan_data[data->net].scenario.vres_pool[me]
+ [data->ss_new->ss[data->ss_new->size]];
+
+ vres->ss = data->ss_new->ss[data->ss_new->size];
+ vres->node = me;
+
// Budget
- server_params.budget =
- frsh_rel_time_to_usec
- (frsh_sa_time_to_rel_time(*((frsh_sa_time_t *)msg))) /
- FRESCAN_FRAME_TX_TIME_US;
+ vres->old_c = *((frsh_sa_time_t *)msg);
bytes_read = sizeof(frsh_sa_time_t);
msg = msg + bytes_read;
// Period
- server_params.period = frsh_sa_time_to_rel_time
- (*((frsh_sa_time_t *)msg));
+ vres->old_t = *((frsh_sa_time_t *)msg);
bytes_read = sizeof(frsh_sa_time_t);
msg = msg + bytes_read;
// Prio
- server_params.prio = *((frsh_sa_prio_t *)msg);
+ vres->old_p = *((frsh_sa_prio_t *)msg);
bytes_read = sizeof(frsh_sa_prio_t);
msg = msg + bytes_read;
// Create server
- ret = frescan_servers_create(data->net, &server_params, &ss);
- if (ret != 0) return ret;
+ server_params.budget = frsh_rel_time_to_usec
+ (frsh_sa_time_to_rel_time(vres->old_c)) /
+ FRESCAN_FRAME_TX_TIME_US;
+ server_params.period = frsh_sa_time_to_rel_time(vres->old_t);
+ server_params.prio = vres->old_p;
DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG,
- "ss_master[%d]:%u ss_created[%d]:%u\n",
+ "ss_master[%d]:%u ss[%d]:%u b:%d t:%d p:%d\n",
data->ss_new->size, data->ss_new->ss[data->ss_new->size],
- data->ss_new->size, ss);
+ data->ss_new->size, ss,
+ vres->old_c, vres->old_t, vres->old_p);
+
+ DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG,
+ "server_params[%d] b:%d t:(%d,%d) p:%d\n",
+ data->ss_new->size, server_params.budget,
+ server_params.period.tv_sec,
+ server_params.period.tv_nsec,
+ server_params.prio);
+
+ ret = frescan_servers_create(data->net, &server_params, &ss);
+ if (ret != 0) return ret;
if (ss != data->ss_new->ss[data->ss_new->size]) {
FRESCAN_ERROR("ss from master != ss created\n");