summaryrefslogtreecommitdiffstats
path: root/rbutil/rbutilqt/installbootloader.h
blob: aea118cd7dcb1bd2cd4a9f6af9e0dc4e14ede3c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/***************************************************************************
 *             __________               __   ___.
 *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
 *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
 *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
 *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
 *                     \/            \/     \/    \/            \/
 *
 *   Copyright (C) 2007 by Dominik Wenger
 *   $Id$
 *
 * All files in this archive are subject to the GNU General Public License.
 * See the file COPYING in the source tree root for full license agreement.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ****************************************************************************/

#ifndef INSTALLBOOTLOADER_H
#define INSTALLBOOTLOADER_H

#ifndef CONSOLE
#include <QtGui>
#else
#include <QtCore>
#endif

#include "progressloggerinterface.h"
#include "httpget.h"
#include "irivertools/irivertools.h"

extern "C" {
    // Ipodpatcher
    #include "../ipodpatcher/ipodpatcher.h"
    #include "../sansapatcher/sansapatcher.h"
};

bool initIpodpatcher();
bool initSansapatcher();

class BootloaderInstaller : public QObject
{
    Q_OBJECT

public:
    BootloaderInstaller(QObject* parent);
    ~BootloaderInstaller() {}

    void install(ProgressloggerInterface* dp);
    void uninstall(ProgressloggerInterface* dp);

    void setMountPoint(QString mountpoint) {m_mountpoint = mountpoint;}
    void setProxy(QUrl proxy) {m_proxy= proxy;}
    void setDevice(QString device) {m_device= device;}  //!< the current plattform
    void setBootloaderMethod(QString method) {m_bootloadermethod= method;}
    void setBootloaderName(QString name){m_bootloadername= name;}
    void setBootloaderBaseUrl(QString baseUrl){m_bootloaderUrlBase = baseUrl;}
    void setOrigFirmwarePath(QString path) {m_origfirmware = path;}  //!< for iriver original firmware
    void setBootloaderInfoUrl(QString url) {m_bootloaderinfoUrl =url; } //!< the url for the info file
    bool downloadInfo(); //!< should be called before install/uninstall, blocks until downloaded.
    bool uptodate(); //!< returns wether the bootloader is uptodate

signals:
    void done(bool error);  //installation finished.

signals:   // internal signals. Dont use this from out side.
    void prepare();
    void finish();

private slots:
    void createInstallLog();  // adds the bootloader entry to the log
    void removeInstallLog(); // removes the bootloader entry from the log

    void updateDataReadProgress(int, int);
    void downloadDone(bool);
    void downloadRequestFinished(int, bool);
    void infoDownloadDone(bool);
    void infoRequestFinished(int, bool);
    void installEnded(bool);

    // gigabeat specific routines
    void gigabeatPrepare();
    void gigabeatFinish();

    //iaudio specific routines
    void iaudioPrepare();
    void iaudioFinish();

    //h10 specific routines
    void h10Prepare();
    void h10Finish();

    //ipod specific routines
    void ipodPrepare();
    void ipodFinish();

    //sansa specific routines
    void sansaPrepare();
    void sansaFinish();

    //iriver specific routines
    void iriverPrepare();
    void iriverFinish();
    
    //mrobe100 specific routines
    void mrobe100Prepare();
    void mrobe100Finish();

private:

    HttpGet *infodownloader;
    QTemporaryFile bootloaderInfo;
    volatile bool infoDownloaded;
    volatile bool infoError;

    QString m_mountpoint, m_device,m_bootloadermethod,m_bootloadername;
    QString m_bootloaderUrlBase,m_tempfilename,m_origfirmware;
    QUrl m_proxy;
    QString m_bootloaderinfoUrl;
    bool m_install;

    int series,table_entry;  // for fwpatcher

    HttpGet *getter;
    QTemporaryFile downloadFile;

    ProgressloggerInterface* m_dp;

};
#endif