Имеем ситуацию когда объект непрерывно посылает и принимает SMS.
С посылкой вроде все нормально, но одновременный прием оказался проблемой. В стандарте на AT команды не разрулены проблемы полнодуплексной работы модуля.
Например мы начинаем посылкой AT+CMGR=1 и думаем, что начали транзакцию и модем не пошлет в ответ некие "unsolicited result codes", а ответит как положено содержимым ячейки памяти с индексом 1. А модем на самом деле шлет все что ему вздумается, и таким образом нужно парсить практически любую строку от модема вне зависимости какую процедуру мы уже начали с ним проводить. Это очень усложняет написание отдельных процедур выполнения отдельных действий связанных с цепочкой обменов. И еще остается вопрос что будет если мы и модуль одновременно начали что-то передавать. Остановится ли модем и повторит передачу, или так и продолжит работать в дуплексе. Вообщем если напрявляем SMS прямо в терминал без сохранения в памяти, то можем потерять строки. Если же выбрать режим сохранения в памяти, то через некоторое количество процедур выборки и стирания ячеек при непрерывном приеме, память сильно фрагментируется и мы теряем правильную очередность считываемых SMS. Кто как выкручивается?
|