Page 1 of 4 1234 LastLast
Results 1 to 30 of 95

Topic: Direct CronusMAX Plus API

  1. #1
    LEGENDARY EAGLE

    User Info Menu

    Direct CronusMAX Plus API

    I've attached our Direct CronusMAX Plus API for those of you wanting to make your own applications using the CronusMAX Plus, in the package you'll also find a quick sample written in C# with WPF for the GUI

    This API requires .NET 4.6 and C++ 2015 Redistributable x86: https://www.microsoft.com/en-us/down....aspx?id=48145

    You cannot use your application and Cronus PRO at the same time with the same device (you can use it with a separate device tho if you like)

    This API should theoretically work fine with C++.NET, VB.NET and any other .NET language and possibly other languages aswell that can import .NET applications

    Here's a list of the classes and their properties/functions etc.:

    OutputBuffer:
    public readonly int[] Outputs; - an array holding the 36 output values (index 0 - 29 are controller outputs and 30 - 35 are TRACE_1 - TRACE_6)
    public int Output00; - A property that directly gets you the value of index 0 from the above array
    public int Output01; - A property that directly gets you the value of index 1 from the above array
    ... all the way to Output29

    public int Trace1; - A Property that directly gets you the TRACE_1 value from the above array
    public int Trace2; - A Property that directly gets you the TRACE_2 value from the above array
    ... all the way to Trace6

    This class is used to hold the Output & Trace values for I/O Status

    InputBuffer:
    public readonly int[] Inputs; - Similar to Outputs in OutputBuffer except for Inputs...
    public int Input00; - A property that directly gets you the value of index 0 from the above array
    public int Input01; - A property that directly gets you the value of index 1 from the above array
    ... all the way to Input29

    This class is used to hold the Input values for I/O Status

    CmCommand:
    Same as OutputBuffer, just used slightly differently internally

    This class is used to send controller output to the CM through the API Mode (it ONLY effects the controller output, nothing else)

    CmCommandEx:
    Same as CmCommand with the addition of controlling various other things:

    public bool ResetLeds; - A variable used to determine if you wish to reset the leds to their default values (as defined by the console)
    public bool TurnOffController; - A variable used to determine if you wish to turn off the controller
    public bool ResetRumble; - A property used to determine if you wish to reset the rumble to their default state (and thus disable blocking rumble)
    public int RumbleA; - A property used to determine how much RUMBLE_A should be set to - Range: 0 - 100
    public int RumbleB; - A property used to determine how much RUMBLE_B should be set to - Range: 0 - 100
    public int RumbleLT; - A property used to determine how much RUMBLE_LT should be set to - Range: 0 - 100
    public int RumbleRT; - A property used to determine how much RUMBLE_RT should be set to - Range: 0 - 100
    public bool BlockRumble; - A Property used to determine if you wish to block the rumble packet completely
    public IOStatus.LedState Led1; - A Property used to determine the state of LED_1
    public IOStatus.LedState Led2; - A Property used to determine the state of LED_2
    public IOStatus.LedState Led3; - A Property used to determine the state of LED_3
    public IOStatus.LedState Led4; - A Property used to determine the state of LED_4

    public CmCommandEx CreateCoppy(); - A Function that generates a copy to retain settings without sending flags that things changed (use this if you already have a instance of this class, otherwise create a new instance)

    IOStatus:

    public enum ConsoleType {
    None = 0x00, // No Console connected
    Ps3 = 0x01, // Connected to a PS3
    Xb360 = 0x02, // Connected to a Xbox 360
    Ps4 = 0x03, // Connected to a PS4
    Xb1 = 0x04, // Connected to a Xbox One
    Wheel = 0x08, // Wheel Edition outputs as a Wheel, this bit is set for that
    Ps3Wheel = Ps3 | Wheel, // A Combination flag for PS3/Wheel (Not used)
    Xb360Wheel = Xb360 | Wheel, // A Combination flag for Xbox 360/Wheel (Not used)
    Ps4Wheel = Ps4 | Wheel, // A Combination flag for PS4/Wheel - Used with Wheel Edition (Outputting as a G29)
    Xb1Wheel = Xb1 | Wheel // A Combination flag for Xbox 1/Wheel (Not used)
    }

    public enum ControllerType {
    None = 0x00, // No Controller connected
    Ps3 = 0x10, // A Dualshock 3 Controller connected
    Xb360 = 0x20, // A Xbox 360 Controller connected
    Wii = 0x30, // A Wiimote Controller connected
    WiiN = 0x31, // A Wiimote Controller with a Nunchuck connected
    WiiPro = 0x32, // A Wii Classic Pro controller connected
    Ps4 = 0x40, // A Dualshock 4 Controller connected
    Xb1 = 0x50, // A Xbox One Controller connected
    G25 = 0x69, // A Logitech G25 Wheel connected (Wheel Edition Only)
    G27 = 0x6B // A Logitech G27 Wheel connected (Wheel Edition Only)
    }

    public enum LedState {
    Off = 0, // Led# is Off
    On = 1, // Led# is On
    Blink = 2, // Led# is Blinking
    BlinkSlow = 3 // Led# is Blinking Slowly
    }

    public readonly InputBuffer InputStatus; - A Variable holding the current Input Values
    public readonly OutputBuffer OutputStatus; - A Variable holding the current Output & Trace Values
    public string Console; - A Readonly Property that is a text representation of the currently connected console
    public ConsoleType ConnectedConsole; - A Readonly Property that holds a flag telling you what console the CM is connected to
    public string Controller; - A Readonly Property that is a text representation of the currently connected controller
    public ControllerType ConnectedController; - A Readonly Property that holds a flag telling you what controller is connected to the CM
    public DateTime Timestamp; - A Readonly Property that is a timestamp for when this I/O Status was generated
    public string Slot; - A Readonly Property that is a text representation of the currently used slot
    public int SlotValue; - A Readonly Property that holds the value of the current slot, range: 0 - 10 (10 is when you have loaded a script rather then using an actual slot on the CM)
    public string Battery; - A Readonly Property that is a text representation of the current state of the battery, 0 - 100% or "Charging"
    public int BatteryValue; - A Readonly Property that holds the value of the battery Range: 0 - 100 (normal) anything above 100 means it's charging... the stepping is 10
    public string Cpuload; - A Readonly Property that is a text representation of the current Cpuload of the CM
    public int CpuloadValue; - A Readonly Property that holds the current value of the current Cpuload of the CmCommand
    public string Led1; - A Readonly Property that is a text representation of the current state of LED_1
    public LedState LedState1; - A Readonly Property that holds the current state of LED_1
    public string Led2; - A Readonly Property that is a text representation of the current state of LED_2
    public LedState LedState2; - A Readonly Property that holds the current state of LED_2
    public string Led3; - A Readonly Property that is a text representation of the current state of LED_3
    public LedState LedState3; - A Readonly Property that holds the current state of LED_3
    public string Led4; - A Readonly Property that is a text representation of the current state of LED_4
    public LedState LedState4; - A Readonly Property that holds the current state of LED_4
    public string RumbleA; - A Readonly Property that is a text representation of the current state of RUMBLE_A
    public int RumbleA; - A Readonly Property that holds the value of the current state of RUMBLE_A, Range: 0 - 100
    public string RumbleB; - A Readonly Property that is a text representation of the current state of RUMBLE_B
    public int RumbleB; - A Readonly Property that holds the value of the current state of RUMBLE_B, Range: 0 - 100
    public string RumbleLt; - A Readonly Property that is a text representation of the current state of RUMBLE_LT
    public int RumbleLt; - A Readonly Property that holds the value of the current state of RUMBLE_LT, Range: 0 - 100
    public string RumbleRt; - A Readonly Property that is a text representation of the current state of RUMBLE_RT
    public int RumbleRt; - A Readonly Property that holds the value of the current state of RUMBLE_RT, Range: 0 - 100

    This class is used to tell you what the current state of the CM is in (Everything you can see in Device Monitor)

    IOLabels:
    public static string[] GetLabels(IOStatus.ControllerType controller); - A Function that returns an array of 30 strings representing the fields of the controller passed to the function, where there is no name a null value is set
    public static string[] GetLabels(IOStatus.ConsoleType console); - A Function that returns an array of 30 strings representing the fields of the console passed to the function, where there is no name a null value is set

    This static class is used to get the labels for the various buttons

    DeviceSettings:

    public enum BackLightValues {
    Disabled = 0x00, // CM Backlight Disabled
    Blue = 0x01, // CM Backlight Custom - Blue
    Green = 0x02, // CM Backlight Custom - Green
    Cyan = 0x03, // CM Backlight Custom - Cyan
    Red = 0x04, // CM Backlight Custom - Red
    Magenta = 0x05, // CM Backlight Custom - Magenta
    Yellow = 0x06, // CM Backlight Custom - Yellow
    White = 0x07, // CM Backlight Custom - White
    Custom = Blue | Green | Cyan | Red | Magenta | Yellow | White, // CM Backlight Custom - This value should NOT be set, it's a flag you can use to check if it's custom or not
    StrictControllerPlayerLeds = 0x40, // CM Backlight Strict Controller Player Leds (It ignores GPC changes)
    MimicControllerPlayerLeds = 0x80 // CM Backlight Mimic Controller Player Leds (It follows whatever GPC says)
    }

    public enum BtRumbles {
    Fullspeed = 0x00, // Full Speed - No limitations
    FlowControl = 0x01, // Flow Control - Some limitations
    FlowControlPlus = 0x02, // Flow Control+ - Less limitations then above
    Disabled = 0x03 // Disabled - Completely disabled
    }

    public enum Consoles {
    Automatic = 0x00, // Automatic Output Protocol
    Ps3 = 0x01, // Force PS3 Output Protocol
    Xb360 = 0x02, // Force Xbox 360 Output Protocol
    Ps4 = 0x03, // Force PS4 Output Protocol
    Xb1 = 0x04 // Force Xbox One Output Protocol
    }

    public enum TimeoutValues {
    Disabled = 0, // Don't turn off the controller due to inactivity
    Minutes5 = 5, // Wait 5 minutes before turning off the controller
    Minutes10 = 10, // Wait 10 minutes before turning off the controller
    Minutes15 = 15, // Wait 15 minutes before turning off the controller
    Minutes20 = 20, // Wait 20 minutes before turning off the controller
    Minutes30 = 30, // Wait 30 minutes before turning off the controller
    Minutes60 = 60 // Wait 60 minutes before turning off the controller
    }

    public BtRumbles BtRumble;
    public bool BtSearching;
    public bool Ds3AutoPair;
    public byte Ds4LightbarBrightness;
    public TimeoutValues IdleTimeout;
    public Consoles OutputProtocol;
    public bool PartialDs4CrossOver;
    public bool RemoteControlSlot;
    public bool RemoteControlSlotG8;
    public bool SlotRecall;
    public bool InFrameOut;
    public bool InFrameIn;
    public bool OneMsResponse;
    public bool Ds4BtBoost;

    This class is used to determine what settings the current CM has along with saving new settings

    DeviceInformation:

    public enum OperationalModes {
    Unknown, // The operational mode of this CM isn't supported/known
    Standard, // It's the Standard Edition firmware...
    TournamentEdition, // It's the Tournament Edition firmware...
    WheelEdition // It's the PS4 Wheel Edition firmware...
    }

    public enum States {
    Disconnected, // There is no supported CM connected/detected/found
    Connected, // There is a supported CM connected in it's standard mode, and it's ready for communication
    ApiMode, // There is a supported CM connected in it's API mode, and it's ready for API commands
    Updating // There is a supported CM connected, and we are attempting to get information about it (Operational Mode, Firmware Version etc.)
    }

    public States State; - A readonly property telling you what state the CM is currently in
    public Version Fw; - A readonly property telling you what firmware the currently connected CM has (null if unknown [only happening while "updating"])
    public OperationalModes OperationalMode; - A readonly property telling you what operational mode the current CM is in
    public bool IsHubCompatible; - A readonly property telling you whether or not the currently connected CM is "Hub Compatible" (1.21+ only)

    This class i used to determine what state the current CM is in, along with giving you some basic information about it...

    Device:

    public static EventHandler<DeviceInformation> DeviceInformationChanged; - A static EventHandler that you can register to in order to be notified of when the information/status of the connected CM changes
    public static EventHandler<DeviceSettings> DeviceSettingsChanged; - A static EventHandler that you can register to in order to be notified of when the settings changed (when a request for the device settings has been completed)
    public static EventHandler<IOStatus> IOStatusChanged; - A static EventHandler that you can register to in order to be notified of when the I/O Status changes (as a response to your request for an IO Status update, or an API mode output call)

    public static void StartWorkerThreads(); - A static function you must call in order for the API to actually work (this is what makes the API actually function, it's got it's own threads for the communication with the CM)

    public static DeviceInformation GetLastDeviceInfo(); - A static function you can call to get the last DeviceInformation/State (current info/state)
    public static DeviceSettings GetLastDeviceSettings(); - A static function you can call to get the last DeviceSettings (current settings, NOTE: this function only returns the last settings as per your last request's response from the CM) NOTE: this function will return null if there has been no request made, otherwise it'll return whatever is cached in memory since last completed request

    public static void RequestSettings(); - A static function you can call to request the current settings of the currently connected CM, NOTE: this function cannot be used while in API mode
    public static void SaveSettings(DeviceSettings settings); - A static function you can call to save the settings you pass to it to the currently connected CM, NOTE: this function cannot be used while in API mode

    public static void EnterApiMode(); - A static function you must call before you can start sending out API output packets, NOTE: this function cannot be used while in API mode
    public static void ExitApiMode(); - A static function you can call to return to "normal" state if/when you want to stop sending API output packets, NOTE: This function can only be used while in API mode

    public static void RequestIoStatus(); - A static function you can call to request the current I/O status, NOTE: this function cannot be used while in API mode

    public static void UnloadGpc(); - A static function you can call to unload the current GPC script from memory, NOTE: this function cannot be used while in API mode
    public static void LoadGpc(byte[] bytecode); - A static function you can call to send a compiled GPC script (bytecode) to the CM, NOTE: this function cannot be used while in API mode
    public static void LoadGpc(string filename); - Same as above, except it takes a filename and will load whatever is in the file as bytecode, NOTE: this function cannot be used while in API mode

    public static void ChangeSlot(); - A static function you can call to switch slot on the CM, NOTE: this function cannot be used while in API mode
    public static void TurnOffController(); - A static function you can call to turn off the currently connected controller, NOTE: this function cannot be used while in API mode

    public static bool SendApiModeData(CmCommand buffer); - A static function you can call to send controller output, see CmCommand for more information about the buffer, it will return true if the buffer was actually sent, otherwise false, NOTE: This function can only be used while in API Mode
    public static bool SendApiModeData(CmCommandEx buffer); - A static function you can call to send controller output along with Leds, Rumbles etc. see CmCommandEx for more information about the buffer, it will return true if the buffer was actually sent, otherwise false, NOTE: This function can only be used while in API Mode
    NOTE: The latest version can be found in this post: https://cronusmax.com/forums/showthre...=1#post1071268 and it no longer requires C++, and is in a single dll rather then 2
    Attached Files Attached Files

  2. The Following 16 Users Say Thank You to Swizzy For This Useful Post:


  3. #2
    SILVER IV

    User Info Menu

    Re: Direct CronusMAX Plus API

    Hi,

    Is it possible to simply "press buttons" on a PS4 controller using the direct API for the CronusMax device?

    I am using VS 2010 Ultimate and I have a .NET V4.0 C++ Form application to which I want to add the ability to press some PS4 buttons.

    I am looking for a DLL to include into my project and call whichever method to tell the device to press X or O or R1 or such. That's it! Nothing else!

    The LibCronusMax documentation does not have a simple "Hello World" example that shows how the LibCronusMax.dll works. Your included project is a C# project for VS 2015 and .NET 4.6, which I both don't use in my current project. I also don't understand why I you say that .NET 4.6 Framework is necessary for an included DLL. I guess that you mean the project file in the package...

    I also own the Titan One. It also has a API, which can be easily added to any project. But for whatever reason not even the included example of that device is working.

    I don't care which device I am going to use in the end. So far nothing works.

    So my question is: Is it really that complicated? All I want to do is press buttons from my application.

  4. #3
    LEGENDARY EAGLE

    User Info Menu

    Re: Direct CronusMAX Plus API

    The dll is written using C# which uses the .NET framework, it has been compiled using the 4.6 version, therfor your project needs to be .NET 4.6 aswell, this particular version needs to be set to x86 aswell which C++ projects are by default...

    For C++ projects you need to enable "CLR" support (that's .NET support)

    I can write you an example of how to use this with C++ if you want... and yes, you can tell it to just press the button... but there are a few steps to get to the point where you can do that...

  5. #4
    SILVER IV

    User Info Menu

    Re: Direct CronusMAX Plus API

    Thanks for the info!

    It's a shame that .NET 4.6 is needed.

    I have currently two open projects. A fun one, where I want to play a game completely automatically by analyzing the screen and then press the appropriate buttons on the controller. For that one it does not matter which .NET version is used.

    The other one is a professional application for a client. This one is huge and it is the important one. It's written in C++ using .NET 4.0. It needs to be running on XP, Win 7, 8 and 10. I can't change the .NET version for this app for a number of reasons. This also means that I unfortunately can't use the CM.

    Today I found the problem why I could not get the API for the T1 get to work. This device is not bound to a specific .NET version. So I guess that I will use the T1 for both projects...

  6. #5
    LEGENDARY EAGLE

    User Info Menu

    Re: Direct CronusMAX Plus API

    Quote Originally Posted by hot955 View Post
    Thanks for the info!

    It's a shame that .NET 4.6 is needed.

    I have currently two open projects. A fun one, where I want to play a game completely automatically by analyzing the screen and then press the appropriate buttons on the controller. For that one it does not matter which .NET version is used.

    The other one is a professional application for a client. This one is huge and it is the important one. It's written in C++ using .NET 4.0. It needs to be running on XP, Win 7, 8 and 10. I can't change the .NET version for this app for a number of reasons. This also means that I unfortunately can't use the CM.

    Today I found the problem why I could not get the API for the T1 get to work. This device is not bound to a specific .NET version. So I guess that I will use the T1 for both projects...
    I've updated it to be compiled with 4.0 instead of 4.6, when i made the API it was based on the code used in Cronus PRO, and at the time i wasn't aware that CancelIO is actually supported with Windows XP+, i was told it was Vista+ which is why we opted to drop XP Support completely... honestly tho, there isn't that much of a point to be stuck with XP...

    Anyways, i've attached the new version of the DirectAPI Library below... here's the new documentation for it:

    Classes:

    OutputBuffer:
    public readonly int[] Outputs; - an array holding the 36 output values (index 0 - 29 are controller outputs and 30 - 35 are TRACE_1 - TRACE_6)
    public int Output00; - A property that directly gets you the value of index 0 from the above array
    public int Output01; - A property that directly gets you the value of index 1 from the above array
    ... all the way to Output29

    public int Trace1; - A Property that directly gets you the TRACE_1 value from the above array
    public int Trace2; - A Property that directly gets you the TRACE_2 value from the above array
    ... all the way to Trace6

    This class is used to hold the Output & Trace values for I/O Status

    InputBuffer:
    public readonly int[] Inputs; - Similar to Outputs in OutputBuffer except for Inputs...
    public int Input00; - A property that directly gets you the value of index 0 from the above array
    public int Input01; - A property that directly gets you the value of index 1 from the above array
    ... all the way to Input29

    This class is used to hold the Input values for I/O Status

    CmCommand:
    Same as OutputBuffer, just used slightly differently internally

    This class is used to send controller output to the CM through the API Mode (it ONLY effects the controller output, nothing else)

    CmCommandEx:
    Same as CmCommand with the addition of controlling various other things:

    public bool ResetLeds; - A variable used to determine if you wish to reset the leds to their default values (as defined by the console)
    public bool TurnOffController; - A variable used to determine if you wish to turn off the controller
    public bool ResetRumble; - A property used to determine if you wish to reset the rumble to their default state (and thus disable blocking rumble)
    public int RumbleA; - A property used to determine how much RUMBLE_A should be set to - Range: 0 - 100
    public int RumbleB; - A property used to determine how much RUMBLE_B should be set to - Range: 0 - 100
    public int RumbleLT; - A property used to determine how much RUMBLE_LT should be set to - Range: 0 - 100
    public int RumbleRT; - A property used to determine how much RUMBLE_RT should be set to - Range: 0 - 100
    public bool BlockRumble; - A Property used to determine if you wish to block the rumble packet completely
    public IOStatus.LedState Led1; - A Property used to determine the state of LED_1
    public IOStatus.LedState Led2; - A Property used to determine the state of LED_2
    public IOStatus.LedState Led3; - A Property used to determine the state of LED_3
    public IOStatus.LedState Led4; - A Property used to determine the state of LED_4

    public CmCommandEx CreateCoppy(); - A Function that generates a copy to retain settings without sending flags that things changed (use this if you already have a instance of this class, otherwise create a new instance)

    IOStatus:

    public enum ConsoleType {
    None = 0x00, // No Console connected
    Ps3 = 0x01, // Connected to a PS3
    Xb360 = 0x02, // Connected to a Xbox 360
    Ps4 = 0x03, // Connected to a PS4
    Xb1 = 0x04, // Connected to a Xbox One
    Wheel = 0x08, // Wheel Edition outputs as a Wheel, this bit is set for that
    Ps3Wheel = Ps3 | Wheel, // A Combination flag for PS3/Wheel (Not used)
    Xb360Wheel = Xb360 | Wheel, // A Combination flag for Xbox 360/Wheel (Not used)
    Ps4Wheel = Ps4 | Wheel, // A Combination flag for PS4/Wheel - Used with Wheel Edition (Outputting as a G29)
    Xb1Wheel = Xb1 | Wheel // A Combination flag for Xbox 1/Wheel (Not used)
    }

    public enum ControllerType {
    None = 0x00, // No Controller connected
    Ps3 = 0x10, // A Dualshock 3 Controller connected
    Xb360 = 0x20, // A Xbox 360 Controller connected
    Wii = 0x30, // A Wiimote Controller connected
    WiiN = 0x31, // A Wiimote Controller with a Nunchuck connected
    WiiPro = 0x32, // A Wii Classic Pro controller connected
    Ps4 = 0x40, // A Dualshock 4 Controller connected
    Xb1 = 0x50, // A Xbox One Controller connected
    G25 = 0x69, // A Logitech G25 Wheel connected (Wheel Edition Only)
    G27 = 0x6B // A Logitech G27 Wheel connected (Wheel Edition Only)
    }

    public enum LedState {
    Off = 0, // Led# is Off
    On = 1, // Led# is On
    Blink = 2, // Led# is Blinking
    BlinkSlow = 3 // Led# is Blinking Slowly
    }

    public readonly InputBuffer InputStatus; - A Variable holding the current Input Values
    public readonly OutputBuffer OutputStatus; - A Variable holding the current Output & Trace Values
    public string Console; - A Readonly Property that is a text representation of the currently connected console
    public ConsoleType ConnectedConsole; - A Readonly Property that holds a flag telling you what console the CM is connected to
    public string Controller; - A Readonly Property that is a text representation of the currently connected controller
    public ControllerType ConnectedController; - A Readonly Property that holds a flag telling you what controller is connected to the CM
    public DateTime Timestamp; - A Readonly Property that is a timestamp for when this I/O Status was generated
    public string Slot; - A Readonly Property that is a text representation of the currently used slot
    public int SlotValue; - A Readonly Property that holds the value of the current slot, range: 0 - 10 (10 is when you have loaded a script rather then using an actual slot on the CM)
    public string Battery; - A Readonly Property that is a text representation of the current state of the battery, 0 - 100% or "Charging"
    public int BatteryValue; - A Readonly Property that holds the value of the battery Range: 0 - 100 (normal) anything above 100 means it's charging... the stepping is 10
    public string Cpuload; - A Readonly Property that is a text representation of the current Cpuload of the CM
    public int CpuloadValue; - A Readonly Property that holds the current value of the current Cpuload of the CmCommand
    public string Led1; - A Readonly Property that is a text representation of the current state of LED_1
    public LedState LedState1; - A Readonly Property that holds the current state of LED_1
    public string Led2; - A Readonly Property that is a text representation of the current state of LED_2
    public LedState LedState2; - A Readonly Property that holds the current state of LED_2
    public string Led3; - A Readonly Property that is a text representation of the current state of LED_3
    public LedState LedState3; - A Readonly Property that holds the current state of LED_3
    public string Led4; - A Readonly Property that is a text representation of the current state of LED_4
    public LedState LedState4; - A Readonly Property that holds the current state of LED_4
    public string RumbleA; - A Readonly Property that is a text representation of the current state of RUMBLE_A
    public int RumbleA; - A Readonly Property that holds the value of the current state of RUMBLE_A, Range: 0 - 100
    public string RumbleB; - A Readonly Property that is a text representation of the current state of RUMBLE_B
    public int RumbleB; - A Readonly Property that holds the value of the current state of RUMBLE_B, Range: 0 - 100
    public string RumbleLt; - A Readonly Property that is a text representation of the current state of RUMBLE_LT
    public int RumbleLt; - A Readonly Property that holds the value of the current state of RUMBLE_LT, Range: 0 - 100
    public string RumbleRt; - A Readonly Property that is a text representation of the current state of RUMBLE_RT
    public int RumbleRt; - A Readonly Property that holds the value of the current state of RUMBLE_RT, Range: 0 - 100

    This class is used to tell you what the current state of the CM is in (Everything you can see in Device Monitor)

    IOLabels:
    public static string[] GetLabels(IOStatus.ControllerType controller); - A Function that returns an array of 30 strings representing the fields of the controller passed to the function, where there is no name a null value is set
    public static string[] GetLabels(IOStatus.ConsoleType console); - A Function that returns an array of 30 strings representing the fields of the console passed to the function, where there is no name a null value is set

    This static class is used to get the labels for the various buttons

    DeviceSettings:

    public enum BackLightValues {
    Disabled = 0x00, // CM Backlight Disabled
    Blue = 0x01, // CM Backlight Custom - Blue
    Green = 0x02, // CM Backlight Custom - Green
    Cyan = 0x03, // CM Backlight Custom - Cyan
    Red = 0x04, // CM Backlight Custom - Red
    Magenta = 0x05, // CM Backlight Custom - Magenta
    Yellow = 0x06, // CM Backlight Custom - Yellow
    White = 0x07, // CM Backlight Custom - White
    Custom = Blue | Green | Cyan | Red | Magenta | Yellow | White, // CM Backlight Custom - This value should NOT be set, it's a flag you can use to check if it's custom or not
    StrictControllerPlayerLeds = 0x40, // CM Backlight Strict Controller Player Leds (It ignores GPC changes)
    MimicControllerPlayerLeds = 0x80 // CM Backlight Mimic Controller Player Leds (It follows whatever GPC says)
    }

    public enum BtRumbles {
    Fullspeed = 0x00, // Full Speed - No limitations
    FlowControl = 0x01, // Flow Control - Some limitations
    FlowControlPlus = 0x02, // Flow Control+ - Less limitations then above
    Disabled = 0x03 // Disabled - Completely disabled
    }

    public enum Consoles {
    Automatic = 0x00, // Automatic Output Protocol
    Ps3 = 0x01, // Force PS3 Output Protocol
    Xb360 = 0x02, // Force Xbox 360 Output Protocol
    Ps4 = 0x03, // Force PS4 Output Protocol
    Xb1 = 0x04 // Force Xbox One Output Protocol
    }

    public enum TimeoutValues {
    Disabled = 0, // Don't turn off the controller due to inactivity
    Minutes5 = 5, // Wait 5 minutes before turning off the controller
    Minutes10 = 10, // Wait 10 minutes before turning off the controller
    Minutes15 = 15, // Wait 15 minutes before turning off the controller
    Minutes20 = 20, // Wait 20 minutes before turning off the controller
    Minutes30 = 30, // Wait 30 minutes before turning off the controller
    Minutes60 = 60 // Wait 60 minutes before turning off the controller
    }

    public BtRumbles BtRumble;
    public bool BtSearching;
    public bool Ds3AutoPair;
    public byte Ds4LightbarBrightness;
    public TimeoutValues IdleTimeout;
    public Consoles OutputProtocol;
    public bool PartialDs4CrossOver;
    public bool RemoteControlSlot;
    public bool RemoteControlSlotG8;
    public bool SlotRecall;
    public bool InFrameOut;
    public bool InFrameIn;
    public bool OneMsResponse;
    public bool Ds4BtBoost;

    This class is used to determine what settings the current CM has along with saving new settings

    DeviceInformation:

    public enum OperationalModes {
    Unknown, // The operational mode of this CM isn't supported/known
    Standard, // It's the Standard Edition firmware...
    TournamentEdition, // It's the Tournament Edition firmware...
    WheelEdition // It's the PS4 Wheel Edition firmware...
    }

    public enum States {
    Disconnected, // There is no supported CM connected/detected/found
    Connected, // There is a supported CM connected in it's standard mode, and it's ready for communication
    ApiMode, // There is a supported CM connected in it's API mode, and it's ready for API commands
    Updating // There is a supported CM connected, and we are attempting to get information about it (Operational Mode, Firmware Version etc.)
    }

    public States State; - A readonly property telling you what state the CM is currently in
    public Version Fw; - A readonly property telling you what firmware the currently connected CM has (null if unknown [only happening while "updating"])
    public OperationalModes OperationalMode; - A readonly property telling you what operational mode the current CM is in
    public bool IsHubCompatible; - A readonly property telling you whether or not the currently connected CM is "Hub Compatible" (1.21+ only)

    This class i used to determine what state the current CM is in, along with giving you some basic information about it...

    CommandFailedEventArgs:

    public enum Commands {
    RequestIoStatus,
    LoadScript,
    ApiModeBuffer,
    RequestDeviceSettings,
    SaveDeviceSettings,
    EnterApiMode,
    ExitApiMode,
    UnloadGpc,
    ChangeSlot,
    TurnOffController,
    GetDeviceInfo
    }

    public enum FailureReasons {
    DeviceNotConnected,
    FailedToSendCommand,
    FailedToReadResult,
    NeedApiMode
    }

    public Commands Command; - The command that failed
    public FailureReasons Reason; - The reason it failed (DeviceNotConnected means it was disconnected, or you didn't have a CM connected before sending a request, NeedApiMode means you're currently not in API Mode which you need to be to use that particular command...)

    SingleDevice:

    public EventHandler<DeviceInformation> DeviceInformationChanged; - A EventHandler that you can register to in order to be notified of when the information/status of the connected CM changes
    public EventHandler<DeviceSettings> DeviceSettingsChanged; - A EventHandler that you can register to in order to be notified of when the settings changed (when a request for the device settings has been completed)
    public EventHandler<IOStatus> IOStatusChanged; - A EventHandler that you can register to in order to be notified of when the I/O Status changes (as a response to your request for an IO Status update, or an API mode output call)
    public EventHandler<CommandFailedEventArgs> CommandFailed; - A Eventhandler that you can register to in order to be notified if/when a command failed, this is primarily for debugging purposes and/or so you can tell when the CM is malfunctioning for whatever reason

    public void StartWorkerThreads(); - A function you must call in order for the API to actually work (this is what makes the API actually function, it's got it's own threads for the communication with the CM)
    public void StopWorkerThreads(); - A function you can call to stop the API's worker threads, use this when you close your application, otherwise it may prevent your app from exiting

    public DeviceInformation GetLastDeviceInfo(); - A function you can call to get the last DeviceInformation/State (current info/state)
    public DeviceSettings GetLastDeviceSettings(); - A function you can call to get the last DeviceSettings (current settings, NOTE: this function only returns the last settings as per your last request's response from the CM) NOTE: this function will return null if there has been no request made, otherwise it'll return whatever is cached in memory since last completed request

    public void RequestSettings(); - A function you can call to request the current settings of the currently connected CM, NOTE: this function cannot be used while in API mode
    public void SaveSettings(DeviceSettings settings); - A function you can call to save the settings you pass to it to the currently connected CM, NOTE: this function cannot be used while in API mode

    public void EnterApiMode(); - A function you must call before you can start sending out API output packets, NOTE: this function cannot be used while in API mode
    public void ExitApiMode(); - A function you can call to return to "normal" state if/when you want to stop sending API output packets, NOTE: This function can only be used while in API mode

    public void RequestIoStatus(); - A function you can call to request the current I/O status, NOTE: this function cannot be used while in API mode

    public void UnloadGpc(); - A function you can call to unload the current GPC script from memory, NOTE: this function cannot be used while in API mode
    public void LoadGpc(byte[] bytecode); - A function you can call to send a compiled GPC script (bytecode) to the CM, NOTE: this function cannot be used while in API mode
    public void LoadGpc(string filename); - Same as above, except it takes a filename and will load whatever is in the file as bytecode, NOTE: this function cannot be used while in API mode

    public void ChangeSlot(); - A function you can call to switch slot on the CM, NOTE: this function cannot be used while in API mode
    public void TurnOffController(); - A function you can call to turn off the currently connected controller, NOTE: this function cannot be used while in API mode

    public bool SendApiModeData(CmCommand buffer); - A function you can call to send controller output, see CmCommand for more information about the buffer, it will return true if the buffer was actually sent, otherwise false, NOTE: This function can only be used while in API Mode
    public bool SendApiModeData(CmCommandEx buffer); - A function you can call to send controller output along with Leds, Rumbles etc. see CmCommandEx for more information about the buffer, it will return true if the buffer was actually sent, otherwise false, NOTE: This function can only be used while in API Mode
    I've fixed a few things and moved things from being static to being instance based, i've also added another sample (this one is also C#, but Windows Forms instead of WPF, it uses less features tho)
    Attached Files Attached Files

  7. The Following 2 Users Say Thank You to Swizzy For This Useful Post:


  8. #6
    SILVER IV

    User Info Menu

    Re: Direct CronusMAX Plus API

    Oh. That was quick. Thanks!

    I know. XP is dead... somehow. I have however still a major project going with one of my customers and as long as there is no urgent need for them
    to switch from XP to something newer they will stick with XP for the next 10
    years. They are active in a casino environment where it takes forever to get any new hardware and software approved. Therefore they will stick with XP until the sun burns out.

    I did not look at your new API yet. Can you slap a quick example for me together that shows how to
    init the thing a how to press a button?

    Thanks!

  9. #7
    LEGENDARY EAGLE

    User Info Menu

    Re: Direct CronusMAX Plus API

    Quote Originally Posted by hot955 View Post
    Oh. That was quick. Thanks!

    I know. XP is dead... somehow. I have however still a major project going with one of my customers and as long as there is no urgent need for them
    to switch from XP to something newer they will stick with XP for the next 10
    years. They are active in a casino environment where it takes forever to get any new hardware and software approved. Therefore they will stick with XP until the sun burns out.

    I did not look at your new API yet. Can you slap a quick example for me together that shows how to
    init the thing a how to press a button?

    Thanks!
    Working on it, my C++/CLR is a little rusty so it's not going quite as fast as i would like...

    ** edit: **

    I've attached a C++ sample for you that will press the button you press, it's a very basic sample (you may need to correct the path for the API dll), if you need a more abstract class, let me know and i'll implement that for you in an update in the next few days...
    Attached Files Attached Files

  10. The Following User Says Thank You to Swizzy For This Useful Post:


  11. #8
    SILVER IV

    User Info Menu

    Re: Direct CronusMAX Plus API

    Thanks for the example. It works as it shows how to press a button programatically. It however does not release the button. ;-) No problem. I got it under control.

    I've wrapped the button press stuff all into a function, so that I can press and release them with one single command, like this:

    press(PS4_CIRCLE, 120, 100);

    This presses Circle for 120ms, releases the button and then waits for 100ms to make sure that the next button press is not coming too fast after this one.

    I've decided to use the CM for my fun project, because I'm also using some scripts for some rapid-fire things and I'll use the T1 (as I have it already working) on the Casino project for my customer.

  12. #9
    SILVER III

    User Info Menu

    Re: Direct CronusMAX Plus API

    Hii...

    Can i have X-Aim running and an own app or will i be in trouble then?
    I want to make an own app waiting for a keyboard input that then starts a combo.

    Thanx and have a nice weekend

  13. #10
    LEGENDARY EAGLE

    User Info Menu

    Re: Direct CronusMAX Plus API

    Quote Originally Posted by case2k View Post
    Hii...

    Can i have X-Aim running and an own app or will i be in trouble then?
    I want to make an own app waiting for a keyboard input that then starts a combo.

    Thanx and have a nice weekend
    If you use 2 CronusMAX devices, probably... CronusPRO and the API both request exclusive access to the device which results in the other not seeing it...

  14. #11
    SILVER III

    User Info Menu

    Re: Direct CronusMAX Plus API

    Can i do any damage to the hardware ( cronus or xbox ). Never programmed an Api connected to hardware before and i have to learn c# to do it. Learning c# is fine, winter is coming.

  15. #12
    LEGENDARY EAGLE

    User Info Menu

    Re: Direct CronusMAX Plus API

    Quote Originally Posted by case2k View Post
    Can i do any damage to the hardware ( cronus or xbox ). Never programmed an Api connected to hardware before and i have to learn c# to do it. Learning c# is fine, winter is coming.
    No, the API handle all of the communication for you, we've intentionally not included ways of flashing the firmware/gamepacks to keep you away from anything that could potentially damage the CM, the console can't be damaged by the API either as all it does is communicate with the CM making it do the same things you can do with X-Aim and/or GPC scripts

  16. The Following User Says Thank You to Swizzy For This Useful Post:


  17. #13
    SILVER III

    User Info Menu

    Re: Direct CronusMAX Plus API

    Quote Originally Posted by Swizzy View Post
    No, the API handle all of the communication for you, we've intentionally not included ways of flashing the firmware/gamepacks to keep you away from anything that could potentially damage the CM, the console can't be damaged by the API either as all it does is communicate with the CM making it do the same things you can do with X-Aim and/or GPC scripts
    That`s great!!
    A foolproof toy, that`s right up my alley!!
    I will have fun fail or win, i have a new challenge!!
    Thanx

  18. #14
    LEGENDARY EAGLE

    User Info Menu

    Re: Direct CronusMAX Plus API

    Quote Originally Posted by case2k View Post
    That`s great!!
    A foolproof toy, that`s right up my alley!!
    I will have fun fail or win, i have a new challenge!!
    Thanx
    If you would like help or find something missing/difficult, feel free to ask, if there is something missing i will try to add it

  19. The Following User Says Thank You to Swizzy For This Useful Post:


  20. #15
    LEGENDARY EAGLE

    User Info Menu

    Re: Direct CronusMAX Plus API

    I've created another sample, this is more of a tool then an actual sample i guess, but...

    This sample/tool basically gives you a graph showing you the rumble over time (the last 6580 milliseconds which is approximately 6.5 seconds) which may be useful if looking for rumble patterns for scripting purposes (such as seeing a specific rumble value at a specific interval might be something that can be used to trigger a change on

    The sample/tool is attached below...
    Attached Files Attached Files

  21. The Following User Says Thank You to Swizzy For This Useful Post:


  22. #16
    SILVER IV

    User Info Menu

    Re: Direct CronusMAX Plus API

    I am trying to use the CM directly on a laptop while playing something on my PS4 through Remote Play. When the PS4 controller is directly connected to the laptop then Remote Play work just fine. When I plug the CM in between then Remote Play does not see the controller anymore.

    How can I simply check for which controller is connected and to which console the CM is connected?

    I guess that the CM does not see that is should work in PS4 mode when it it connected to a leptop with Remote Play. Can I force the CM to think that it is connected to a PS4 and not to a laptop?

  23. #17
    SILVER IV

    User Info Menu

    Re: Direct CronusMAX Plus API

    How do I read a PS4 controller through the API?

    I know how to create an OutputBuffer and send data to the CM, but I can't figure out how to read the controller.

    I did this:

    LibCronusMax::InputBuffer^ buffer = gcnew LibCronusMax::InputBuffer();

    Now I want to read the controller so that I have the 29 parameters in the buffer variable.

    How do I do this?

  24. #18
    LEGENDARY EAGLE

    User Info Menu

    Re: Direct CronusMAX Plus API

    Quote Originally Posted by hot955 View Post
    How do I read a PS4 controller through the API?

    I know how to create an OutputBuffer and send data to the CM, but I can't figure out how to read the controller.

    I did this:

    LibCronusMax::InputBuffer^ buffer = gcnew LibCronusMax::InputBuffer();

    Now I want to read the controller so that I have the 29 parameters in the buffer variable.

    How do I do this?
    You would do this:

    Code:
    _device->IoStatusChanged += gcnew EventHandler<LibCronusMAX::IOStatus^>(this, &MyForm::IoStatusChanged); // Subscribe to input/output changes/updates
    the function MyForm::IoStatusChanged would look something like this:

    Code:
    void DeviceInfoChanged(System::Object^ sender, LibCronusMAX::IOStatus^ status) {
        int i, btn;
        for (i = 0; i < 30; i++) {
           btn = status->InputStatus->Inputs[i]; // btn now holds the value of the input at index i (corresponding to the index/value listed here: https://cronusmax.com/manual/identifiers.htm )
        }
    }

  25. #19
    SILVER II

    User Info Menu

    Re: Direct CronusMAX Plus API

    Hi hot955, Were you able to figure out do it? I have the same problem

    Quote Originally Posted by hot955 View Post
    I am trying to use the CM directly on a laptop while playing something on my PS4 through Remote Play. When the PS4 controller is directly connected to the laptop then Remote Play work just fine. When I plug the CM in between then Remote Play does not see the controller anymore.

    How can I simply check for which controller is connected and to which console the CM is connected?

    I guess that the CM does not see that is should work in PS4 mode when it it connected to a leptop with Remote Play. Can I force the CM to think that it is connected to a PS4 and not to a laptop?

  26. #20
    LEGENDARY EAGLE

    User Info Menu

    Re: Direct CronusMAX Plus API

    Quote Originally Posted by rick c View Post
    Hi hot955, Were you able to figure out do it? I have the same problem
    Set the output protocol to PS4, this will make it output as a DS4 Controller

  27. #21
    SILVER IV

    User Info Menu

    Re: Direct CronusMAX Plus API

    Quote Originally Posted by Swizzy View Post
    Set the output protocol to PS4, this will make it output as a DS4 Controller
    How can I do this? I got everything else going, including routing of button presses through my software... Everything works.... except when I connect the CM to a laptop, which is running Sony's Remote Play.

    Can you post a few lines of code that show how to force the CM to think that it is connected to a PS4?

    Thanks!

  28. #22
    Senior Support Staff



    User Info Menu

    Re: Direct CronusMAX Plus API

    Attachment 3142

    Change 'Output Protocol' to 'PS4'.

  29. #23
    LEGENDARY EAGLE

    User Info Menu

    Re: Direct CronusMAX Plus API

    Quote Originally Posted by hot955 View Post
    How can I do this? I got everything else going, including routing of button presses through my software... Everything works.... except when I connect the CM to a laptop, which is running Sony's Remote Play.

    Can you post a few lines of code that show how to force the CM to think that it is connected to a PS4?

    Thanks!
    You would use this function: "Device.RequestSettings();" to request the settings, this should be done while listening to the "Device.DeviceSettingsChanged" event... to then save the settings you simply use "Device.SaveSettings(newsettings);"

    A way to automate the process is to listen to the DeviceSettingsChanged event like so in C#:

    Code:
    // These lines goes into your constructor
    App.Device.DeviceSettingsChanged += (sender, settings) => {
        settings.OutputProtocol = DeviceSettings.Consoles.Ps4;
        App.Device.SaveSettings(settings);
    };
    App.Device.DeviceInformationChanged += (sender, inf) => {
        if (inf.State == DeviceInformation.States.Connected)
            App.Device.RequestSettings();
    };
    Or like this in C++:

    Code:
    // These lines goes into the constructor
    _device->DeviceSettingsChanged += gcnew EventHandler<LibCronusMAX::DeviceSettings^>(this, &MyForm::DeviceSettingsChanged);
    _device->DeviceInformationChanged += gcnew EventHandler<LibCronusMAX::DeviceInformation^>(this, &MyForm::DeviceInfoChanged);
    
    // These functions goes into your "MyForm" class
    void DeviceSettingsChanged(System::Object^ sender, LibCronusMAX::DeviceSettings^ settings) {
        settings->OutputProtocol = LibCronusMAX::DeviceSettings::Consoles::Ps4;
        _device->SaveSettings(settings);
    }
    
    void DeviceInfoChanged(System::Object^ sender, LibCronusMAX::DeviceInformation^ inf) {
        if (inf->State == LibCronusMAX::DeviceInformation::States::Connected)
            _device->RequestSettings();    
    }
    NOTE: Both of these examples are from the samples provided by me, so you'll have to change the variables and such accordingly... they also respect the existing settings the user has, if you don't want to give a shit about that, you can just straight up send a new settings object whenever you need it to change it (if it's not already what you need it to be):

    C#:
    Code:
    private void ForcePs4Output() {
        App.Device.SaveSettings(new DeviceSettings {
            OutputProtocol = DeviceSettings.Consoles.Ps4
        });
    }
    C++:
    Code:
    private: System::Void ForcePs4Output() {
        LibCronusMAX::DeviceSettings^ settings = gcnew LibCronusMAX::DeviceSettings();
        settings->OutputProtocol = LibCronusMAX::DeviceSettings::Consoles::Ps4;
        _device->SaveSettings(settings);
    }

  30. The Following User Says Thank You to Swizzy For This Useful Post:


  31. #24
    SILVER IV

    User Info Menu

    Re: Direct CronusMAX Plus API

    And I have a new problem:
    Pressing buttons works great. Manipulating the ACC and GYRO values however does not work at all.

    I read the controller in the IOStatusChanged function and put the 29 values in an array. In my ButtonPress function I manipulate the appropriate value, copy the values to the SingleDevice^ variable and send it to the controller. The array indexes 0 (PS4_PS) through 20 (PS4_SQUARE) work great. When I however change the indexes 21-23, then nothing happens. When I shake the controller however, then I can see that the original acceleration values are transmitted to the PS4. When I output the values to a console window, then I also can see the values.... even the ones that I manipulate.

    Does the Cronus Max API maybe accidentally ignore the buffer21, buffer22 and buffer23 values?


    I also own the Titan One. On that device I can change successfully the ACC values through their API.

  32. #25
    LEGENDARY EAGLE

    User Info Menu

    Re: Direct CronusMAX Plus API

    Quote Originally Posted by hot955 View Post
    And I have a new problem:
    Pressing buttons works great. Manipulating the ACC and GYRO values however does not work at all.

    I read the controller in the IOStatusChanged function and put the 29 values in an array. In my ButtonPress function I manipulate the appropriate value, copy the values to the SingleDevice^ variable and send it to the controller. The array indexes 0 (PS4_PS) through 20 (PS4_SQUARE) work great. When I however change the indexes 21-23, then nothing happens. When I shake the controller however, then I can see that the original acceleration values are transmitted to the PS4. When I output the values to a console window, then I also can see the values.... even the ones that I manipulate.

    Does the Cronus Max API maybe accidentally ignore the buffer21, buffer22 and buffer23 values?


    I also own the Titan One. On that device I can change successfully the ACC values through their API.
    I'll investigate this issue, but are you using this on PS4 or PS3? does it work to manipulate them with GPC running on the CM itself? (if not, then it's not a API limitation but rather a firmware limitation)

  33. #26
    SILVER IV

    User Info Menu

    Re: Direct CronusMAX Plus API

    Quote Originally Posted by Swizzy View Post
    I'll investigate this issue, but are you using this on PS4 or PS3? does it work to manipulate them with GPC running on the CM itself? (if not, then it's not a API limitation but rather a firmware limitation)
    It's on a PS4.

    I did not test it with the GPC.

    This is how I read the controller:

    Code:
    int controllerInput[64];
    
    void IOStatusChanged(System::Object^ sender, LibCronusMAX::IOStatus^ status) {
            for ( int i = 0; i < 30; i++ ) {
            controllerInput[i] = status->InputStatus->Inputs[i];
        }
    }
    In a timed loop I call this to send the data to the PS4:

    Code:
    void press_sendCronus(int button, int value) {
        LibCronusMAX::CmCommand^ buf = gcnew LibCronusMAX::CmCommand();
    
        controllerInput[21] = somethingX; // Has no effect...
        controllerInput[22] = somethingY;
        controllerInput[23] = somethingZ;
    
        if ( button != PS4_NOTHING ) controllerInput[button] = value;
    
        buf->Output00 = controllerInput[0];
        buf->Output01 = controllerInput[1];
        buf->Output02 = controllerInput[2];
        buf->Output03 = controllerInput[3];
        buf->Output04 = controllerInput[4];
        buf->Output05 = controllerInput[5];
        buf->Output06 = controllerInput[6];
        buf->Output07 = controllerInput[7];
        buf->Output08 = controllerInput[8];
        buf->Output09 = controllerInput[9];
        buf->Output10 = controllerInput[10];
        buf->Output11 = controllerInput[11];
        buf->Output12 = controllerInput[12];
        buf->Output13 = controllerInput[13];
        buf->Output14 = controllerInput[14];
        buf->Output15 = controllerInput[15];
        buf->Output16 = controllerInput[16];
        buf->Output17 = controllerInput[17];
        buf->Output18 = controllerInput[18];
        buf->Output19 = controllerInput[19];
        buf->Output20 = controllerInput[20];
        buf->Output21 = controllerInput[21];
        buf->Output22 = controllerInput[22];
        buf->Output23 = controllerInput[23];
        buf->Output24 = controllerInput[24];
        buf->Output25 = controllerInput[25];
        buf->Output26 = controllerInput[26];
        buf->Output27 = controllerInput[27];
        buf->Output28 = controllerInput[28];
        buf->Output29 = controllerInput[29];
    
        _device->SendApiModeData(buf);
    }

  34. #27
    LEGENDARY EAGLE

    User Info Menu

    Re: Direct CronusMAX Plus API

    So, after talking with the firmware guys a little, i can say it's a firmware thing, we don't generate the gyro/acc traffic, we only read it... that's why you cannot send output as moving the controller...

  35. #28
    SILVER IV

    User Info Menu

    Re: Direct CronusMAX Plus API

    Will there be an update? It would be nice to be able to control the acc and gyro parameters. I can use this functionality in my current project...

  36. #29
    SILVER IV

    User Info Menu

    Re: Direct CronusMAX Plus API

    Quote Originally Posted by Swizzy View Post
    I'll investigate this issue, but are you using this on PS4 or PS3? does it work to manipulate them with GPC running on the CM itself? (if not, then it's not a API limitation but rather a firmware limitation)
    I've tested it in the GPC. It's also not working there. I can change every parameter and see the results in the graphs, even for the ACC and GYRO. But the PS4 does not react to any changes in the ACC and GYRO values.

  37. #30
    SILVER II

    User Info Menu

    Re: Direct CronusMAX Plus API

    Is the API still under active development? I am planning on using it intensively.

Page 1 of 4 1234 LastLast

Posting Permissions

  • You may not post new topics
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •