Для начала, методики (но не конечные решения!) описанные в прошлых связанных статьях для
Thinkpad
T530 вполне себе работают, поэтому стоит начать с ознакомления с ними:
Официальные Fn+ комбинации
Комбинации для
T530 работают и ровно в такой же механике. Вообще вот руководство, так сказать первоисточники, где это всё описано:
Для начала небольшие пояснения для следующих кнопок:
Комбинация |
Название |
Код |
Fn+F9 |
Открытие/свёртывание центра уведомлений |
XF86Messager |
Fn+F10 |
Принятие входящих вызовов в Microsoft Teams |
XF86Go |
Fn+F11 |
Отклонение входящих вызовов в Microsoft Teams |
Cancel |
Fn+F12 |
Настраиваемая |
XF86Favorites |
Все кнопки отлично распознаются и можно куда-то назначить.
А вот теперь более интересные:
Комбинация |
Название |
Код |
Примечание |
Fn+PrtSc |
Открытие инструмента «Ножницы» |
Launch2 |
Т.е. на самом деле - обычная кнопка общего назначения |
Fn+4 |
Спящий режим |
XF86Sleep |
В дополнение к основной |
Fn+Left |
Переход к началу |
Home |
Это просто подарок для навигации какой-то |
Fn+Right |
Переход в конец |
End |
См выше |
Для работы с SysReq - смотрите
прошлую заметку для T530.
Управление громкостью, отключением микрофона, динамиков, управление яркостью дисплея, отключения WiFi, уход в сон и пробуждение (однократное нажатие Fn) - как минимум в KDE Plasma заработало из коробки в том числе с сопутствующими OSD.
По аналогии как тут:
Что хорошо, за весь срок существования заметок и 10 лет существования ноутбука, даже номера event не поменялись: для встроенной клавиатуры остался 3, для Fn+ - 5.
На P15gen2 я решил не переносить PrtSc, так как отдельной кнопки Launch1 больше нет, но так как на этой же кливише появилась альтернативная функция, то решил из неё как раз сделать Menu. Все действия уже описаны, результирующий /etc/udev/hwdb.d/70-keyboard.hwdb
получился такой:
# thinkpad_acpi driver
evdev:name:ThinkPad Extra Buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*
KEYBOARD_KEY_46=compose # Override Launch2 (prog2) to Menu (Compose): on the TP P15gen2 - Fn+PrtScr
Прочие Fn клавиши тоже можно переназначить по желанию. Главное его заиметь или придумать, куда приспособить. Я пока не придумал.
Снега в декабре в городе навалило так, что до сих пор аукается на дорогах Владивостока, поэтому возникло жгучее желание сходить потропить наши хребты в снегоступах. Кинул клич, в ответку от Коли Живова получил контр-приглашение на снегоступинг 7-8 января, но 8 были уже запланированы мероприятия, которые ну никак не получалось перенести. В результате согласились идти 4-5 января Саня, Юра и Макс. Но 3 числа Саня отвалился - внезапно заболел. Остался я, Макс и Юрка. Так и пошли.
Перечитывая
С юга на север по Ливадийскому хребту при планировании маршрута разогнался на 40 км за два дня, маршрут:
74км-г.Суходол-хр.Большой Воробей-г.Туманная-р.Тигровая-(выход рядом)Бровничи-Фридман
Резервными вариантами рассматривал выход:
- в Тигровой
- по классике на 82км
Результат вышел куда более скромным, но не менее греющим душу:
74км-г.Суходол-хр.Большой Воробей-г.Туманная-серпантин-82км

Опять и снова :)
Альбом:
https://disk.yandex.ru/a/3Gpki_UxTvZXjQ
Фото под катом
Жжот дурилко. Все помним про вызов функции vs конструирование объекта:
struct foo { foo(int) {} };
int main() {
foo(3); // временный объект
}
vs
void foo(int){}
int main() {
foo(3); // вызов функции
}
Теперь такое:
struct foo {
foo() = default;
foo(int v) : x(v) {}
int x = 1;
static int s;
};
int foo::s; // где храним
int main() {
foo(s);
}
На правах заметки.
Intro
В народе этот чип называют “клоном” Atmega328P или “антикризисным Arduino” (ну не сам чип, а те платки, которые доступны на AliExpress).
Даташит смотреть в разделе
“Полезные ссылки и документация”.
Клоном оно не является. Это самобытная разработка, которая в некотором отношение по пинам (в некоторых режимах) совместима ATmega328P. При этом, если, к примеру, плату с Али зашить обычным примером я миганием светодиода, собранным для BSP Arduino Nano, то диод будет мигать неадекватно. Т.е. для этого контроллера нужно свой пакет BSP, как, к примеру, для совсем “левых” контроллеров, типа ESP32.
Т.е. из схожего:
- система комманд и ассемблер, тулчейн
- корпус и совместимость пинов, при этом, LGT8F328 может заменить 328 мегу, то обратная замена не всегда возможна (далее).
Основные особенности LGT8F328P:
- Питание от 1.8-5.5В для всех частот
- Максимальная частота на внутренней RC цепочке и внешнем кварце до 32Mhz
- Нет фьюзов, как следствие, все настройки периферии нужно делать в стартовом коде, аналогично “взрослым” контроллерам. Отсюда и необходимость в отдельном “ядре” (BSP - Board Support Package из “взрослой” терминологии) для Arduino IDE.
- Особенности BSP для Arduino IDE, что прошивается только на 57кбод.
- Дополнительный третий 16 битный таймер. И все таймеры существенно проапргейжены в плане максимальных частот PWM и числа ног с PWM.
- Появился ЦАП
- АЦП тут уже 12 битный, а не 10 битный. Хотя, по отзывам, реальная точность осталась в районе 10 бит
- Нет EEPROM. Но он может программно эмулироваться на внутреннем флеше. Т.е. - больше EEPROM - меньше на код.
Хорошее ревью с примерами кода:
Обзор клона меги328 -LGT8F328P
В общем, контроллер новый, самобытный. Для домашнего использования очень интересен, но для промышленного использования я бы поостерёгся использовать.
Для домашнего использования хорош и тем, что можно купить на Али версю платы Нано за ~115 рублей с бесплатной доставкой против 250 рублей за аналогичный Nano v3. Плюс платы с односторонним расположением элементов, что позволяет монтировать на плату в виде модуля.
Официальный тулинг
Статья:
LGT8F328P Arduino совместимая плата. Программирование на чистом Си
Ну а инструмент называется: LGTSDK Builder
Поддержка в Arduino IDE
Теперь про интеграцию в Arduino IDE. Как я писал выше - нужен свой BSP. Как минимум настройки для PLL и EEPROM при старте.
Я нашёл более-менее работающих два:
-
https://github.com/dbuezas/LGT8fx
-
https://github.com/nulllaborg/arduino_nulllab (альтернативный репозиторий:
https://gitee.com/nulllab/nulllab_arduino)
Рекомендую ознакомиться так же со ссылками на страницах обоих BSP. Можно найти полезного.
LGT8fx
Рекомендую именно его на момент 2024.11.26 (актуальная версия: 2.0.7), до этого рекомендовал Nulllab
Ставим через Board Manager в Arduino IDE. В File → Preference, Settings tab добавляем:
https://raw.githubusercontent.com/dbuezas/lgt8fx/master/package_lgt8fx_index.json
На момент первоначального составления заметки была актуальна версия 1.0.5 (оригинальный BSP LGT8fx
выглядел заброшенным.) и была доступна
неофициальная 1.0.6 (ака v1.0.7 pre release), которая:
- Работает с платами с внешним
16Mhz кварцем
- Реализуют классический Arduino интерфейс для работы с EEPROM.
Естественно ставить её нужно было вручную. Сейчас же (2023.06.23) актуальная версия - 2.0.6, уже содержит вышеупомянутые доработки.
Для установки в Board Manager вводим:
И ставим “LGT8fx Boards”
В Tools → Board → LGT8fx Board выбираем единственную (2023.06.25) борду: LGT8F328. Собственно на ней и собраны популярные “клоны” Ardunio Nano и Arduino Pro Mini.
После этого выбираем в Tools → Variants выбираем:
Из настроек полезные, по сути, только частота работы и что используется: внутренний клок или внешний кварц.
Внешний кварц понятен, есть три варианта (Tools → Clock Source):
- External 12Mhz
- External 16Mhz
- External 32Mhz
Внутренний клок всегда один (там же, Tools → Clock Source):
А вот нужную частоту работы уже догоняем делителями (Tools → Clock Divider): 1, 2, 4, 8, 16, 32
Я не разбирался, работают ли делители, при выборе внешнего кварца, но для внутреннего клока они точно работают.
Следующие настройки, скорее всего, никогда не придётся менять:
- Upload Speed: 57600, при другой у меня ничего не прошивалось, но зависит от прошитого FSBL (aka просто загрузчик, позволяющий обновляться по UART).
- SERIAL_RX_BUFFER_SIZE: 64, скорее всего сделано как какой-то WA. Не вникал.
Настроек для размера EEPROM нет, он есть всегда и его размер - 1 кБ. Если нужна гибкость в настройке - используйте Nulllab BSP,
Ну и стоит отдельно упомянуть, что этот BSP - это развитие “официального” оного:
https://github.com/LGTMCU/Larduino_HSP. Можете и его попробовать. В некоторых источниках есть и на него ссылка.
Nulllab
В целом можно и его рекомендовать: широкий набор источников клока, делителей (косвенно, через указание конкретной частоты) и возможность настройки EEPROM. Но LGT8fx Boards очень оживился, а этот как был версией 1.0.3 на момент составления заметки (2022.12.04), так и остался на момент правки (2023.06.25).
Ставим через Board Manager в Arduino IDE. В File → Preference, Settings tab добавляем:
https://raw.githubusercontent.com/nulllaborg/arduino_nulllab/master/package_nulllab_boards_index.json
Nullab в Board Manager ищется по словам… nulllab :-) При выборе борды нужно выбрать:
- Tools → Board → Nulllab AVR Compatible Board → DIY Board
При этом станет доступен полный “тюниг” для всех борд:
- Tools → CPU Frequency: 16 Mhz
- Tools → Clock Source: External (16 Mhz)
- Tools → EEPROM size: от 0 до 8кБ с шагом x2
- Tools → Upload Speed: 57600 - это важно, иначе не будет шиться (см выше)
Как и LGT8fx Boards - это развитие “официального” BSP:
https://github.com/LGTMCU/Larduino_HSP.
Покупка
Естественно - Aliexpress. Я брал:
- Nano + TypeC:
https://aliexpress.ru/item/1005004234919226.html, на момент составлении заметки - ~118руб
- в этой версии платы на RX/TX нет LED и они не мешают работе PWM на Timer3 / OC3A (используется D1, он же RX). Но ни в коем случае нельзя включать аппратный Serial при включенном PWM.
- Pro Mini:
https://aliexpress.ru/item/33003833124.html
- тут две версии под 3.3В и 5В, плюс отдельно сам контроллер
- цена на момент заметки: ~63 руб за 5В версию. 3.3В версия чуть дороже
- UNO: TBD пока сам ищу. Ниже варианты, не проверенные:
Полезные ссылки, обсуждения и документация
Табличка, где сравнивается скорость выполнения в тактах некоторых ассемблерных команд в обычном AVR и в LGT8 (по данным по ссылке 1):
Instruction Function Cycle of AVR Cycle of LGT8XM
ADIW Add immediate to word 2 1
SBIW Subtract immediate to word 2 1
MUL/S/SU 8bit multiply 2 1
FMUL/S/SU Fractional multiply 2 1
RJMP/RCALL Relative jump/call 2/3 1
IJMP/ICALL Indirect jump/call 2/3 2
RET/IRET Return 4 2
CPSE Compare, skip if equal 1/2/3 1/2
SBIS/SBRS Skip if set 1/2/3 1/2
SBIC/SBRC Skip if cleared 1/2/3 1/2
LD/LDD Load indirect 2 1
ST/STD Store indirect 2 1
LPM Load program memory 3 2
PUSH/POP Stack access 2 1
Другие MCU от LGT в платах Arduino и их сравнения:
Вместо вводного слова: начала писать аж 16 сентября, а собрался закончить только 27 ноября (я появилось только 28)…
Короткое интро: на данный ноут больше не выпускают оригинальных батареек и купить, соответственно, их не возможно. А можно купить что-то на Aliexpress или (дороже и, скорее всего, хуже) на локальных площадках.
Но покупка на Ali тоже лотереей: первая батарея нормально себя вела, но кончилась очень быстро. Вторая, пришедшая, буквально недели три назад, прекрасно разряжалась, но отказалась заряжаться в моём нотбуке. Спор не заводил, китаец предложил выслать ещё одну батарейку, правда на 6 ячеек. К слову, прошивка, которая убеждает EC принимать любую батарейку, а не те, что в белом списке, тоже не помогла.
Текущая батарейка, заказанная под видом оригинальной (вот яж лох), ещё дышала (но отрубалась резко на заряде от 10% до 30%), поэтому решил попытаться что-то с ней сделать: у меня были контроллеры от старых, но рабочих батарей.
Кому интересно - под кат.
Они же:
В общем речь о переходных отверстиях по краю платы, которые “разрезаны” пополам и используются для краевого монтажа собранного модуля на другую плату…
Yet another contribution. В общем :)
Зашёл очередной фикс. Поломашка в master, и скорее всего никого пока не задела. Кроме отмороженных, кто сидит на ночных сборках или собирает сам:
Больше фиксов хороших и разных!
UPD: и практически следом:
Наконец-то починили. Джва года ждал:
В Konsole есть такая возможность: при возникновении сигнала в терминале, который генерируется, например, так:
или так:
сделать какие-то действия.
Настраивается: Меню (если выключено: Ctrl+Shift+M) → Настройка → Настроить уведомления…
Нас интересуют:
- Сигнал в активном сеансе
- Сигнал в неактивном сеансе
Что бы выделить терминал в панели задач, нужно включить пункт “Выделить программу в панели задач” и нажать Применить или Ок.
Собственно, что это даёт: когда сигнал возникнет, то Konsole выделит, подсветит кнопку приложения в панели задач, примерно так:

При этом сделает это на текущем экране, вне зависимости от того, на каком рабочем столе находится приложение. А если кликнуть по ней, то автоматически активируется окно с переключением на соответствующий рабочий стол.
Плюсом, что сигнал может быть и на удалённом сервере, при подключении через SSH: терминал обрабатывает событие локально.
А удобство в том, что можно запустить длительный процесс сборки и переключиться на чтение документации или кода. Или котиков в интернете смотреть. Не важно, главное, что окно покажет, что процесс завершился и стоит глянуть результат.
Запуск примерно так:
Не стоит ставить &&
, или ||
: мы же хотим среагировать при любом коде возврата make
? Но если нужно именно для успешного или наоборот неуспешного завершения сигнализировать, то карты вам в руки.
На днях поборол жабу, и позволил себе купить на замену стокового системного HDD HGST Travelstart Z7K500 / 500Гб, новый SSD Samsung SSD 870 EVO.
Первое впечатление - систему стероидами накачали. А дальше - увлекательная процедура миграции нужного и не очень в новое окружение.