Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <thread>
- #include <chrono>
- #include "EDSDK.h"
- #include "EDSDKTypes.h"
- #include "EDSDKErrors.h"
- using namespace std::chrono_literals;
- EdsError getFirstCamera(EdsCameraRef* camera);
- EdsError downloadImage(EdsDirectoryItemRef directoryItem);
- EdsError EDSCALLBACK handleStateEvent(EdsStateEvent event, EdsUInt32 parameter, EdsVoid* context);
- EdsError EDSCALLBACK handleObjectEvent(EdsObjectEvent event, EdsBaseRef object, EdsVoid* context);
- EdsError EDSCALLBACK handlePropertyEvent(EdsPropertyEvent event, EdsPropertyID property, EdsUInt32 inParam, EdsVoid* context);
- bool eventFired = false;
- int main(int argc, char** argv)
- {
- EdsError err;
- EdsCameraRef camera = NULL;
- bool isSDKLoaded = false;
- EdsCapacity capacity = { 0x7FFFFFFF, 0x1000, 1 };
- EdsInt32 saveTarget = kEdsSaveTo_Host;
- // Initialize SDK
- err = EdsInitializeSDK();
- if (err == EDS_ERR_OK)
- isSDKLoaded = true;
- // Get first camera
- if (err == EDS_ERR_OK)
- err = getFirstCamera(&camera);
- // Open session with camera
- err = EdsOpenSession(camera);
- // Set event handler
- if (err == EDS_ERR_OK)
- err = EdsSetObjectEventHandler(camera, kEdsObjectEvent_All, handleObjectEvent, NULL);
- if (err == EDS_ERR_OK)
- err = EdsSetPropertyEventHandler(camera, kEdsPropertyEvent_All, handlePropertyEvent, NULL);
- if (err == EDS_ERR_OK)
- err = EdsSetCameraStateEventHandler(camera, kEdsStateEvent_All, handleStateEvent, NULL);
- err = EdsSetPropertyData(camera, kEdsPropID_SaveTo, 0, 4, &saveTarget);
- err = EdsSetCapacity(camera, capacity);
- ///// Take picture
- err = EdsSendCommand(camera, kEdsCameraCommand_TakePicture, 0);
- while (!eventFired) {
- err = EdsGetEvent();
- std::this_thread::sleep_for(0.3s);
- }
- eventFired = false;
- ////
- // Close session with camera
- if (err == EDS_ERR_OK)
- err = EdsCloseSession(camera);
- // Release camera
- if (camera != NULL)
- // Terminate SDK
- if (isSDKLoaded)
- EdsTerminateSDK();
- }
- EdsError EDSCALLBACK handleObjectEvent(EdsObjectEvent event, EdsBaseRef object, EdsVoid* context)
- {
- std::cout << "Event is: 0x" << std::hex << event << "\n";
- EdsError err = EDS_ERR_OK;
- if (event == kEdsObjectEvent_DirItemRequestTransfer) {
- err = downloadImage(object);
- // Object must be released
- if (object)
- err = EdsRelease(object);
- eventFired = true;
- }
- return err;
- }
- EdsError EDSCALLBACK handlePropertyEvent(EdsPropertyEvent event, EdsPropertyID property, EdsUInt32 inParam, EdsVoid* context)
- {
- return EDS_ERR_OK;
- }
- EdsError EDSCALLBACK handleStateEvent(EdsStateEvent event, EdsUInt32 parameter, EdsVoid* context)
- {
- return EDS_ERR_OK;
- }
- EdsError getFirstCamera(EdsCameraRef* camera)
- {
- EdsError err;
- EdsCameraListRef cameraList = NULL;
- err = EdsGetCameraList(&cameraList);
- err = EdsGetChildAtIndex(cameraList, 0, camera);
- return err;
- }
- EdsError downloadImage(EdsDirectoryItemRef directoryItem)
- {
- EdsError err = EDS_ERR_OK;
- EdsStreamRef stream = NULL;
- // Get directory item information
- EdsDirectoryItemInfo dirItemInfo;
- err = EdsGetDirectoryItemInfo(directoryItem, &dirItemInfo);
- // Create file stream for transfer destination
- if (err == EDS_ERR_OK)
- err = EdsCreateFileStream(dirItemInfo.szFileName, kEdsFileCreateDisposition_CreateAlways, kEdsAccess_ReadWrite, &stream);
- // Download image
- if (err == EDS_ERR_OK)
- err = EdsDownload(directoryItem, dirItemInfo.size, stream);
- // Issue notification that download is complete
- if (err == EDS_ERR_OK)
- err = EdsDownloadComplete(directoryItem);
- // Release stream
- if (stream != NULL) {
- EdsRelease(stream);
- stream = NULL;
- }
- return err;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement