Commit f170fd13 authored by Martin Cífka's avatar Martin Cífka
Browse files

added auto poweroff; removed auto wifi off; corrected bracketing speeds; fixed...

added auto poweroff; removed auto wifi off; corrected bracketing speeds; fixed long shutter speed timeout;
parent 7667ff6f
Loading
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -146,7 +146,7 @@
                    </tr>
                </table>
                
                <table id="wsFormTable2">
                <!--<table id="wsFormTable2">
                    <tr>
                        <td><label for="checkboxWifiOff">Turn off Wifi when shooting<br> timelapse above 1 minute</label></td>
                        <td><label class="switch">
@@ -154,7 +154,7 @@
                            </label>
                        </td>
                    </tr>
                </table>
                </table>-->
                
                <button type="button" id="buttonShoot" onclick="wsFormSubmit();" name="cmd" value="SHOOT" disabled>Shoot!</button>
            </form>
+11 −6
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@ var notifying = false;
var connected = false;
var state = CameraState.DISCONNECTED;
var host = "192.168.42.1";

var notifyQueue = [];


function sleep(ms) {
@@ -155,7 +155,7 @@ function setCameraState(newState)
                    
                //SHOOTING -> READY
                case CameraState.SHOOTING:
                    notify("Shooting has finished!",false, 1000);
                    // notify("Shooting has finished!",false, 1000);
                    break;
            }
            break;
@@ -170,7 +170,6 @@ function setCameraState(newState)
        elements[i].disabled = disabled;
    
    // disable/enable additional buttons outside form
    //document.getElementById("checkboxWifiOff").disabled = disabled;
    document.getElementById("buttonTurnOffApp").disabled = disabled;
    document.getElementById("buttonPowerOff").disabled = disabled;

@@ -237,10 +236,15 @@ async function notify(text, error = false, time = 1500)
    else
        console.log(text);
    
    notifyQueue.push([text, time]);
    
    
    // wait until prevous notifications dissapeared
    await waitFor(_ => notifying == false );    
    notifying = true;
    
    
    [text,time] = notifyQueue.shift();
    //set text
    let x = document.getElementById("notification");
    x.innerHTML = text;
@@ -284,13 +288,14 @@ function wsFormToJson() {
    {
        json["timelapseCount"] = 0;
        json["timelapseInterval"] = 0;
        json["wifiOff"] = false;
        //json["wifiOff"] = false;
    }
    else
    
    /*else
    {
        if (json["timelapseInterval"] * json["timelapseCount"] < 60)
            json["wifiOff"] = false;
    }
    }*/
    
    delete json[""]
    return json;
+14 −2
Original line number Diff line number Diff line
@@ -33,7 +33,9 @@ public:
        QuerySessionHolder = 1793,
        
        PowerOff = 6155,
        GetSetAutoPowerOff = 6151 //TODO
        GetSetAutoPowerOff = 6151, //TODO

        CameraOverheated = 6158
        
    };
    
@@ -170,7 +172,17 @@ public:
    };
    


    static int getSpeedMs(Speed speed)
    {
        if ((int)speed < 32768)
        {
            return 1000*(int)speed;
        }
        else
        {
            return 1000/((int)speed-32768);
        }
    };
    
    static std::string stateToString(int state)
    {
+135 −81
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ Commander::Commander() :
    _sock(TcpSocket(&_reader, this)),
    _token(0),
        
    _autoPowerOff(-1),
    _iso((Codes::ISO)-1),
    _speed((Codes::Speed)-1),
    _photoWB((Codes::ParamWB)(-1)),
@@ -144,6 +145,7 @@ bool Commander::getCameraSettings()
            cerr << "Error: unexpected JSON response: \"" << key << "\" = " << (*jsonPtr)[key] << endl;
            return false;
    }
    
    _speed = (Codes::Speed)(int)(*jsonPtr)[key];

    return true;
@@ -159,7 +161,7 @@ bool Commander::setISO(Codes::ISO iso)
            _iso = iso;
        else
        {
            _server->wsSendNotification("Error: Setting ISO failed.");
            _server->wsSendNotification("Error: Setting ISO failed.", true);
            return false;
        }

@@ -181,7 +183,7 @@ bool Commander::setSpeed(Codes::Speed speed)
        }
        else
        {
            _server->wsSendNotification("Error: Setting shutter speed failed.");
            _server->wsSendNotification("Error: Setting shutter speed failed.", true);
            return false;
        }
    }
@@ -190,7 +192,7 @@ bool Commander::setSpeed(Codes::Speed speed)
}


bool Commander::setBracketingBuiltIn(Codes::ParamBracketingBuiltIn bracketing)
/*bool Commander::setBracketingBuiltIn(Codes::ParamBracketingBuiltIn bracketing)
{
    if (_bracketingBuiltIn != bracketing)
    {
@@ -200,7 +202,7 @@ bool Commander::setBracketingBuiltIn(Codes::ParamBracketingBuiltIn bracketing)
            return false;
    }
    return true;
}
}*/


bool Commander::setMode(Codes::ParamMode mode)
@@ -215,6 +217,23 @@ bool Commander::setMode(Codes::ParamMode mode)
    return true;
}

bool Commander::setAutoPowerOff(size_t minutes)
{
    if (_autoPowerOff != minutes)
    {
        if (setParam(Codes::MsgId::GetSetAutoPowerOff, minutes))
            _autoPowerOff = minutes;
        else
            return false;
    }
    return true;
}

bool Commander::getAutoPowerOff()
{
    return getParam(Codes::MsgId::GetSetAutoPowerOff, _autoPowerOff);
}

bool Commander::getMode()
{
    int mode;
@@ -256,6 +275,14 @@ bool Commander::getParam(Codes::MsgId msgid, T& param_out)
    return true;
}

chrono::milliseconds Commander::sumBracketingVector()
{
    int ms = 0;
    for (auto&& s : _bracketingVector)
        ms += Codes::getSpeedMs(s);
    
    return chrono::milliseconds(ms);
}

bool Commander::setBracketing(size_t evStep, size_t halfCount)
{
@@ -276,8 +303,7 @@ bool Commander::setBracketing(size_t evStep, size_t halfCount)
        {
            // TODO: shoot, read metadata and set exposure

            cerr << "Error: Bracketing not supported with Auto speed." << endl;
            _server->wsSendNotification("Error: Bracketing not supported with Auto speed.");
            _server->wsSendNotification("Error: Bracketing not supported with Auto speed.", true);
            return false;
        }

@@ -293,12 +319,12 @@ bool Commander::setBracketing(size_t evStep, size_t halfCount)
            last  < speedOrder.begin()  ||
            last >= speedOrder.end() )
        {
                cerr << "Error: Bracketing out o range!." << endl;
                _server->wsSendNotification("Error: Bracketing out o range!");
                _server->wsSendNotification("Error: Bracketing out o range!", true);
                return false;
        }

        _bracketingVector = {};
        it = first;
        for (int i = 0; i < 1 + halfCount * 2; ++i)
        {
            _bracketingVector.push_back(*it);
@@ -331,7 +357,7 @@ bool Commander::setPhotoWB(Codes::ParamWB wb)
            _photoWB = wb;
        else
        {
            _server->wsSendNotification("Error: Setting whitebalance failed.");
            _server->wsSendNotification("Error: Setting whitebalance failed.", true);
            return false;
        }
    }
@@ -350,7 +376,9 @@ bool Commander::shootNormal()
            {
                make_pair(Codes::MsgId::ShootNormal, Codes::Rval::CommandOk),
                make_pair(Codes::MsgId::ImgCaptured, Codes::Rval::NotificationOk)
            })
            },
            DEFAULT_TIMEOUT+chrono::milliseconds(Codes::getSpeedMs(_speed))
            )
        )   
        return false;

@@ -361,7 +389,18 @@ bool Commander::shootNormal()
            return false;
    }

    cout << "Image captured: " << (*vectorJsonPtr[1])[key] << endl;
    // Send image path to client
    string path = (*vectorJsonPtr[1])[key]; // C:\DCIM\20200923\IMG_20200923_000753.JPG
    path = path.substr(8, path.size()-8);   // 20200923\IMG_20200923_000753.JPG
    path.replace(8, 1, "/");                // 20200923/IMG_20200923_000753.JPG
    cout << path << endl;
    
    _server->wsSendNotification(
        "Captured: <a href=\"http://192.168.42.1:50422/" + path + "\" target=\"_blank\">"
        + path.substr(9, path.size()-9)
        + "</a>"
    );

    return true;
}

@@ -398,7 +437,7 @@ bool Commander::shootBracketing()
}


bool Commander::shootBracketingBuiltIn()
/*bool Commander::shootBracketingBuiltIn()
{
    vector<shared_ptr<DynamicJsonDocument>> vectorJsonPtr;
    if (!_sock.sendRecvVerify(
@@ -431,7 +470,7 @@ bool Commander::shootBracketingBuiltIn()
        cout << "Image captured: " << (*vectorJsonPtr[i])[key] << endl;
    }
    return true;
}
}*/


bool Commander::shootTimelapse(bool bracketing)
@@ -576,7 +615,7 @@ void Commander::disconnectSocket()

bool Commander::connectCommander()
{
    if (getToken() && getCameraSettings() && getMode())
    if (getToken() && getCameraSettings() && getMode() && getAutoPowerOff())
    {
        return true;
    }
@@ -710,8 +749,7 @@ void Commander::runExecutor()
                  (*jsonPtr)["bracketingEV"].is<int>() &&
                  (*jsonPtr)["timelapseCount"].is<int>() &&
                  (*jsonPtr)["timelapseInterval"].is<int>() &&
                  (*jsonPtr)["photoWB"].is<int>() &&
                  (*jsonPtr)["wifiOff"].is<bool>()))
                  (*jsonPtr)["photoWB"].is<int>()))
                  // compensation
                  //
            {
@@ -720,16 +758,29 @@ void Commander::runExecutor()
                cerr << "Invalid data from user: " << str << endl; 
                continue;
            }
            
            // try to set ISO, speed, wb, bracketing and timelapse settings
            if (!setISO((Codes::ISO)(int)(*jsonPtr)["iso"]) ||
                !setSpeed((Codes::Speed)(int)(*jsonPtr)["speed"]) ||
                !setPhotoWB((Codes::ParamWB)(int)(*jsonPtr)["photoWB"]) ||
                !setBracketing((int)(*jsonPtr)["bracketingEV"], (int)(*jsonPtr)["bracketingHalf"]))
            {
                _server->wsSendNotification("Error: Couldn't set some settings...", true);
                continue;
            }
            setTimelapse((int)(*jsonPtr)["timelapseInterval"], (int)(*jsonPtr)["timelapseCount"]);
            
            // Set auto power-off
            auto autoPowerOff = _autoPowerOff;
            if (_autoPowerOff == 0){} // Do nothing
            else if (_timelapseInterval-10 > _autoPowerOff*60)
            {
                if (!setAutoPowerOff( (_timelapseInterval-10 > 5*60 ? 10 : 0) ))
                {
                    _server->wsSendNotification("Error: Couldn't set auto power-off...", true);
                    continue;
                }
            }

            // turn of wifi if requested and shoot
            _server->wsSendState(Server::State::SHOOTING);
@@ -744,9 +795,14 @@ void Commander::runExecutor()

            if (!shoot())
            {
                cerr << "Shooting failed." << endl;
                _server->wsSendNotification("Error while shooting...");
                _server->wsSendNotification("Error while shooting...", true);
            }
            
            this_thread::sleep_for(chrono::milliseconds(300));
            // set auto power-off to original value
            if (autoPowerOff != _autoPowerOff)
                setAutoPowerOff(autoPowerOff);
            
            _server->wsSendState(Server::State::READY);


@@ -761,8 +817,7 @@ void Commander::runExecutor()

            else
            {
                _server->wsSendNotification("Error: Turning Wifi off failed.");
                cerr << "Error: Turning off Wifi failed." << endl;
                _server->wsSendNotification("Error: Turning Wifi off failed.", true);
            }
        }

@@ -772,8 +827,7 @@ void Commander::runExecutor()
                cout << "Power off..." << endl;
            else
            {
                _server->wsSendNotification("Error: Powering off failed.");
                cerr << "Error: Powering off failed." << endl;
                _server->wsSendNotification("Error: Powering off failed.", true);
            }
        }        
    }
+7 −3
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ private:
    CustomReader _reader;
    TcpSocket _sock;
    int _token;
    int _autoPowerOff;
    
    Codes::ISO _iso;
    Codes::Speed _speed;
@@ -97,17 +98,21 @@ private:
    
    bool wifiControl(bool on);
    bool powerOff();
    bool setAutoPowerOff(size_t minutes);
    bool getAutoPowerOff();
    
    bool shootNormal();
    bool shootBracketing();
    
    bool shootBracketing(const std::vector<Codes::Speed>& speeds);
    bool shootBracketingBuiltIn();
    //bool shootBracketingBuiltIn();
    bool shootTimelapse(bool bracketing);
    
    template <typename T> bool setParam(Codes::MsgId msgid, T param);
    template <typename T> bool getParam(Codes::MsgId msgid, T& param_out);

    std::chrono::milliseconds sumBracketingVector();

    
    /**
    * Set commander's bracketing settings - 
@@ -122,13 +127,12 @@ private:
    * @return true if setting was successful, otherwise false
    */
    bool setBracketing(size_t evStep, size_t halfCount);
    bool setBracketingBuiltIn(Codes::ParamBracketingBuiltIn);
    //bool setBracketingBuiltIn(Codes::ParamBracketingBuiltIn);
    bool setISO(Codes::ISO iso);
    bool setSpeed(Codes::Speed speed);
    void setTimelapse(size_t interval, size_t count);
    bool setPhotoWB(Codes::ParamWB wb);
    bool setMode(Codes::ParamMode mode);
    bool setAutoTurnOff(size_t minutes);
    
    bool getToken();
    bool getCameraSettings();
Loading