Как сделать дом для ферби бум

Добавил пользователь Евгений Кузнецов
Обновлено: 17.09.2024

SofiKoshka

Как поменять характер у Фёрби Бум? Это очень просто – смотрите мое видео и читайте описание под видео. Это небольшой обзор моего питомца Фёрби Бум – здесь вы увидите как он себя ведет при разных характерах, как он играет, танцует и реагирует на проглаживания, прикосновения и музыку. Интерактивная игрушка Furby Boom имеет пять характеров: Характер Принцесса – при первом включении Фёрби Бум имеет это милый и добрый характер. Его любят все девчонки! Если ваш Furby Boom поменял характер, и вы хотите сделать его снова Принцессой, есть два варианта. Первый долгий – нужно его постоянно гладить по голове. Это занимает много времени и характер поменяется. Есть и быстрый вариант – вставляем палец в рот вашего Furby Boom, переворачиваем его кверху ногами и натягиваем хвост. Держим так несколько секунд и ваш питомец стане Принцессой. Принцессе нравиться когда ее гладят и не нравиться когда ее дергают за хвост и трясут. Характер Злой Фёрби – сделаем вашего Furby злым не сложно. Для его нужно постоянно кормить, даже если его тошнит и дергать за хвост. Сумашедший Фёрби – у него глаза разного размера и он хохочет как сумасшедший. Для того, что бы его таким сделать нужно его трясти, переворачивать и щекотать. Furby Boom Болтун – что бы перевести его в этом характер, вам придется долго с ним болтать, пока он не переключиться. Фёрби Звезда сцены - Для того, чтобы ваш Фёрби стал звездой, пойте ему песни, включайте громкую музыку. На нашем детском развивающем канале СофиКошка мы публикуем ВЛОГ Софикошки, приколы с животными и кошками, невероятное забавные детские фокусы, супер веселые челленджи, распаковку Киндер Сюрпризов и новых игрушек, детские игры, обзоры игрушек и мастер классов.


Тихим утром третьего января, когда Москва уже дремала после новогодних праздников, в нашей квартире раздался звонок в дверь. Почта наконец-то доставила посылку с новогодними подарками, заказанными на Амазоне. Среди прочего в ней находился и подарок для сына — электронный питомец Furby. Покупка его была, в общем-то импульсной. Игрушка значилась в бестселлерах новогоднего сезона и стоила относительно недорого. В сортах Furby я не разбирался, но когда-то давно что-то позитивное об игрушке слышал.

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

Надпись гласила, что для данной игрушки в AppStore можно скачать приложение, с помощью которого киберпитомца можно кормить, подавать ему всякие команды, а также переводить фразы, которые он произносил на своем языке — фурбише (Furbish), на английский. Приложение было скачано, питомец покормлен всякими съедобными и несъедобными объектами, которые он либо с аппетитом проглатывал, либо выплевывал, а переводчик с фурбиша на английский работал на удивление точно.

В общем, как вы поняли, отец семейства сделал себе на Новый Год подарок.

Команды в приложении начинались с 350-й и заканчивались 900-й, с большими пробелами в нумерации. Значит потенциально Furby умеет воспринимать гораздо большее число команд, чем есть на руках этих готовых WAV-файлов. Надо искать дальше.

Внешний вид сигнала в Audacity наводил на мысль, что используется какая-то частотная модуляция, причем шел один сигнал, дальше небольшая пауза, затем визуально такой же сигнал снова. Общая продолжительность — полторы секунды. Раз модуляция частотная, то неплохо бы взглянуть на спектр. Посмотрел график — на нем отчетливо выделялось пять пиков на одинаковых расстояниях друг от друга в районе 16-19КГц:


Башня из Мордора — это, конечно, красиво, но как это расшифровать? Покопался в Audacity еще немного и отрыл режим отображения аудио в виде спектрограммы. Вот эта картинка уже была гораздо красивее первой:



Здесь посылка расшифровывается как 3233 3012 1032 (для удобства восприятия я разбил последовательности на блоки по четыре цифры; в четверичной системе каждый такой блок — это один байт).

Дальнейший анализ команд, перевод их бинарную форму и побитовое сравнение выявило следующую структуру посылки и команды в целом:

  1. Первый байт (в примере это 3233 ), будучи записанным в бинарном виде, имеет следующую структуру: 11 1 01111 , где старшие два бита всегда равны 11 , следующий бит равен 0 для первой посылки в команде и 1 для второй, а 01111 — это сами данные (часть идентификатора команды);
  2. Второй байт ( 3012 ) — контрольная сумма, зависящая от 6 бит команды (где 1 бит — идентификатор посылки и 5 бит — сами данные);
  3. Третий и заключительный байт посылки всегда равен 1032 .

Что это значит? Во-первых, команда разбивается на два пакета по 5 бит данных в каждом. В сумме мы получаем 10-битное число, т.е. потенциальное число команд, которые может посылать или принимать Furby — 1024. Однако метод вычисления контрольной суммы вычислить не удалось. Проанализировав номера команд получилось, что я могу на основе имеющихся WAV-файлов найти 7 из 32 контрольных сумм для первой посылки и 31 из 32 контрольных сумм для второй посылки. В сумме это давало 217 потенциальных команд вместо имеющихся 76 (в виде готовых WAV-файлов), что тоже неплохо.

Написал скрипт, который генерировал по нужному номеру команды WAV-файл, подобный готовому, и начал перебирать доступные мне диапазоны команд. Как оказалось, недокументированные команды действительно были — Furby реагировал на них разным образом, пел песенки, читал рэп, чихал, имитировал сон и делал прочие незамысловатые вещи.

Это подстегнуло исследовательский аппетит, однако алгоритм вычисления контрольной суммы реверс-инжинирингу упорно не поддавался, а значит большая часть команд оставалась для меня недоступной.

Найдя наконец на какой-то помойке нужный мне .apk-файл, я залез внутрь и не увидел ни одного WAV-файла с командами, хотя в целом набор ресурсов был похож на тот, что в приложении для iOS. Раз WAV-файлов нет, то приложение как-то генерит команды на лету? Это то, что мне нужно! Декомпиляция и просмотр Java-кода дал несколько интересных зацепок, но как оказалось, вся интересная начинка, а именно генерация и анализ аудио, находится внутри нативной .so-библиотеки, в которой есть один метод, который мне был нужен, а именно private static native byte[] GenerateComAirCommand(int paramInt); .

Как же достучаться до нативного метода? Пораскинув мозгами, Штирлиц решил качать Android SDK. В итоге был собран маленький проект, в который включена сама нативная библиотека и минимальная обвязка, предоставляющая доступ к одной только нужной мне функции. Само же приложение при старте просто создавало WAV-файлы для минимально необходимого мне набора WAV-файлов, где в командах были те самые недостающие старшие и младшие 5 бит, для которых мне были нужны контрольные суммы. После некоторого курения Stack Overflow (опыта написания приложений под Android у меня на тот момент не было) приложение запустилось и сгенерировало мне на виртуальной SD-карте эмулятора набор нужных мне WAV-файлов, которые я перетащил через adb pull в нормальную файловую систему. Анализ этих файлов дал мне полное покрытие — все 64 контрольных суммы, по которым можно воссоздать любую из 1024 команд.

Возможно кому-то данная статья пригодится при реализации собственного протокола, есть ведь всякие интересные примочки для iPhone, передающие данные как раз через аудиоразъем.

Ну и, наконец, возможность управлять Furby через компьютер потенциально открывает эмоциональный метод нотификации о каких-то событиях. Например, при приходе почты от определенного адресата можно попросить Furby что-то станцевать, по приходу коммита в Git от определенного человека — помурлыкать, а от другого — издать звук менее приличный (коих у Furby есть в запасе). Правда для этого все же нужно решить уже парочку задач хардверных. Во-первых, запретить Furby засыпать через 10 минут неактивности (а активностью считается физическое тормошение — для этого у него имеется датчик положения в пространстве) и питать его не от батареек, а от блока питания или USB. Может быть на Хабре есть знатоки железа, которые захотят окончательно укротить зверька?

Сам код после некоторого причесывания выложен на GitHub. Пожелания и находки всячески приветствуются. Разумеется, вся изложенная информация и программный код предоставлен исключительно в образовательных целях.

Читайте также: