Subversion Repositories freemyipod

Rev

Rev 823 | Rev 838 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
808 theseven 1
//
2
//
3
//    Copyright 2011 TheSeven
4
//
5
//
6
//    This file is part of emCORE.
7
//
8
//    emCORE is free software: you can redistribute it and/or
9
//    modify it under the terms of the GNU General Public License as
10
//    published by the Free Software Foundation, either version 2 of the
11
//    License, or (at your option) any later version.
12
//
13
//    emCORE is distributed in the hope that it will be useful,
14
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
15
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16
//    See the GNU General Public License for more details.
17
//
18
//    You should have received a copy of the GNU General Public License along
19
//    with emCORE.  If not, see <http://www.gnu.org/licenses/>.
20
//
21
//
22
 
23
 
24
#include "emcoreapp.h"
25
#include "settings.h"
26
#include "mainchooser.h"
27
 
28
 
29
struct settingdata settings_default =
30
{
823 theseven 31
    .magic = "emCOsett",
32
    .app = "bootmenu",
808 theseven 33
    .version = SETTINGS_VERSION,
34
    .timeout_initial = 30000000,
35
    .timeout_idle = 300000000,
36
    .timeout_item = 0,
37
    .default_item = 1,
833 theseven 38
    .fastboot_item = 0,
39
    .snow = 5
808 theseven 40
};
41
 
42
struct settingdata settings;
43
 
44
void settings_reset()
45
{
46
    memcpy(&settings, &settings_default, sizeof(settings));
47
}
48
 
823 theseven 49
void setting_validate(void* setting)
50
{
51
    if (setting == &settings.timeout_initial)
52
    {
53
        if (settings.timeout_initial < SETTINGS_TIMEOUT_INITIAL_MIN)
54
            settings.timeout_initial = SETTINGS_TIMEOUT_INITIAL_MIN;
55
        if (settings.timeout_initial > SETTINGS_TIMEOUT_INITIAL_MAX)
56
            settings.timeout_initial = SETTINGS_TIMEOUT_INITIAL_MAX;
57
    }
58
    else if (setting == &settings.timeout_idle)
59
    {
60
        if (settings.timeout_idle < SETTINGS_TIMEOUT_IDLE_MIN)
61
            settings.timeout_idle = SETTINGS_TIMEOUT_IDLE_MIN;
62
        if (settings.timeout_idle > SETTINGS_TIMEOUT_IDLE_MAX)
63
            settings.timeout_idle = SETTINGS_TIMEOUT_IDLE_MAX;
64
    }
65
    else if (setting == &settings.timeout_item)
66
    {
833 theseven 67
        if (settings.timeout_item < SETTINGS_TIMEOUT_ITEM_MIN)
68
            settings.timeout_item = SETTINGS_TIMEOUT_ITEM_MIN;
69
        if (settings.timeout_item > SETTINGS_TIMEOUT_ITEM_MAX)
70
            settings.timeout_item = SETTINGS_TIMEOUT_ITEM_MAX;
823 theseven 71
    }
72
    else if (setting == &settings.default_item)
73
    {
833 theseven 74
        if (settings.default_item < SETTINGS_DEFAULT_ITEM_MIN)
75
            settings.default_item = SETTINGS_DEFAULT_ITEM_MIN;
76
        if (settings.default_item > SETTINGS_DEFAULT_ITEM_MAX)
77
            settings.default_item = SETTINGS_DEFAULT_ITEM_MAX;
823 theseven 78
    }
79
    else if (setting == &settings.fastboot_item)
80
    {
833 theseven 81
        if (settings.fastboot_item < SETTINGS_FASTBOOT_ITEM_MIN)
82
            settings.fastboot_item = SETTINGS_FASTBOOT_ITEM_MIN;
83
        if (settings.fastboot_item > SETTINGS_FASTBOOT_ITEM_MAX)
84
            settings.fastboot_item = SETTINGS_FASTBOOT_ITEM_MAX;
823 theseven 85
    }
833 theseven 86
    else if (setting == &settings.snow)
87
    {
88
        if (settings.snow < SETTINGS_SNOW_MIN)
89
            settings.snow = SETTINGS_SNOW_MIN;
90
        if (settings.snow > SETTINGS_SNOW_MAX)
91
            settings.snow = SETTINGS_SNOW_MAX;
92
        settingchooser_apply_settings();
93
    }
823 theseven 94
}
95
 
808 theseven 96
void settings_validate_all()
97
{
823 theseven 98
    if (memcmp(settings.magic, settings_default.magic, sizeof(settings.magic))
99
     || memcmp(settings.app, settings_default.app, sizeof(settings.app))
100
     || settings.version != SETTINGS_VERSION)
101
        settings_reset();
102
    setting_validate(&settings.timeout_initial);
103
    setting_validate(&settings.timeout_idle);
104
    setting_validate(&settings.timeout_item);
105
    setting_validate(&settings.default_item);
106
    setting_validate(&settings.fastboot_item);
833 theseven 107
    setting_validate(&settings.snow);
808 theseven 108
}
109
 
110
void settings_apply()
111
{
112
    mainchooser_apply_settings();
833 theseven 113
    toolchooser_apply_settings();
114
    settingchooser_apply_settings();
115
    confirmchooser_apply_settings();
808 theseven 116
}
117
 
118
void settings_init()
119
{
120
    settings_reset();
121
    int fd = file_open("/.apps/bootmenu/data/settings.dat", O_RDONLY);
122
    if (fd > 0)
123
    {
124
        int size = filesize(fd);
125
        if (size > 0)
126
        {
127
            if (size > sizeof(settings)) size = sizeof(settings);
128
            read(fd, &settings, size);
129
        }
130
        close(fd);
131
    }
132
    settings_validate_all();
133
    settings_apply();
134
}
135
 
136
void settings_save()
137
{
138
    mkdir("/.apps");
139
    mkdir("/.apps/bootmenu");
140
    mkdir("/.apps/bootmenu/data");
141
    int fd = file_creat("/.apps/bootmenu/data/settings.dat");
142
    if (fd > 0)
143
    {
144
        write(fd, &settings, sizeof(settings));
145
        close(fd);
146
    }
147
}