Added an explicit error for 'bad checksum' (even though it's no in the protocol), and since some devices will transmit bad checksums, return both the reply and the checksum error message so that the caller can decide what to do