Хотите увидеть нечто любопытное? Вот, как устранили проблему «антеннагейта» на iPhone в 2010 году. 20 байт.

Контекст: в 2010 году, когда выпустили iPhone 4, пользователи заметили, что если взять телефон определённым образом, то количество полосок сигнала сети падает с 5 до примерно 2. Спустя насколько недель компания опубликовала письмо, в котором свалила вину за это на неправильную формулу: https://www.apple.com/newsroom/2010/07/02Letter-from-Apple-Regarding-iPhone-4/

Над этим письмом много смеялись (https://daringfireball.net/2010/07/translation_iphone_4), но никто не изучал различия в формуле между 4.0 и патчем в 4.0.1. В то время я был глупым восьмилетним ребёнком, но теперь уже я глупый взрослый, владеющий дизассемблером.
Я скачал обе прошивки и приступил к расследованию. Во фреймворке CoreTelephony я обнаружил многообещающий двоичный файл: CommCenter. После изучения строк в нём я убедился, что именно там находилась формула расчёта количества полосок.

Расчёт крайне прост. При преобразовании силы сигнала в полоски CommCenter загружает из памяти все пороговые значения и сравнивает их, пока не найдёт подходящий диапазон. То есть проблема не в коде...
![; Table lookup loop loc_3434e: 0003434e ldr.w r3, [r2, r4, lsl #2] ; Load threshold[bar_count] 00034352 cmp r5, r3 ; Compare RSSI to threshold 00034354 ble loc_3435c ; If RSSI <= threshold, stop 00034356 adds r4, #0x1 ; bar_count++ 00034358 cmp r4, #0x5 ; Check if reached 5 bars 0003435a bne loc_3434e ; Loop](https://habrastorage.org/r/w780/getpro/habr/upload_files/f95/2c1/619/f952c161921e176416c765cb1dbb8c8f.png)
...а здесь. Это таблица поиска. При преобразовании байтов в децибел-милливатты (дБм) мы получаем -115, -111, -107, -103 и -99 (чем ближе к нулю, тем лучше сигнал). Например, для отображения трёх полосок значение должно быть -107 или больше.


Если составить из этих значений график, то можно увидеть, что проблема в том, что значения слишком оптимистичны. Чаще всего индикатор показывает четыре-пять полосок. Но если взять телефон, то из-за столь резкого наклона кривой происходит катастрофическое снижение количества полосок с пяти до двух.

В 4.0.1 компания изменила эти значения, сделав их гораздо более плавными.


Из графика видно, что для снижения с пяти до нуля полосок требуется сильное падение сигнала. Пользователь реже будет видеть пять полосок, но и резко падать их количество тоже будет реже.

Вот и всё. 20 байт.
А, и ещё в 4.0.1 они изменили высоту полосок низкого сигнала, сделав их выше. Забавно.

Комментарии (35)

tklim
18.12.2025 23:04Зачем сюда пихать эти низкосортные статьи с кликбейтом?
Если в заголовке про 20 байт, которые изменили мир, то обычно это про 20 байт хитрого кода, который "стоит" больше этих самых байт.
И тут патч не на 20 байт, а на 5, если что.

HardWrMan
18.12.2025 23:04Больше. Но почему-то акцент именно на 5. Возможно, там просто несколько таблиц для разных диапазонов, просто показана одна.
20 это 4 по 5. Т.е., условные 2G и 3G и ещё 2 поддиапазона. Наверное.
PS А ещё перед таблицей выше различие 00 и FF. Возможно, 20 относятся только к проблеме показометра. Короче, обычный кликбейт.

nin-jin
18.12.2025 23:04Там 5 интов, не тупите.

HardWrMan
18.12.2025 23:04Да, но в заголовке - байты. А не инты или дворды. И на пикче специально обведено что различия есть даже за пределами выделенной области с 5 байтами отличий (расширенные знаки интов там одинаковые).

LinkToOS
18.12.2025 23:04Да, но в заголовке - байты.
Потому что в тексте оригинальной статьи так написано.

HardWrMan
18.12.2025 23:04И вы тоже игнорируете подчёркнутое красным на фото в моём сообщении выше? Заметьте, те же самые значения. Если бы предоставили дамп длиннее, то мы бы скорее всего увидели несколько "копий" таких таблиц.

LinkToOS
18.12.2025 23:04Патчем очевидно являлось не прямое редактирование бинарника, а изменение в исходном коде. Значит были заменены константы, в формате DWORD, а не байты.
Автор оригинала написал "20 байт". Что именно он имел ввиду - 20 констант, или участок кода в 20 байт, это надо смотреть в оригинале.
Хотя на суть это не влияет. "20 байт" это по сути синоним "очень мало". Apple решила проблему небольшим изменением в исходном коде. В чем здесь собственно кликбейтность?

LinkToOS
18.12.2025 23:04Возможно, 20 относятся только к проблеме показометра.
Да, именно об этой проблеме шла речь в статье. И ее причины могли быть разные, включая сложно исправляемые аппаратные ошибки. А оказалось что все дело в нескольких нерационально подобранных константах.
5 или 20, это сути не меняет. Все равно изменение пустяковое. Никакого вызывающего кликбейта в данном случае нет.

LinkToOS
18.12.2025 23:04Если в заголовке про 20 байт, которые изменили мир, то обычно это про 20 байт хитрого кода, который "стоит" больше этих самых байт.
"20 байт" - в данном случае означает "крохотный патч, всего лишь в 20 байт". То есть сложная с виду проблема, была решена ничтожным изменением в коде, всего лишь в 20 байт.
И тут патч не на 20 байт, а на 5, если что.
Ну значит автор "недокликбейтил". Можно было написать что проблему решили "изменив всего лишь 5 байт". Но тогда некоторые возмутились бы, и сказали что изменили на самом деле гораздо больше - 5 DWORD, а не 5 байт. А заголовок про "всего лишь 5 байт" кликбейтный.

HardWrMan
18.12.2025 23:04Повторюсь, что судя по "ушам" на фото там скорее всего как раз 20 DWORD/INT32, что выливается в 4 таблицы по 5 значений. По одной таблице на каждый диапазон (вы же в курсе, что у разных диапазонов разные частоты и чувствительность?). А так из-за маленьких значений 3 байта в каждом INT32 не меняется (и являются просто расширением знака минуса FF FF FF), то 20 байт соответствует истине. Кто-ж знал, что так совпадёт размерность и многие начнут путать?

ImagineTables
18.12.2025 23:04При преобразовании байтов в децибел-милливатты (дБм) мы получаем -115, -111, -107, -103 и -99 (чем ближе к нулю, тем лучше сигнал). Например, для отображения трёх полосок значение должно быть -107 или больше.
Забавно. Во времена iPhone 4 я как раз занимался тем, что отправлял Hayes-команды (
+CSQ), пересчитывая результат в dBm по знаменитой формуле2 * x - 113и далее в число полосочек. Ну так вот, в мануале к моему модему шла такая таблица:-120 is unacceptable -100 is poor but usable -80 is acceptable/decent -60 is good -40 is excellentА в мануале к Blackberry, куда я заглянул для сравнения, такая:
1 Bar -102 to -120 dBm 2 Bars -93 to -101 dBm 3 Bars -87 to -92 dBm 4 Bars -78 to -86 dBm 5 Bars -40 to -77 dBmЯблоки и тут решили calc
thinkdifferent?
sadPacman
18.12.2025 23:04Этим все, кто может, развлекается. Операторы тоже на своих телефонах дополнительно шкалу подкручивают - чтоб охват показать лучше реального.

anonymous
18.12.2025 23:04
vanxant
18.12.2025 23:04зато у них показывало 5 палок там, где у остальных 3. Очередное доказательство крутизны айфона)

romanetz_omsk
18.12.2025 23:04-40 - это надо прям под вышкой стоять - скорость там в сотнях мегабит будет измеряться
-120 - единицы килобит вплоть до -102 - около мегабита
(в GPS DSSS принцип работы и низкая битовая скорость дают возможность до -146 дБм принимать сигнал в режиме трекинга)
ну и промежуточные значения дают промежуточные скорости... смотря как ещё этот уровень нормируется
а так - теорема Шеннона; в принципе, современная электроника к пределу подошла достаточно близко, хорошим считается радиотракт, который 2-3 дБ разницу с теоретическим даёт.
Astroscope
18.12.2025 23:04в GPS DSSS принцип работы и низкая битовая скорость дают возможность до -146 дБм принимать сигнал в режиме трекинга
Можно и в узкой полосе просто в лоб методично "долбить" повторы для накопления и наращивать FEC - номинально SNR будет отрицательным, но за счет "математики" работать, в каких-то пределах, будет.
теорема Шеннона
Не перепрыгнешь никакими ухищрениями.

vanxant
18.12.2025 23:04Дальние космические миссии изначально работают ниже уровня шума. При широкой полосе теорема Шеннона вполне позволяет и такое. Те же Вояджеры вполне работают на технологиях 60-ых годов.

LinkToOS
18.12.2025 23:04Возможно для разных телефонов есть разные уровни сигнала, при которых они нормально работают. Зависит от электроники. Для приемников точно есть разница. Для передатчиков мощность это основной параметр, но может быть еще какие-нибудь параметры влияют (качество антенны, например).

CitizenOfDreams
18.12.2025 23:04Маркетологи: Наш новый телефон
goes all the way to elevenвезде показывает пять полосок!Техподдержка: Милорд, народ умнеет!
Astroscope
Что меня продолжает неприятно удивлять начиная с моего первого телефона, тогда еще аналогового, так это то, что во всех телефонах отсутствует стандартный S-метр, а вместо него отображение в попугаях, которые никак и ничем не нормированы, и каждый производитель их программирует как хочет.
Кто не в курсе. Стандартный S-метр состоит из девятибальной шкалы, в которой цена одного балла - 6dB (в четыре раза по мощности), а девяти баллам соответствует -93dBm (или 5uV). То есть 8 баллов это -99dBm и так далее. Все, что выше 9 баллов, обозначается плюсом к 9, например "9+30" означает 9 баллов + 30dB = -63dBm. Это невероятно удобная для человека шкала оценки уровня сигнала, которую исключительно просто выполнить программно вместо безымянных полосок, кубиков и прочей ерунды.
Ну а победа маркетинга Apple над здравым смыслом и инженерией - это вообще притча во языцех.
nnutts
Радиотракт — это очень далеко и абстрактно для пользователя, связь либо есть, либо её нет, это бинарное значение, ну а для расширения своего радиолюбительского опыта есть netmonitor.
DaneSoul
Далеко не бинарное, даже для самого далекого от техники пользователя.
Потому как связь бывает вроде как есть, но с помехами, "заиканием" и периодическими обрывами. Или при слабом сигнале на улице еще есть, а зашел в кафе и она пропала.
JBFW
Тогда уж и список БС выводить с этими параметрами, и всякие там rssi/rsrp/sinr по каждой, потому что телефон это не радиоприемник, он зацепится за соту и давай на ней висеть, хотя рядом есть получше в моменте. И помехи.
Простому юзеру это все равно непонятно, ему только и надо "работает" - "не работает". В идеале - чтобы стрелочка на карте показывала, куда идти где сигнал лучше - и всё (и то для тех случаев когда очень надо, а не ловит)
Astroscope
Зависит от разрядности ADC в вашем сознании. При желании все можно свести к двоичному "работает/не работает", но только в реальной жизни часто есть весьма широкий градиент полутонов даже в абсолютно техничных, как например электросвязь, вопросах.
Общеприянята такая шкала субъективной оценки качества связи в баллах такова:
5 - идеальная разборчивость, помехи или артефакты отсутствуют полностью либо незаметны.
4 - хорошая разборчивость; несмотря на заметные помехи или артефакты речь передается полноценно и воспринимается без напряжения.
3 - приемлемая разборчивость; речь передается с потерями из-за помех или артефактов, требует внимательного вслушивания, иногда требует уточнения и повторной передачи.
2 - неприемлемая разборчивость, различаются отдельные слова или обрывки фраз.
1 - связь номинально установлена, но фактически различить речь невозможно.
То есть можно слышать на 59+20 (читается "пять девять плюс двадцать", где 5 - субъективная разборчивость, 9+20 - объективный уровень принимаемого сигнала), а можно и на 33 (читается "три три", аналогично) - и то, и другое, очевидно относится к "связь есть". А поскольку сейчас связь это преимущественно цифра, то практически достигаемая скорость передачи данных может сильно разниться - и доли мегабита, и сотни мегабит, это все "связь есть", но только если вы неправильно его держите, то практическая применимость такой связи сильно варьируется.
nnutts
Ну я заострил, конечно, сведя пользовательский опыт к медиане, к тому же как вы заметили, в цифровой связи потери пакетов могут нивелироваться до весьма тяжёлых условий приёма. Семь три! :)
Astroscope
73!
1dNDN
Пользователю не нужно знать, сколько dBm сигнала его телефон принимает. Пользователю (за исключением малочисленных гиков) нужно знать "хороший" ли сигнал, "плохой" или "средний", а конкретные числа ему малоинтересны. Кроме того, если вы будете показывать пользователю конкретные значения уровня сигнала, то вам придётся пояснять, какой уровень сигнала будет соответствовать "хорошему" сигналу, а какой "плохому" и что для UMTS, EDGE и LTE эти уровни сигнала по разному нормируются.
Для этой задачи лучше подходит показометр.
HardWrMan
У меня с одним экземпляром китайского телефона iOcean показометр был сломан, поэтому приходилось использовать виджет Battery, который считывал у системы не процентаж, а напряжение. И на практике выучить пороговые значения напряжения батареи для оценки заряда. Ничего страшного в этом нет, просто непрезентабельно, за 1к баксов такое не продашь.
geher
Решается цветом. Красный - очень плохо, оранжевый - получше, но все равно плохо, желтый - средненько, зеленый - хорошо. Но когда надо втиснуть индикатор в крошечное поле, чтобы и видно было, и не мешался, то остается таки только примитивный показометр (можно обойтись тремя-четырьмя квадратиками).
shadovv76
Наберите код (звёздочка)3001#12345#* на iPhone и нажмите кнопку "позвонить. Хабр не дает поставить обе звездочки с коде.
vesper-bot
Хаброхак: используйте бэкслэш \* и будет вам щщастье.
jar_ohty
Если б этот стандартный S-метр был столь стандартным даже на КВ и УКВ технике, где он таки есть! Начиная с того, что 9 баллов может на УКВ означать как 5, так и 50 микровольт (первое по стандарту для УКВ -- второе как на КВ), заканчивая тем, что у Icom балл -- это не 6 дБ, а 3. А уж в портативках S-метры показывают кто во что горазд.
Astroscope
Icom пытается быть Apple. Поясню на примере. Примерно во всех портативных р/ст есть функция VOX. Даже в китайских говнофенгах по $20 в розницу, пусть и коряво реализованная (не имеет настроек длительности), но есть и работает. Есть такая функция и в Icom, например в ID-52 - цену гуглите сами, если интересно. Но вот незадача, чтобы включить VOX в Icom (вы уже нагуглили цену?), вам нужно купить специальный фирменный кабель-переходник, пассивный, без ничего, за $30 в розницу плюс доставка. Но это еще не все. Ваш новенький ID-52 продается с тонкой батареей, которой хватает на несколько часов, и зарядным устройством, которое даже эту батарею заряжает вечность. То есть вам по сути необходимо сразу докупить еще один, адекватный на этот раз, аккумулятор, и еще одно, менее медленное, зарядное устройство. В $100 вряд ли вложитесь, и это не считая кабеля за $30. Естественно, что с таким подходом у них и S-метр может быть не стандартным, а как им заблагорассудится, и все остальное.
TimsTims
Для инженера - возможно. Для 99% пользователей Айфона - нет. Возьмите первого встречного человека с айфоном я спросите его: Будет ли вам невероятно удобно оценивать уровень сигнала в -120db , или вам лучше нарисовать полоски? Большинство скажет полоски)
Ну, и вы должны понимать, что корпорация Apple никогда не допустит внедрения стандартной шкалы измерения. Она внедрила бы i-метр, там было бы 4 шкалы, а не 9, она бы его по-любому запатентовала бы (чтобы хвастаться, в айфонах 4 i-метра, а Самсунг даже его не изобрели!), и выпускала бы i-метр совместимые чехольчики по $50 повышающие значения i-метров в вашем телефоне. А каждая следующая модель Айфона изначально шла бы с +1 i-метром из коробки.
Astroscope
Хм... Похоже, вы правы. По крайней мере я инженер и, возможно вследствие этого, не пользователь Apple.
Большинство начнет что-то мычать про фан и экспириенс. Не знаю точно, что это такое, но точно знаю, что кроме айфона такого нет нигде.
Разумеется, здесь вы снова правы.
И, что характерно, это было бы чистой правдой - не маркетинговым приемом, направленным на оболванивание малограмотной аудитории, а именно тем, о чем вы говорите - буквально и непосредственно i-метром, совершенно недоступной никакому другому производителю функцией, которую многие постарались бы скопировать, но так и не смогли бы, даже Samsung, точнее они как раз в первую очередь не смогли бы. А это, разумеется, оправдывает стоимость что айфона, что аксессуаров, а что кто-то там нищеброд и не может себе позволить купить божественный айфон с i-метром, так это и понятно, техника Apple - она илитная™.
Инновации™.