|
@@ -31,7 +31,7 @@ LIGHT_BOOL light_parseArguments(int argc, char** argv)
|
31
|
31
|
|
32
|
32
|
unsigned long specLen = 0;
|
33
|
33
|
|
34
|
|
- while((currFlag = getopt(argc, argv, "HhVGSAULbmcas:prv:")) != -1)
|
|
34
|
+ while((currFlag = getopt(argc, argv, "HhVGSAULIObmcas:prv:")) != -1)
|
35
|
35
|
{
|
36
|
36
|
switch(currFlag)
|
37
|
37
|
{
|
|
@@ -65,6 +65,14 @@ LIGHT_BOOL light_parseArguments(int argc, char** argv)
|
65
|
65
|
ASSERT_OPSET();
|
66
|
66
|
light_Configuration.operationMode = LIGHT_LIST_CTRL;
|
67
|
67
|
break;
|
|
68
|
+ case 'I':
|
|
69
|
+ ASSERT_OPSET();
|
|
70
|
+ light_Configuration.operationMode = LIGHT_RESTORE;
|
|
71
|
+ break;
|
|
72
|
+ case 'O':
|
|
73
|
+ ASSERT_OPSET();
|
|
74
|
+ light_Configuration.operationMode = LIGHT_SAVE;
|
|
75
|
+ break;
|
68
|
76
|
|
69
|
77
|
/* -- Targets -- */
|
70
|
78
|
case 'b':
|
|
@@ -190,7 +198,9 @@ void light_printHelp(){
|
190
|
198
|
printf(" -S:\t\tSet value\n");
|
191
|
199
|
printf(" -A:\t\tAdd value\n");
|
192
|
200
|
printf(" -U:\t\tSubtract value\n");
|
193
|
|
- printf(" -L:\t\tList controllers\n\n");
|
|
201
|
+ printf(" -L:\t\tList controllers\n");
|
|
202
|
+ printf(" -I:\t\tRestore brightness\n");
|
|
203
|
+ printf(" -O:\t\tSave brightness\n\n");
|
194
|
204
|
|
195
|
205
|
printf("Targets (can not be used in conjunction):\n");
|
196
|
206
|
printf(" -b:\t\tBrightness (default)\n \t\tUsed with [GSAU]\n\n");
|
|
@@ -227,7 +237,7 @@ LIGHT_BOOL light_initialize(int argc, char** argv)
|
227
|
237
|
return TRUE;
|
228
|
238
|
}
|
229
|
239
|
|
230
|
|
- /* Make sure we have a valid /etc/light directory, as well as /etc/light/mincap */
|
|
240
|
+ /* Make sure we have a valid /etc/light directory, as well as mincap and save */
|
231
|
241
|
mkdirVal = mkdir("/etc/light", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
|
232
|
242
|
if(mkdirVal != 0 && errno != EEXIST)
|
233
|
243
|
{
|
|
@@ -242,6 +252,13 @@ LIGHT_BOOL light_initialize(int argc, char** argv)
|
242
|
252
|
return FALSE;
|
243
|
253
|
}
|
244
|
254
|
|
|
255
|
+ mkdirVal = mkdir("/etc/light/save", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
|
|
256
|
+ if(mkdirVal != 0 && errno != EEXIST)
|
|
257
|
+ {
|
|
258
|
+ LIGHT_ERR("/etc/light/save does not exist and could not be created");
|
|
259
|
+ return FALSE;
|
|
260
|
+ }
|
|
261
|
+
|
245
|
262
|
/* Make sure we have a valid controller before we proceed */
|
246
|
263
|
if(light_Configuration.controllerMode == LIGHT_AUTO)
|
247
|
264
|
{
|
|
@@ -371,6 +388,8 @@ LIGHT_BOOL light_execute()
|
371
|
388
|
case LIGHT_MIN_CAP:
|
372
|
389
|
(light_Configuration.valueMode == LIGHT_RAW) ? printf("%lu\n", minCap) : printf("%.2f\n", percentMinCap);
|
373
|
390
|
break;
|
|
391
|
+ case LIGHT_SAVERESTORE:
|
|
392
|
+ break;
|
374
|
393
|
}
|
375
|
394
|
|
376
|
395
|
return TRUE;
|
|
@@ -426,6 +445,8 @@ LIGHT_BOOL light_execute()
|
426
|
445
|
case LIGHT_PRINT_HELP:
|
427
|
446
|
case LIGHT_PRINT_VERSION:
|
428
|
447
|
case LIGHT_LIST_CTRL:
|
|
448
|
+ case LIGHT_SAVE:
|
|
449
|
+ case LIGHT_RESTORE:
|
429
|
450
|
break;
|
430
|
451
|
}
|
431
|
452
|
|
|
@@ -446,6 +467,26 @@ LIGHT_BOOL light_execute()
|
446
|
467
|
}
|
447
|
468
|
}
|
448
|
469
|
|
|
470
|
+ /* Handle saves and restores*/
|
|
471
|
+ if(light_Configuration.operationMode == LIGHT_SAVE){
|
|
472
|
+ if(!light_saveBrightness(light_Configuration.specifiedController, rawCurr))
|
|
473
|
+ {
|
|
474
|
+ LIGHT_ERR("could not save brightness");
|
|
475
|
+ return FALSE;
|
|
476
|
+ }
|
|
477
|
+
|
|
478
|
+ return TRUE;
|
|
479
|
+ }
|
|
480
|
+
|
|
481
|
+ if(light_Configuration.operationMode == LIGHT_RESTORE){
|
|
482
|
+ if(!light_restoreBrightness(light_Configuration.specifiedController)){
|
|
483
|
+ LIGHT_ERR("could not restore brightness");
|
|
484
|
+ return FALSE;
|
|
485
|
+ }
|
|
486
|
+
|
|
487
|
+ return TRUE;
|
|
488
|
+ }
|
|
489
|
+
|
449
|
490
|
printf("Controller: %s\nValueRaw: %lu\nValuePercent: %.2f\nOpMode: %u\nValMode: %u\nTarget: %u\n\n", light_Configuration.specifiedController, light_Configuration.specifiedValueRaw, light_Configuration.specifiedValuePercent, light_Configuration.operationMode, light_Configuration.valueMode, light_Configuration.target);
|
450
|
491
|
|
451
|
492
|
printf("You did not specify a valid combination of commandline arguments. Have some help: \n");
|
|
@@ -483,6 +524,9 @@ LIGHT_BOOL light_genPath(char const *controller, LIGHT_TARGET type, char **buffe
|
483
|
524
|
case LIGHT_MIN_CAP:
|
484
|
525
|
spfVal = sprintf(returner, "/etc/light/mincap/%s", controller);
|
485
|
526
|
break;
|
|
527
|
+ case LIGHT_SAVERESTORE:
|
|
528
|
+ spfVal = sprintf(returner, "/etc/light/save/%s", controller);
|
|
529
|
+ break;
|
486
|
530
|
}
|
487
|
531
|
|
488
|
532
|
if(spfVal < 0)
|
|
@@ -768,3 +812,50 @@ LIGHT_BOOL light_listControllers()
|
768
|
812
|
|
769
|
813
|
return TRUE;
|
770
|
814
|
}
|
|
815
|
+
|
|
816
|
+LIGHT_BOOL light_saveBrightness(char const *controller, unsigned long v){
|
|
817
|
+ char *savePath = NULL;
|
|
818
|
+ if(!light_genPath(controller, LIGHT_SAVERESTORE, &savePath))
|
|
819
|
+ {
|
|
820
|
+ LIGHT_ERR("could not generate path to save/restore file");
|
|
821
|
+ return FALSE;
|
|
822
|
+ }
|
|
823
|
+
|
|
824
|
+ if(!light_writeULong(savePath, v))
|
|
825
|
+ {
|
|
826
|
+ LIGHT_ERR("could not write to save/restore file");
|
|
827
|
+ free(savePath);
|
|
828
|
+ return FALSE;
|
|
829
|
+ }
|
|
830
|
+
|
|
831
|
+ free(savePath);
|
|
832
|
+ return TRUE;
|
|
833
|
+}
|
|
834
|
+
|
|
835
|
+LIGHT_BOOL light_restoreBrightness(char const *controller){
|
|
836
|
+ char *restorePath = NULL;
|
|
837
|
+ unsigned long v = 0;
|
|
838
|
+
|
|
839
|
+ if(!light_genPath(controller, LIGHT_SAVERESTORE, &restorePath))
|
|
840
|
+ {
|
|
841
|
+ LIGHT_ERR("could not generate path to save/restore file");
|
|
842
|
+ return FALSE;
|
|
843
|
+ }
|
|
844
|
+
|
|
845
|
+ if(!light_readULong(restorePath, &v))
|
|
846
|
+ {
|
|
847
|
+ LIGHT_ERR("could not read saved value");
|
|
848
|
+ free(restorePath);
|
|
849
|
+ return FALSE;
|
|
850
|
+ }
|
|
851
|
+
|
|
852
|
+ if(!light_setBrightness(controller, v))
|
|
853
|
+ {
|
|
854
|
+ LIGHT_ERR("could not set restored brightness");
|
|
855
|
+ free(restorePath);
|
|
856
|
+ return FALSE;
|
|
857
|
+ }
|
|
858
|
+
|
|
859
|
+ free(restorePath);
|
|
860
|
+ return TRUE;
|
|
861
|
+}
|