Reading a packet of data in one call

I must be missing something (or you are). I don't see where _serialPort is ever initialized. You can't expect to read from it, or write to is, without that.