Subversion Repositories freemyipod

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
828 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
{
31
    .magic = "emCOsett",
32
    .app = "bootmenu",
33
    .version = SETTINGS_VERSION,
34
    .timeout_initial = 30000000,
35
    .timeout_idle = 300000000,
36
    .timeout_item = 0,
37
    .default_item = 2,
38
    .fastboot_item = 0
39
};
40
 
41
struct settingdata settings;
42
 
43
void settings_reset()
44
{
45
    memcpy(&settings, &settings_default, sizeof(settings));
46
}
47
 
48
void setting_validate(void* setting)
49
{
50
    if (setting == &settings.timeout_initial)
51
    {
52
        if (settings.timeout_initial < SETTINGS_TIMEOUT_INITIAL_MIN)
53
            settings.timeout_initial = SETTINGS_TIMEOUT_INITIAL_MIN;
54
        if (settings.timeout_initial > SETTINGS_TIMEOUT_INITIAL_MAX)
55
            settings.timeout_initial = SETTINGS_TIMEOUT_INITIAL_MAX;
56
    }
57
    else if (setting == &settings.timeout_idle)
58
    {
59
        if (settings.timeout_idle < SETTINGS_TIMEOUT_IDLE_MIN)
60
            settings.timeout_idle = SETTINGS_TIMEOUT_IDLE_MIN;
61
        if (settings.timeout_idle > SETTINGS_TIMEOUT_IDLE_MAX)
62
            settings.timeout_idle = SETTINGS_TIMEOUT_IDLE_MAX;
63
    }
64
    else if (setting == &settings.timeout_item)
65
    {
66
            if (settings.timeout_item < SETTINGS_TIMEOUT_ITEM_MIN)
67
                settings.timeout_item = SETTINGS_TIMEOUT_ITEM_MIN;
68
            if (settings.timeout_item > SETTINGS_TIMEOUT_ITEM_MAX)
69
                settings.timeout_item = SETTINGS_TIMEOUT_ITEM_MAX;
70
    }
71
    else if (setting == &settings.default_item)
72
    {
73
            if (settings.default_item < SETTINGS_DEFAULT_ITEM_MIN)
74
                settings.default_item = SETTINGS_DEFAULT_ITEM_MIN;
75
            if (settings.default_item > SETTINGS_DEFAULT_ITEM_MAX)
76
                settings.default_item = SETTINGS_DEFAULT_ITEM_MAX;
77
    }
78
    else if (setting == &settings.fastboot_item)
79
    {
80
            if (settings.fastboot_item < SETTINGS_FASTBOOT_ITEM_MIN)
81
                settings.fastboot_item = SETTINGS_FASTBOOT_ITEM_MIN;
82
            if (settings.fastboot_item > SETTINGS_FASTBOOT_ITEM_MAX)
83
                settings.fastboot_item = SETTINGS_FASTBOOT_ITEM_MAX;
84
    }
85
}
86
 
87
void settings_validate_all()
88
{
89
    if (memcmp(settings.magic, settings_default.magic, sizeof(settings.magic))
90
     || memcmp(settings.app, settings_default.app, sizeof(settings.app))
91
     || settings.version != SETTINGS_VERSION)
92
        settings_reset();
93
    setting_validate(&settings.timeout_initial);
94
    setting_validate(&settings.timeout_idle);
95
    setting_validate(&settings.timeout_item);
96
    setting_validate(&settings.default_item);
97
    setting_validate(&settings.fastboot_item);
98
}
99
 
100
void settings_apply()
101
{
102
    mainchooser_apply_settings();
103
}
104
 
105
void settings_init()
106
{
107
    settings_reset();
108
    int fd = file_open("/.apps/bootmenu/data/settings.dat", O_RDONLY);
109
    if (fd > 0)
110
    {
111
        int size = filesize(fd);
112
        if (size > 0)
113
        {
114
            if (size > sizeof(settings)) size = sizeof(settings);
115
            read(fd, &settings, size);
116
        }
117
        close(fd);
118
    }
119
    settings_validate_all();
120
    settings_apply();
121
}
122
 
123
void settings_save()
124
{
125
    mkdir("/.apps");
126
    mkdir("/.apps/bootmenu");
127
    mkdir("/.apps/bootmenu/data");
128
    int fd = file_creat("/.apps/bootmenu/data/settings.dat");
129
    if (fd > 0)
130
    {
131
        write(fd, &settings, sizeof(settings));
132
        close(fd);
133
    }
134
}