Lines 6-11
Link Here
|
6 |
* * |
6 |
* * |
7 |
* July 23, 2005 * |
7 |
* July 23, 2005 * |
8 |
* Erik Waling <erikw@acc.umu.se> * |
8 |
* Erik Waling <erikw@acc.umu.se> * |
|
|
9 |
* * |
10 |
* Fading logic by Alessandro Di Marco <dmr@c0nc3pt.com> * |
9 |
******************************************************************************/ |
11 |
******************************************************************************/ |
10 |
|
12 |
|
11 |
#include <stdlib.h> |
13 |
#include <stdlib.h> |
Lines 16-21
Link Here
|
16 |
|
18 |
|
17 |
static struct option long_opts[] = { |
19 |
static struct option long_opts[] = { |
18 |
{ "get" , no_argument , 0, 'g' }, |
20 |
{ "get" , no_argument , 0, 'g' }, |
|
|
21 |
{ "fade" , required_argument, 0, 'f' }, |
22 |
{ "delay" , required_argument, 0, 'e' }, |
19 |
{ "set" , required_argument, 0, 's' }, |
23 |
{ "set" , required_argument, 0, 's' }, |
20 |
{ "increase", no_argument , 0, 'i' }, |
24 |
{ "increase", no_argument , 0, 'i' }, |
21 |
{ "decrease", no_argument , 0, 'd' }, |
25 |
{ "decrease", no_argument , 0, 'd' }, |
Lines 30-35
Link Here
|
30 |
printf("Options:\n"); |
34 |
printf("Options:\n"); |
31 |
printf("\t-g --get\t\tQuery brightness level.\n"); |
35 |
printf("\t-g --get\t\tQuery brightness level.\n"); |
32 |
printf("\t-s --set <level>\tSet brightness level (%d-%d)\n", MIN_LEVEL, MAX_LEVEL); |
36 |
printf("\t-s --set <level>\tSet brightness level (%d-%d)\n", MIN_LEVEL, MAX_LEVEL); |
|
|
37 |
printf("\t-f --fade <level>\tFade in/out up to the given brightness level (%d-%d)\n", MIN_LEVEL, MAX_LEVEL); |
38 |
printf("\t-e --delay <usecs>\tFade cycle delay\n"); |
33 |
printf("\t-i --increase\t\tIncrease brightness with one level.\n"); |
39 |
printf("\t-i --increase\t\tIncrease brightness with one level.\n"); |
34 |
printf("\t-d --decrease\t\tDecrease brightness with one level.\n"); |
40 |
printf("\t-d --decrease\t\tDecrease brightness with one level.\n"); |
35 |
printf("\t-h --help\t\tPrints this help text.\n\n"); |
41 |
printf("\t-h --help\t\tPrints this help text.\n\n"); |
Lines 46-51
Link Here
|
46 |
nv_card.PMC[PMC_SMARTDIM_OFFSET/4] = (level << SMARTDIM_SHIFT) | (nv_card.PMC[PMC_SMARTDIM_OFFSET/4] & ~SMARTDIM_MASK); |
52 |
nv_card.PMC[PMC_SMARTDIM_OFFSET/4] = (level << SMARTDIM_SHIFT) | (nv_card.PMC[PMC_SMARTDIM_OFFSET/4] & ~SMARTDIM_MASK); |
47 |
} |
53 |
} |
48 |
|
54 |
|
|
|
55 |
void sd_fade_level(int end, unsigned long delay) { |
56 |
int i, start = sd_get_level(); |
57 |
|
58 |
if (end < MIN_LEVEL) |
59 |
end = MIN_LEVEL; |
60 |
if (end > MAX_LEVEL) |
61 |
end = MAX_LEVEL; |
62 |
|
63 |
if (end >= start) { |
64 |
for (i = start + 1; i <= end; i++) { |
65 |
nv_card.PMC[PMC_SMARTDIM_OFFSET/4] = (i << SMARTDIM_SHIFT) | (nv_card.PMC[PMC_SMARTDIM_OFFSET/4] & ~SMARTDIM_MASK); |
66 |
usleep(delay); |
67 |
} |
68 |
} else { |
69 |
for (i = start - 1; i >= end; i--) { |
70 |
nv_card.PMC[PMC_SMARTDIM_OFFSET/4] = (i << SMARTDIM_SHIFT) | (nv_card.PMC[PMC_SMARTDIM_OFFSET/4] & ~SMARTDIM_MASK); |
71 |
usleep(delay); |
72 |
} |
73 |
} |
74 |
} |
75 |
|
49 |
int sd_get_level() { |
76 |
int sd_get_level() { |
50 |
return (nv_card.PMC[PMC_SMARTDIM_OFFSET/4] & SMARTDIM_MASK) >> SMARTDIM_SHIFT; |
77 |
return (nv_card.PMC[PMC_SMARTDIM_OFFSET/4] & SMARTDIM_MASK) >> SMARTDIM_SHIFT; |
51 |
} |
78 |
} |
Lines 65-70
Link Here
|
65 |
int main(int argc, char *argv[]) { |
92 |
int main(int argc, char *argv[]) { |
66 |
|
93 |
|
67 |
int optind = 0, options = 0, setvalue = 0; |
94 |
int optind = 0, options = 0, setvalue = 0; |
|
|
95 |
unsigned long delay = 7000; |
68 |
int c; |
96 |
int c; |
69 |
|
97 |
|
70 |
if (argc < 2) { |
98 |
if (argc < 2) { |
Lines 72-78
Link Here
|
72 |
return 0; |
100 |
return 0; |
73 |
} |
101 |
} |
74 |
|
102 |
|
75 |
while ((c = getopt_long(argc, argv, "gs:idh", long_opts, &optind)) != -1) { |
103 |
while ((c = getopt_long(argc, argv, "gf:s:e:idh", long_opts, &optind)) != -1) { |
76 |
switch (c) { |
104 |
switch (c) { |
77 |
case '?': |
105 |
case '?': |
78 |
fprintf(stderr, "\nTry `%s --help' for help.\n", argv[0]); |
106 |
fprintf(stderr, "\nTry `%s --help' for help.\n", argv[0]); |
Lines 93-98
Link Here
|
93 |
return 1; |
121 |
return 1; |
94 |
} |
122 |
} |
95 |
break; |
123 |
break; |
|
|
124 |
case 'e': |
125 |
if (isdigit(*optarg)) { |
126 |
delay = atol(optarg); |
127 |
options |= DEL_BIT; |
128 |
} else { |
129 |
fprintf(stderr, "Illegal option value (-e): " |
130 |
"Value has to be a non-negative number.\n"); |
131 |
return 1; |
132 |
} |
133 |
break; |
134 |
case 'f': |
135 |
if (isdigit(*optarg)) { |
136 |
setvalue = atoi(optarg); |
137 |
options |= FAD_BIT; |
138 |
} else { |
139 |
fprintf(stderr, "Illegal option value (-f): " |
140 |
"Value has to be a non-negative number.\n"); |
141 |
return 1; |
142 |
} |
143 |
break; |
96 |
case 'i': |
144 |
case 'i': |
97 |
options |= INC_BIT; |
145 |
options |= INC_BIT; |
98 |
break; |
146 |
break; |
Lines 102-108
Link Here
|
102 |
} |
150 |
} |
103 |
} |
151 |
} |
104 |
|
152 |
|
105 |
if (!options) { |
153 |
if (!options || ((options & DEL_BIT) && !(options & FAD_BIT))) { |
106 |
sd_usage(argv[0]); |
154 |
sd_usage(argv[0]); |
107 |
return 1; |
155 |
return 1; |
108 |
} |
156 |
} |
Lines 125-130
Link Here
|
125 |
if (options & SET_BIT) |
173 |
if (options & SET_BIT) |
126 |
sd_set_level(setvalue); |
174 |
sd_set_level(setvalue); |
127 |
|
175 |
|
|
|
176 |
if (options & FAD_BIT) |
177 |
sd_fade_level(setvalue, delay); |
178 |
|
128 |
if (options & GET_BIT) |
179 |
if (options & GET_BIT) |
129 |
printf("SmartDimmer level: %d\n", sd_get_level()); |
180 |
printf("SmartDimmer level: %d\n", sd_get_level()); |
130 |
|
181 |
|