Obsługa Pada PS4

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
wikingus
Piegowaty Guziec
Piegowaty Guziec
Posty: 5
Rejestracja: 27 lip 2008, 22:37
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Obsługa Pada PS4

Post autor: wikingus »

Witam
Czy ktoś próbował obsługiwać pada od ps4 ale mam na myśli taką poprawną obsługę Pada z jego wszystkimi możliwościami.
Normalnie po podłączeniu pada mamy standardowy plik JS w moim przypadku JS0. Co tak naprawdę jest namiastką pada od ps4.

Nie ma odczytu z żyroskopów i akcelerometru nie ma możliwości obsługi podświetlenia na padzie i wibracji.
pole touchpada na padzie traktuje jak myszkę i kliknięcie jak kliknięcie myszki czy li standardowo.
odczyt baterii też jest problemem.

Żyroskopy i akcelerometr prawdopodobnie jest w pliku event ale mam problemy z jego odczytaniem. To znaczy niewianiem jak odczytać plik żeby wysyłał sensowne dane. (chodzi mi o strukturę pliku które bajty za o odpowiadają.)
Co dziwne w systemie mam jakieś sterowniki hid sony i po podłączeniu pada tworzą się dodatkowe pliki (urządzenia ) a dokładnie
sys/bus/hid/devices/0005:054C:09CC.0001( katalog z dowiązaniem do urządzenia)

I tutaj dopiero grzebiąc w plikach mam dostęp jako taki bo szału nie ma do stanu baterii czy jest ładowana itp. oraz mogę ustawić kolor ledów pada.
Niestety jest to robione strasznie na siłę. i nie efektownie.
Urządzenie które powstało ma kilka katalogów co mnie najbardziej interesuje to input leds i power suply.
W katalogu led mam 4 katalogi z czego 3 odpowiadają za kolory RGB.
0005:054C:09CC.0001:blue to jest nazwa jednego z katalogu tam znowu znajdują się pliki w jednym z nich jak wpiszę wartość do 255 to steruje jednym kolorem do wartości 255.
Jest to dość wkurzające bo żeby obsłużyć RGB mam 3 katalogi i 3 pliki zmiana koloru jest strasznie nie efektywna. Tym bardziej że pliki i katalogi istnieją dopiero po podłączeniu pada i nie mam pewności że katalogi będą się nazywać tak samo.
Natomiast nie mam możliwości sterowania wibracjami w padzie. przynajmniej z poziomu plików.
Znalazłem kilka sterowników HID sony i tam w bebechach jest mowa o wibracji kolorach Gyro itp.
Teraz Pytanie jak mogę zainstalować taki sterownik.

https://github.com/torvalds/linux/blob/ ... hid-sony.c

Co dalej nie wiem może po instalacji coś pozmienia mi się w strukturze plików i zyskam możliwość sterowania w bardziej ludzki sposób.
Obsługa jest mi potrzebna do programu być może ktoś wie jak mogę to wykorzystać i bezpośrednio sterować czy z poziomu jakiejś biblioteki lub chociażby terminala.

Języki w których próbuję programować to C, C++ i Python jednak wygodne jest użycie Pythona pomimo że jest dużo wolniejszy.

Prosiłbym o jakieś sugestie
wikingus
Piegowaty Guziec
Piegowaty Guziec
Posty: 5
Rejestracja: 27 lip 2008, 22:37
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Re: Obsługa Pada PS4

Post autor: wikingus »

Wklejam funkcje napisane w pythonie do sterowania Ledami na padzie oraz odczyt bateri.
Starałem się mniej więcej opisać jak działa kod ale jak ktoś się zagłębi to będzie wiedział o co kaman.
Z kodu można dowolnie korzystać.

Kod: Zaznacz cały

# Obsługa kolorów pada PS4 w linux.
# Obsługa Baterii odczyt poziomu naładowania i status ładowania.
import os

adres_sterownika_sony='/sys/bus/hid/drivers/sony/'
#lista = list(os.listdir(adres_sterownika_sony))


def adresy_padow (): #funkcja przekazuje liste nazw katalogow podłączonych padów
    lista = list(os.listdir(adres_sterownika_sony))
    listaplikow=[]
    for i in range(int(len(list(os.listdir(adres_sterownika_sony))))): #pęttla wykona się tyle razy ile jest plikow w katalogu sony i sprawdzi ile plikiw nazywa się tak jak nazywają się pady
        if (lista[i].count("0005:054C:")): # porownoje czy ktoryś z plikow zawiera w nazwie dany tekst (tak zaczynaja sie pady)
            listaplikow = listaplikow + [lista[i]] #dodaj nazwy katalogow (padów)do tablicy 
    listaplikow.sort() #Sortuje w liscie pady od pierwszego do ostatniego.
    #print (listaplikow)
    return listaplikow
    
def bateria(nr_pada, bat="bateria"): # trzeba podać numer pada i string "bateria" lub "status" funkcja zwróci poziom naladowania bateri albo status Ładowanie albo Rozładowywanie ( jeszcze dojdzie pełna)
    if os.path.exists(adres_sterownika_sony):
       
        if  nr_pada <= len(adresy_padow()) and nr_pada > 0:
            
            adres_pada = adresy_padow()
            katalog_baterii = os.listdir(adres_sterownika_sony + adres_pada[nr_pada-1] + "/power_supply/")
            adres_katalogu = (adres_sterownika_sony + adres_pada[nr_pada-1] + "/power_supply/" + katalog_baterii[0]+ "/")
           
            if bat == "bateria" :
                odczyt = open(adres_katalogu + "capacity" ,"r")
                tabliczka = odczyt.read()
                tabliczka = int(tabliczka) # przekombinowane usuwanie znaku końca lini
                return (str(tabliczka))
            elif bat == "status":
                odczyt = open(adres_katalogu + "status" ,"r")
                tabliczka = odczyt.read()
                if  tabliczka == "Discharging\n" :
                    return "Rozładowywanie"
                elif tabliczka == "Charging\n":
                    return "Ładowanie"
                
        else :
            print("brak plików baterii dla pada nr : "+ str(nr_pada))
    else :
        print("Brak sterowników HID sony podłącz pada i spróbój ponownie : ")
        
def led_rgb (RED, GREEN, BLUE, nr_pada):# wartości od 0 do 255 RGB i nr_pada od 1 do max ilości padów
    if os.path.exists(adres_sterownika_sony):       
        if  nr_pada <= len(adresy_padow()) and nr_pada > 0:
            adres_pada = adresy_padow()
            adres_pliku_led = (adres_sterownika_sony + adres_pada[nr_pada-1] + "/leds/" + adres_pada[nr_pada-1])
            led_red = open((adres_pliku_led + ":red/brightness"),"w")
            led_green = open((adres_pliku_led +  ":green/brightness"), "w")
            led_blue = open((adres_pliku_led + ":blue/brightness"), "w")
            led_red.write(str(RED))
            led_green.write(str(GREEN))
            led_blue.write(str(BLUE))
        
        #print("Pad: " + str(nr_pada) +" LED_RED : " +str(RED)) # można zakomentować wypisuje w konsoli jakie wartosci zostały wpisane do pada)
        #print("Pad: " + str(nr_pada) +" LED_GREEN : " +str(GREEN))
        #print("Pad: " + str(nr_pada) +" LED_BLUE : " +str(BLUE))
        #print("")
        else :
             print("brak plików LED dla pada nr : "+ str(nr_pada)) #  hmm :)
    else :
        print("Brak sterowników HID sony podłącz pada i spróbój ponownie : ")



print(bateria(1,"bateria"))
print(bateria(1)) # jak nic nie podamy w drugim parametrze to wyswietli poziom naładowania baterii.
led_rgb(20,10,20,1) # 20R 10G 20B  pad 1 

ledy=[20,10,20]
led_rgb(*ledy,1) # można też tak robimy tablice i dajemy na nią wskaźnik (niewiem jak to się w pythonie nazywa)

    
    
    
    

    
    
    
    
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 61 gości