Search code examples
c++sdksony

Set current DateTime - SONY SDK


I am trying to set the datetime of a Sony alpha 7s iii to be a PC current datetime, using the Sony SDK. Without modifying too much to the RemoteCli.cpp code that is provided as an example, I added a case there:

while (true) {
    cli::tout << "<< Time Sync >>\nWhat would you like to do? Enter the corresponding number.\n";
    cli::tout
        << "(0) Return to REMOTE-MENU\n"
        << "(1) Set Camera Time From PC \n"
        ;
    cli::tout << "input> ";
    cli::text select;
    std::getline(cli::tin, select);
    cli::tout << '\n';
    if (select == TEXT("1")) { /* Time Sync */
        camera->set_datetime();
    }
    else if (select == TEXT("0")) {
        cli::tout << "Return to REMOTE-MENU.\n";
        break;
    }
    cli::tout << std::endl;
}// end of loop-Menu7

and based on this question , I created a new set_datetime function in CameraDevice.cpp:

void CameraDevice::set_datetime() {
    std::time_t result = std::time(nullptr);
    std::asctime(std::localtime(&result));
    cli::tout << result;

    CrInt64 time = static_cast<CrInt64>(result);
    SDK::CrDeviceProperty prop;
    prop.SetCode(SDK::CrDevicePropertyCode::CrDeviceProperty_DateTime_Settings);
    prop.SetCurrentValue(time);
    prop.SetValueType(SDK::CrDataType::CrDataType_UInt64);
}

Unfortunately, the PC current time is not written on the camera.


Solution

  • I didn't notice that I forgot to add the set device property command - SDK::SetDeviceProperty(m_device_handle, &prop);

    Changed it to this:

    void CameraDevice::set_datetime() {
        std::time_t result = std::time(nullptr);
        std::asctime(std::localtime(&result));
        cli::tout << result;
    
        SDK::CrDeviceProperty prop;
        prop.SetCode(SDK::CrDevicePropertyCode::CrDeviceProperty_DateTime_Settings);
        prop.SetCurrentValue((CrInt64u)(result));
        prop.SetValueType(SDK::CrDataType::CrDataType_UInt64);
    
        SDK::SetDeviceProperty(m_device_handle, &prop);
    }
    

    And it worked!

    In addition, when looking at the datetime on the camera's screen (in settings), it won't work.

    The camera settings menu needs to be closed.