SkyReader icon indicating copy to clipboard operation
SkyReader copied to clipboard

Portal Incompatibility?

Open hegyak opened this issue 8 years ago • 22 comments

I having trouble getting the editor to work correctly. I have tried a Swap Force portal for XBox 360 and a Trap Team portal for PS4, and neither one works correctly.

The XBox 360 portal isn't found by the editor. The PS4 Portal does identify but, it doesn't read any character data.

The PS4 Console log says, "Reading Skylander" Then it says, "Found portal usb device"

Then nothing happens

Is there a particular portal I should use to make this work? What Game and System?

hegyak avatar Nov 26 '16 18:11 hegyak

It is documented that XBOX peripherals will not work. Xbox peripherals contain additional encryption hardware to tie them to the Xbox and cannot be used with other platforms and also prevent other platforms peripherals working with the Xbox. (apparently there is software about to talk to Xbox peripherals but it is not cross platform)

The PS4 portal sounds like it is working. I assume you have a skylander on the portal. What is the command line arguments you are using. What operation are you wishing to perform?

silicontrip avatar Nov 27 '16 22:11 silicontrip

I entered the command: skyreader -p -o Cynder.bin

I also tried: skyreader -p -o robot.bin

I wanted to read in the character's data onto my PC. Preferably decrypted.

I did run the program from an administrator console on Windows. I have installed the PS4 with the drivers and the device is recognized by Device Manager. I also used HidTest to verify that the Portal does show on the Device list.

I am attempting to read the Giant Robot for Giants (I can't remember it's name) and a Crystal variant of Cynder for Swap Force.

hegyak avatar Nov 28 '16 13:11 hegyak

But have you compiled from the source code posted here for windows? Or are you using the version compiled by others running on the internet?

How did you compile on windows? I just managed to compile on OSX ...

macgayverarmini avatar Nov 28 '16 13:11 macgayverarmini

I compiled the code using: mingw32-make -f Makefile.mingw

as the Makefile.mingw file specified.

The same issue with the PS4 portal still exists for me.

hegyak avatar Nov 28 '16 14:11 hegyak

Does it appear to crash out or exit normally? I'm sorry I don't know what indication you get when an application crashes in windows, do you get some sort of message or core dump? Do you end up with the .bin file as you specified (even if it is 0 bytes) Do you have a debugger you can run it under?

silicontrip avatar Nov 30 '16 03:11 silicontrip

I have never been able to get it to read from the portal under Windows either.... I spent days trying to figure it out.

On Tue, Nov 29, 2016, 9:53 PM Mark Heath [email protected] wrote:

Does it appear to crash out or exit normally? I'm sorry I don't know what indication you get when an application crashes in windows, do you get some sort of message or core dump? Do you end up with the .bin file as you specified (even if it is 0 bytes) Do you have a debugger you can run it under?

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/silicontrip/SkyReader/issues/12#issuecomment-263776542, or mute the thread https://github.com/notifications/unsubscribe-auth/AAGFD4q_DXMcM_vRwwogZbLDgZNeEXbVks5rDPNEgaJpZM4K89TN .

jtp10181 avatar Nov 30 '16 11:11 jtp10181

This program doesn't get beyond "Found portal usb device"

I tried the other Skylander Editor and it worked fine. Trap Team portal for PS4, Windows 7, Giants Robot. Data read in properly. No issues.

hegyak avatar Dec 01 '16 02:12 hegyak

Did you want me to make a debug version for you so we can find out why this version isn't working or are you happy with the other version? I did originally write this version to work on OSX based on a windows program I found online. I happened to use a cross platform USB library which would help it build under Linux and Windows. Other people have forked this project to get it to build on those platforms. I don't have access to these platforms to test this code against it. Plus my son sold his Wii and bought an xbox so I don't really have the ability to test the OSX version anymore.

silicontrip avatar Dec 05 '16 00:12 silicontrip

I woudn't mind using a debug version to determine what's going on here. Even that old version that you probably used as the code base, has issues reading data sometimes. And that's with the PS4 portal. If I can help debug/fix problems, I will be quite happy to get it to happen.

hegyak avatar Dec 05 '16 01:12 hegyak

I've started a debug branch, I've put some messages in the most likely places it is failing. See if it builds and let me know what the output of this version is. I've also seen some other options which might give more insight into what is happening.

Can you run it with the "-l" option ?

silicontrip avatar Dec 05 '16 03:12 silicontrip

I compiled the Debug branch and this is the message I got:

Found portal usb device ">>> PortalIO::Write" <<< PortalIO::Write ">>> PortalIO::Write" <<< PortalIO::Write

The PortalIO:Write messages repeats constantly.

I am using the PS4 Trap Team Portal with Cynder (Giants) for the first read test and Spyro (Adventures) for the second read test. Having no Skylander on the Portal, causes the same messages.

Edit: I had to add the quote marks. They do not appear in the Debug log.

hegyak avatar Dec 05 '16 04:12 hegyak

I've narrowed it down. It appears that the code is waiting for the correct response from the portal. I do not know what the portal is responding with nor do I know why the expected response isn't received.

I've added more debugging to print out the response from the portal. However it might be a peculiarity with the PS4 portal.

silicontrip avatar Dec 05 '16 05:12 silicontrip

I used a PS3/Wii portal for Swap Force.

Command I used: editor -l

Message from the Console: Listing Skylanders.

Found portal usb device

PortalIO::Write <<< PortalIO::Write throw 6 Unable to write to Portal.

The PS4 Trap Team Portal gave me a longer but still repeating console message. PS4.txt

The Xbox 360 Portals require special Driver software. To get them to work. Unsure if I should try them at all. I have the drivers if you want me to give that a try as well.

hegyak avatar Dec 05 '16 12:12 hegyak

It appears that the portal is sending back a status response and not a query skylander response. I've restored some code that is supposed to activate the portal first. Maybe it might help.

silicontrip avatar Dec 05 '16 23:12 silicontrip

The portal still does not behave as it should. Same error messages as before.

Edit: the spec.txt file says:

"The protoocol couldn't be simpler -- the first byte of the data is a character representing the command, and then the data comes after it. For the wired version, 0B 14 is placed before the command character."

However, I wasn't able to find 0B 14 being sent along with the command characters. Could that be the reason it won't read? I know for sure that I am using Wired Portals.

hegyak avatar Dec 06 '16 02:12 hegyak

i figured out why some portals are not working. a imaginators portal always sends: P: 81 53 00 00 00 00 24 01 00 00 00 00 00 00 00 00 .S....$......... 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00 . the first request is a report request: PS3: 21 09 00 02 00 00 02 00 52 00 !.......R. and the answer: P: 81 52 02 0a 05 08 00 00 00 00 00 00 00 00 00 00 .R.............. 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00 .

a swap-force/Superchargers portal with send following status: P: 81 53 00 00 00 00 28 00 00 00 00 00 00 00 00 00 .S....(......... 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00 .
you can see the 0x00 after the counter. it will not reply to any requests (R, A, Q ...)

i think you have to send something to the portal to change the device status.

capull0 avatar Dec 30 '16 11:12 capull0

I'm having the same issue with a superchargers portal. I'm not sure what @capull0 is referring to as "always sends...". Is this the device descriptor packet dumped in hex? Experienced dev happy to help track down what's going on if I can find some resources (info on request structures would be especially helpful) to start from

EDIT: I found the SkylandersGUITool which seems to have no issues whatsoever communicating with this portal. Fired up USBlyzer to check out the differences, it doesn't look like hidapi is working correctly. hid_write specifically is sending a bulk transfer write instead of a Class Interface SetReport. I suspect this is the reason calls are now failing - at some point they may have removed support for the bulk transfer endpoint. Looking into whether it's possible to modify hidapi (hid_win.c specifically) to get this working.

EDIT2: Found the solution. MSDN Documentation is somewhat lacking in this area (somewhat expected, given the low level of work). The windows implementation of hidapi uses WriteFile to implement hid_write which is translated into a bulk transfer operation. The library seems to be entirely missing a separate way of writing smaller requests - the closest is hid_send_feature_report. I'm not exactly a USB expert but I think there are differences between feature reports and other report types (the difference between HidD_SetOutputReport and HidD_SetFeature, I'd imagine).

This can easily be fixed by a patch to hid_win.c, I'll try to put together a Pull Request once I fix some other things that are broken.

SpiderSensei avatar Jan 15 '17 06:01 SpiderSensei

thanks SpiderSensei for the hint.

i figured out the problem. the (R)eport-, (A)ctivate- and (Q)uerie-requests are sended via "Interrupt Transfer". My Imaginators PS3 portal is answering such requests.

But all other portals, for example from Superchargers doesn't reply to "Interrupt Transfer". I changed the hid_linux.c to use always "Control Transfer" and it's working with all PS3 portals from my son.

$ git diff hid_linux.c
diff --git a/hid_linux.c b/hid_linux.c
index 0a9bccf..a422d33 100644
--- a/hid_linux.c
+++ b/hid_linux.c
@@ -900,7 +900,8 @@ int HID_API_EXPORT hid_write(hid_device *dev, const unsigned char *data, size_t
     }
 
 
-    if (dev->output_endpoint <= 0) {
+   // if (dev->output_endpoint <= 0) {
+    if (1) {
         /* No interrput out endpoint. Use the Control Endpoint */
         res = libusb_control_transfer(dev->device_handle,
                                       LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE | LIBUSB_ENDPOINT_OUT,

capull0 avatar Jan 19 '17 09:01 capull0

Now if I could patch and test this on OSX. Has this been reported to libhid?

silicontrip avatar Jan 19 '17 22:01 silicontrip

i created a pull request https://github.com/silicontrip/SkyReader/pull/17

libhid is not the issue. most of the skylanders portals don't like interrupt transfer.

capull0 avatar Jan 22 '17 22:01 capull0

I got to work SkyReader on Windows 10 64 bit! I used capull0 fork Its dont work with my PS4 trap Team portal (UNABLE WRITE TO PORTAL) With PS3 Giants portal Skyreader work perfect ! Thanks !

my video proof https://www.youtube.com/watch?v=MYIjAngqAxY&feature=youtu.be

jekarellas avatar Jan 26 '17 21:01 jekarellas

I can confirm that the version from capull0 works on my Win10 64bit as well.

pkolmann avatar Apr 11 '17 19:04 pkolmann