SkepticalFox 1,445 #277163 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 Share this post Link to post Short link Share on other sites
kharlashkin 239 #277168 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 Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #277169 Posted June 9, 2015 (если нет поправьте) данный фикс примером показывает открытие файла находящегося в Wine с помощью приложения LinuxОткрытие программы, находящейся в Linux, из Wine 1 Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #277170 Posted June 9, 2015 Открытие программы, находящейся в Linux, из Wine Ну пусть будет по Вашему. Хотя мне кажестя что об одном и том же но в разных ракурсах :) Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #277171 Posted June 9, 2015 (edited) Ну пусть будет по Вашему. Хотя мне кажестя что об одном и том же но в разных ракурсах :)Скоро переход на Web 3.0, а мы до сих пор пользуемся обновлением страниц и очисткой кэша)) P.S. Какого эта тема делает в разделе Python? Edited June 9, 2015 by ShadowHunterRUS Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #277176 Posted June 9, 2015 (edited) P.S. Какого эта тема делает в разделе Python? Я тоже заметил, мое мнение что наверное [member=Mr13] добавил какого-то робота который парсит страницы и распределяет темы по веткам. К тому же некоторые темы одновременно находятся в разных ветках. А Вы говорите Web3.0 ;) Edited June 9, 2015 by kharlashkin Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #278820 Posted June 20, 2015 В общем сейчас нахожусь в командировке в республике Узбекистан, ноутбук с ubuntu с собой, как войду в рабочий строй буду продолжать эксперименты. 1 Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #280785 Posted July 6, 2015 Вчера проверил работы dolphin-emu-nogui, ярлыком на рабочем столе с параметрами запуска образа диска работает почти как надо - коннектится Wii Remote по блютуз автоматом, игра запускается в полноэкранном режиме, контроллер не отваливается, огорчает только закрытие игры по Alt+F4. Добавив этот ярлык запуска в Steam эмулятор с игрой не сработал - причину буду искать. Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #281137 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 Share this post Link to post Short link Share on other sites
kharlashkin 239 #281786 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 Share this post Link to post Short link Share on other sites
kharlashkin 239 #282941 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 Share this post Link to post Short link Share on other sites
kharlashkin 239 #283935 Posted July 22, 2015 Вроде нашел причину и частичное решение для x64. 1 Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #286301 Posted August 4, 2015 Кароче я не знаю каким образом транслировать x86 вызовы ioctl в x64, чего только не перепробовал... (хотя должен признаться что опыта и знаний катастрофически не хватает) Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #289460 Posted September 2, 2015 Никто не хочет помочь? (апаю темку) Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #289514 Posted September 2, 2015 Никто не хочет помочь? (апаю темку) установи уже себе Ubuntu x86 Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #289518 Posted September 2, 2015 установи уже себе Ubuntu x86 А как решить проблему с 2 ГБ ОЗУ? Если у меня на домашнем ПК 8 ГБ на ноутбуке 6 ГБ ;) Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #289781 Posted September 3, 2015 А как решить проблему с 2 ГБ ОЗУ? Если у меня на домашнем ПК 8 ГБ на ноутбуке 6 ГБ ;) мне PAE помогло Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #296532 Posted October 26, 2015 (edited) Позабросил я темку... Каюсь. Пришлось пока пересеть на Win, в связи с огромным объемом работ с документацией, которая делается быстрее и обратно совместимой под Win. Думаю скоро в связи с выходом Steam Controller (10 ноября) актуальность возрастет: Edited October 26, 2015 by kharlashkin Quote Share this post Link to post Short link Share on other sites
Yupi 505 #296572 Posted October 26, 2015 @kharlashkin, думаешь он удобный? Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #296574 Posted October 26, 2015 (edited) @kharlashkin, думаешь он удобный? Как говорится "не попробуешь не узнаешь". Привыкание будет однозначно часов так до 100 игры. Вот здесь есть свежий обзор где автор написал о неоднозначности геймпада. У VALVE было более чем достаточно времени и багоюзверей (бета-тестеров) допилить софт/драйвер/мини-ПК/геймпад. С момента появления слухов (февраль 2011) уже почти 5 лет прошло. Edited October 26, 2015 by kharlashkin Quote Share this post Link to post Short link Share on other sites