week1 - alan-mushi/opencpn-low-energy GitHub Wiki
What OpenCPN when it isn't in use ?
This week we have done a 'first approach' of the source code in order to find out what OpenCPN is doing when no action from the user is done.
In which files we have to look
We have established a list of files that are linked to what we are interesting to do. This list have been set up by firstly seek for files we absolutely don't need (for example the options window). Then we have narrow down the list to classes and functionalities that we can modify (we can't modify the collision system because it's obviously too dangerous). To be very specific, we kept only files with timers because we looked for actions that occurred every X seconds. At the end the list of files is :
chart1.cpp
chcanv.cpp
ais.cpp => in the current version : AIS_Decoder.cpp
How the main window is refreshed ?
We managed to find the piece of code that refresh the main window in the file chart1.cpp
.
The refreshing action is done every 5 seconds. Actions aren't located in a loop but triggered by the timer event FrameTimer1
.
The actions done when the timer emit a timerEvent are :
- Reload the chart quilt if needed (the ship have traveled out of the current quilt)
- Print the ship on the chart
- Print ships fetched by the AIS on the chart
- Look for possible anchor alerts
- Update watchdogs for various navigation indicators
- Log the position in the
opencpn.log
file every 30 minutes
Detailed diagram of the OnFrameTimer1
function :
What is done by the AIS ?
Like the main window refreshing action, the AIS data fetching rely on a timer (TimerAIS
) which trigger the AIS_Decoder::OnTimerAIS()
function every 995 ms.
The actions done by this method are mostly about fetching the AIS data and remove old AIS targets. The collision detection system is also implemented in this method.
The collision is defined by a ship too close of your ship's position. If a collision might happen, a collision alert window pop-up and a sound is played (this is an option).
Detailed diagram of the OnTimerAIS
function :
What is done in the initialization?
The program starts with OnInit() function in Chart1.cpp, which is needed by wxWidgets. This function initializes in roughly five steps :
- Preparing configuration
- Preparing UI
- Load Data
- Start timers
- Show UI
Timers deals with chart refreshing and in course up mode with chart rotating. Tide and current are not refreshed with the main chart refreshing timer, but have their own timer.
##Rotation and tide and current timers These timers do simple actions: rotation timer computes angle and refresh, and current and tide timer ask update of its data setting a boolean.