Ok, so this is not really a pull request, because it does not even pass compilation.
I've never really used boolean types before, but perhaps it does make some sense to do that, since one gets rid of a lot of = '0' and = '1' comparisons in the code... Think about it.
It also removes the data_ack signal from the client. Idea being that the client holds the signal that it has seen a data strobe, until it really decides to take the data.
The error code 'belongs' to the data.
Oups, I forgot to latch the data and error codes. New commit will fix that.