mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-03-12 05:25:23 -07:00
128 lines
4.4 KiB
C++
128 lines
4.4 KiB
C++
// SPDX-License-Identifier: LicenseRef-AGPL-3.0-only-OpenSSL
|
|
|
|
#ifndef CHIAKI_HOST_H
|
|
#define CHIAKI_HOST_H
|
|
|
|
#include <netinet/in.h>
|
|
#include <map>
|
|
#include <string>
|
|
|
|
#include <chiaki/controller.h>
|
|
#include <chiaki/discovery.h>
|
|
#include <chiaki/log.h>
|
|
#include <chiaki/opusdecoder.h>
|
|
#include <chiaki/regist.h>
|
|
|
|
#include "exception.h"
|
|
#include "io.h"
|
|
#include "settings.h"
|
|
|
|
class DiscoveryManager;
|
|
static void Discovery(ChiakiDiscoveryHost *, void *);
|
|
static void InitAudioCB(unsigned int channels, unsigned int rate, void *user);
|
|
static bool VideoCB(uint8_t *buf, size_t buf_size, void *user);
|
|
static void AudioCB(int16_t *buf, size_t samples_count, void *user);
|
|
static void EventCB(ChiakiEvent *event, void *user);
|
|
static void RegistEventCB(ChiakiRegistEvent *event, void *user);
|
|
|
|
enum RegistError
|
|
{
|
|
HOST_REGISTER_OK,
|
|
HOST_REGISTER_ERROR_SETTING_PSNACCOUNTID,
|
|
HOST_REGISTER_ERROR_SETTING_PSNONLINEID
|
|
};
|
|
|
|
class Settings;
|
|
|
|
class Host
|
|
{
|
|
private:
|
|
ChiakiLog *log = nullptr;
|
|
Settings *settings = nullptr;
|
|
//video config
|
|
ChiakiVideoResolutionPreset video_resolution = CHIAKI_VIDEO_RESOLUTION_PRESET_720p;
|
|
ChiakiVideoFPSPreset video_fps = CHIAKI_VIDEO_FPS_PRESET_60;
|
|
std::string host_type;
|
|
// user info
|
|
std::string psn_online_id = "";
|
|
std::string psn_account_id = "";
|
|
// info from regist/settings
|
|
ChiakiRegist regist = {};
|
|
ChiakiRegistInfo regist_info = {};
|
|
std::function<void()> chiaki_regist_event_type_finished_canceled = nullptr;
|
|
std::function<void()> chiaki_regist_event_type_finished_failed = nullptr;
|
|
std::function<void()> chiaki_regist_event_type_finished_success = nullptr;
|
|
std::function<void()> chiaki_event_connected_cb = nullptr;
|
|
std::function<void(bool)> chiaki_even_login_pin_request_cb = nullptr;
|
|
std::function<void(uint8_t, uint8_t)> chiaki_event_rumble_cb = nullptr;
|
|
std::function<void(ChiakiQuitEvent *)> chiaki_event_quit_cb = nullptr;
|
|
std::function<void(ChiakiControllerState *, std::map<uint32_t, int8_t> *)> io_read_controller_cb = nullptr;
|
|
|
|
// internal state
|
|
bool discovered = false;
|
|
bool registered = false;
|
|
// rp_key_data is true when rp_key, rp_regist_key, rp_key_type
|
|
bool rp_key_data = false;
|
|
|
|
std::string host_name;
|
|
// sony's host_id == mac addr without colon
|
|
std::string host_id;
|
|
std::string host_addr;
|
|
std::string ap_ssid;
|
|
std::string ap_bssid;
|
|
std::string ap_key;
|
|
std::string ap_name;
|
|
std::string server_nickname;
|
|
ChiakiTarget target = CHIAKI_TARGET_PS4_UNKNOWN;
|
|
ChiakiDiscoveryHostState state = CHIAKI_DISCOVERY_HOST_STATE_UNKNOWN;
|
|
ChiakiControllerState controller_state = {0};
|
|
std::map<uint32_t, int8_t> finger_id_touch_id;
|
|
|
|
// mac address = 48 bits
|
|
uint8_t server_mac[6] = {0};
|
|
char rp_regist_key[CHIAKI_SESSION_AUTH_SIZE] = {0};
|
|
uint32_t rp_key_type = 0;
|
|
uint8_t rp_key[0x10] = {0};
|
|
// manage stream session
|
|
bool session_init = false;
|
|
ChiakiSession session;
|
|
ChiakiOpusDecoder opus_decoder;
|
|
ChiakiConnectVideoProfile video_profile;
|
|
friend class Settings;
|
|
friend class DiscoveryManager;
|
|
|
|
public:
|
|
Host(std::string host_name);
|
|
~Host();
|
|
int Register(int pin);
|
|
int Wakeup();
|
|
int InitSession(IO *);
|
|
int FiniSession();
|
|
void StopSession();
|
|
void StartSession();
|
|
void SendFeedbackState();
|
|
void RegistCB(ChiakiRegistEvent *);
|
|
void ConnectionEventCB(ChiakiEvent *);
|
|
bool GetVideoResolution(int *ret_width, int *ret_height);
|
|
std::string GetHostName();
|
|
std::string GetHostAddr();
|
|
ChiakiTarget GetChiakiTarget();
|
|
void SetChiakiTarget(ChiakiTarget target);
|
|
void SetHostAddr(std::string host_addr);
|
|
void SetRegistEventTypeFinishedCanceled(std::function<void()> chiaki_regist_event_type_finished_canceled);
|
|
void SetRegistEventTypeFinishedFailed(std::function<void()> chiaki_regist_event_type_finished_failed);
|
|
void SetRegistEventTypeFinishedSuccess(std::function<void()> chiaki_regist_event_type_finished_success);
|
|
void SetEventConnectedCallback(std::function<void()> chiaki_event_connected_cb);
|
|
void SetEventLoginPinRequestCallback(std::function<void(bool)> chiaki_even_login_pin_request_cb);
|
|
void SetEventRumbleCallback(std::function<void(uint8_t, uint8_t)> chiaki_event_rumble_cb);
|
|
void SetEventQuitCallback(std::function<void(ChiakiQuitEvent *)> chiaki_event_quit_cb);
|
|
void SetReadControllerCallback(std::function<void(ChiakiControllerState *, std::map<uint32_t, int8_t> *)> io_read_controller_cb);
|
|
bool IsRegistered();
|
|
bool IsDiscovered();
|
|
bool IsReady();
|
|
bool HasRPkey();
|
|
bool IsPS5();
|
|
};
|
|
|
|
#endif
|