]> rtime.felk.cvut.cz Git - frescor/fna.git/commitdiff
bug corrected in mode changes: in the slaves we have to set up the scenario values...
authorsangorrin <sangorrin@35b4ef3e-fd22-0410-ab77-dab3279adceb>
Tue, 25 Nov 2008 19:08:23 +0000 (19:08 +0000)
committersangorrin <sangorrin@35b4ef3e-fd22-0410-ab77-dab3279adceb>
Tue, 25 Nov 2008 19:08:23 +0000 (19:08 +0000)
git-svn-id: http://www.frescor.org/private/svn/frescor/fna/trunk@1435 35b4ef3e-fd22-0410-ab77-dab3279adceb

src_frescan/frescan_bwres_messages.c

index d98b9ed56f225c3a82627f6aac44924a78a45257..c8c775a02d775c8449f272848101bc8f4269e032 100644 (file)
@@ -351,6 +351,9 @@ static int frescan_request_to_mc_message
 
         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);
@@ -393,6 +396,10 @@ static int frescan_request_to_mc_message
                         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;
@@ -412,7 +419,7 @@ static int frescan_mc_message_to_request(const uint8_t *msg_to_parse,
         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;
@@ -436,14 +443,14 @@ static int frescan_mc_message_to_request(const uint8_t *msg_to_parse,
                         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);
@@ -457,6 +464,11 @@ static int frescan_mc_message_to_request(const uint8_t *msg_to_parse,
                 }
 
                 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;
@@ -496,6 +508,10 @@ static int frescan_request_to_rep_gn_message
         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++) {
@@ -522,7 +538,9 @@ static int frescan_request_to_rep_gn_message
                         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);
                 }
         }
 
@@ -543,6 +561,10 @@ static int frescan_rep_gn_message_to_request
         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;
 
@@ -556,6 +578,12 @@ static int frescan_rep_gn_message_to_request
         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;
 
@@ -565,33 +593,50 @@ static int frescan_rep_gn_message_to_request
                 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");