Jump to content
Korean Random

Recommended Posts

Ваше многоточие как бы намекает ;) Пока гугление ни к чему не привело.

https://www.winehq.org/pipermail/wine-users/2008-January/028728.html

вроде оно.

запустить приложения Linux изнутри приложений Windows,

Edited by ShadowHunterRUS
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

https://www.winehq.org/pipermail/wine-users/2008-January/028728.html

вроде оно.

запустить приложения Linux изнутри приложений Windows,

Ага-ага, гут, если я правильно понял (если нет поправьте) данный фикс примером показывает открытие файла находящегося в Wine с помощью приложения Linux. Отлично, то что нужно!

 

Я буду обновлять страницу перед отправкой, я буду обновлять страницу перед отправкой...

Edited by kharlashkin

Share this post


Link to post

Short link
Share on other sites

(если нет поправьте) данный фикс примером показывает открытие файла находящегося в Wine с помощью приложения Linux

Открытие программы, находящейся в Linux, из Wine
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Открытие программы, находящейся в Linux, из Wine

Ну пусть будет по Вашему. Хотя мне кажестя что об одном и том же но в разных ракурсах :)

Share this post


Link to post

Short link
Share on other sites

Ну пусть будет по Вашему. Хотя мне кажестя что об одном и том же но в разных ракурсах :)

Скоро переход на Web 3.0, а мы до сих пор пользуемся обновлением страниц и очисткой кэша))

P.S. Какого эта тема делает в разделе Python?

Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

P.S. Какого эта тема делает в разделе Python?

Я тоже заметил, мое мнение что наверное [member=Mr13] добавил какого-то робота который парсит страницы и распределяет темы по веткам. К тому же некоторые темы одновременно находятся в разных ветках. А Вы говорите Web3.0 ;)

Edited by kharlashkin

Share this post


Link to post

Short link
Share on other sites

В общем сейчас нахожусь в командировке в республике Узбекистан, ноутбук с ubuntu с собой, как войду в рабочий строй буду продолжать эксперименты.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Вчера проверил работы dolphin-emu-nogui, ярлыком на рабочем столе с параметрами запуска образа диска работает почти как надо - коннектится Wii Remote по блютуз автоматом, игра запускается в полноэкранном режиме, контроллер не отваливается, огорчает только закрытие игры по Alt+F4. Добавив этот ярлык запуска в Steam эмулятор с игрой не сработал - причину буду искать.

Share this post


Link to post

Short link
Share on other sites

Мне кажется, я нашел что нужно ;)

А именно скрипт работающий напрямую с вибрацией геймпада с родным драйвером 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) 

 

Вечером проверю.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Вечером проверю.

После нескольких дней "любви мозгов" с 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))

Интересно что, первая вибрация пропускается...

Интересно что, первая вибрация пропускается...

Думается, что есть несколько вариантов для проигрывания вибро из танков:

  1. Переписать все танковые вибрации для вибронакидки в python, загружать их все (!) в /dev/input/eventXX и проигрывать по событию.
  2. Загрузить все варианты вибраций от (0, 0) до (1, 1) с шагом 0.2 длительностью 50 мс (как пример) и проигрывать каждый 50 мс нужную...

Второй вариант выглядит менее трудоемким.

При попытке загрузки 25 эффектов на 16-м эффекте выскочила ошибка

IOError: [Errno 28] No space left on device
Edited by kharlashkin
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Ребят подскажите как это посчитать?

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))

Share this post


Link to post

Short link
Share on other sites

Кароче я не знаю каким образом транслировать x86 вызовы ioctl в x64, чего только не перепробовал... (хотя должен признаться что опыта и знаний катастрофически не хватает)

Share this post


Link to post

Short link
Share on other sites

установи уже себе Ubuntu x86

А как решить проблему с 2 ГБ ОЗУ? Если у меня на домашнем ПК 8 ГБ на ноутбуке 6 ГБ ;)

Share this post


Link to post

Short link
Share on other sites

А как решить проблему с 2 ГБ ОЗУ? Если у меня на домашнем ПК 8 ГБ на ноутбуке 6 ГБ ;)

мне PAE помогло

Share this post


Link to post

Short link
Share on other sites

Позабросил я темку... Каюсь. Пришлось пока пересеть на Win, в связи с огромным объемом работ с документацией, которая делается быстрее и обратно совместимой под Win.

 

Думаю скоро в связи с выходом Steam Controller (10 ноября) актуальность возрастет:

Edited by kharlashkin

Share this post


Link to post

Short link
Share on other sites

@kharlashkin, думаешь он удобный?

Как говорится "не попробуешь не узнаешь". Привыкание будет однозначно часов так до 100 игры. Вот здесь есть свежий обзор где автор написал о неоднозначности геймпада.

 

У VALVE было более чем достаточно времени и багоюзверей (бета-тестеров) допилить софт/драйвер/мини-ПК/геймпад. С момента появления слухов (февраль 2011) уже почти 5 лет прошло.

Edited by kharlashkin

Share this post


Link to post

Short link
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...