Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Бесплатная браузерная игра «Слаймы Атакуют: Головоломка!» в жанре головоломка. Подходит для мальчиков и девочек, доступна без регистрации, на русском языке

Слаймы Атакуют: Головоломка!

Казуальные, Головоломки, Аркады

Играть

Топ прошлой недели

  • Oskanov Oskanov 9 постов
  • Animalrescueed Animalrescueed 46 постов
  • AlexKud AlexKud 33 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
278
monobogdan
monobogdan
Посты о ремонте и моддинге ретрогаджетов.
TECHNO BROTHER
1 год назад

Пишем программы на C# для одноплатников: что, как и где на примере Orange Pi One⁠⁠

В своей жизни я обожаю как минимум три вещи: это C# (как и .NET в целом), интересное железо и одноплатные компьютеры. В Embedded-системах на Linux обычно принято писать код на C/C++ для решения чувствительных к производительности задач и интерпретируемых Lua/Python для быстрого прототипирования, которые стали популярны в встраиваемых устройствах сравнительно недавно. Однако о нативной разработке под одноплатники на C# практически ничего не слышно и я решил исправить это недоразумение! В сегодняшнем материале: рассмотрим, какие платформы .NET нам доступны на одноплатниках, научимся работать с GPIO и SPI в юзерспейсе, а также напишем практическое приложение, которое реализовывает драйвер дисплея и выводит на экран определенное изображение.

❯ Предисловие


Одноплатники уже давно вошли в повседневную жизнь многих DIY-щиков, сисадминов и людей, которые интересуются мини-компьютерами. Казалось бы, одну и ту же задачу можно решить несколькими методами на самых разных языках: кто-то предпочитает писать нативный код на тех же плюсах, а особо прожженные — на Plain-C и ассемблере, стараясь получить максимальную производительность, а кто-то хочет сразу перейти к реализации своего устройства не заморачиваясь с подробным изучением того, как чип работает «под капотом» и какие шины существуют, ограничиваясь использованием готовых библиотек.

Но я лично очень люблю C# за его максимальную гибкость, позволяющую оптимизировать некоторые обращения к памяти путем получения прямых указателей на данные, умеет в удобные темплейты, а также имеет механизм для маршаллинга (прямой импорт функций из библиотек, возможность создать нативный трамплин на управляемый делегат, возможность быстрого копирования из unmanaged в managed окружение и т. п.). Потому всегда думал: почему бы его не использовать в своих embedded-проектах на базе одноплатников?

Сейчас .NET можно накатить на большинство современных одноплатников, за исключением самых слабых с 64Мб ОЗУ «бутербродом» на чипе (AllWinner F1C100s, AllWinner V3s, некоторые MStar и т. п.). Доступно два рантайма, которые предлагают разные профили и соответственно, разный функционал.

  • dotnet — официальный рантайм, который реализует профиль .NET Core (ой, простите, так уже не модно, теперь это просто .NET). Предоставляет весь современный базовый функционал дотнета вкупе с современными версиями самого C#, но в нём нет, например, Windows Forms для UI (если вы используете полноценные «иксы» и GTK), и System.Drawing для обработки графики и отрисовки текста. Это эталонная реализация дотнета и его можно без проблем накатить на любой одноплатник, для которого есть достаточно свежий Linux.

  • Mono — альтернативная реализация .NET Framework для Linux, ранее активно использовалась в Unity. В отличии от .NET Core, может работать и на более старых одноплатниках на прошлых версиях дистрибутивов Linux, в том числе и самой первой Raspberry Pi. Считается более медленной, чем dotnet, зато имеет значительно большую функциональность, почти идентичную фреймворку на Windows.


В сегодняшней статье мы будем писать программу на C# для OrangePi One, которая должна инициализировать дисплей из юзерспейса и выводить на него определенные данные. В качестве профиля используем .NET Framework 4 (да, я порой старомоден), а одноплатником выступит OrangePi One в стоковой конфигурации ядра, без правок devicetree, где по умолчанию у нас доступен spidev без аппаратных чипселектов, доступ к GPIO из /sys/ и i2cdev.

❯ Настраиваем окружение


Для начала нам нужен образ системы для нашего одноплатника. Какой — выбирать вам. Для большинства устройств на чипсетах AllWinner доступны образы с ядром 3.x, которые более стабильны, но не используют devicetree и не входят в мейнлайн и 5.x, так называемый мейнлайн, но там всё ещё есть некоторые нюансы. Я выбрал Ubuntu Xenial с ядром 5.3.5.

Теперь самое время накатить рантайм, что мы и делаем командой:

apt-get install mono-all

Обратите внимание, Mono громоздкий и с учетом всех зависимостей может устанавливаться минут 30, если у вас достаточно медленная флэшка. Всё, теперь устройство готово к запуску программ на дотнете, нашу программу можно запустить следующей командой:

mono assembly.exe

Давайте же перейдём к фактической реализации нашей программы и узнаем как работать с периферией устройства!

❯ GPIO


Начинаем с GPIO или «ногодрыга». В Linux есть удобный интерфейс, позволяющий экспортировать пины общего назначения в юзерспейс и рулить ими прямо из sysfs, в том числе и из терминала! Для реализации софтварного SPI или быстрого опроса цифровых пинов такой способ не подойдет — слишком большой оверхед, но для моргания светодиодами, обработки кнопок или… программного ногодрыга чипселектом — вполне подойдет :)

Как я и говорил выше, GPIO сначала нужно сделать видимым в sysfs — т. е. экспортировать, путём записи номера нужного пина в «файл» /sys/class/gpio/export. Посчитать ID нужного пина можно с помощью простой формулы: (позиция буквы в алфавите — 1) * 32 + номер пина. То есть, для PA10 ID будет 10. При ошибке, системный вызов close выбросит ошибку, а поток в C# — IOException.

После этого, по пути /sys/class/gpio/gpio10/ появится директория с файлами direction, куда нужно записать направление нашего пина («in» — ввод, «out» — вывод) и value, куда мы будем записывать или читать значение пина. Реализовать управление пином можно так:

Да, всё так просто! Мигалка светодиодом в нашем случае будет выглядеть так:

Переходим к чему посложнее, а именно к SPI из всё того-же юзерспейса!

❯ SPI


Для управления SPI нам потребуется вызов ioctl, который позволяет отправлять устройству различные пакеты с описанием команд. Для этого нам пригодится PInvoke:

Для каждой аппаратной шины SPI создаётся одно устройство spidev. В случае OrangePi One, по умолчанию экспортирована только одна шина (поскольку и SPI-контроллер на гребенке лишь один) — spidev0.0. Для начала открываем наше устройство для записи:

Драйвер spidev работает по принципу транзакций — вы посылаете IOCTL с запросом SPI_IOC_MESSAGE (в оригинале это макрос с возможностью послать сразу несколько транзакций в драйвер) и указателем на структуру spi_ioc_transfer с описанием отправляемых или получаемых данных, а драйвер уже сам решает что и когда отправить, при этом вызов ioctl — блокирующий, то есть управление в поток вернется только когда драйвер завершит работу. Но есть нюанс — драйвер SPI у чипсетов AllWinner не может отправлять более 128-байт (на AllWinner A10/A13 — 64-байт) данных за транзакцию, поэтому большой массив данных придётся разбивать на несколько мелких:

Уже в шоке от обилия указателей в коде на шарпе? :) Надеюсь, комментарии помогут вам разобраться.

Тоже самое и для чтения данных с шины, только вместо txBufPointer — rxBufPointer.

Пример работы прост до безобразия:

Имея GPIO и SPI уже можно переходить к реализации чего-то более конкретного!

❯ Дисплей


В качестве дисплея я буду использовать стандартную дешёвую 2.4" матрицу с разрешением 240x320 и контроллером ST7789 с интерфейсом SPI. Для использования дисплея с питанием 3.3В нужно поставить перемычку на позиции J1, как показано на фото ниже.

Для подключения такого дисплея, достаточно всего лишь 4 (5, если нужен чипселект) сигнальные линии на 40-пиновой гребенке RPi One, плюс один для ШИМ (если нужно регулировать подсветку) и два на питание. Обратите внимание, что лучше сдуть гребенку и паяться к одноплатнику напрямую — у меня из-за китайских дюпонтов постоянно помехи на дисплее и мусор на шине.

Схема подключения:

VCC -> 3.3V

GND -> Масса

CS -> PA9

RESET - PA10

D/C - PA20

MOSI - PC0

SCK - PC2

LED -> 3.3V

Начинаем с подготовки необходимых GPIO. Для управления дисплеем всегда нужен аппаратный RESET и D/C (бит команда/данные). Чипселект необязателен (его можно кинуть на массу), если это будет единственное устройство на шине, однако в случае ST7789 почему-то в таком случае нужно использовать SPI MODE 3.

Переходим к реализации коммуникации с дисплеем. Здесь всё просто — ставим CS в низкий уровень, начиная транзакцию, устанавливаем D/C в низкий уровень в случае команды, либо высокий в случае данных и отправляем байт контроллеру, после чего устанавливаем чипселект обратно в высокий уровень.

Теперь дисплей нужно инициализировать. Здесь нужно сконфигурировать регистры контроллера дисплея для установки режима адресации, цветности и порядка байт в пикселях (BGR или RGB).

Если всё сделано правильно — то после этого вы должны увидеть «мусор» на дисплее, поскольку состояние ОЗУ не определено после подачи питания на контроллер (но при сбросе содержимое DRAM останется на месте).

Теперь нам надо установить границы нашего изображения, в пределах которых работает автоинкермент контроллера дисплея. Нужно это для того, чтобы мы могли, например, пнуть уже готовую картинку в DMA-контроллер и уйти заниматься своими делами, а когда картинка отправилась — установить новые границы и нарисовать что-то ещё. В моём случае, всё рисование производится во второй буфер, который затем рисуется на дисплей — поэтому мне нужны размеры всего дисплея сразу:

После этого, достаточно лишь непрерывно слать изображение на контроллер дисплея и всё будет работать!

Поскольку ни один формат изображений не соответствовал моим требованиям (RGB565, без выравнивания), я быстренько накостылил конвертер в самопальный:

Загрузчик такого формата выглядит так:

А фактическое использование — так:

❯ Заключение

Как мы видим, писать программы для одноплатников на C# отнюдь не сложно и можно пользоваться всеми приятными фишками языка. Часть кода из этой статьи выдрана из моего сайд-проекта, о котором хочу рассказать вам в ближайшее время — поэтому местами код совсем не причесан, но надеюсь — всё было понятно :)

Также у меня есть канал в Telegram, куда я выкладываю посты с тематикой DIY, ремонта и моддинга, а также программирования под гаджеты прошлых лет и вовремя ссылки на новые статьи.

Показать полностью 22
[моё] Своими руками Гаджеты Orange Pi Raspberry Pi Программирование Net Код Embedded Ништяки Туториал Умный дом Дисплей Длиннопост
29
54
MotoElectrician
MotoElectrician
1 год назад
Мото

Добрался до мотоцикла⁠⁠

Очень плодотворные выходные)

Прошел осмотр в ГАИ и сделал диагностическую карту) Осталось сдать всё в окошко и получить номера на следующей неделе) А значит, теперь можно творить:

Установил дуги от Crazy Iron и алюминиевый кофр на 55л)

P.S.: мот Honda CB 750 Seven Fifty, немец.

Показать полностью 6
[моё] Мото Мотоциклисты Тюнинг Ништяки Мотоциклы honda Honda Длиннопост
57
kachanbest
kachanbest
1 год назад

Индастриал⁠⁠

Индастриал
Показать полностью 1
Лестница Фотография Фильтр Ништяки
8
kachanbest
kachanbest
1 год назад

Граффити⁠⁠

Граффити
[моё] Граффити Фотография Ништяки Фильтр
0
kachanbest
kachanbest
1 год назад

Психодел⁠⁠

Психодел
Показать полностью 1
Фотография Пиво Ништяки
0
294
monobogdan
monobogdan
Посты о ремонте и моддинге ретрогаджетов.
TECHNO BROTHER
1 год назад

Таких больше не делают: смотрим на шедевральный BlackBerry Priv. Как ежевичная компания сделала крутейший смартфон?⁠⁠

Давние читатели знают, что в моём блоге особое место отведено девайсам от компании BlackBerry. Канадский бренд в своё время делал очень интересные смартфоны с уникальными инженерными решениями, которые не были похожими ни на один современный смартфон. Пожалуй, только «ежевика» не боялась гнуть свою линию и, подобно Apple, плевала на все тренды, выпуская именно такие телефоны, которые считала идеальными для своих пользователей. Практически 10 лет назад миру был представлен новый шедевр BlackBerry на Android, который получил имя Priv. Год назад я пользовался Z30 и Passport как основными устройствами, а с мая по ноябрь я юзал Priv и он меня ни разу не подвёл. Чем же был крут единственный в своём роде QWERTY-слайдер на Android? Читайте в сегодняшней ретроспективной статье!

❯ Предыстория


Смартфоны компании BlackBerry всегда славились тем, что практически никогда не шли на поводу у популярных трендов своих лет. У компании было чёткое позиционирование: смартфоны бизнес-класса для занятых клиентов с удобным и шустрым интерфейсом, высокой надёжностью (как с софтварной точки зрения – нет резких зависаний, так и с аппаратной) и крайне высоким уровнем безопасности. Именно за это BB был популярен и любим в определенных кругах, а фанбаза ежевичной компании всё ещё существует даже в России!

Но давайте по порядку: если вспомнить начало-середину нулевых годов, то практически у каждого крупного мобильного бренда была своя платформа для мобильных телефонов, а порой даже не одна. Примеров масса: S-Gold и E-Gold у Siemens, S40 и S60 у Nokia и собственные платформы на базе чипсетов Philips у Samsung. BlackBerry не была исключением, но, в отличие от конкурентов, компания развивала ОС для смартфонов со своим уникальным видением. Не исключено, что при разработке вдохновлялись T-Mobile Sidekick от компании Danger, выходцы из которой затем разрабатывали Android. Программы для BlackBerry OS писались на Java (что-то типа J2SE), по аналогии с Android, с значительно более широким функционалом, чем J2ME, но при этом сохранялась совместимость и с Java-программами для кнопочных телефонов других брендов. Всего у BlackBerry было две мобильные ОС: «старая» BlackBerry OS 6-7 и BlackBerry OS 10 на базе QNX, которая используется в последних устройствах компании параллельно с Android. Десятая версия системы просто поражала своей производительностью и удобством: жесты, взятые с Meego от Nokia, очень хорошо вписывались в общую концепцию системы.

Не менее приятным было то, что BlackBerry долгое время обновляла смартфоны на базе BlackBerry OS 10. Кроме прототипов, все смартфоны на BBOS10 получали обновления до фактического закрытия BBOS. В 10.2 оставили уязвимость, благодаря которой всё ещё можно активировать устройства, повисшие на активации.

Причём главной фишкой BlackBerry во все годы являлась физическая QWERTY-клавиатура. Да, местами чуток урезанная, но в компании считали, что тактильные ощущения от физической клавиатуры лучше, чем тапы по виртуальной клавиатуре, даже с учетом появления ёмкостных тачскринов (чего стоит только BlackBerry Storm с пьезоэлектрическим тачскрином, который пытался создать эффект а-ля Taptic Engine за 10 лет до Apple!). Само собой, с учётом наличия QWERTY-клавиатур, устройства от BlackBerry замечательно подходили для мессенджеров (причём в своё время был свой собственный защищённый корпоративный мессенджер BBM), соц. сетей и даже редактирования документов на лету. И самое главное – они были удобными, а компания постоянно придумывала новые способы для управления устройством. Насколько мне известно, именно BB придумали массово использовать в смартфонах оптический трекпад, джойстик-колёсико и… QWERTY-раскладушки со слайдерами!

Устройства от BB были дорогими в обслуживании (даже замена АКБ превращается в квест, а дисплеи стоят весьма дорого), но всё же очень живучими, и практически не страдали от инженерных промахов. В моей довольно обширной коллекции BB нет ни одного девайса, который бы спустя 10+ лет не включался и не работал (при условии, что девайс не топили), а устройства со шлейфами (два 9800 и три Priv) практически не страдают от его перетирания/переламывания и работают нормально даже спустя столько времени. Чего уж говорить, даже в материале про Passport я облизывал BlackBerry за то, что они обходятся практически без клея и их смартфоны можно перебрать при наличии лишь пластикового инструмента для расщёлкивания клипс!

Ну и чего уж говорить про безопасность BlackBerry: в своё время эти смартфоны использовали… для весьма сомнительных операций, и полиция лишь с помощью канадской компании смогла сдампить флэш-память, с большим геморроем расшифровав данные. Позиция BB в отношении моддинга была похожа на Apple: секьюрбут, никакой возможности разлочки загрузчика или установки кастомов даже с выходом Android-устройств. Никто так и не смог обойти защиту ни на BB10, ни на Android-смартфонах от BB, в отличие от iPhone, где время от времени находят уязвимости в бутруме/загрузчике или где-либо ещё.

Конечно, BlackBerry были дорогими, не продавались такими большими партиями, как массовые Android-смартфоны, но и у них были свои фанаты… пусть коммьюнити и было небольшим, особенно в РФ.
Вероятно, читатель спросит, мол, если у BlackBerry было всё так хорошо, то почему мы не видим новых смартфонов от этого бренда? И здесь сложный ответ: во всём виноват бардак в руководстве. Одни люди считали, что нужно делать уклон в ту сферу, где компания уже имеет замечательную репутацию – QWERTY-смартфоны для бизнеса. А другие считали, что вытеснение QWERTY-клавиатур неизбежно и все смартфоны в будущем обзаведутся тачскринами. Истина оказалась где-то посередине: компания выпустила BlackBerry Passport, о котором я почти ровно год назад написал обзор, и Q10, который многими фанами признан как лучший смартфон BlackBerry за всё время существования компании, а также как один из самых лучших QWERTY-смартфонов наряду с такими крутейшими устройствами, как Nokia E71/E72 и Nokia E90. В свою очередь, Z10 и Z30 оказались неплохими смартфонами, демонстрирующими все фишки BlackBerry OS 10: были очень шустрыми, имели жесты а-ля Meego, поддерживали Android-приложения помимо собственных нативных.

Но время шло, и компании пришлось отказаться от собственной ОС в пользу Android из-за дороговизны разработки и поддержки и небольшого интереса у сторонних разработчиков. Да, также как и Nokia, представитель которой в своё время высказался так: «Использование Android в устройствах Nokia – это как помочиться в штаны в попытке согреться», но всё-таки выпустившая в 2014 Nokia X (это разработка не HMD, а именно Nokia), так и BlackBerry презентовала свой первый Android-смартфон в 2015 году… И имя ему было BlackBerry Priv! В компании знали, что обычным тонким смартфоном с мощным железом уже никого не удивишь. И сделала не просто QWERTY-смартфон в своём стиле… а настоящий вертикальный слайдер с полноценной QWERTY-клавиатурой и оптическим сенсором для удобного скроллинга и поддержки жестов (!).

У меня сейчас целых три Priv: все рабочие, но два из них с подбитыми тачскринами (подарок от Пикабушника) и один полностью целый (тоже подарок от подписчика). Как я уже говорил ранее, я использовал Priv как основной смартфон на протяжении почти полугода, и он мне очень понравился. Даже больше, во многих моих статьях того времени фотографии были сделаны именно на этот аппарат. Давайте же глянем на Priv подробнее!

❯ Что под капотом?


Устройства от BB всегда мне нравились своей особой продуманностью с точки зрения конструкции. Их девайсы одновременно легко перебираются, и при этом в них не используются такие инженерные решения, как, например, приклеивание задней крышки на клей. Только клипсы, только хардкор! В остальном в конструкции всё крайне логично и легкодоступно. Нет элементов, которые откровенно плохо продуманы (чем иногда страдали смартфоны от HTC – местный конструктив иногда заканчивался тем, что после переборки девайс вообще не включался).

И многие читатели скажут, мол, «девайс лишится защиты от воды в таком случае», но лично для меня это не так важно. Особенно с учётом того, что Priv'ам уже более 9 лет, и в любом случае влагозащита была бы под вопросом.

Несмотря на то, что смартфону уже практически 10 лет, его характеристики не вызывают нареканий и в целом походят на современный бюджетник за 6-7 тысяч рублей (при этом сам Priv столько стоит на барахолках):

  • Чипсет: Qualcomm Snapdragon 808, 6 ядер, два из которых построены на базе архитектуры Cortex A57 до 2ГГц, а еще четыре на базе Cortex A53, которые работают на частоте до 1.5ГГц. В качестве GPU используется Adreno 418 – очень мощный видеочип для своих лет.

  • ОЗУ: 3Гб LPDDR3 памяти на частоте 1866МГц.

  • Встроенная память: 32Гб UFS eMMC

  • Дисплей: гордость устройства. AMOLED-дисплей с диагональю 5.4 дюйма и разрешением 1440x2560 пикселей с защитным стеклом Gorilla Glass 4 и модными в то время скошенными углами.

  • Звук: 3.5мм джек, стереозвук. Я точно не уверен, но скорее всего по аналогии с Priv используется внешний серьёзный ЦАП от Wolfson + достойный усилитель, благодаря чему звук в «ушах» раскрывается полностью. За звук в смартфоне не стыдно!

  • Камера: 18Мп модуль с оптикой Schneider-Kreuznach с двойной светодиодной вспышкой и поддержкой HDR, фронтальный модуль на 2Мп. Смартфон умеет записывать видео в 4K 30FPS, либо 1080p 60FPS. Для тех лет – очень серьёзная камера, о которой мы поговорим позже

  • Аккумулятор: литий-ионный, 3410мАч, смартфон поддерживает QC2 и Qi

  • Клавиатура: QWERTY с поддержкой оптического сенсора для жестов.

  • ОС: Android 5.1 с возможностью апгрейда до 6.0.1


Нехило, да? Девайс очень мощный на момент выхода и, как многие читатели наверняка поняли, с очень горячим нравом (808 — печчч на манер FX в своё время) и безумно высокой ценой – 750$ на момент выхода в США и 949$ (!) в Канаде. Это очень дорого… но у BB была причина просить такую большую сумму.

Но это не означает, что у BlackBerry не было более дешёвых моделей. В качестве «бюджетных» устройств компания предлагала Q5, а уже после выхода Priv – Leap на BB10. Чуть позже компания TCL выкупила бренд BlackBerry и сделала Keyone и Keytwo, а также несколько других интересных девайсов «на любителя».

Давайте же познакомимся с смартфоном поближе!

❯ Используем в 2024


Пожалуй, начинать осмотр такого смартфона нужно именно снаружи. Дабы вы могли со мной хотя бы чуточку ощутить, как девайс лежит в руке, некоторая часть статьи будет выполнена в виде коротких роликов. Несмотря на достаточно большой дисплей и объёмные рамки, а также прорезь под динамики прямо на «губе» устройства, смартфон очень хорошо лежит в руке. Мне лично очень понравилось скруглённое стекло тачскрина, которое хорошо влияет на эргономику устройства, а хромированные грани на части слайдера помогают случайно не выронить девайс влажными руками.

Но самая главная фишка – это механизм слайдера. За 9 лет с выхода устройства ни на одном моем Priv не заклинивает и не заедает механизм слайдера. Он работает просто идеально, как с салона, и эта тенденция присутствует во многих устройствах BB: 9800 из моей коллекции тоже работает идеально. Скажете, мол, девайсом мало пользовались? Читатель с Пикабу где только не использовал его (и даже что-то алкогольное проливал в районе динамика), а ему хоть бы хны :)

Мы делаем вот так:

И понимаем всю крутость данного смартфона! При открытии клавиатуры, смартфон включает подсветку клавиш и прячет софтварную клавиатуру. Соответственно, когда аппаратная клавиатура спрятана, смартфон показывает программную. Из моих трёх Priv'ов два с заводскими русскими клавиатурами (девайс поставлялся в РФ, но вряд ли его можно было легко купить в ближайшем салоне связи) и один импортный. И даже здесь BB заморочились: на ру-аппаратах клавиатура из коробки понимает русский язык, а на ввезенном из-за рубежа есть транслит из коробки. Позаботились так позаботились!
Тактильно девайс очень крутой. Сзади нанесена приятная на ощупь текстура с чем-то типа софт-тач пластика, который не разложился за 9 лет с момента выхода смартфона. Эргономика весьма продумана, и смартфон удобно использовать в любом положении клавиатуры.

В целом, даже с точки зрения плавности работы интерфейса нареканий к смартфону не возникает. Он до сих пор работает шустро: да, греется, но каких-то особых лагов нет. Но пока большие вендоры делали свои оболочки поверх интерфейса Android, Priv решили использовать интерфейс чистой системы, лишь немного модифицировав лаунчер и разработав собственные приложения – DTEK (следит за степенью приватности устройства), виджеты, а также весьма и весьма удобный BlackBerry Hub, который в одном приложении собирает СМС, почту и мессенджер.

Всё работает очень приятно. Я пользовался Priv на 5.1 и на 6.0.1. Насколько же смартфон на этих версиях системы пригоден к повседневному использованию в наше время?

С мессенджерами – фактически основными приложениями для этого смартфона, проблем пока нет. И WhatsApp, и Telegram, и ВК поддерживают Android 6.0.1. Хотя сколько им осталось, конечно, большой вопрос. QWERTY-клавиатура хорошо себя показывает в мессенджерах, она очень удобная, а если нет возможности раздвинуть слайдер – выручит виртуальная клавиатура.

С сёрфингом проблема пока тоже нет. Chrome уже не поддерживает Android 6, но старые версии пока что могут без проблем отображать большинство сайтов. Хотя, конечно, через пару лет ситуация осложнится.

Нет проблем и с навигацией. Работают самые последние Google-карты и Яндекс-карты. Девайс замечательно может служить как навигатор.

А камера в этом девайсе – одна из самых сильных сторон, по моему мнению! Качество по меркам 2015 года замечательное: 18Мп матрица с оптикой Schneider-Kreuzhnach делает своё дело!

А так девайс записывает видео:

❯ Заключение


Вот таким был последний смартфон BlackBerry от той самой компании из Канады. Да, кем-то он был признан весьма спорным и странным, но лично мне он доставил огромное удовольствие от использования в качестве основного. И, конечно же, на такой девайс обращают внимания прохожие :)

А вам понравился Priv? Смогли бы с таким ходить сейчас каждый день?

Понравился BlackBerry Priv?
Всего голосов:
Смогли бы с таким ходить в 2024?
Всего голосов:

Друзья! У меня есть Telegram-канал, куда я публикую ссылки на свои новые статьи, различные советы по ремонту, моддингу и программированию для гаджетов прошлых лет, а также просто свои мысли и анонсы. Кроме того, читатели долго просили меня сделать YouTube-канал, дабы я дублировал туда некоторые платиновые материалы, записывая видеоролики. Сегодня-завтра выйдет первое видео (возможно с не самым лучшим продакшном, но я стараюсь прокачиваться как автор со всех сторон), так что если не хотите пропустить — подписывайтесь!

Статья подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, чтобы не пропускать новые статьи каждую неделю!

Показать полностью 15 5 2
[моё] Опрос Смартфон Гаджеты Обсуждение Ништяки Android Blackberry Priv Телефон Подарки Мобильные телефоны Длиннопост Видео YouTube
58
44
monobogdan
monobogdan
Посты о ремонте и моддинге ретрогаджетов.
Android
1 год назад

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

И снова ежемесячный пост! Как многие пикабушники уже вероятно знают, я пишу статьи об оживлении, моддинге и программировании под различные старые девайсы! Но некоторые девайсы, как, например, дешевые китайские подделки порой найти проблематично: большинство оказалось на свалке, а на онлайн-барахолках их не найти из-за запрета на контрафакт. Для будущего материала, я ищу китайские подделки из начала 2010х: в основном китайские копеечные игровые консоли, Android-реплики айфонов, айпадов, макбуков, Samsung Galaxy, Nokia Lumia/HTC/Sony Xperia и другие подделки на популярные бренды. Можно невключайки/нерабочие/зависающие, почти любое состояние - все постараюсь оживить и поднять. Что с ними происходит потом? Смотрите сами: Альтернативное Apple'водство: Как и зачем я променял оригинальный айфон на китайский нерабочий 14 Pro Max, На помойку? Никак нет! Пишем нативные приложения для китайских кнопочников, Сам себе Linux-смартфон: Выкидываем Android из старого Fly и пилим свою оболочку, Сам себе экосистема, портируем свежий Android на NoName-смартфон, на грани отвала eMMC: переносим Android на MicroSD, накатываем чистый Android на китайский iPhone 5s, бомж-гейминг за копейки с отвальной консолью. Так что не сомневайтесь, девайсы попадают в хорошие руки :) Все стараюсь поднять, оживить и написать про них материал! Есть что-то подобное? Пишите в комменты или в тг @monobogdan. Спасибо!

Интересный материал в рубрике с китайскими смартфонами?
Всего голосов:
Показать полностью 3 1
[моё] Опрос Покупка Гаджеты Смартфон Китайцы Китай Китайские смартфоны Телефон Девайс Статья Сбор Ништяки Донат Длиннопост
35
307
monobogdan
monobogdan
Посты о ремонте и моддинге ретрогаджетов.
TECHNO BROTHER
1 год назад

Делаем из битого планшета одноплатник: подключаем Android-устройства к дешевым микроконтроллерам через UART⁠⁠

В наше время, из-за санкций одноплатники стали стоить каких-то «конских» денег. Даже б/у RaspberryPi Zero стоит 2-3 тысячи рублей на барахолках, что, мягко скажем, не совсем лояльная цена для «самого дешевого одноплатного компьютера в мире». Конечно, Orange Pi Zero всё ещё можно купить в пределах 1.500-2.000 рублей, но как по мне и эта цена не слишком лояльна за те характеристики, который предлагает такой одноплатник. С другой стороны, Android-планшеты 10-летней давности продаются на барахолках по 100-300 рублей, что выглядит гораздо привлекательнее, причём на некоторые устройства практически без костылей можно установить полноценный дистрибутив Linux! Вероятно, многие читатели скажут мол «автор бомж» и будут правы: ведь в рамках этой статьи, я хочу рассказать о том, как использовать полурабочий древний планшет в качестве полноценного одноплатника путём подключения его к микроконтроллеру и выводу GPIO! Сегодня мы с вами: узнаем, как подключить микроконтроллер к шине UART в планшете и научимся работать с последовательной шиной в Android прямо из Java и нативных программ. Интересна моя концепция антикризисного одноплатника? Тогда добро пожаловать под кат!

❯ Зачем это нужно?


Пожалуй, нельзя сказать, что подобная концепция пристраивания старых планшетов — вопрос исключительно цены. 2-3 тысячи рублей не такие уж и большие деньги и при желании можно купить хотя-бы Б/У, но всё таки полноценный одноплатник с нормальной GPIO-гребенкой. Однако здесь стоит вопрос не столько дешевизны, сколько E-Waste: зачем выкидывать в помойку потенциально рабочие планшеты с живым процессором, если их можно пристроить куда-то ещё?

На самом деле, планшеты с ROOT-доступом уже из коробки могут выполнять весьма полезные задачи, как, например, хостинг http-сервера для домашней страницы, работать как панель с часиками и погодой, или, например, работать в качестве HMI-панели для оформления заказов в шаурмечной. Кроме того, многие планшеты на базе смартфонных чипсетов (MediaTek, Spreadtrum) имеют полноценный Bluetooth-модуль, что позволяет «подружить» планшет с микроконтроллером через радиоканал, что значительно расширяет возможный спектр применений.

Преимуществ у такого подхода много: у «пожилого» планшета уже есть большой, достаточно качественный (хороший TN, либо даже IPS) дисплей с тачскрином, который поддерживает мультитач, GPU для вывода 3D-графики, 3.5мм для вывода звука + встроенные динамики, а также весьма неплохое, по сравнению с дешевыми одноплатниками, железо. Звучит весьма вкусно для цены в 300 рублей: собрать хоть немного похожую конфигурацию на базе RPi выйдет в 10-15 тысяч рублей (учитывая дороговизну MIPI-матриц с тачскринами + цену самой «малинки» и обвязки для аудиотракта).

Но при всех перечисленных достоинствах, атрибутом любого полноценного одноплатника является наличие GPIO — и даже здесь мы сможем с вами выкрутится! Первый способ, о котором я чуть выше вскользь рассказал, позволяет реализовать общение с МК и «ногодрыг» через BT-радиоканал, но минусы такого подхода очевидны (МК с BT дороже, радиоканал потребляет дополнительную энергию, некоторые могут посчитать BT небезопасным). Однако есть и второй подход, который заключается в использовании диагностических пятачков UART на плате устройства для наших личных целей!

С таким подходом можно использовать как «голый» Linux, используя концепцию, которую я представил в этой статье, так и взаимодействовать из Java-приложений для Android (что даёт уже, как минимум, удобный GUI-фреймворк). Сегодняшняя статья будет «без воды», только чистая конкретика, поэтому давайте перейдем к реализации!


❯ Подготовка


Как я уже говорил выше — в рамках данной статьи мы рассмотрим использование UART в планшете для наших собственных целей. UART — это двунаправленная полнодуплексная цифровая шина, которая позволяет обеспечить стабильную передачу данных при относительно невысокой скорости, измеряемой вбодах. То есть, быстро стримить картинку с её помощью вы не сможете, но сможете, например, получить состояние входов МК, прочитать что-то на шине I2C, используя мост UART -> I2C или, например, прочитать показания датчиков, которые МК предварительно опросил.

Сама по себе концепция очень простая: многие китайские производители планшетов и смартфонов не только разводят UART в виде отдельного пятачка на плате, но и подписывают его, задействуя UART-канал как вывод для логов ядра, а иногда и предоставляя доступ к рутовой консоли! В свою очередь, из юзерспейса мы можем получить доступ к UART с помощью устройства/dev/ttyS<x>на подавляющем числе чипсетов и/dev/ttyMT<x>на MediaTek. Однако учтите, что в некоторых случаях придется патчить загрузчик, дабы редиректнуть логи ядра в /dev/null.

Однако наличие UART на плате — не всегда признак того, что он сконфигурирован в системе верно. Например, на смартфонах с чипсетами SC6820 нормально завести UART я так и не смог, а на некоторых устройствах на базе MT657x нужно патчить загрузчик, дабы он «увидел» нужный канал UART! В моём случае, героем статьи стал планшет Prestigio, у которого отказал тачскрин, но был доступен UART:

Конкретно в моём случае, после установки последней официальной прошивки планшет перестал слать логи на UART и устройство /dev/ttyMT3 оказалось доступным для наших операций, в вашем же случае может потребоваться настройка devicetree, или просто патчинг загрузчика, дабы редиректнуть консоль на другой вывод UART. Кроме того, необходимо обязательно получить root-доступ хотя-бы к adb shell, поскольку доступ к /dev/tty устройствам возможен только от имени суперпользователя. Как же проверить UART на возможность чтения/записи? Сначала нам необходимо взять ESP32 или любой UART-USB преобразователь, припаять сигнальные линии RX/TX и использовать любую программу для работы с последовательным портом, например Putty. Заходим в adb shell, и пишем что-нибудь в консоль:

Вуаля! Всё работает :)

Вуаля! Всё работает :)

Работает? Замечательно, значит мы сможем использовать планшет вместе с микроконтроллером! Переходим к практической реализации нашего приложения!

❯ Используем из Java


Я специально решил выделить для Java-подхода отдельный раздел, поскольку просто взять и открыть /dev/ttyMT3 с помощью FileInputStream не выйдет. Дело в том, что даже несмотря на наличие root-доступа, по факту ни одно Android-приложение его не имеет (за исключением подписанных системных в папке /system/app/) и для всех операций, требующих повышенных привилегий, либо распаковывают и запускают внешнюю нативную программу из под суперпользователя, либо с помощью специального костыля с запуском sh-программ читают/пишут нужные блочные устройства сами. Связано это с тем, что все Android-приложения работают в хост-процессе app_process, который форкается (отпочковывается) от «главного» процесса, который запущен из под «простого» пользователя, который не находится в группе system.

Здесь концепция также очень простая: su имеет аргумент -c, который позволяет запустить команду от имени root-пользователя и возвращает объект процесса, дабы мы потом могли перехватить stdout:

Таким образом, для чтения текстовых данных из UART'а нам достаточно лишь периодически «слушать» stdout команды cat и обрабатывать данные:

Костыль, но со вкусом :) Если вас не устраивает такой подход или ваше приложение значительно более комплексное, вы можете использовать UART и из под нативных программ.

❯ Используем из C


Работа с последовательными портами в Linux не отличается от работы с любыми другими файлами и устройствами: вызовов open, read, write и close обычно хватает и лишь иногда к ним в довесок нужен ioctl.

int fd = open("/dev/ttyMT3", O_RDWR);
int result = write(fd, command, strlen(command));

Для работы с терминалом необходимо использовать модуль termio который предоставляет все необходимые структуры для настройки режима работы терминала, в т.ч и бодрейт. Дело в том, что изначально последовательное устройство настроено на режим работы в качестве терминала, т.е драйвер отдаст данные только после того, как устройство на UART пошлёт \n, или превысит размер внутреннего буфера для сообщения. Если вам нужно работать с бинарными данными и получать их «на лету» — необходимо настроить последовательный порт в «binary» режим:

tcgetattr(modemFd, &tio);
tio.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
tio.c_oflag &= ~(OPOST);
tio.c_cflag |= (CS8);
tio.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
tcsetattr(modemFd, TCSAFLUSH, &tio);

Если же вам достаточно текстового терминального режима, то можно продолжить как есть и использовать fgets, fscanf и прочие удобные функции из libc! О том, как собрать нативную программу для смартфона и как вообще выбросить Android из него, читайте в моей отдельной статье.

❯ Заключение


Вот таким образом можно использовать проводную шину в планшете для собственных нужд! Как видите, совершенно ничего сложного и используя эти наработки, я реализовал уже не один проект! Надеюсь, материал вам был интересен и полезен :) Пишите своё мнение, можно ли использовать дешевые планшеты по 300 рублей в качестве одноплатников?

Статья была подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, дабы не пропускать новые статьи каждую неделю! Ну а больше подробностей о будущем контенте, как обычно, в первом комменте! Также у меня есть свой Telegram-канал, куда я выкладываю свои мысли, советы по ремонту и моддингу различных гаджетов, а также вовремя публикую ссылки на новые статьи!

Показать полностью 10
[моё] Программирование Гаджеты Смартфон Linux Программа Android Java Планшет Своими руками Моддинг Девайс Ништяки Одноплатный компьютер Длиннопост
36
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии