воскресенье, 17 марта 2013 г.

Мигаем подсветкой клавиатуры

Дело было вечером, делать было нечего. Купил я как то ноут Asus N56VM, в нем есть подсветка клавиатуры и подумалось мне, что просто подсветка это не интересно.
Что можно сделать с подсветкой? - Правильно! Помигать!
Вот и взялся я посмотреть как включается подсветка. После некоторых поисков, локализовал управление подсветкой с помощью клавиатуры в "C:\Program Files (x86)\ASUS\ATK Package\ATK Hotkey\HControl.exe". После дебагинка в IDA были найдено следующие:
что подсветка включалась - выключалась с помощью вызова DeviceIoControl с определенными параметрами. В результате была написана функция включения и регулировки подсветки.
        public static int GetLevel()
        {
            return Level(0, 0x424B4C47);
        } 
        public static int SetLevel(int level)
        {
            return Level(level, 0x424B4C53);
        }
        public static int Level(int level, int code)
        {
            byte[] outBuffer = new byte[0x300];
            int[] inBuffer = new int[6] { 2, 0, 1, 8, 0x040000, 0x80 };
            inBuffer[1] = code;
            inBuffer[5] = level | 0x80;
            bool result = false;
            int bytesReturned = 0;
            SafeFileHandle _hdev = new SafeFileHandle(CreateFile("\\\\.\\ATKACPI", 0xC0000000, 3, IntPtr.Zero, 3, 0, IntPtr.Zero), true);
            if (_hdev.IsClosed | _hdev.IsInvalid)
            {
                WarningMessage("Error opening device");
                return -1;
            }
            unsafe
            {
                fixed (byte* p1 = &outBuffer[0])
                {
                    fixed (int* p = &inBuffer[0])
                    {
                        result = DeviceIoControl(_hdev, 0x00222404, (IntPtr)p, 0x18, (IntPtr)p1, 0x300, out bytesReturned, IntPtr.Zero);
                    }
                }
            }
            if (result == false)
            {
                int error_code = Marshal.GetLastWin32Error();
                WarningMessage("error code: " + error_code);
                return -1;
            }
            if (code == 0x424B4C47)
            {
                return outBuffer[0x10];
            }
            return level;
        }
 Консольную утилиту для регулировки и мигания подсветки для Asus Nx6 можно скачать тут

 Но просто мигать подсветкой не интересно, по этому после непродолжительного изучения SkypeAPI была написана программа  которая мигает подсветкой при приходе сообщения или поступления звонка. Программа висит в трее и позволяет регулировать подсветку и мигает при событии от skype. Инсталляция убрана в связи с не актуальностью.
Программа работает на серии ноутбуков Asus Nx6  при установленном Skype.

Если у вас есть идеи как еще можно использовать подсветку клавиатуры, то пишите в комментариях.

14.04.3013 Добавлена возможность запускать свои приложения при нажатии fn+ 1, V, C


GPS в Asus P525

Сейчас все смартфоны имеют встроенный GPS, a вот раньше, 6 лет назад, не в каждом он был.
Захотелось мне как то встроить в свой старый девайс GPS модуль.
И так имеем GPS GTPA010(FGPMMOPA6B) модуль купленный на ebay, имеет на борту UART и USB 
В Asus p525 используется IRDA модуль TFBS4711, который нужно удалить, т. к. нам нужен свободный UART.
Приступаем:
1. Сдуваем паяльным феном технический разъем он будет мешать, собрать потом телефон, на месте разъема будет GPS модуль. 

2. Сдуваем паяльным феном модуль IRDA , он нам уже не нужен, 
и подпаиваем 
тонкие проводки там где был модуль IRDA для соединения с GPS.


 
3. Подпаиваем следующие 2 - TXD(вход IRDA), 3 - RXD(выход IRDA), 4- сигнал включения 
и соединяем c GPS модулем 
IRDA - GPS 
3(RXD) - 9(TX) 
2(TXD) - 10(RX) 
4(SD) - 2 (ENABLE)


4. Рядом со светодиодом зарядки я припаял еще один светодиод (SMD очень мелкий) один вывод на землю (-) другой через 330 Ом на 
вывод 5 (3D-FIX) GPS модуля, он показывает состояние GPS.

5. Рядом с модулем расположил ионистор(старый я выпаял) соединив его проводом с выводом где раньше был старый ионистор и 4 (VBACKUP) выводом GPS модуля. Землю для ионистора и модуля взял тут же на плате. 
Плюс (+) для питания брал, показал красной стрелкой на фотографии.
 
Ну вот в принципе и все, с железом 
 
Но как оказалось этого мало чтоб GPS реально заработал т. к. драйвер порта работал с протоколом IRDA, а нам нужны чистые данные на выводах.
Вот тут засада и началась.  Нужен был драйвер которые не оборачивает данные в IRDA протокол. Пришлось патчить родные драйвера с помощью IDA и Assembler. Скачать драйвер можно на форуме ссылка 
приведена ниже. Так же для данного модуля написал загрузку EPO для WM, для быстрого поиска спутников.
Итог: GPS работает на com4, Навител работает отлично. 

PS: Можно подключить не только GPS модуль но и почти любое устройство с последовательным портом и управлять данными с девайса 

Форум