I don't see how 'command' gets set to the different incoming values. It starts at 0 so it goes through case 0 which sets command to whatever byte arrived ('a') and responds with 0. For the next arriving character ('b') command is 'a' so the first data byte is sent (195). Same for the other two data bytes.
0, 195, 195, 195
Exactly what you are receiving. Perhaps you should send the byte corresponding to the command. Remember, the outgoing data you put in SPDR won't go out until the next byte is received:
switch (c)
{
case 0:
SPDR = 0;
break;
// incoming byte, return byte result
case 'a':
SPDR = data.b[0];
break;
// incoming byte, return byte result
case 'b':
SPDR = data.b[1];
break;
// incoming byte, return byte result
case 'c':
SPDR = data.b[2];
break;
// incoming byte, return byte result
case 'd':
SPDR = data.b[3];
break;
} // end of switch