Advertisement
Guest User

Wrong event triggered!

a guest
Nov 3rd, 2020
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <thread>
  3. #include <chrono>
  4.  
  5. #include "EDSDK.h"
  6. #include "EDSDKTypes.h"
  7. #include "EDSDKErrors.h"
  8.  
  9. using namespace std::chrono_literals;
  10.  
  11. EdsError getFirstCamera(EdsCameraRef* camera);
  12. EdsError downloadImage(EdsDirectoryItemRef directoryItem);
  13. EdsError EDSCALLBACK handleStateEvent(EdsStateEvent event, EdsUInt32 parameter, EdsVoid* context);
  14. EdsError EDSCALLBACK handleObjectEvent(EdsObjectEvent event, EdsBaseRef object, EdsVoid* context);
  15. EdsError EDSCALLBACK handlePropertyEvent(EdsPropertyEvent event, EdsPropertyID property, EdsUInt32 inParam, EdsVoid* context);
  16.  
  17. bool eventFired = false;
  18.  
  19. int main(int argc, char** argv)
  20. {
  21.     EdsError err;
  22.     EdsCameraRef camera = NULL;
  23.     bool isSDKLoaded = false;
  24.     EdsCapacity capacity = { 0x7FFFFFFF, 0x1000, 1 };
  25.     EdsInt32 saveTarget = kEdsSaveTo_Host;
  26.  
  27.     // Initialize SDK
  28.     err = EdsInitializeSDK();
  29.     if (err == EDS_ERR_OK)
  30.         isSDKLoaded = true;
  31.  
  32.     // Get first camera
  33.     if (err == EDS_ERR_OK)
  34.         err = getFirstCamera(&camera);
  35.  
  36.  
  37.     // Open session with camera
  38.     err = EdsOpenSession(camera);
  39.  
  40.     // Set event handler
  41.     if (err == EDS_ERR_OK)
  42.         err = EdsSetObjectEventHandler(camera, kEdsObjectEvent_All, handleObjectEvent, NULL);
  43.  
  44.     if (err == EDS_ERR_OK)
  45.         err = EdsSetPropertyEventHandler(camera, kEdsPropertyEvent_All, handlePropertyEvent, NULL);
  46.  
  47.     if (err == EDS_ERR_OK)
  48.         err = EdsSetCameraStateEventHandler(camera, kEdsStateEvent_All, handleStateEvent, NULL);
  49.  
  50.     err = EdsSetPropertyData(camera, kEdsPropID_SaveTo, 0, 4, &saveTarget);
  51.  
  52.     err = EdsSetCapacity(camera, capacity);
  53.  
  54.     ///// Take picture
  55.     err = EdsSendCommand(camera, kEdsCameraCommand_TakePicture, 0);
  56.    
  57.     while (!eventFired) {
  58.         err = EdsGetEvent();
  59.         std::this_thread::sleep_for(0.3s);
  60.     }
  61.    
  62.     eventFired = false;
  63.     ////
  64.  
  65.     // Close session with camera
  66.     if (err == EDS_ERR_OK)
  67.         err = EdsCloseSession(camera);
  68.  
  69.     // Release camera
  70.     if (camera != NULL)
  71.  
  72.     // Terminate SDK
  73.     if (isSDKLoaded)
  74.         EdsTerminateSDK();
  75. }
  76.  
  77.  
  78. EdsError EDSCALLBACK handleObjectEvent(EdsObjectEvent event, EdsBaseRef object, EdsVoid* context)
  79. {
  80.     std::cout << "Event is: 0x" << std::hex << event << "\n";
  81.     EdsError err = EDS_ERR_OK;
  82.  
  83.     if (event == kEdsObjectEvent_DirItemRequestTransfer) {
  84.         err = downloadImage(object);
  85.  
  86.         // Object must be released
  87.         if (object)
  88.             err = EdsRelease(object);
  89.  
  90.         eventFired = true;
  91.     }
  92.  
  93.     return err;
  94. }
  95.  
  96. EdsError EDSCALLBACK handlePropertyEvent(EdsPropertyEvent event, EdsPropertyID property, EdsUInt32 inParam, EdsVoid* context)
  97. {
  98.     return EDS_ERR_OK;
  99. }
  100.  
  101. EdsError EDSCALLBACK handleStateEvent(EdsStateEvent event, EdsUInt32 parameter, EdsVoid* context)
  102. {
  103.     return EDS_ERR_OK;
  104. }
  105.  
  106.  
  107. EdsError getFirstCamera(EdsCameraRef* camera)
  108. {
  109.     EdsError err;
  110.     EdsCameraListRef cameraList = NULL;
  111.  
  112.     err = EdsGetCameraList(&cameraList);
  113.     err = EdsGetChildAtIndex(cameraList, 0, camera);
  114.     return err;
  115. }
  116.  
  117. EdsError downloadImage(EdsDirectoryItemRef directoryItem)
  118. {
  119.     EdsError err = EDS_ERR_OK;
  120.     EdsStreamRef stream = NULL;
  121.     // Get directory item information
  122.     EdsDirectoryItemInfo dirItemInfo;
  123.     err = EdsGetDirectoryItemInfo(directoryItem, &dirItemInfo);
  124.  
  125.     // Create file stream for transfer destination
  126.     if (err == EDS_ERR_OK)
  127.         err = EdsCreateFileStream(dirItemInfo.szFileName, kEdsFileCreateDisposition_CreateAlways, kEdsAccess_ReadWrite, &stream);
  128.    
  129.     // Download image
  130.     if (err == EDS_ERR_OK)
  131.         err = EdsDownload(directoryItem, dirItemInfo.size, stream);
  132.  
  133.     // Issue notification that download is complete
  134.     if (err == EDS_ERR_OK)
  135.         err = EdsDownloadComplete(directoryItem);
  136.    
  137.     // Release stream
  138.     if (stream != NULL) {
  139.         EdsRelease(stream);
  140.         stream = NULL;
  141.     }
  142.     return err;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement