Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
94d911a
First commit
elly-funique Apr 28, 2026
4c2783a
Test
elly-funique Apr 29, 2026
7727493
update account
elly-funique Apr 29, 2026
43e05f7
TEST
elly-funique Apr 29, 2026
d057527
update
elly-funique Apr 29, 2026
6575d9b
dd
elly-funique Apr 29, 2026
682ac59
test
elly-funique Apr 29, 2026
fffa55f
test
elly-funique Apr 29, 2026
f5cee13
First commit
Elly2018 Apr 29, 2026
db77e5e
Update find camera method
Elly2018 Apr 29, 2026
687aa35
Fixed master findCamera return probably -1 issue in process message m…
Elly2018 Apr 29, 2026
bb29804
update onclose part
Elly2018 Apr 29, 2026
476be6c
Remove hosts
Elly2018 Apr 29, 2026
d0c378a
Update replaceCameraFromServer
Elly2018 Apr 29, 2026
c91d598
Merge pull request #40 from Elly2018/v1.0.1
Elly2018 Apr 29, 2026
3db64c8
First Commit
Elly2018 Apr 29, 2026
1ed72aa
Fixed
Elly2018 Apr 30, 2026
976a735
Master fixed the process message filter for query:get
Elly2018 Apr 30, 2026
0536ca9
Merge pull request #41 from Elly2018/v1.0.2
Elly2018 Apr 30, 2026
a9c0080
First commit
Elly2018 Apr 30, 2026
2feab32
Added keep alive command at last_media query
Elly2018 Apr 30, 2026
cbe44a8
Tryinf to fixed FPS issue again..
Elly2018 Apr 30, 2026
4f4f696
Update roadmap in readme
Elly2018 Apr 30, 2026
aa10b43
Added quick apply skipping boolean in server side
Elly2018 Apr 30, 2026
dd7a7b7
Merge pull request #43 from Elly2018/v1.0.3
Elly2018 Apr 30, 2026
7f000e9
First commit
Elly2018 May 4, 2026
84ecfd8
Added media download name rule type
Elly2018 May 4, 2026
32f33f4
Update download media argument to a struct
Elly2018 May 4, 2026
bb0ac51
Update filename updater
Elly2018 May 4, 2026
04a8d3b
Added denoise option
Elly2018 May 4, 2026
2afcf19
Added denoise option for model 13
Elly2018 May 4, 2026
366fdca
Merge pull request #48 from Elly2018/v1.0.4
Elly2018 May 4, 2026
d0560a5
First Commit
Elly2018 May 4, 2026
9d6173a
Fixed clone
Elly2018 May 5, 2026
66d8807
Fixed camera list, let it using copy, prevent lock
Elly2018 May 5, 2026
bbaae8a
Fixed copy optimization
Elly2018 May 5, 2026
bdca80b
Merge pull request #49 from Elly2018/v1.0.5
Elly2018 May 5, 2026
bdc21da
Update package versions
Elly2018 May 5, 2026
02bfec0
First Commit
Elly2018 May 5, 2026
be412a5
Added media browser popwin frame
Elly2018 May 5, 2026
4dfd2a3
Update media browser size and position calculation
Elly2018 May 5, 2026
e8b5b2a
Fixed file extension issue
Elly2018 May 5, 2026
b550f79
Adjust the media browser
Elly2018 May 5, 2026
ad03a62
Added server thumbnail entry point
Elly2018 May 5, 2026
8675227
Added base64 encoder function in server side
Elly2018 May 5, 2026
7200bd8
Added media list fetch
Elly2018 May 5, 2026
e061833
Added media info query method for server
Elly2018 May 7, 2026
63d7b7f
Update state structure
Elly2018 May 7, 2026
9abb81e
Added master function for media
Elly2018 May 7, 2026
36b8365
Added master send media info and list command to server
Elly2018 May 7, 2026
68fef30
Register media list update event
Elly2018 May 7, 2026
c375e0c
Successfully create media list in master server
Elly2018 May 7, 2026
b70027f
Help selection for meida browser
Elly2018 May 7, 2026
344a55a
Update media browser layout
Elly2018 May 7, 2026
8b8ee0b
Added more buttons, For meida browser actions
Elly2018 May 7, 2026
6e85ae9
Update process message
Elly2018 May 7, 2026
373be7a
Update singled download media file argument list
Elly2018 May 7, 2026
9a9e77f
Update master signal send and server d single and d all receiver
Elly2018 May 7, 2026
f63c369
Update server
Elly2018 May 7, 2026
f8eb511
Update server media controoler script details
Elly2018 May 7, 2026
4cee278
update same
Elly2018 May 7, 2026
733339a
Update
Elly2018 May 8, 2026
19d3036
Update response for server
Elly2018 May 8, 2026
15e9c78
Update server codebase typo
Elly2018 May 8, 2026
eb4e279
Added apply cancel
Elly2018 May 11, 2026
f6ef925
Added thread safe cancel boolean on server side
Elly2018 May 11, 2026
634422d
Added thumbnail assign methid
Elly2018 May 12, 2026
31440ef
Make master access the global state
Elly2018 May 12, 2026
d48add7
Update version for package config files
Elly2018 May 12, 2026
323debb
Merge pull request #50 from Elly2018/v1.0.6
Elly2018 May 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_C_STANDARD 17)


# --- NUCLEAR STATIC OVERRIDES (MUST BE AT THE TOP) ---
# These must run before ANY include(FetchContent)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Global Static" FORCE)
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@ Tool for control multiple GoPro Cameras, The design is for above 100 cameras con
- [x] Preset changer
- [x] Monitor cameras information
- [x] Modify GoPro Camera Setting
- [ ] Custom preset apply pipeline
- [ ] Sync custom preset setting to all
- [x] Custom preset apply pipeline
- [x] Sync custom preset setting to all
* WebCam
- [x] Change to WebCam Mode
* Preview
- [x] Display selected GoPro camera
- [x] Change setting while in preview Popup window
* Media
- [ ] One click pull latest media file
- [x] One click pull latest media file
- [ ] Media Browser for download and modify and delete etc...

## Screenshot
Expand Down
2 changes: 1 addition & 1 deletion package/deb_master_amd64
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Package: go-pro-control-master
Version: 0.1.3
Version: 1.0.6
Section: shells
Priority: optional
Architecture: amd64
Expand Down
2 changes: 1 addition & 1 deletion package/deb_server_amd64
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Package: go-pro-control-server
Version: 0.1.3
Version: 1.0.6
Section: shells
Priority: optional
Architecture: amd64
Expand Down
2 changes: 1 addition & 1 deletion package/deb_server_arm64
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Package: go-pro-control-server
Version: 0.1.3
Version: 1.0.6
Section: shells
Priority: optional
Architecture: arm64
Expand Down
2 changes: 1 addition & 1 deletion package/win_master_x64.iss
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
; Non-commercial use only

#define MyAppName "GoPro Master"
#define MyAppVersion "0.1.3"
#define MyAppVersion "1.0.6"
#define MyAppPublisher "Elly"
#define MyAppURL "https://github.com/Elly2018/GoPro_Controller"
#define MyAppExeName "go-pro-master.exe"
Expand Down
2 changes: 1 addition & 1 deletion package/win_server_x64.iss
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
; Non-commercial use only

#define MyAppName "GoPro Server"
#define MyAppVersion "0.1.3"
#define MyAppVersion "1.0.6"
#define MyAppPublisher "Elly"
#define MyAppURL "https://github.com/Elly2018/GoPro_Controller"
#define MyAppExeName "go-pro-server.exe"
Expand Down
6 changes: 6 additions & 0 deletions src/common/camera_code.h
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,7 @@ const static int32_t GOPRO_MEDIA_STATUS_IDS[] = {
// Lookup functions
inline const int32_t GET_SETTING_SIZE_BY_ID(int32_t x) {
switch(x) {
case DENOISE_ID : return DENOISE_SIZE;
case BURST_OUTPUT_ID : return BURST_OUTPUT_SIZE;
case PHOTO_BURST_RATE_ID : return PHOTO_BURST_RATE_SIZE;
case ISO_MIN_BURST_ID : return ISO_MIN_BURST_SIZE;
Expand Down Expand Up @@ -393,6 +394,7 @@ inline const int32_t GET_SETTING_SIZE_BY_ID(int32_t x) {

inline const int32_t GET_SETTING_AVA_BY_ID(int32_t x) {
switch(x) {
case DENOISE_ID : return DENOISE_AVA;
case BURST_OUTPUT_ID : return BURST_OUTPUT_AVA;
case PHOTO_BURST_RATE_ID : return PHOTO_BURST_RATE_AVA;
case ISO_MIN_BURST_ID : return ISO_MIN_BURST_AVA;
Expand Down Expand Up @@ -464,6 +466,7 @@ inline const int32_t GET_SETTING_AVA_BY_ID(int32_t x) {

inline const char* GET_SETTING_NAME_BY_ID(int32_t x) {
switch(x) {
case DENOISE_ID : return DENOISE_NAME;
case BURST_OUTPUT_ID : return BURST_OUTPUT_NAME;
case PHOTO_BURST_RATE_ID : return PHOTO_BURST_RATE_NAME;
case ISO_MIN_BURST_ID : return ISO_MIN_BURST_NAME;
Expand Down Expand Up @@ -535,6 +538,7 @@ inline const char* GET_SETTING_NAME_BY_ID(int32_t x) {

inline const char** GET_SETTING_STRING_BY_ID(int32_t x) {
switch(x) {
case DENOISE_ID : return DENOISE_STRING;
case BURST_OUTPUT_ID : return BURST_OUTPUT_STRING;
case PHOTO_BURST_RATE_ID : return PHOTO_BURST_RATE_STRING;
case ISO_MIN_BURST_ID : return ISO_MIN_BURST_STRING;
Expand Down Expand Up @@ -606,6 +610,7 @@ inline const char** GET_SETTING_STRING_BY_ID(int32_t x) {

inline const int32_t* GET_SETTING_VALUE_BY_ID(int32_t x) {
switch(x) {
case DENOISE_ID : return DENOISE_VALUE;
case BURST_OUTPUT_ID : return BURST_OUTPUT_VALUE;
case PHOTO_BURST_RATE_ID : return PHOTO_BURST_RATE_VALUE;
case ISO_MIN_BURST_ID : return ISO_MIN_BURST_VALUE;
Expand Down Expand Up @@ -677,6 +682,7 @@ inline const int32_t* GET_SETTING_VALUE_BY_ID(int32_t x) {

inline const int32_t* GET_SETTING_SUPPORT_BY_ID(int32_t x) {
switch(x) {
case DENOISE_ID : return DENOISE_SUPPORT;
case BURST_OUTPUT_ID : return BURST_OUTPUT_SUPPORT;
case PHOTO_BURST_RATE_ID : return PHOTO_BURST_RATE_SUPPORT;
case ISO_MIN_BURST_ID : return ISO_MIN_BURST_SUPPORT;
Expand Down
17 changes: 15 additions & 2 deletions src/common/camera_other.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
#define CAMERA_OTHER
#include <cinttypes>

#pragma region GoPro Mode
#define GOPRO_MODE_SIZE 9
#define GOPRO_MODE_NAME "Webcam Mode"

const static char* GOPRO_MODE_STRING[] = {
"Video",
"Photo Burst",
Expand All @@ -17,7 +17,6 @@ const static char* GOPRO_MODE_STRING[] = {
"Timelapse Video",
"Timelapse Night Video",
};

const static int32_t GOPRO_MODE_VALUE[] = {
0, // Video
65538, // Photo Burst
Expand All @@ -29,6 +28,20 @@ const static int32_t GOPRO_MODE_VALUE[] = {
131073, // Timelapse Video
131074, // Timelapse Night Video
};
#pragma endregion

#pragma region Media Download Type
#define MEDIA_DOWNLOAD_TYPE_SIZE 3
#define MEDIA_DOWNLOAD_TYPE_NAME "Media Download Type"
const static char* MEDIA_DOWNLOAD_TYPE_STRING[] = {
"All",
"Front Chars",
"Back Chars"
};
const static int32_t MEDIA_DOWNLOAD_TYPE_VALUE[] = {
0, 1, 2
};
#pragma endregion

#define WEBCAM_START_RES_SIZE 3
#define WEBCAM_START_RES_NAME "Webcam Resolution"
Expand Down
12 changes: 6 additions & 6 deletions src/common/camera_setting.h
Original file line number Diff line number Diff line change
Expand Up @@ -2172,21 +2172,21 @@ const static int32_t SHARPNESS_SUPPORT[] = {
#define DENOISE_ID 198
#define DENOISE_SIZE 3
#define DENOISE_NAME "Denoise"
#define DENOISE_AVA MODEL_MAX2_ALL
#define DENOISE_AVA MODEL_MAX2|MODEL_13
const static char* DENOISE_STRING[] = {
"High",
"Midium",
"Low"
"Low",
};
const static int32_t DENOISE_VALUE[] = {
2, // High
1, // Midium
1, // Low
0, // Low
};
const static int32_t DENOISE_SUPPORT[] = {
MODEL_MAX2_ALL, // High
MODEL_MAX2_ALL, // Midium
MODEL_MAX2_ALL, // Low
MODEL_MAX2|MODEL_13, // High
MODEL_MAX2|MODEL_13, // Midium
MODEL_MAX2|MODEL_13, // Low
};
#pragma endregio

Expand Down
25 changes: 25 additions & 0 deletions src/common/iphelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,11 @@ inline size_t write_callback_pure(void* contents, size_t size, size_t nmemb, std
return size * nmemb;
}

inline size_t write_callback_char(void* contents, size_t size, size_t nmemb, std::vector<u_char>* userp) {
userp->insert(userp->end(), static_cast<u_char*>(contents), static_cast<u_char*>(contents) + size * nmemb);
return size * nmemb;
}

inline std::string GetRemoteIPBySerial(std::string serial){
if(serial.size() < 3){
std::cerr << "Serial string must be at least 3" << "\n";
Expand Down Expand Up @@ -257,6 +262,26 @@ inline std::string exec(std::string cmd, int64_t timeout = 1500L, int64_t connec
return result;
}

inline std::vector<u_char> exec_byte(std::string cmd, int64_t timeout = 1500L, int64_t connection_timeout = 1000L){
CURL* curl = curl_easy_init();
std::vector<u_char> result = std::vector<u_char>();

if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, cmd.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback_char);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &result);
curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, timeout);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, connection_timeout);
CURLcode res = curl_easy_perform(curl);

curl_easy_cleanup(curl);
}else{
std::cerr << "[Error] iphelper.h, Curl init failed" << std::endl;
}

return std::move(result);
}

inline std::vector<std::string> execs(std::vector<std::string> cmds) {
CURLM* curlm = curl_multi_init();
CURL* curl = NULL;
Expand Down
Loading