As I'm progressing with a SIM900 based project, I've encountered a few peculiarities of the actual modem. I'd like to confirm my observations, and would like to seek some advices from the more experienced people on how to overcome these limitations.
In general, it seems like the modem does not like the current request (operation) to be interrupted by an "asynchronous message".
For example, if I will issue a command that expects any form of a response (like sending the "AT" command expects "OK" response) , and in the meanwhile (between the command and response) the modem outputs some asynchronous output (like "RING" for the incoming call, "+CMT" for incoming SMS or "+IPD" for incoming data), the original response gets lost (or the modem just drops what it was doing previously).
For an automated state machine that keeps verifying the modem responsivity and expects the modem to respond to these queries, this is a disaster.
Another issue I've noticed is related to GPRS data transfers. It seems like the incoming data have a higher priority over transmitted data. If the network keeps delivering data packets (receive chunks via "+IPD"), the modem cannot complete transmission (after +CIPSEND did not receieved "SEND OK") for a very looong time (timeouts in the range of 90sec does not ensure the data will be transmitted). Is there any way of overcoming this problem, other than making sure the remote device will not "flood" the SIM900 with excessive data?
Thanks for any comments and suggestions.