Created
November 25, 2014 15:13
-
-
Save 2bbb/9d514423ea9e9b8b8d2a to your computer and use it in GitHub Desktop.
Dualshock Controller parser for Max
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| autocompile = true; | |
| outlets = 3; | |
| var NoteOutlet = 0, | |
| CCOutlet = 1, | |
| OSCOutlet = 2; | |
| var ps2 = (function() { | |
| var Controller = { | |
| Buttons: { | |
| Push: { | |
| x: 3, a: 4, b: 5, y: 6, | |
| top: 61, right: 62, bottom: 63, left: 64, | |
| l1: 9, r1: 10, l2: 7, r2: 8, | |
| select: 12, start: 11 | |
| } | |
| }, | |
| Dualshock: { | |
| Left: { | |
| horizontal: 16, | |
| vertical: 17, | |
| click: 13 | |
| }, | |
| Right: { | |
| horizontal: 18, | |
| vertical: 19, | |
| click: 14 | |
| } | |
| }, | |
| command: 15, | |
| dualshockEnable: 20 | |
| } | |
| var convertId = function(x) { return x; }, | |
| convertToggle = function(x) { return x * 255; }, | |
| convert7bit = function(x) { return x >> 1; }; | |
| var Buttons = Controller.Buttons, | |
| Dualshock = Controller.Dualshock, | |
| OSCAdderss = {}, | |
| Convert = {}, | |
| NoteOrCC = {}, | |
| PS2Map = {}; | |
| // **** **** | |
| OSCAdderss[Buttons.Push.x] = "/ps2/buttons/push/x"; | |
| OSCAdderss[Buttons.Push.a] = "/ps2/buttons/push/a"; | |
| OSCAdderss[Buttons.Push.b] = "/ps2/buttons/push/b"; | |
| OSCAdderss[Buttons.Push.y] = "/ps2/buttons/push/y"; | |
| OSCAdderss[Buttons.Push.top] = "/ps2/buttons/push/top"; | |
| OSCAdderss[Buttons.Push.right] = "/ps2/buttons/push/right"; | |
| OSCAdderss[Buttons.Push.bottom] = "/ps2/buttons/push/bottom"; | |
| OSCAdderss[Buttons.Push.left] = "/ps2/buttons/push/left"; | |
| OSCAdderss[Buttons.Push.l1] = "/ps2/buttons/push/l1"; | |
| OSCAdderss[Buttons.Push.r1] = "/ps2/buttons/push/r1"; | |
| OSCAdderss[Buttons.Push.l2] = "/ps2/buttons/push/l2"; | |
| OSCAdderss[Buttons.Push.r2] = "/ps2/buttons/push/r2"; | |
| OSCAdderss[Buttons.Push.select] = "/ps2/buttons/push/select"; | |
| OSCAdderss[Buttons.Push.start] = "/ps2/buttons/push/start"; | |
| OSCAdderss[Dualshock.Left.horizontal] = "/ps2/dualshock/left/horizontal"; | |
| OSCAdderss[Dualshock.Left.vertical] = "/ps2/dualshock/left/vertical"; | |
| OSCAdderss[Dualshock.Left.click] = "/ps2/dualshock/left/click"; | |
| OSCAdderss[Dualshock.Right.horizontal] = "/ps2/dualshock/right/horizontal"; | |
| OSCAdderss[Dualshock.Right.vertical] = "/ps2/dualshock/right/vertical"; | |
| OSCAdderss[Dualshock.Right.click] = "/ps2/dualshock/right/click"; | |
| OSCAdderss[Controller.command] = "/ps2/command"; | |
| // **** **** | |
| Convert[Buttons.Push.x] = convertToggle; | |
| Convert[Buttons.Push.a] = convertToggle; | |
| Convert[Buttons.Push.b] = convertToggle; | |
| Convert[Buttons.Push.y] = convertToggle; | |
| Convert[Buttons.Push.top] = convertToggle; | |
| Convert[Buttons.Push.right] = convertToggle; | |
| Convert[Buttons.Push.bottom] = convertToggle; | |
| Convert[Buttons.Push.left] = convertToggle; | |
| Convert[Buttons.Push.l1] = convertToggle; | |
| Convert[Buttons.Push.r1] = convertToggle; | |
| Convert[Buttons.Push.l2] = convertToggle; | |
| Convert[Buttons.Push.r2] = convertToggle; | |
| Convert[Buttons.Push.select] = convertToggle; | |
| Convert[Buttons.Push.start] = convertToggle; | |
| Convert[Dualshock.Left.horizontal] = convert7bit; | |
| Convert[Dualshock.Left.vertical] = convert7bit; | |
| Convert[Dualshock.Left.click] = convertToggle; | |
| Convert[Dualshock.Right.horizontal] = convert7bit; | |
| Convert[Dualshock.Right.vertical] = convert7bit; | |
| Convert[Dualshock.Right.click] = convertToggle; | |
| Convert[Controller.command] = convertId; | |
| // **** **** | |
| PS2Map[Buttons.Push.x] = 19; | |
| PS2Map[Buttons.Push.a] = 20; | |
| PS2Map[Buttons.Push.b] = 21; | |
| PS2Map[Buttons.Push.y] = 22; | |
| PS2Map[Buttons.Push.top] = 11; | |
| PS2Map[Buttons.Push.right] = 12; | |
| PS2Map[Buttons.Push.bottom] = 13; | |
| PS2Map[Buttons.Push.left] = 14; | |
| PS2Map[Buttons.Push.l1] = 17; | |
| PS2Map[Buttons.Push.r1] = 18; | |
| PS2Map[Buttons.Push.l2] = 15; | |
| PS2Map[Buttons.Push.r2] = 16; | |
| PS2Map[Buttons.Push.select] = 7; | |
| PS2Map[Buttons.Push.start] = 10; | |
| PS2Map[Dualshock.Left.horizontal] = 26; | |
| PS2Map[Dualshock.Left.vertical] = 27; | |
| PS2Map[Dualshock.Left.click] = 8; | |
| PS2Map[Dualshock.Right.horizontal] = 28; | |
| PS2Map[Dualshock.Right.vertical] = 29; | |
| PS2Map[Dualshock.Right.click] = 9; | |
| PS2Map[Controller.command] = convertId; | |
| function crossButton(pos, value) { | |
| if(value == 15) { | |
| return 0; | |
| } else { | |
| switch(pos) { | |
| case 1: return ((value <= 1) || (value == 7)) ? 1 : 0; break; | |
| case 2: return ((1 <= value) && (value <= 3)) ? 1 : 0; break; | |
| case 3: return ((3 <= value) && (value <= 5)) ? 1 : 0; break; | |
| case 4: return ((5 <= value) && (value <= 7)) ? 1 : 0; break; | |
| } | |
| } | |
| } | |
| var State = { | |
| isL2ButtonPushed: false, | |
| isR2ButtonPushed: false, | |
| isDualshockEnable: false | |
| }; | |
| function ps2(address, value) { | |
| switch(address) { | |
| case 30: | |
| case 54: | |
| case 56: | |
| case 69: | |
| break; | |
| case Buttons.Push.l2: | |
| State.isL2ButtonPushed = (0 < value); | |
| break; | |
| case Buttons.Push.r2: | |
| State.isR2ButtonPushed = (0 < value); | |
| break; | |
| case Controller.dualshockEnable: | |
| State.isDualshockEnable = (value == 115); | |
| break; | |
| default: | |
| if(State.isDualshockEnable) { | |
| if( | |
| address == Dualshock.Left.horizontal | |
| || address == Dualshock.Left.vertical | |
| || address == Dualshock.Right.horizontal | |
| || address == Dualshock.Right.vertical | |
| ) { | |
| if(State.isL2ButtonPushed && State.isR2ButtonPushed) { | |
| outlet(CCOutlet, PS2Map[address], Convert[address](value)); | |
| outlet(OSCOutlet, OSCAdderss[address], value); | |
| } | |
| } else if(address == Controller.command) { | |
| outlet(NoteOutlet, PS2Map[Buttons.Push.top], crossButton(1, value) * 127); | |
| outlet(OSCOutlet, OSCAdderss[Buttons.Push.top], crossButton(1, value)); | |
| outlet(NoteOutlet, PS2Map[Buttons.Push.right], crossButton(2, value) * 127); | |
| outlet(OSCOutlet, OSCAdderss[Buttons.Push.right], crossButton(2, value)); | |
| outlet(NoteOutlet, PS2Map[Buttons.Push.bottom], crossButton(3, value) * 127); | |
| outlet(OSCOutlet, OSCAdderss[Buttons.Push.bottom], crossButton(3, value)); | |
| outlet(NoteOutlet, PS2Map[Buttons.Push.left], crossButton(4, value) * 127); | |
| outlet(OSCOutlet, OSCAdderss[Buttons.Push.left], crossButton(4, value)); | |
| } else { | |
| outlet(NoteOutlet, PS2Map[address], Convert[address](value)); | |
| outlet(OSCOutlet, OSCAdderss[address], value); | |
| } | |
| } else { | |
| if(address == Dualshock.Left.horizontal) { | |
| outlet(NoteOutlet, PS2Map[Buttons.Push.right], (127 < value) ? 127 : 0); | |
| outlet(OSCOutlet, OSCAdderss[Buttons.Push.right], (127 < value) ? 1 : 0); | |
| outlet(NoteOutlet, PS2Map[Buttons.Push.left], (value < 127) ? 127 : 0); | |
| outlet(OSCOutlet, OSCAdderss[Buttons.Push.left], (value < 127) ? 1 : 0); | |
| } else if(address == Dualshock.Left.vertical) { | |
| outlet(NoteOutlet, PS2Map[Buttons.Push.bottom], (127 < value) ? 127 : 0); | |
| outlet(OSCOutlet, OSCAdderss[Buttons.Push.bottom], (127 < value) ? 1 : 0); | |
| outlet(NoteOutlet, PS2Map[Buttons.Push.top], (value < 127) ? 127 : 0); | |
| outlet(OSCOutlet, OSCAdderss[Buttons.Push.top], (value < 127) ? 1 : 0); | |
| } else { | |
| outlet(NoteOutlet, PS2Map[address], Convert[address](value)); | |
| outlet(OSCOutlet, OSCAdderss[address], value); | |
| } | |
| } | |
| break; | |
| } | |
| } | |
| return ps2; | |
| })(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment