when CUDPSocket::open() is called with m_address (in CUDPSocket) is nothing,
IPv4 socket is created by "0.0.0.0" (INADDR_ANY) address.
This causes a problem that DMRGateway cannot connect to reflector on IPv6.
To choose default INADDR_ANY/IN6ADDR_ANY_INIT address, added
open(address_family) in UDPSocket.cpp.
Following code sets address string at construction, not modified.
NXDNNetwork.cpp
POCSAGNetwork.cpp
YSFNetwork.cpp
Other codes does not set, modified open() -> open(address_family)
DMRNetwork.cpp
DStarNetwork.cpp
MMDVMHost.cpp
MobileGPS.cpp
P25Network.cpp
RemoteCommand.cpp
RemoteControl.cpp
I think there is more clever method, but I have no other idea.
Maybe IPv6 support for digital radio works, but RemoteControl can work
IPv4 only.
match() checks address family, IP address and port between
two sockaddr_storages.
isnone() checks sockaddr_storage has INADDR_NONE IPv4 address.
(sockaddr_storage has this address when lookup() failed)
Testing MMDVMCal on OpenBSD/armv7 + BananaPi BPI-P2 requires CLOCAL flag.
Flags for termios should be same between OSX and other OSes
so unified them (except VMIN and VTIME setting).
Previous change (simplyfy DMR status display) did not consider
DMR duplex mode.
Now DMR simplex mode uses 2-lines style, duplex mode 4-lines like this.
Listening
TS1
N Callsign
TS2 TGxx
For this change, statusLine() no longer have meaning.
It will be removed in the future.
Old DMR status display takes 4 lines i.e.:
1 Listening
(unused line here)
2 N Callsign
TGxx
To make room for display area for future development, DMR status display
are changed to 2-lines style like this:
N Callsign
TS2 TGxx
And, added three small changes:
- use statusLine() macro to change layout easily
- use two -> three colors
yellow: radio mode (DMR, YSF, etc)
cyan: main status (callsign, TG/Timeslot)
dark green: additional information (D* reflector etc) *NEW*
- rename statusLine_offset() -> statusLineOffset()
Sometimes BOXF (box fill) command at refreshDisplay() fails.
Normally this is not occured, but running MMDVMHost for long time
(about one day) we see this problem.
The reason is unknown. But if LCD panel receives garbage character between
calling refreshDisplay(), first command (BOXF) at latter-called
refresDdisplay() will fail.
For workaround, send CR+LF command terminator first at this function.
There is two cases that shows "received network late entry"
1. dataType == DT_VOICE_PI_HEADER && m_netState != RS_NET_AUDIO
2. dataType == DT_VOICE_SYNC && m_netState == RS_NET_IDLE
case 1 is already treated. this fix is for case 2.
Display space character with DCV command to clear screen, but this command is
very slow. I tested filling whole 160x128 area with 8x16 character by DCV16
command, it took 540msec.
This is the worst case, but display refresh period has extended to 600ms
for safety.
To clear screen, use BOXF command instead. And, reduced issuing DCV command.