navdata_port is private.
There's no need for |port| to be dynamically allocated.

Also fixes the bug that if |nav_fd| open fails, port->isOpen and
port->isInitialised are not cleared.
Hide more private data.
Writes can be partial, in theory at least (note, all writes are currently
length 1).
Read to NULL is not legal.
Retry blocking writes.
baro_update_logic() can be static.
Use constants consistently.
navdata had better be the same size as a packet.
|navdata| does not need to be dynamically allocated.
Make sure writes complete.
Add full_read().