More work

This commit is contained in:
Jordon Brooks 2024-05-27 13:18:50 +01:00
parent b35dec2fdc
commit 6b90c9f76a
Signed by: jordon
GPG key ID: DBD9758CD53E786A
30 changed files with 710 additions and 109 deletions

View file

@ -0,0 +1,30 @@
// Copyright (c) 2024 Jordon Brooks
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
// Use a preprocessor definition to switch between export and import declarations
#ifdef _WIN32
#ifdef HARMONYLINK_STATIC
#define HARMONYLINK_API
#else
#ifdef HARMONYLINK_SHARED
#define HARMONYLINK_API __declspec(dllexport)
#else
#define HARMONYLINK_API __declspec(dllimport)
#endif
#endif
#else
#define HARMONYLINKLIB_API
#endif

View file

@ -0,0 +1,52 @@
// Copyright (c) 2024 Jordon Brooks
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include "Core.h"
// Undefine the LINUX macro to avoid conflicts with the enum definition.
#undef LINUX
#ifdef __cplusplus
namespace LibHarmonyLink {
extern "C" {
#endif
typedef enum {
EDevice_UNKNOWN,
EDevice_DESKTOP,
EDevice_LAPTOP,
EDevice_HANDHELD,
EDevice_STEAM_DECK,
// EDevice_ROG_ALLY
// EDevice_AYONEO_SLIDE
// etc...
} EDevice;
HARMONYLINK_API const char* Device_ToString(EDevice device) {
switch (device) {
case EDevice_DESKTOP: return "DESKTOP";
case EDevice_LAPTOP: return "LAPTOP";
case EDevice_HANDHELD: return "HANDHELD";
case EDevice_STEAM_DECK: return "STEAM_DECK";
default: return "UNKNOWN";
}
}
#ifdef __cplusplus
}
}
#endif

View file

@ -0,0 +1,46 @@
// Copyright (c) 2024 Jordon Brooks
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include "Core.h"
#ifdef __cplusplus
namespace LibHarmonyLink {
extern "C" {
#endif
typedef enum {
EPlatform_UNKNOWN,
EPlatform_WINDOWS,
EPlatform_LINUX,
EPlatform_MAC,
EPlatform_UNIX,
} EPlatform;
// Helper functions to convert enums to strings (must be implemented somewhere in your code)
HARMONYLINK_API const char* Platform_ToString(EPlatform platform) {
switch (platform) {
case EPlatform_WINDOWS: return "WINDOWS";
case EPlatform_LINUX: return "LINUX";
case EPlatform_MAC: return "MAC";
case EPlatform_UNIX: return "UNIX";
default: return "UNKNOWN";
}
}
#ifdef __cplusplus
}
}
#endif

View file

@ -0,0 +1,44 @@
// Copyright (c) 2024 Jordon Brooks
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include "Core.h"
#ifdef __cplusplus
namespace LibHarmonyLink {
extern "C" {
#endif
typedef enum {
ESteamDeck_NONE, // Device is not a steam deck
ESteamDeck_UNKNOWN, // Device is a steam deck but model cannot be determined
ESteamDeck_LCD,
ESteamDeck_OLED,
} ESteamDeck;
HARMONYLINK_API const char* SteamDeck_ToString(ESteamDeck steam_deck_model) {
switch (steam_deck_model) {
case ESteamDeck_NONE: return "NONE";
case ESteamDeck_LCD: return "STEAMDECK_LCD";
case ESteamDeck_OLED: return "STEAMDECK_OLED";
// Add other cases as needed
default: return "UNKNOWN";
}
}
#ifdef __cplusplus
}
}
#endif

View file

@ -0,0 +1,30 @@
// Copyright (c) 2024 Jordon Brooks
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include <stdbool.h>
#include "Core.h"
#ifdef __cplusplus
namespace LibHarmonyLink {
extern "C" {
#endif
HARMONYLINK_API bool HarmonyLink_Init(void);
#ifdef __cplusplus
}
}
#endif

View file

@ -0,0 +1,40 @@
// Copyright (c) 2024 Jordon Brooks
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include <stdbool.h>
#include "Core.h"
#ifdef __cplusplus
namespace LibHarmonyLink {
extern "C" {
#endif
typedef struct {
bool has_battery;
bool is_connected_to_ac;
unsigned char battery_percent;
} FBattery;
HARMONYLINK_API FBattery* HL_FBattery_Init(bool has_battery, bool is_connected_to_ac, unsigned char battery_percent);
HARMONYLINK_API void HL_FBattery_print(const FBattery *self);
#ifdef __cplusplus
}
}
#endif

View file

@ -0,0 +1,57 @@
// Copyright (c) 2024 Jordon Brooks
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// include/Structs/CPUInfo.h
#pragma once
#include <stdio.h>
#include <stdbool.h>
#include "Core.h"
#include "Structs/StringArray.h"
#ifdef __cplusplus
namespace LibHarmonyLink {
extern "C" {
#endif
typedef struct {
char *VendorID;
char *Model_Name;
unsigned int Physical_Cores;
unsigned int Logical_Cores;
StringArray flagsInfo;
} FCPUInfo;
// Initialize FCPUInfo
FCPUInfo* FCPUInfo_Init(const char *vendorID, const char *modelName, unsigned int physicalCores, unsigned int logicalCores,
size_t flagsCount);
// Print FlagsInfo
HARMONYLINK_API void HL_FlagsInfo_Print(const FCPUInfo *cpuInfo);
// Print FCPUInfo
HARMONYLINK_API void HL_FCPUInfo_Print(const FCPUInfo *cpuInfo);
// Free FCPUInfo
HARMONYLINK_API void HL_FCPUInfo_Free(FCPUInfo *cpuInfo);
// Check if a flag exists in FlagsInfo
HARMONYLINK_API bool HL_FlagsInfo_Contains(const FCPUInfo *cpuInfo, const char *flag);
#ifdef __cplusplus
}
}
#endif

View file

@ -0,0 +1,47 @@
// Copyright (c) 2024 Jordon Brooks
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include "Core.h"
#include "Enums/Platform.h"
#include "Enums/Device.h"
#include "Enums/SteamDeck.h"
#define DEFAULT_INITIAL_FLAGS_SIZE 4
#ifdef __cplusplus
namespace LibHarmonyLink {
extern "C" {
#endif
typedef struct {
EPlatform platform;
EDevice device;
ESteamDeck steam_deck_model;
} FDevice;
// Initialize FlagsInfo
FDevice* Device_Init(EPlatform platform, EDevice device, ESteamDeck steam_deck_model);
// Print FlagsInfo
HARMONYLINK_API void HL_Device_Print(const FDevice* Device);
// Free FlagsInfo
HARMONYLINK_API void HL_Device_Free(FDevice* Device);
#ifdef __cplusplus
}
}
#endif

View file

@ -0,0 +1,49 @@
// Copyright (c) 2024 Jordon Brooks
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include <stdio.h>
#include <stdbool.h>
#include "Core.h"
#ifdef __cplusplus
namespace LibHarmonyLink {
extern "C" {
#endif
typedef struct {
char* name;
char* version;
unsigned int id;
char* version_id;
char* version_codename;
char* pretty_name;
char* variant_id;
} FOSVerInfo;
// Initialize FCPUInfo
FOSVerInfo* FOSVerInfo_Init(char* name, char* version, unsigned int id, char* version_id, char* version_codename, char* pretty_name, char* variant_id);
// Print FlagsInfo
HARMONYLINK_API void HL_FOSVerInfo_Print(const FOSVerInfo* OSVerInfo);
// Free FCPUInfo
HARMONYLINK_API void HL_FOSVerInfo_Free(FOSVerInfo* OSVerInfo);
#ifdef __cplusplus
}
}
#endif

View file

@ -0,0 +1,61 @@
// Copyright (c) 2024 Jordon Brooks
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// include/Structs/StringArray.h
#pragma once
#include <stdio.h>
#include <stdbool.h>
#include "Core.h"
#define DEFAULT_INITIAL_FLAGS_SIZE 4
#ifdef __cplusplus
namespace LibHarmonyLink {
extern "C" {
#endif
typedef struct {
char **data; // Array of strings (flags)
size_t FlagsCount; // Number of flags
size_t AllocatedSize; // Number of allocated slots
} StringArray;
// Initialize FlagsInfo
void StringArray_Init(StringArray *flagsInfo, size_t overrideInitialSize);
// Print FlagsInfo
HARMONYLINK_API void HL_StringArray_Print(const StringArray *flagsInfo);
// Free FlagsInfo
HARMONYLINK_API void HL_StringArray_Free(StringArray *flagsInfo);
// Check if a flag exists in FlagsInfo
HARMONYLINK_API bool HL_StringArray_Contains(const StringArray *flagsInfo, const char *flag);
// Add a flag to FlagsInfo
void StringArray_AddFlag(StringArray *flagsInfo, const char *flag);
// Remove a flag from FlagsInfo by value
void StringArray_Remove(StringArray *flagsInfo, const char *flag);
// Resize FlagsInfo array
void StringArray_Resize(StringArray *flagsInfo, size_t newSize);
#ifdef __cplusplus
}
}
#endif

View file

@ -0,0 +1,28 @@
// Copyright (c) 2024 Jordon Brooks
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <wchar.h>
#ifdef __cplusplus
namespace LibHarmonyLink {
extern "C" {
#endif
// Utility function to convert char* to wchar_t*
wchar_t *convertToWideChar(const char *str);
#ifdef __cplusplus
}
}
#endif

View file

@ -0,0 +1,40 @@
// Copyright (c) 2024 Jordon Brooks
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include <stdbool.h>
#include "Core.h"
#ifdef __cplusplus
namespace LibHarmonyLink {
extern "C" {
#endif
HARMONYLINK_API char* HL_version_get_string(void);
HARMONYLINK_API char* HL_version_build_timestamp(void);
HARMONYLINK_API char* HL_git_branch(void);
HARMONYLINK_API char* HL_git_commit_timestamp(void);
HARMONYLINK_API bool HL_is_debug(void);
HARMONYLINK_API void HL_version_print(void);
#ifdef __cplusplus
}
}
#endif

View file

@ -0,0 +1,25 @@
// Copyright (c) 2024 Jordon Brooks
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Version.h.in
#pragma once
#define HARMONYLINK_VERSION_MAJOR @LibHarmonyLink_VERSION_MAJOR@
#define HARMONYLINK_VERSION_MINOR @LibHarmonyLink_VERSION_MINOR@
#define HARMONYLINK_VERSION_PATCH @LibHarmonyLink_VERSION_PATCH@
#define HARMONYLINK_VERSION_TWEAK @LibHarmonyLink_VERSION_TWEAK@
#define HARMONYLINK_VERSION "@LibHarmonyLink_VERSION@"
#define GIT_BRANCH_NAME "@GIT_BRANCH_NAME@"
#define GIT_COMMIT_TIMESTAMP "@GIT_COMMIT_TIMESTAMP@"