#pragma once #include <3ds.h> #include #include #include #include #include #include #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);