DIY-роутер GL-MT300N-V2. Часть 2 - написание и сборка собственной программы под OpenWRT
Итак, будем писать свою программу на Си под OpenWRT. Отличий от обычного программирования под UNIX или Linux здесь, в общем-то, нет, за одним исключением: процесс компиляции программы осуществляется не на роутере, а на компьютере, в среде OpenWRT Buildroot. То есть, сначала нужно скомпилировать toolchain и прошивку, а потом уже можно собирать свою программу.

DIY-роутер GL-MT300N-V2. Часть 1 - знакомство и сборка кастомной прошивки для переопределения функции GPIO-порта
Есть такой замечательный DIY-роутер GL-MT300N-V2 от GL-iNet. Он интересен тем, что позволяет радиолюбителю получить доступ к портам ввода-вывода GPIO (они выведены на плату) и совместим с роутерной ОС OpenWRT. Плюс, имеет всего один LAN-порт. Смекаете? Да, его можно и нужно использовать для удалённого управления периферией по Ethernet и создания VPN-туннелей.

Патчи для утилит find и cp во FreeBSD, реализующие полноценную работу с расширенными атрибутами
Механизм расширенных атрибутов во FreeBSD (extattr) позволяет управлять дополнительной информацией, связанной с файлом или директорией. При помощи семейства команд setextattr, getextattr и rmextattr можно редактировать расширенные атрибуты файла, принадлежащие к двум пространствам имён: системному и пользовательскому. Редактирование пользовательских атрибутов может пригодиться для классификации файла: добавления описания, ключевых слов и других метаданных.

[Сниппеты Qt] Как открыть документ при запуске своей программы
Путь к открываемому файлу передаётся в качестве первого параметра при запуске соответствующей программы. Кроме имени файла в открываемую программу можно передать, например, номер документа, который должен открыться при старте программы (если документы берутся из, скажем, базы данных). В программе нам нужно просто получить передаваемый ей параметр и должным образом обработать его.

[Сниппеты Qt] Получение списка всех COM-портов
Пример получения списка всех доступных COM-портов.

Список всех COM-портов в системе


QT += serialport #В pro-файле

-----

#include <QSerialPort>
#include <QSerialPortInfo>

...

foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
ui->comboBox->addItem(info.portName(),info.portName());
}


[Сниппеты Qt] CRC16 для ModBus
Потребовалось вычислять контрольную сумму по алгоритму CRC для пакетов данных, передаваемых по протоколу ModBus. В интернете есть функция вычисления CRC16, но её пришлось немного переделать, чтобы результат получался с нужным порядком следования байтов (протокол ModBus требует BigEndian).

CRC16 с BigEndian для ModBus в Qt

#include <QtEndian>

...

QByteArray MainWindow::CRC16_ModBusRTU(QByteArray buf, quint16
...

[Сниппеты Qt] Раздвижное меню (слайдер)
Понадобилось мне написать программу для управления контроллером при помощи компьютера по протоколу ModBus. Встал вопрос - куда вынести меню настроек подключения? Хотелось сделать это меню ненавязчивым и симпатичным. Вот тут-то я и вспомнил про концепцию слайдеров и реализовал раздвижное меню. (изображение) (изображение) Чтобы сделать такую красоту, нужно поместить на форму компонент QFrame и кнопку QPushButton.

[Сниппеты Qt] Кнопка с фиксацией
Кнопку с фиксацией в Qt сделать очень просто: для этого нужно использовать компонент QPushButton с включённым свойством checkable (в Qt Creator задаётся в разделе QAbstractButton свойств элемента). Чтобы определить текущее состояние кнопки (зажата или отжата), следует анализировать сигнал toggled. Вот пример работы с фиксированной кнопкой.

Кнопка с фиксацией в Qt...