Page 1 of 1

Agetec Asciiware Sphere 360

Posted: December 15 2014, 14:26 PM
by nbrophy
I am not sure this correct forum, but I am looking for information to help decode communication protocol of the Agetec Asciiware Sphere 360. I picked up a few Sphere 360's years ago and have recently been attempting to use Arduino to communicate with them.



The most I can find on the web concerning the Agetec Asciiware Sphere 360 protocol (Mode 0 Native Sphere) is this post here http://www.mtbs3d.com/phpbb/viewtopic.php?f=26&t=1176. Based on my research, I assume Sphere 360 should use the PlayStation controller protocol (form of SPI fairly well documented command and reponse on the web).



I am trying to reconcile the posted 10 bytes 'Analog' communication with regular documented PlayStation controller mode protocol.



In my experimentation, I have wired the Sphere 360 to my Arduino Uno (per hook up below) and wrote a script utilizing the Ardunio SPI library to try establish the proper communication and controller input mapping.



PSX DATA (1) -> D12 MISO (w/ 1k ohm resistor to 5v)

PSC COMMAND (2) -> D11 MOSI

ATT (6) -> D10 SS

CLOCK (7) -> D13 SCK

GND (4) -> GND

VCC (5) -> 5v





At this point, unsure I am able to establish communication with the Controller. In responds to issuing the start (0x01) or polling (0x42) command, I only get byte 0xFF in response (no matter what movements or button are being pressed)



I will continue to experiment to see whether I can make any progress. If there is any interest I will post my results here.



In meantime, if someone has any helpful information on the Agetec Asciiware Sphere 360, please feel free to respond.



Thanks

Re: Agetec Asciiware Sphere 360

Posted: January 06 2015, 13:56 PM
by nbrophy
I was able to determine the Sphere 360 uses the PlayStation (PSX) controller protocol. In addition to having the ability to function in standard PSX modes, it has an additional mode specific to the unique functionality of the Orb/Ball.



By further investigating the PSX controller interface and testing and reviewing the various PSX Controller Arduino scripts and libraries, I was able to successfully poll the controller via Arduino and figure out how the different controller modes types can be identified.



Documented Agetec Asciiware Sphere 360 switch modes with resulting corresponding polled byte and PSX mode.



0) Native Sphere Mode: "Spaceball/Orb Mode" (Id Byte 0x55)

1) Dual Analog Joystick Mode: (PSX Analogue Green Mode) (Id Byte 0x53)

2) Driving Controller: PSX NegCon Mode (Id Byte 0x23)

3) D-pad Emulation:

- Shooter 1: (Rezero - L1 button) Standard Digital Pad (Id Byte 0x41)

- Shooter 2: (Rezero - L2 button) Standard Digital Pad (Id Byte 0x41)

- Fly 1: (Rezero - Square button) Standard Digital Pad (Id Byte 0x41)

- Fly 2: (Rezero - X button) Standard Digital Pad (Id Byte 0x41)

- Generic: (Rezero - Triangle button) Standard Digital Pad (Id Byte 0x41)

- Decent Mode: (Rezero - Circle button) PSX Analog Green Mode (Id Byte 0x53)





For the Native Sphere Mode, there is an 11 Byte transmission. The first 3 bytes comprise the regular PSX interface header (0x01:0xFF, 0x42:0x55, 0x00:0x5A).



The next 8 bytes make up the controller inputs as follows:





Byte 4 and 5 represent the controller buttons. Each button is representing as bit within the response byte. Simultaneous button presses are recorded properly.





--------------------------------------

Byte (4) DPAD/START/SELECT buttons

--------------------------------------



Action (BINARY/HEX)

------ -----------------------------

Off B11111111 or 0xFF

D-Pad Left B01111111 or 0x7F

D-Pad Down B10111111 or 0xBF

D-Pad Right B11011111 or 0xDF

D-Pad Up B11101111 or 0xEF

Start B11110111 or 0xF7

NA B11111011 or 0xF7

NA B11111101 or 0xF7

Select B11111110 or 0xFE



--------------------------------------

Byte (5) R#s/L#s/Square/Cross/Circle/Triangle buttons

--------------------------------------



Action (BINARY/HEX)

------ -----------------------------

Off B11111111 or 0xFF

Square B01111111 or 0x7F

x/Cross B10111111 or 0xBF

Circle B11011111 or 0xDF

Triangle B11101111 or 0xEF

R1 B11110111 or 0xF7

L1 B11111011 or 0xFB

R2 B11111101 or 0xFD

L2 B11111110 or 0xFE





The remaining 6 bytes each represent movement of along each one of the 6 axes of the Orb/Ball.





--------------------------------------

Byte (6) Orb/Ball X-axis SWAYING/STRAFE

--------------------------------------



DEC range: 0-255

MID/IDLE = 128

LEFT RANGE = 0-127

FULL LEFT = 0

RIGHT RANGE = 129-255

FULL RIGHT = 255



--------------------------------------

Byte (7) Orb/Ball Y-axis HEAVING

--------------------------------------

DEC range: 0-255

MID/IDLE = 128

DOWN RANGE = 0-127

FULL DOWN = 0

UP RANGE = 129-255

FULL UP = 255



--------------------------------------

Byte (8) Orb/Ball Z-axis SURGING

--------------------------------------

DEC range: 0-255

MID/IDLE = 128

FORWARD RANGE = 0-127

FULL FORWARD = 0

REVERSE RANGE = 129-255

FULL REVERSE = 255



--------------------------------------

Byte (9) Orb/Ball X-axis PITCH ROTATION

--------------------------------------

DEC range: 0-255

MID/IDLE = 128

TILT DOWN RANGE = 0-127

FULL TILT DOWN = 0

TILT UP RANGE = 129-255

FULL TILT UP = 255



--------------------------------------

Byte (10) Orb/Ball Y-axis YAW ROTATION

--------------------------------------

DEC range: 0-255

MID/IDLE = 128

ROTATE RIGHT RANGE = 0-127

ROTATE RIGHT = 0

ROTATE LEFT RANGE = 129-255

ROTATE LEFT = 255



--------------------------------------

Byte (11) Orb/Ball Z-axis ROLL ROTATION

--------------------------------------

DEC range: 0-255

MID/IDLE = 128

ROLL RIGHT RANGE = 0-127

ROLL RIGHT = 0

ROLL LEFT RANGE = 129-255

ROLL LEFT = 255

Re: Agetec Asciiware Sphere 360

Posted: January 06 2015, 19:53 PM
by vputz
nbrophy--EXCELLENT WORK! Ha, that's fantastic! I bet we could manage to make a Leonardo represent that as a HID device without too much trouble. It looks like you're able to represent everything the ASCII Sphere is doing--is that correct? If so, while the Orbotron boards won't be any use for you (they're single-purpose serial connections) a Leonardo with the orbotron "firmware" (EEPROM image, so that it represents as a HID device) would be a good start; you just need to input the ASCII Sphere data and represent it out as HID messages; it'd be pretty easy.



Very nice work indeed--I bet we can get this going!

Re: Agetec Asciiware Sphere 360

Posted: January 07 2015, 0:42 AM
by nbrophy
Glad others find this useful.



In the course of figure this out, there was a bunch of trial and error and cluelessness on my part. I am not that versed in Arduino or electronics, but there was enough good information on the net that I could make it works.



The following sites have great information on the PSX interface protocol and proved invaluable.



-http://store.curiousinventor.com/guides/PS2/

-http://www.gamesx.com/controldata/psxcont/psxcont.htm

-https://gist.github.com/scanlime/5042071



I initially attempted to get the Sphere 360 and Arduino to talk to one another with the PSX libraries referenced on http://playground.arduino.cc/ (PSXLibrary and AnalogPSXLibrary). I did not have success with either library. I then acquainted myself with SPI and I attempted to create a basic script using the Arduino SPI library and PSX interface protocol information from the above links to communicate with the Sphere 360. I could not get the controller to respond upon transferring the polling byte (0x42) as mentioned in my first post.



Finally I attempted to use the Bill Porter's PS2X library (https://github.com/madsci1016/Arduino-PS2X). While I could not get the controller to function, the library debugging feature was able to communicate enough with Sphere 360 to return the mode type byte the controller was set to. I dug into the PS2X library logic to find it was utilizing port manipulation opposed to built-in Arduino SPI functionality to communicate with PSX controller.



I was able to adapt the majority of the PS2X library port manipulation logic along with other logic from Toodle’s posted script here (http://forums.shoryuken.com/discussion/35170/proof-of-concept-psx-whatever-converter) into my own Arduino script.



My script's primary function is to print the byte input received from Sphere 360 when set to 0) Native Sphere Mode: "Spaceball/Orb Mode" (Id Byte 0x55). I am pretty sure the other Sphere 360 modes can also be read based on the standard better documented PSX modes. I was primarily concerned with the reading the native 6DoF of the Orb/Ball.



I'd be happy to share the script for others to try. It appears I do not have sufficient permission to attach files to my post, but send me a PM and I'll get it to whoever is interested..



Thanks,

Nathan

Re: Agetec Asciiware Sphere 360

Posted: October 25 2016, 12:48 PM
by twinankhs
Ok - Let me tell you what I did -

I have a Agetech Asciiware Sphere 360 and I am trying to get it working with the computer first.

There is a PS1 to USB adapter which allows the controller to function with both a PC and PS3.



The only issue is that I can get Move Forward / Back and strafe Left Right - this is Using Switch Position 3 and the Circle.

I used the PC test application and this is all the movement I could get. I use this on the PS3 and the same thing happens.



The other features Tilt, Yaw, Roll are not available and I tried all the switch combinations possible to no success.

I thought this would work with Z (Move Forward / Back), Y Move Up / Down, X (Move -Strafe Left / Right) AND

Move Left / Right (Yaw), Tilt Forward Back (Pitch), Tilt Left Right (Roll).



Has anyone gotten this working with all 6 axis? I can only get 2. In native mode Zero the controller does not respond.



Thanks

Andy