Browse Source

Check if specified operation is valid for the wanted field

Abdullah ibn Nadjo 7 years ago
parent
commit
c363ac40a1
1 changed files with 46 additions and 6 deletions
  1. 46
    6
      src/light.c

+ 46
- 6
src/light.c View File

@@ -23,6 +23,46 @@ void light_defaultConfig()
23 23
   light_verbosity                            = 0;
24 24
 }
25 25
 
26
+LIGHT_BOOL light_checkOperations()
27
+{
28
+  LIGHT_BOOL valid = TRUE;
29
+  LIGHT_OP_MODE op = light_Configuration.operationMode;
30
+
31
+  /* Nothing to check if we just print info */
32
+  if(op == LIGHT_PRINT_HELP || op == LIGHT_PRINT_VERSION || op == LIGHT_LIST_CTRL)
33
+  {
34
+    return TRUE;
35
+  }
36
+
37
+  switch (light_Configuration.field) {
38
+  case LIGHT_BRIGHTNESS:
39
+    if(op != LIGHT_GET && op != LIGHT_SET &&
40
+       op != LIGHT_ADD && op != LIGHT_SUB)
41
+    {
42
+      valid = FALSE;
43
+      fprintf(stderr, "Wrong operation specified for brightness. You can use only -G -S -A or -U\n\n");
44
+    }
45
+    break;
46
+  case LIGHT_MAX_BRIGHTNESS:
47
+    if(op != LIGHT_GET)
48
+    {
49
+      valid = FALSE;
50
+      fprintf(stderr, "Wrong operation specified for max brightness. You can only use -G\n\n");
51
+    }
52
+    break;
53
+  case LIGHT_MIN_CAP:
54
+    if(op != LIGHT_GET && op != LIGHT_SET)
55
+    {
56
+      valid = FALSE;
57
+      fprintf(stderr, "Wrong operation specified for min cap. You can only use -G or -S\n\n");
58
+    }
59
+  default:
60
+    break;
61
+  }
62
+  return valid;
63
+}
64
+
65
+
26 66
 LIGHT_BOOL light_parseArguments(int argc, char** argv)
27 67
 {
28 68
   int currFlag;
@@ -162,6 +202,12 @@ LIGHT_BOOL light_parseArguments(int argc, char** argv)
162 202
     }
163 203
   }
164 204
 
205
+  if(!light_checkOperations())
206
+  {
207
+    light_printHelp();
208
+    return FALSE;
209
+  }
210
+
165 211
   /* If we need a <value> (for writing), make sure we have it! */
166 212
   if(light_Configuration.operationMode == LIGHT_SET ||
167 213
      light_Configuration.operationMode == LIGHT_ADD ||
@@ -449,12 +495,6 @@ LIGHT_BOOL light_execute()
449 495
       writeVal = valueMode == LIGHT_RAW ?
450 496
         LIGHT_CLAMP( light_Configuration.specifiedValueRaw, 0, rawMax ) :
451 497
         LIGHT_CLAMP(((unsigned long) (light_Configuration.specifiedValuePercent * ((double)rawMax) ) / 100), 0, rawMax);
452
-      /* If we are not attempting to set, fail! */
453
-      if(light_Configuration.operationMode != LIGHT_SET)
454
-      {
455
-        fprintf(stderr, "Minimum cap can only be used with get/set operations.\n");
456
-        return FALSE;
457
-      }
458 498
 
459 499
       if(!light_setMinCap(light_Configuration.specifiedController, writeVal))
460 500
       {