I suggest you define the function of each level and each module in this application according to the three levels listed by me, that is, the block diagram of the level module, and then read it.
In fact, the code does not need to be memorized. The key is to understand the whole workflow.