2012-08-15 6 views
1

GroovyGameGear.com의 LED Wiz를 사용하여 Windows Embedded가 실행되는 시스템 전면의 LED를 제어하는 ​​하드웨어 시스템을 사용하고 있습니다. GroovyGameGear는 Python (ctypes의 cdll)에서 LED 컨트롤러를 제어하는 ​​dll (SimpleLEDWiz.dll)을 제공하며이 기능은 훌륭합니다.리눅스에서 Wiz를 운영 중입니다.

여기에 문제가 있습니다. 우리는 Windows Embedded를 Ubuntu 12.04로 바꾸고 있습니다. 제공된 DLL을 사용하여 LED 컨트롤러를 제어 할 수 없습니다 (예, 와인을 사용해 보았습니다). 개발자들은 필요한 데이터 전송을위한 사양을 나에게 보냈지 만,이 작업을하는 데는 꽤 분실했습니다. 나는 장치가/dev/bus/usb에 연결되었을 때 장치를 볼 수 있지만, 그 이상으로 나는 무엇을 해야할지 확신 할 수 없다. 가능하다면 파이썬으로 이것을 유지하고 싶습니다. 이는 LED 대단한 팀에서 나에게 전송 된 정보입니다 :

"" "다음은 LED-대단한 끝을 알 필요가 무엇;

개발자 ID : 파파 장치 번호 : F0를 FF

을 통해

는 보고서의 형식은 매우 간단하다 : 어느 주어진 시간에 전송 된 8 바이트와 하드웨어가 기대 전송의 두 가지 유형이 항상있다

첫 번째는 우리가 부르는이 설정합니다. "상태 덤프를." 의 상태는 다음과 같습니다.

바이트 0 = 64이 데이터 패키지가 상태 덤프라는 것을 장치에 알리는 데 사용되는 플래그입니다. 그것은 항상 64

바이트 1 - 바이트 5 = KWZ-SBA 명령을 참조하십시오.

바이트 6 바이트 (7) = 0이 항상 0이며, "패딩"

은 "상태 덤프는"또한 모든 데이터 카운터를 재설정 한, "프로필 덤프"경험 문제에서 복구를 수는 LED-Wiz 내에서. 모든 것이 동기화되었는지 확인하기 위해 잠시 동안 상태 덤프를 사용하는 것이 좋습니다. USB 통신이 잘 수행되었으므로 오류 체크가 필요하지 않습니다.하지만 좋은 습관입니다.

다른 하나는 "프로필 덤프"입니다. 이것은 4 개의 8 바이트 덩어리로 32 바이트의 데이터를 예상합니다. 그것은 KWZ-PBA 명령에서 데이터의 4 분의 것처럼 각 청크 생각해. "" "

어떤 도움을 이해할 수있을 것이다! 감사합니다! 나뿐만 아니라이 작업 한

답변

2

합니다.이 장치를 HID 장치이며 따라서 보고서를 사용하여 통신합니다. 이러한 정보는 제어 채널을 통해 전송됩니다. 일단이 정보를 찾으면 매우 간단합니다. pyusb를 얻고 튜토리얼 (https://github.com/walac/pyusb/blob)을 따르면 장치가 발견되면 /master/docs/tutorial.rst) 방식으로 작업이 얻을 것은 제어 전송을 발급하는 것입니다

import usb.core 
import usb.util 
import sys 
#input is a 5 byte list 
def LWZ_SBA (input): 
    #find device 
    dev = usb.core.find(idVendor=0xfafa, idProduct=0x00f0) 
    if dev is None: 
     raise ValueError('LedWiz device not found') 

    #claim device 
    if dev.is_kernel_driver_active(0) is True: 
     dev.detach_kernel_driver(0) 
    usb.util.claim_interface(dev,0) 

    #activate device 
    if not dev.get_active_configuration(): 
     dev.set_configuration(1) 

    msg = [64]+input+[0,0] 

    #send message to device 
    dev.ctrl_transfer(0x21, 0x09, 0x0200, 0, msg) 

    #bmRequesttype - 0x21 - HID 
    #bmrequest - 0x09 - SET_REPORT 
    #wValue - Report Type and Rport ID - 0x02 0x00 
    #wIndex - Interface - 0 
    #msg - list of values 

    #release device 
    usb.util.release_interface(dev,0) 

#use like this to turn all lights on 
LWZ_SBA([255,255,255,255,4]) 

나는 아직 PBA를 수행하지만,하지 않은 나는 Y를 가정 ou는 같은 명령을 연속으로 4 번 발행합니다 (이번에는 8 바이트 모두 허용 된 값이 64가 아니기 때문에 SBA가 아니라 PBA를 설정한다는 것을 알고 있습니다!