Skip to content
Snippets Groups Projects
Commit e9120b70 authored by fkzheng's avatar fkzheng
Browse files

switch grouping

parent c496d43e
No related branches found
No related tags found
No related merge requests found
......@@ -528,7 +528,7 @@ void init_trackb(track_node* track) {
track[64].type = NODE_SENSOR;
track[64].num = 64;
track[64].reverse = &track[65];
// track[64].edge[DIR_AHEAD].reverse = &track[122].edge[DIR_CURVED];
track[64].edge[DIR_AHEAD].reverse = &track[122].edge[DIR_CURVED];
track[64].edge[DIR_AHEAD].src = &track[64];
track[64].edge[DIR_AHEAD].dest = &track[123];
track[64].edge[DIR_AHEAD].dist = 239;
......@@ -1029,23 +1029,23 @@ void init_trackb(track_node* track) {
track[116].type = NODE_NONE;
track[116].num = 153;
track[116].reverse = &track[117];
// track[116].edge[DIR_STRAIGHT].reverse = &track[124].edge[DIR_AHEAD];
// track[116].edge[DIR_STRAIGHT].src = &track[116];
// track[116].edge[DIR_STRAIGHT].dest = &track[125];
// track[116].edge[DIR_STRAIGHT].dist = 253;
// track[116].edge[DIR_CURVED].reverse = &track[33].edge[DIR_AHEAD];
// track[116].edge[DIR_CURVED].src = &track[116];
// track[116].edge[DIR_CURVED].dest = &track[32];
// track[116].edge[DIR_CURVED].dist = 246;
track[116].edge[DIR_AHEAD].reverse = &track[124].edge[DIR_AHEAD];
track[116].edge[DIR_AHEAD].src = &track[116];
track[116].edge[DIR_AHEAD].dest = &track[125];
track[116].edge[DIR_AHEAD].dist = 253;
track[116].edge[DIR_STRAIGHT].reverse = &track[124].edge[DIR_AHEAD];
track[116].edge[DIR_STRAIGHT].src = &track[116];
track[116].edge[DIR_STRAIGHT].dest = &track[125];
track[116].edge[DIR_STRAIGHT].dist = 253;
track[116].edge[DIR_CURVED].reverse = &track[33].edge[DIR_AHEAD];
track[116].edge[DIR_CURVED].src = &track[116];
track[116].edge[DIR_CURVED].dest = &track[32];
track[116].edge[DIR_CURVED].dist = 246;
// track[116].edge[DIR_AHEAD].reverse = &track[124].edge[DIR_AHEAD];
// track[116].edge[DIR_AHEAD].src = &track[116];
// track[116].edge[DIR_AHEAD].dest = &track[125];
// track[116].edge[DIR_AHEAD].dist = 253;
track[117].name = "MR153";
track[117].type = NODE_MERGE;
track[117].num = 153;
track[117].reverse = &track[116];
// track[117].edge[DIR_AHEAD].reverse = &track[118].edge[DIR_STRAIGHT];
track[117].edge[DIR_AHEAD].reverse = &track[118].edge[DIR_STRAIGHT];
track[117].edge[DIR_AHEAD].src = &track[117];
track[117].edge[DIR_AHEAD].dest = &track[119];
track[117].edge[DIR_AHEAD].dist = 0;
......@@ -1053,18 +1053,18 @@ void init_trackb(track_node* track) {
track[118].type = NODE_BRANCH;
track[118].num = 154;
track[118].reverse = &track[119];
// track[118].edge[DIR_STRAIGHT].reverse = &track[117].edge[DIR_AHEAD];
// track[118].edge[DIR_STRAIGHT].src = &track[118];
// track[118].edge[DIR_STRAIGHT].dest = &track[116];
// track[118].edge[DIR_STRAIGHT].dist = 0;
// track[118].edge[DIR_CURVED].reverse = &track[28].edge[DIR_AHEAD];
// track[118].edge[DIR_CURVED].src = &track[118];
// track[118].edge[DIR_CURVED].dest = &track[29];
// track[118].edge[DIR_CURVED].dist = 239;
track[118].edge[DIR_AHEAD].reverse = &track[28].edge[DIR_AHEAD];
track[118].edge[DIR_AHEAD].src = &track[118];
track[118].edge[DIR_AHEAD].dest = &track[29];
track[118].edge[DIR_AHEAD].dist = 239;
track[118].edge[DIR_STRAIGHT].reverse = &track[117].edge[DIR_AHEAD];
track[118].edge[DIR_STRAIGHT].src = &track[118];
track[118].edge[DIR_STRAIGHT].dest = &track[116];
track[118].edge[DIR_STRAIGHT].dist = 0;
track[118].edge[DIR_CURVED].reverse = &track[28].edge[DIR_AHEAD];
track[118].edge[DIR_CURVED].src = &track[118];
track[118].edge[DIR_CURVED].dest = &track[29];
track[118].edge[DIR_CURVED].dist = 239;
// track[118].edge[DIR_AHEAD].reverse = &track[28].edge[DIR_AHEAD];
// track[118].edge[DIR_AHEAD].src = &track[118];
// track[118].edge[DIR_AHEAD].dest = &track[29];
// track[118].edge[DIR_AHEAD].dist = 239;
track[119].name = "MR154";
track[119].type = NODE_MERGE;
track[119].num = 154;
......@@ -1077,18 +1077,18 @@ void init_trackb(track_node* track) {
track[120].type = NODE_NONE;
track[120].num = 155;
track[120].reverse = &track[121];
// track[120].edge[DIR_STRAIGHT].reverse = &track[126].edge[DIR_AHEAD];
// track[120].edge[DIR_STRAIGHT].src = &track[120];
// track[120].edge[DIR_STRAIGHT].dest = &track[127];
// track[120].edge[DIR_STRAIGHT].dist = 282;
// track[120].edge[DIR_CURVED].reverse = &track[48].edge[DIR_AHEAD];
// track[120].edge[DIR_CURVED].src = &track[120];
// track[120].edge[DIR_CURVED].dest = &track[49];
// track[120].edge[DIR_CURVED].dist = 246;
track[120].edge[DIR_AHEAD].reverse = &track[48].edge[DIR_AHEAD];
track[120].edge[DIR_AHEAD].src = &track[120];
track[120].edge[DIR_AHEAD].dest = &track[49];
track[120].edge[DIR_AHEAD].dist = 246;
track[120].edge[DIR_STRAIGHT].reverse = &track[126].edge[DIR_AHEAD];
track[120].edge[DIR_STRAIGHT].src = &track[120];
track[120].edge[DIR_STRAIGHT].dest = &track[127];
track[120].edge[DIR_STRAIGHT].dist = 282;
track[120].edge[DIR_CURVED].reverse = &track[48].edge[DIR_AHEAD];
track[120].edge[DIR_CURVED].src = &track[120];
track[120].edge[DIR_CURVED].dest = &track[49];
track[120].edge[DIR_CURVED].dist = 246;
// track[120].edge[DIR_AHEAD].reverse = &track[48].edge[DIR_AHEAD];
// track[120].edge[DIR_AHEAD].src = &track[120];
// track[120].edge[DIR_AHEAD].dest = &track[49];
// track[120].edge[DIR_AHEAD].dist = 246;
track[121].name = "MR155";
track[121].type = NODE_MERGE;
track[121].num = 155;
......@@ -1101,18 +1101,18 @@ void init_trackb(track_node* track) {
track[122].type = NODE_NONE;
track[122].num = 156;
track[122].reverse = &track[123];
// track[122].edge[DIR_STRAIGHT].reverse = &track[121].edge[DIR_AHEAD];
// track[122].edge[DIR_STRAIGHT].src = &track[122];
// track[122].edge[DIR_STRAIGHT].dest = &track[120];
// track[122].edge[DIR_STRAIGHT].dist = 0;
// track[122].edge[DIR_CURVED].reverse = &track[64].edge[DIR_AHEAD];
// track[122].edge[DIR_CURVED].src = &track[122];
// track[122].edge[DIR_CURVED].dest = &track[65];
// track[122].edge[DIR_CURVED].dist = 239;
track[122].edge[DIR_AHEAD].reverse = &track[121].edge[DIR_AHEAD];
track[122].edge[DIR_AHEAD].src = &track[122];
track[122].edge[DIR_AHEAD].dest = &track[120];
track[122].edge[DIR_AHEAD].dist = 0;
track[122].edge[DIR_STRAIGHT].reverse = &track[121].edge[DIR_AHEAD];
track[122].edge[DIR_STRAIGHT].src = &track[122];
track[122].edge[DIR_STRAIGHT].dest = &track[120];
track[122].edge[DIR_STRAIGHT].dist = 0;
track[122].edge[DIR_CURVED].reverse = &track[64].edge[DIR_AHEAD];
track[122].edge[DIR_CURVED].src = &track[122];
track[122].edge[DIR_CURVED].dest = &track[65];
track[122].edge[DIR_CURVED].dist = 239;
// track[122].edge[DIR_AHEAD].reverse = &track[121].edge[DIR_AHEAD];
// track[122].edge[DIR_AHEAD].src = &track[122];
// track[122].edge[DIR_AHEAD].dest = &track[120];
// track[122].edge[DIR_AHEAD].dist = 0;
track[123].name = "MR156";
track[123].type = NODE_MERGE;
track[123].num = 156;
......@@ -1134,7 +1134,7 @@ void init_trackb(track_node* track) {
track[126].name = "EN2";
track[126].type = NODE_ENTER;
track[126].reverse = &track[127];
// track[126].edge[DIR_AHEAD].reverse = &track[120].edge[DIR_STRAIGHT];
track[126].edge[DIR_AHEAD].reverse = &track[120].edge[DIR_STRAIGHT];
track[126].edge[DIR_AHEAD].src = &track[126];
track[126].edge[DIR_AHEAD].dest = &track[121];
track[126].edge[DIR_AHEAD].dist = 282;
......
......@@ -503,10 +503,36 @@ void switch_worker() {
cmd[1] = req->switch_nums[i];
// send switch command
send_switch_command(uart_train_tx_tid, cmd);
track_req.switch_nums[track_req.sw_count] = req->switch_nums[i];
track_req.directions[track_req.sw_count] = req->directions[i];
track_req.sw_count++;
if (req->switch_nums[i] == 153 || req->switch_nums[i] == 154) {
send_switch_command(uart_train_tx_tid, cmd);
track_req.switch_nums[track_req.sw_count] = req->switch_nums[i];
track_req.directions[track_req.sw_count] = req->directions[i];
track_req.sw_count++;
// flip other switch
cmd[1] = req->switch_nums[i] == 153 ? 154 : 153;
cmd[0] = req->directions[i] == 'S' ? SWITCH_CURVED : SWITCH_STRAIGHT;
send_switch_command(uart_train_tx_tid, cmd);
track_req.switch_nums[track_req.sw_count] = cmd[1];
track_req.directions[track_req.sw_count] = req->directions[i] == 'S' ? 'C' : 'S';
track_req.sw_count++;
} else if (req->switch_nums[i] == 155 || req->switch_nums[i] == 156) {
send_switch_command(uart_train_tx_tid, cmd);
track_req.switch_nums[track_req.sw_count] = req->switch_nums[i];
track_req.directions[track_req.sw_count] = req->directions[i];
track_req.sw_count++;
// flip other switch
cmd[1] = req->switch_nums[i] == 155 ? 156 : 155;
cmd[0] = req->directions[i] == 'S' ? SWITCH_CURVED : SWITCH_STRAIGHT;
send_switch_command(uart_train_tx_tid, cmd);
track_req.switch_nums[track_req.sw_count] = cmd[1];
track_req.directions[track_req.sw_count] = req->directions[i] == 'S' ? 'C' : 'S';
track_req.sw_count++;
} else {
send_switch_command(uart_train_tx_tid, cmd);
track_req.switch_nums[track_req.sw_count] = req->switch_nums[i];
track_req.directions[track_req.sw_count] = req->directions[i];
track_req.sw_count++;
}
}
}
......@@ -541,12 +567,6 @@ int turn_switches(char* switch_nums, char* directions, uint8_t sw_count) {
return 0;
}
// check if we need to flip it
// if (direction != get_switch_state(switch_num)) {
// req.switch_nums[i] = switch_num;
// req.directions[i] = direction;
// req.sw_count++;
// }
req.switch_nums[i] = switch_num;
req.directions[i] = direction;
req.sw_count++;
......
......@@ -18,13 +18,13 @@ struct Track_Request {
enum track_request request_type;
union
{
char switch_nums[22];
uint8_t track_nodes_encoded[22];
char switch_nums[30];
uint8_t track_nodes_encoded[30];
};
union
{
char directions[22];
uint32_t reservation_time[2];
char directions[30];
uint32_t reservation_time[30];
};
union
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment