I am providing you the answers to your questions based on my experiences with Open-AT.
- The 3 tasks provided in Open-AT version 3 execute in the same context. You do not need to provide method for synchronisation. In other words, when one wm_apmAppliParser function for a task is executing, it cannot be preempted by another wm_apmAppliParser (of another task). Only after the wm_apmAppliParser (i.e. a task) exits will the other task be given a chance to execute. To verify this, you can make an application having a global shared resource. The appication should be such that in one of the task (wm_apmAppliParser), the applicaiton should get into an infinite loop until a particular value is set for the shared variable. The value which would get the applicaiton out of the infinite loop should be set in the other task. You will see that the other task will never get a chance to execute and module reset will occur (due to watch dog reset). This proves that preemption is not present and you do not have to provide for object synchronisation.
- In the same way, ADL too is single tasking execution system. When one callback function is in execution, another callback function cannot preempt it. Only after the execution of one callback function is complete, can another callback function start. Hence, here also you do not need to provide for object synchronisation. You will agree that this will reduce the complexity of the embedded application for sure.
- There is no subscription limitation as such in ADL. For instance, if you receive an SMS, you can definitely subscribe to other ADL services. However, it must be noted that applicaiton should be such that control returns to ADL library. The Open-AT applicaiton should not hog the CPU. This is because, if control does not returns to ADL library it will not be able to process other events (which might result in stack overflow as the callbacks which are to be executed will be stacked). Hence, the best way to perform very complex operations is through the usage of timers. When you use timers, the ADL library get enough time to perform its internal functions.
In a nutshell, you do not need to provide for object synchronisation in Open-AT. The architecture of Open-AT is such that it reduces the burden on the programmer and provides very simple and easy to use callback functionality to achieve the desired task.