Subversion Repositories freemyipod

Rev

Rev 838 | 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,
838 theseven 39
    .snow = 5,
40
    .brightness = 100
808 theseven 41
};
42
 
43
struct settingdata settings;
44
 
45
void settings_reset()
46
{
47
    memcpy(&settings, &settings_default, sizeof(settings));
48
}
49
 
823 theseven 50
void setting_validate(void* setting)
51
{
52
    if (setting == &settings.timeout_initial)
53
    {
54
        if (settings.timeout_initial < SETTINGS_TIMEOUT_INITIAL_MIN)
55
            settings.timeout_initial = SETTINGS_TIMEOUT_INITIAL_MIN;
56
        if (settings.timeout_initial > SETTINGS_TIMEOUT_INITIAL_MAX)
57
            settings.timeout_initial = SETTINGS_TIMEOUT_INITIAL_MAX;
58
    }
59
    else if (setting == &settings.timeout_idle)
60
    {
61
        if (settings.timeout_idle < SETTINGS_TIMEOUT_IDLE_MIN)
62
            settings.timeout_idle = SETTINGS_TIMEOUT_IDLE_MIN;
63
        if (settings.timeout_idle > SETTINGS_TIMEOUT_IDLE_MAX)
64
            settings.timeout_idle = SETTINGS_TIMEOUT_IDLE_MAX;
65
    }
66
    else if (setting == &settings.timeout_item)
67
    {
833 theseven 68
        if (settings.timeout_item < SETTINGS_TIMEOUT_ITEM_MIN)
69
            settings.timeout_item = SETTINGS_TIMEOUT_ITEM_MIN;
70
        if (settings.timeout_item > SETTINGS_TIMEOUT_ITEM_MAX)
71
            settings.timeout_item = SETTINGS_TIMEOUT_ITEM_MAX;
823 theseven 72
    }
73
    else if (setting == &settings.default_item)
74
    {
833 theseven 75
        if (settings.default_item < SETTINGS_DEFAULT_ITEM_MIN)
76
            settings.default_item = SETTINGS_DEFAULT_ITEM_MIN;
77
        if (settings.default_item > SETTINGS_DEFAULT_ITEM_MAX)
78
            settings.default_item = SETTINGS_DEFAULT_ITEM_MAX;
823 theseven 79
    }
80
    else if (setting == &settings.fastboot_item)
81
    {
833 theseven 82
        if (settings.fastboot_item < SETTINGS_FASTBOOT_ITEM_MIN)
83
            settings.fastboot_item = SETTINGS_FASTBOOT_ITEM_MIN;
84
        if (settings.fastboot_item > SETTINGS_FASTBOOT_ITEM_MAX)
85
            settings.fastboot_item = SETTINGS_FASTBOOT_ITEM_MAX;
823 theseven 86
    }
833 theseven 87
    else if (setting == &settings.snow)
88
    {
89
        if (settings.snow < SETTINGS_SNOW_MIN)
90
            settings.snow = SETTINGS_SNOW_MIN;
91
        if (settings.snow > SETTINGS_SNOW_MAX)
92
            settings.snow = SETTINGS_SNOW_MAX;
93
        settingchooser_apply_settings();
94
    }
838 theseven 95
    else if (setting == &settings.brightness)
96
    {
97
        if (settings.brightness < SETTINGS_BRIGHTNESS_MIN)
98
            settings.brightness = SETTINGS_BRIGHTNESS_MIN;
99
        if (settings.brightness > SETTINGS_BRIGHTNESS_MAX)
100
            settings.brightness = SETTINGS_BRIGHTNESS_MAX;
101
        backlight_set_brightness(settings.brightness);
102
    }
823 theseven 103
}
104
 
808 theseven 105
void settings_validate_all()
106
{
823 theseven 107
    if (memcmp(settings.magic, settings_default.magic, sizeof(settings.magic))
108
     || memcmp(settings.app, settings_default.app, sizeof(settings.app))
109
     || settings.version != SETTINGS_VERSION)
110
        settings_reset();
111
    setting_validate(&settings.timeout_initial);
112
    setting_validate(&settings.timeout_idle);
113
    setting_validate(&settings.timeout_item);
114
    setting_validate(&settings.default_item);
115
    setting_validate(&settings.fastboot_item);
833 theseven 116
    setting_validate(&settings.snow);
838 theseven 117
    setting_validate(&settings.brightness);
808 theseven 118
}
119
 
120
void settings_apply()
121
{
122
    mainchooser_apply_settings();
833 theseven 123
    toolchooser_apply_settings();
124
    settingchooser_apply_settings();
125
    confirmchooser_apply_settings();
838 theseven 126
    backlight_set_brightness(settings.brightness);
808 theseven 127
}
128
 
129
void settings_init()
130
{
131
    settings_reset();
132
    int fd = file_open("/.apps/bootmenu/data/settings.dat", O_RDONLY);
133
    if (fd > 0)
134
    {
135
        int size = filesize(fd);
136
        if (size > 0)
137
        {
138
            if (size > sizeof(settings)) size = sizeof(settings);
139
            read(fd, &settings, size);
140
        }
141
        close(fd);
142
    }
143
    settings_validate_all();
144
    settings_apply();
145
}
146
 
147
void settings_save()
148
{
149
    mkdir("/.apps");
150
    mkdir("/.apps/bootmenu");
151
    mkdir("/.apps/bootmenu/data");
152
    int fd = file_creat("/.apps/bootmenu/data/settings.dat");
153
    if (fd > 0)
154
    {
155
        write(fd, &settings, sizeof(settings));
156
        close(fd);
157
    }
158
}