Ситуация: пользователь в настройках устройства ввел неправильный PIN-код. Или сменил SIM-карту и в устройстве оказался неподходящий к этой карте PIN. Понятно, что получив от модема +CME ERROR: 16 (incorrect password), попытки ввода прекращаем и включаем красный свисток. Допустим, я могу запомнить этот факт, чтобы не повторять попытку после передергивания питания до тех пор, пока пользователь не сменит PIN в настройках. Но пользователь может вытащить карту, вставить ее в телефон, сменить на ней код на тот, кторый прописан в устройстве и вставить карту обратно. Или со словами "Семен Семеныч! Это же не та карта" вставить другую карту. А устройство больше не будет пытаться запустить модем, ожидая смены PIN-кода. Облом.
Хотел перед вводом PIN считать IMSI и проверять на совпадение с тем, в который была неудачная попытка ввода. Это решило бы все проблемы. Но модем не может считать IMSI до ввода PIN кода.
Можно перед вводом кода дать AT+SPIC и вводить код только в том случае, если количество оставшихся попыток больше двух (больше трех же вроде не бывает?). Вроде бы тоже почти все проблемы решает - после смены PIN внешним телефоном количество попыток сбрасывается, при смене карты тоже можно ожидать, что в ней количество попыток будет равно трем. Но остается возможность, что вставили карточку в кторую уже однажды вводили неправильный PIN. И формально вроде бы есть возможность ввести код и затавить устройство работать. Но если мы будем вводить код пока количество попыток больше одной - мы оставим пользователю только одну попытку на смену кода внешним телефоном.
Как вы поступаете в таких случаях? Просить пользователя отключать проверку PIN в карточке - не выход.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|