_t is normally used for typedefs, if it was a typedef for unsigned short as the name suggests then it would work out of the box. this behaviour makes me think there's more behind it. what's the underlying type of uint16_t?