SkepticalFox Posted June 9, 2015 Share Posted June 9, 2015 (edited) Ваше многоточие как бы намекает ;) Пока гугление ни к чему не привело. https://www.winehq.org/pipermail/wine-users/2008-January/028728.html вроде оно. запустить приложения Linux изнутри приложений Windows, Edited June 9, 2015 by ShadowHunterRUS 1 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 9, 2015 Author Share Posted June 9, 2015 (edited) https://www.winehq.org/pipermail/wine-users/2008-January/028728.html вроде оно. запустить приложения Linux изнутри приложений Windows, Ага-ага, гут, если я правильно понял (если нет поправьте) данный фикс примером показывает открытие файла находящегося в Wine с помощью приложения Linux. Отлично, то что нужно! Я буду обновлять страницу перед отправкой, я буду обновлять страницу перед отправкой... Edited June 9, 2015 by kharlashkin @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted June 9, 2015 Share Posted June 9, 2015 (если нет поправьте) данный фикс примером показывает открытие файла находящегося в Wine с помощью приложения LinuxОткрытие программы, находящейся в Linux, из Wine 1 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 9, 2015 Author Share Posted June 9, 2015 Открытие программы, находящейся в Linux, из Wine Ну пусть будет по Вашему. Хотя мне кажестя что об одном и том же но в разных ракурсах :) @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted June 9, 2015 Share Posted June 9, 2015 (edited) Ну пусть будет по Вашему. Хотя мне кажестя что об одном и том же но в разных ракурсах :)Скоро переход на Web 3.0, а мы до сих пор пользуемся обновлением страниц и очисткой кэша)) P.S. Какого эта тема делает в разделе Python? Edited June 9, 2015 by ShadowHunterRUS @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 9, 2015 Author Share Posted June 9, 2015 (edited) P.S. Какого эта тема делает в разделе Python? Я тоже заметил, мое мнение что наверное [member=Mr13] добавил какого-то робота который парсит страницы и распределяет темы по веткам. К тому же некоторые темы одновременно находятся в разных ветках. А Вы говорите Web3.0 ;) Edited June 9, 2015 by kharlashkin @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 20, 2015 Author Share Posted June 20, 2015 В общем сейчас нахожусь в командировке в республике Узбекистан, ноутбук с ubuntu с собой, как войду в рабочий строй буду продолжать эксперименты. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted July 6, 2015 Author Share Posted July 6, 2015 Вчера проверил работы dolphin-emu-nogui, ярлыком на рабочем столе с параметрами запуска образа диска работает почти как надо - коннектится Wii Remote по блютуз автоматом, игра запускается в полноэкранном режиме, контроллер не отваливается, огорчает только закрытие игры по Alt+F4. Добавив этот ярлык запуска в Steam эмулятор с игрой не сработал - причину буду искать. @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted July 8, 2015 Author Share Posted July 8, 2015 Мне кажется, я нашел что нужно ;) А именно скрипт работающий напрямую с вибрацией геймпада с родным драйвером Linux. #!/usr/bin/env python import fcntl, struct, time, array # # There are two steps to creating a rumble effect # 1/ describe the effect and give it to the driver using an # ioctl. # There a 3 paramaters: # strength: from 0 to 0xffff - this code takes a value from 0 to # 1 and scales it # duration: milliseconds # delay until start: milliseconds. # # 2/ write a request to play a specific effect. # # It is possible to have multiple effects active. If they have # different delays they will start at different times. # This demo shows combining 3 non-overlapping effects to make # a simple vibration pattern # # An effect is created with f.new_vibe(strength, duration, delay) # That effect can then be started with 'play' and stopped with 'stop'. # EVIOCRMFF = _IOW('E', 0x81, int) # dir: 2 WRITE = 1 == 0x40000 # size 14 4 # type 8 'E' == 0x45 # nr: 8 0x81 # EVIOCRMFF = 0x40044581 # EVIOCSFF _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect)) EVIOCSFF = 0x402c4580 class Vibra: def __init__(self, file = "/dev/input/rumble"): self.f = open(file, "r+") def close(self): self.f.close() def new_vibe(self, strength, length, delay): # strength is from 0 to 1 # length and delay are in millisecs # this is 'struct ff_effect' from "linux/input.h" effect = struct.pack('HhHHHHHxxHH', 0x50, -1, 0, # FF_RUMBLE, id, direction 0, 0, # trigger (button interval) length, delay, int(strength * 0xFFFF), 0) a = array.array('h', effect) fcntl.ioctl(self.f, EVIOCSFF, a, True) return a[1] id = a[1] return (ev_play, ev_stop) def multi_vibe(self, length, repeats = 1, delay = None, strength = 1): start = 0 if delay == None: delay = length v = [] for i in range(0, repeats): v.append(self.new_vibe(strength, length, start)) start += length + delay return v def play(self, id): # this is 'struct input_event': sec, nsec, type, code, value if type(id) == tuple or type(id) == list: ev_play = '' for i in id: ev_play = ev_play + struct.pack('LLHHi', 0, 0, 0x15, i, 1) else: ev_play = struct.pack('LLHHi', 0, 0, 0x15, id, 1) self.f.write(ev_play) self.f.flush() def stop(self, id): # this is 'struct input_event': sec, nsec, type, code, value if type(id) == tuple or type(id) == list: ev_stop = '' for i in id: ev_stop = ev_stop + struct.pack('LLHHi', 0, 0, 0x15, i, 0) else: ev_stop = struct.pack('LLHHi', 0, 0, 0x15, id, 0) self.f.write(ev_stop) self.f.flush() def forget(self, id): if type(id) == tuple or type(id) == list: for i in id: fcntl.ioctl(self.f, EVIOCRMFF, i) else: fcntl.ioctl(self.f, EVIOCRMFF, id) if __name__ == '__main__': f = Vibra("/dev/input/rumble") # rumble for 300ms, pause for 100ms, rumble for 300ms, pause for 200ms # then half-speed rumble for 600ms p1 = f.new_vibe(1, 300, 0) p2 = f.new_vibe(1, 300,400) p3 = f.new_vibe(0.5, 600, 900) f.play((p1, p2, p3)) time.sleep(2) f.forget((p1, p2, p3)) f.play(f.multi_vibe(200, 14, delay=100)) time.sleep(5) Вечером проверю. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted July 14, 2015 Author Share Posted July 14, 2015 (edited) Вечером проверю. После нескольких дней "любви мозгов" с python получилось вибрировать двигателями. При чем с n-ной попытки внутри виртуальной машины vmware под Ubuntu 14.04 LTS x86 с проброшенным внутрь проводным геймпадом Xbox 360, собcтвенно код: import fcntl, struct, time, array EVIOCRMFF = 0x40044581 EVIOCSFF = 0x402c4580 class Vibra: def __init__(self, file = "/dev/input/event4"): self.f = open(file, "r+") def close(self): self.f.close() def new_vibe(self, strong, weak, length): effect = struct.pack('HhHHHHHxHH', 0x50, -1, 0, 0, 0, length, 0, int(strong * 0xFFFF), int(weak * 0xFFFF)) a = array.array('h', effect) fcntl.ioctl(self.f, EVIOCSFF, a, True) return a[1] id = a[1] return (ev_play, ev_stop) def play(self, id): if type(id) == tuple or type(id) == list: ev_play = '' for i in id: ev_play = ev_play + struct.pack('LLHHi', 0, 0, 0x15, i, 1) else: ev_play = struct.pack('LLHHi', 0, 0, 0x15, id, 1) self.f.write(ev_play) self.f.flush() def stop(self, id): if type(id) == tuple or type(id) == list: ev_stop = '' for i in id: ev_stop = ev_stop + struct.pack('LLHHi', 0, 0, 0x15, i, 0) else: ev_stop = struct.pack('LLHHi', 0, 0, 0x15, id, 0) self.f.write(ev_stop) self.f.flush() def forget(self, id): if type(id) == tuple or type(id) == list: for i in id: fcntl.ioctl(self.f, EVIOCRMFF, i) else: fcntl.ioctl(self.f, EVIOCRMFF, id) if __name__ == '__main__': f = Vibra("/dev/input/event4") p3 = f.new_vibe(0.2, 0.5, 2000) time.sleep(4) f.play((p3)) time.sleep(4) f.play((p3)) time.sleep(4) f.play((p3)) time.sleep(4) f.play((p3)) time.sleep(2) f.forget((p3)) Интересно что, первая вибрация пропускается... Интересно что, первая вибрация пропускается... Думается, что есть несколько вариантов для проигрывания вибро из танков: Переписать все танковые вибрации для вибронакидки в python, загружать их все (!) в /dev/input/eventXX и проигрывать по событию. Загрузить все варианты вибраций от (0, 0) до (1, 1) с шагом 0.2 длительностью 50 мс (как пример) и проигрывать каждый 50 мс нужную... Второй вариант выглядит менее трудоемким. При попытке загрузки 25 эффектов на 16-м эффекте выскочила ошибка IOError: [Errno 28] No space left on device Edited July 14, 2015 by kharlashkin 1 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted July 17, 2015 Author Share Posted July 17, 2015 Ребят подскажите как это посчитать? EVIOCSFF _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect)) Потому как вибрация работает под x86,под x64 выдает ошибку: fcntl.ioctl(self.f, int(EVIOCSFF), a, True) IOError: [Errno 14] Bad address Вроде нашел расчет, переписал - все равно ошибка валит. Может проблема в другом драйвере от SteamOS? EVIOCRMFF = _IOW(ord('E'), 0x81, 'i') EVIOCSFF = _IOC(_IOC_WRITE, ord('E'), 0x80, struct.calcsize(effect)) @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted July 22, 2015 Author Share Posted July 22, 2015 Вроде нашел причину и частичное решение для x64. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted August 4, 2015 Author Share Posted August 4, 2015 Кароче я не знаю каким образом транслировать x86 вызовы ioctl в x64, чего только не перепробовал... (хотя должен признаться что опыта и знаний катастрофически не хватает) @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted September 2, 2015 Author Share Posted September 2, 2015 Никто не хочет помочь? (апаю темку) @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted September 2, 2015 Share Posted September 2, 2015 Никто не хочет помочь? (апаю темку) установи уже себе Ubuntu x86 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted September 2, 2015 Author Share Posted September 2, 2015 установи уже себе Ubuntu x86 А как решить проблему с 2 ГБ ОЗУ? Если у меня на домашнем ПК 8 ГБ на ноутбуке 6 ГБ ;) @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted September 3, 2015 Share Posted September 3, 2015 А как решить проблему с 2 ГБ ОЗУ? Если у меня на домашнем ПК 8 ГБ на ноутбуке 6 ГБ ;) мне PAE помогло @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted October 26, 2015 Author Share Posted October 26, 2015 (edited) Позабросил я темку... Каюсь. Пришлось пока пересеть на Win, в связи с огромным объемом работ с документацией, которая делается быстрее и обратно совместимой под Win. Думаю скоро в связи с выходом Steam Controller (10 ноября) актуальность возрастет: Edited October 26, 2015 by kharlashkin @ Quote Link to comment Short link Share on other sites More sharing options...
Yupi Posted October 26, 2015 Share Posted October 26, 2015 @kharlashkin, думаешь он удобный? @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted October 26, 2015 Author Share Posted October 26, 2015 (edited) @kharlashkin, думаешь он удобный? Как говорится "не попробуешь не узнаешь". Привыкание будет однозначно часов так до 100 игры. Вот здесь есть свежий обзор где автор написал о неоднозначности геймпада. У VALVE было более чем достаточно времени и багоюзверей (бета-тестеров) допилить софт/драйвер/мини-ПК/геймпад. С момента появления слухов (февраль 2011) уже почти 5 лет прошло. Edited October 26, 2015 by kharlashkin @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.