3dscontroller-ng/3DSsource/include/wireless.h

113 lines
2.0 KiB
C

#pragma once
#include <string.h>
#include <3ds.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include "3ds/services/hid.h"
#include "inet_pton.h"
#include "sys/_types.h"
// #define SCREENSHOT_CHUNK 4000
#define DEFAULT_PORT 8889
enum NET_COMMANDS {
CONNECT,
KEYS,
SCREENSHOT,
};
// It is deliberately set up to have an anonymous struct as well as a named struct for convenience, not a mistake!
struct packet {
union {
struct packetHeader {
unsigned char command;
unsigned char keyboardActive;
};
struct packetHeader packetHeader;
};
union {
// CONNECT
union {
struct connectPacket {
};
struct connectPacket connectPacket;
};
// KEYS
union {
struct keysPacket {
//Keys
unsigned int keys;
//Cirle Pad
struct {
short x;
short y;
} circlePad;
//Touchpad
struct {
unsigned short x;
unsigned short y;
} touch;
//cStick
struct {
short x;
short y;
} cStick;
//Volume
unsigned int volume; //way longer than needed, but it works.
//Gyroscope
struct {
short x;
short y;
short z;
} gyro;
unsigned char padding;
//Accelerometer
struct {
short x;
short y;
short z;
} accel;
// unsigned int threeD32;
};
struct keysPacket keysPacket;
};
// SCREENSHOT
// union {
// struct screenshotPacket {
// unsigned short offset;
// unsigned char data[SCREENSHOT_CHUNK];
// };
// struct screenshotPacket screenshotPacket;
// };
// This is not even used so...
};
};
extern int sock;
extern struct sockaddr_in sain, saout;
extern struct packet outBuf, rcvBuf;
extern socklen_t sockaddr_in_sizePtr;
bool openSocket(int port);
void sendBuf(int length);
int receiveBuffer(int length);
void sendConnectionRequest(void);
void sendKeys(unsigned int keys, circlePosition circlePad, touchPosition touch, circlePosition cStick, unsigned int volume, angularRate gyro, accelVector accel);