Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <stdint.h>
- #include <xtgmath.h>
- #include "include\sixense_math.hpp"
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <array>
- #include <algorithm>
- struct emulated_data
- {
- float yaw, pitch, roll;
- float x, y, z;
- float joystick_x;
- float joystick_y;
- float trigger;
- unsigned int buttons;
- int enabled;
- int controller_index;
- unsigned char is_docked;
- unsigned char which_hand;
- };
- #define SIXENSE_BUTTON_BUMPER (0x01<<7)
- #define SIXENSE_BUTTON_JOYSTICK (0x01<<8)
- #define SIXENSE_BUTTON_1 (0x01<<5)
- #define SIXENSE_BUTTON_2 (0x01<<6)
- #define SIXENSE_BUTTON_3 (0x01<<3)
- #define SIXENSE_BUTTON_4 (0x01<<4)
- #define SIXENSE_BUTTON_START (0x01<<0)
- #define SIXENSE_SUCCESS 0
- #define SIXENSE_FAILURE -1
- #define SIXENSE_MAX_CONTROLLERS 4
- #define SIXENSE_EXPORT extern "C" __declspec(dllexport)
- typedef struct _sixenseControllerData {
- float pos[3];
- float rot_mat[3][3];
- float joystick_x;
- float joystick_y;
- float trigger;
- unsigned int buttons;
- unsigned char sequence_number;
- float rot_quat[4];
- unsigned short firmware_revision;
- unsigned short hardware_revision;
- unsigned short packet_type;
- unsigned short magnetic_frequency;
- int enabled;
- int controller_index;
- unsigned char is_docked;
- unsigned char which_hand;
- unsigned char hemi_tracking_enabled;
- } sixenseControllerData;
- typedef struct _sixenseAllControllerData {
- sixenseControllerData controllers[4];
- } sixenseAllControllerData;
- SIXENSE_EXPORT int sixenseInit(void);
- SIXENSE_EXPORT int sixenseExit(void);
- SIXENSE_EXPORT int sixenseGetMaxBases();
- SIXENSE_EXPORT int sixenseSetActiveBase(int i);
- SIXENSE_EXPORT int sixenseIsBaseConnected(int i);
- SIXENSE_EXPORT int sixenseGetMaxControllers(void);
- SIXENSE_EXPORT int sixenseIsControllerEnabled(int which);
- SIXENSE_EXPORT int sixenseGetNumActiveControllers();
- SIXENSE_EXPORT int sixenseGetHistorySize();
- SIXENSE_EXPORT int sixenseGetData(int which, int index_back, sixenseControllerData *);
- SIXENSE_EXPORT int sixenseGetAllData(int index_back, sixenseAllControllerData *);
- SIXENSE_EXPORT int sixenseGetNewestData(int which, sixenseControllerData *);
- SIXENSE_EXPORT int sixenseGetAllNewestData(sixenseAllControllerData *);
- SIXENSE_EXPORT int sixenseSetHemisphereTrackingMode(int which_controller, int state);
- SIXENSE_EXPORT int sixenseGetHemisphereTrackingMode(int which_controller, int *state);
- SIXENSE_EXPORT int sixenseAutoEnableHemisphereTracking(int which_controller);
- SIXENSE_EXPORT int sixenseSetHighPriorityBindingEnabled(int on_or_off);
- SIXENSE_EXPORT int sixenseGetHighPriorityBindingEnabled(int *on_or_off);
- SIXENSE_EXPORT int sixenseTriggerVibration(int controller_id, int duration_100ms, int pattern_id);
- SIXENSE_EXPORT int sixenseSetFilterEnabled(int on_or_off);
- SIXENSE_EXPORT int sixenseGetFilterEnabled(int *on_or_off);
- SIXENSE_EXPORT int sixenseSetFilterParams(float near_range, float near_val, float far_range, float far_val);
- SIXENSE_EXPORT int sixenseGetFilterParams(float *near_range, float *near_val, float *far_range, float *far_val);
- SIXENSE_EXPORT int sixenseSetBaseColor(unsigned char red, unsigned char green, unsigned char blue);
- SIXENSE_EXPORT int sixenseGetBaseColor(unsigned char *red, unsigned char *green, unsigned char *blue);
- BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
- {
- /*switch (ul_reason_for_call)
- {
- case DLL_PROCESS_ATTACH:
- //case DLL_THREAD_ATTACH:
- //case DLL_THREAD_DETACH:
- case DLL_PROCESS_DETACH:
- break;
- }*/
- return TRUE;
- }
- SIXENSE_EXPORT int sixenseInit(void)
- {
- return SIXENSE_SUCCESS;
- }
- SIXENSE_EXPORT int sixenseExit(void)
- {
- return SIXENSE_SUCCESS;
- }
- SIXENSE_EXPORT int sixenseGetMaxBases()
- {
- return 4;
- }
- SIXENSE_EXPORT int sixenseSetActiveBase(int i)
- {
- return SIXENSE_SUCCESS;
- }
- SIXENSE_EXPORT int sixenseIsBaseConnected(int i)
- {
- if (i == 0)
- return 1;
- return 0;
- }
- SIXENSE_EXPORT int sixenseGetMaxControllers(void)
- {
- return 4;
- }
- SIXENSE_EXPORT int sixenseIsControllerEnabled(int which)
- {
- if (which <= 1)
- return 1;
- return 0;
- }
- SIXENSE_EXPORT int sixenseGetNumActiveControllers()
- {
- return 2;
- }
- SIXENSE_EXPORT int sixenseGetHistorySize()
- {
- return 0;
- }
- void convert_euler(float yaw, float pitch, float roll, sixenseControllerData *output) {
- auto mat =
- sixenseMath::Matrix3::rotation(roll, sixenseMath::Vector3(0, 0, -1)) *
- sixenseMath::Matrix3::rotation(pitch, sixenseMath::Vector3(1, 0, 0)) *
- sixenseMath::Matrix3::rotation(yaw, sixenseMath::Vector3(0, -1, 0));
- auto quat = sixenseMath::Quat(mat);
- quat.fill((float*)&output->rot_quat);
- mat.fill((float(*)[3])&output->rot_mat);
- }
- std::array<uint8_t, 2> sequence_numbers = { 0 };
- double myPosX1 = 100, myPosY1 = 0, myPosZ1 = 0, yaw1 = 0, roll1 = 0, pitch1 = 0;
- double myPosX2 = -100, myPosY2 = 0, myPosZ2 = 0, yaw2 = 0, roll2 = 0, pitch2 = 0;
- double DegToRad(double f) {
- return f * (3.14159265358979323846 / 180);
- }
- SIXENSE_EXPORT int sixenseGetData(int which, int index_back, sixenseControllerData *output)
- {
- if (index_back != 0 || which > 2)
- return SIXENSE_FAILURE;
- //auto view = shared_memory.open_view();
- //auto data = view.map()[which];
- /*output->sequence_number = sequence_numbers[which]++;
- output->buttons = data.buttons;
- output->trigger = data.trigger;
- output->controller_index = which;
- output->which_hand = data.which_hand;
- output->enabled = data.enabled;
- output->firmware_revision = 174;
- output->hardware_revision = 0;
- output->is_docked = data.is_docked;
- output->joystick_x = data.joystick_x;
- output->joystick_y = data.joystick_y;
- output->pos[0] = data.x;
- output->pos[1] = data.y;
- output->pos[2] = data.z;
- output->hemi_tracking_enabled = 1;
- output->magnetic_frequency = 0;
- output->packet_type = 1;
- convert_euler(data.yaw, data.pitch, data.roll, output); */
- output->buttons = 0;
- output->trigger = 0;
- output->controller_index = which;
- output->which_hand = 0;
- output->enabled = true;
- output->firmware_revision = 174;
- output->hardware_revision = 0;
- output->is_docked = 0;
- output->joystick_x = 0;
- output->joystick_y = 0;
- output->pos[0] = 0;
- output->pos[1] = 0;
- output->pos[2] = 0;
- output->hemi_tracking_enabled = 1;
- output->magnetic_frequency = 0;
- output->packet_type = 1;
- if ((GetAsyncKeyState(0x52) & 0x8000) != 0) { //Сброс всего
- myPosX1 = 100;
- myPosY1 = 0;
- myPosZ1 = 0;
- yaw1 = 0;
- pitch1 = 0;
- roll1 = 0;
- myPosX2 = -100;
- myPosY2 = 0;
- myPosZ2 = 0;
- yaw2 = 0;
- pitch2 = 0;
- roll2 = 0;
- }
- if (which == 0) {
- //X
- if ((GetAsyncKeyState(0x57) & 0x8000) != 0) myPosY1 += 1; //W
- if ((GetAsyncKeyState(0x53) & 0x8000) != 0) myPosY1 -= 1; //S
- //Y
- if ((GetAsyncKeyState(0x41) & 0x8000) != 0) myPosX1 += 1; //A
- if ((GetAsyncKeyState(0x44) & 0x8000) != 0) myPosX1 -= 1; //D
- //Z
- if ((GetAsyncKeyState(0x51) & 0x8000) != 0) myPosZ1 += 1; //Q
- if ((GetAsyncKeyState(0x45) & 0x8000) != 0) myPosZ1 -= 1; //E
- if ((GetAsyncKeyState(0x55) & 0x8000) != 0) yaw1 += 1; //U
- if (yaw1 > 179) yaw1 = -179;
- if ((GetAsyncKeyState(0x48) & 0x8000) != 0) roll1 += 1; //H
- if (roll1 > 179) roll1 = -179;
- if ((GetAsyncKeyState(0x4B) & 0x8000) != 0) pitch1 += 1; //K
- if (pitch1 > 179) pitch1 = -179;
- output->which_hand = 0;
- output->pos[0] = myPosX1;
- output->pos[1] = myPosZ1;
- output->pos[2] = myPosY1;
- if ((GetAsyncKeyState(0x31) & 0x8000) != 0) output->buttons = SIXENSE_BUTTON_BUMPER; //1
- if ((GetAsyncKeyState(0x32) & 0x8000) != 0) output->buttons = SIXENSE_BUTTON_JOYSTICK; //2
- if ((GetAsyncKeyState(0x33) & 0x8000) != 0) output->buttons = SIXENSE_BUTTON_1; //3
- if ((GetAsyncKeyState(0x34) & 0x8000) != 0) output->buttons = SIXENSE_BUTTON_2; //4
- if ((GetAsyncKeyState(0x35) & 0x8000) != 0) output->buttons = SIXENSE_BUTTON_3; //5
- if ((GetAsyncKeyState(0x36) & 0x8000) != 0) output->buttons = SIXENSE_BUTTON_4; //6
- if ((GetAsyncKeyState(0x37) & 0x8000) != 0) output->buttons = SIXENSE_BUTTON_START; //7
- if ((GetAsyncKeyState(0x38) & 0x8000) != 0) output->trigger = 1; //8
- convert_euler(DegToRad(yaw1), DegToRad(pitch1), DegToRad(roll1), output);
- }
- else {
- if ((GetAsyncKeyState(VK_UP) & 0x8000) != 0) myPosY2 += 1;
- if ((GetAsyncKeyState(VK_DOWN) & 0x8000) != 0) myPosY2 -= 1;
- if ((GetAsyncKeyState(VK_LEFT) & 0x8000) != 0) myPosX2 += 1;
- if ((GetAsyncKeyState(VK_RIGHT) & 0x8000) != 0) myPosX2 -= 1;
- if ((GetAsyncKeyState(VK_PRIOR) & 0x8000) != 0) myPosZ2 += 1; //PageUP
- if ((GetAsyncKeyState(VK_NEXT) & 0x8000) != 0) myPosZ2 -= 1; //PageDown
- if ((GetAsyncKeyState(VK_INSERT) & 0x8000) != 0) yaw2 += 1;
- if (yaw2 > 179) yaw2 = -179;
- if ((GetAsyncKeyState(VK_DELETE) & 0x8000) != 0) roll2 += 1; //
- if (roll2 > 179) roll2 = -179;
- if ((GetAsyncKeyState(VK_END) & 0x8000) != 0) pitch2 += 1; //
- if (pitch2 > 179) pitch2 = -179;
- output->which_hand = 1;
- output->pos[0] = myPosX2;
- output->pos[1] = myPosZ2;
- output->pos[2] = myPosY2;
- if ((GetAsyncKeyState(VK_NUMPAD1) & 0x8000) != 0) output->buttons = SIXENSE_BUTTON_BUMPER; //
- if ((GetAsyncKeyState(VK_NUMPAD2) & 0x8000) != 0) output->buttons = SIXENSE_BUTTON_JOYSTICK; //
- if ((GetAsyncKeyState(VK_NUMPAD3) & 0x8000) != 0) output->buttons = SIXENSE_BUTTON_1; //
- if ((GetAsyncKeyState(VK_NUMPAD4) & 0x8000) != 0) output->buttons = SIXENSE_BUTTON_2; //
- if ((GetAsyncKeyState(VK_NUMPAD5) & 0x8000) != 0) output->buttons = SIXENSE_BUTTON_3; //
- if ((GetAsyncKeyState(VK_NUMPAD6) & 0x8000) != 0) output->buttons = SIXENSE_BUTTON_4; //
- if ((GetAsyncKeyState(VK_NUMPAD7) & 0x8000) != 0) output->buttons = SIXENSE_BUTTON_START; //
- if ((GetAsyncKeyState(VK_NUMPAD8) & 0x8000) != 0) output->trigger = 1; //
- convert_euler(DegToRad(yaw2), DegToRad(pitch2), DegToRad(roll2), output);
- }
- return SIXENSE_SUCCESS;
- }
- SIXENSE_EXPORT int sixenseGetAllData(int index_back, sixenseAllControllerData *output)
- {
- auto success = sixenseGetData(0, index_back, &output->controllers[0]);
- success |= sixenseGetData(1, index_back, &output->controllers[1]);
- return success;
- }
- SIXENSE_EXPORT int sixenseGetNewestData(int which, sixenseControllerData *output)
- {
- return sixenseGetData(which, 0, output);
- }
- SIXENSE_EXPORT int sixenseGetAllNewestData(sixenseAllControllerData *output)
- {
- return sixenseGetAllData(0, output);
- }
- SIXENSE_EXPORT int sixenseSetHemisphereTrackingMode(int which_controller, int state)
- {
- return SIXENSE_SUCCESS;
- }
- SIXENSE_EXPORT int sixenseGetHemisphereTrackingMode(int which_controller, int *state)
- {
- return SIXENSE_SUCCESS;
- }
- SIXENSE_EXPORT int sixenseAutoEnableHemisphereTracking(int which_controller)
- {
- return SIXENSE_SUCCESS;
- }
- SIXENSE_EXPORT int sixenseSetHighPriorityBindingEnabled(int on_or_off)
- {
- return SIXENSE_SUCCESS;
- }
- SIXENSE_EXPORT int sixenseGetHighPriorityBindingEnabled(int *on_or_off)
- {
- return SIXENSE_SUCCESS;
- }
- SIXENSE_EXPORT int sixenseTriggerVibration(int controller_id, int duration_100ms, int pattern_id)
- {
- return SIXENSE_SUCCESS;
- }
- SIXENSE_EXPORT int sixenseSetFilterEnabled(int on_or_off)
- {
- return SIXENSE_SUCCESS;
- }
- SIXENSE_EXPORT int sixenseGetFilterEnabled(int *on_or_off)
- {
- return SIXENSE_SUCCESS;
- }
- SIXENSE_EXPORT int sixenseSetFilterParams(float near_range, float near_val, float far_range, float far_val)
- {
- return SIXENSE_SUCCESS;
- }
- SIXENSE_EXPORT int sixenseGetFilterParams(float *near_range, float *near_val, float *far_range, float *far_val)
- {
- return SIXENSE_SUCCESS;
- }
- SIXENSE_EXPORT int sixenseSetBaseColor(unsigned char red, unsigned char green, unsigned char blue)
- {
- return SIXENSE_SUCCESS;
- }
- SIXENSE_EXPORT int sixenseGetBaseColor(unsigned char *red, unsigned char *green, unsigned char *blue)
- {
- return SIXENSE_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement