Both `unsigned char` and `uint8_t` are unsigned (and the same type on most platforms) so this cast became redundant.
uint8_t
Having the input type `char` makes the output of `tsrb_get_one()` incomparable to the input of `tsrb_add_one()`. By changing it to `uint8_t` we not only definitively fix it to an octet, but also ensure that the input and output are the same.
The get function does not support passing NULL as an input buffer. to be able to drop bytes from the buffer, a dedicated drop function is required