]> oss.titaniummirror.com Git - rgblamp.git/blobdiff - task.c
Add BSD license text to source files
[rgblamp.git] / task.c
diff --git a/task.c b/task.c
index a3489248a6d6242d77392cea0e3d4d9557f06f0b..ee4ed5b14cad380005a7cbf656d3859715b643c8 100644 (file)
--- a/task.c
+++ b/task.c
@@ -1,3 +1,32 @@
+/*
+ * Copyright © 2011, 2012, Titanium Mirror, Inc..
+ * All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - Neither the name of Titanium Mirror, Inc. nor the names of its
+ *   contributors may be used to endorse or promote products derived from
+ *   this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
 /*
  * File:   task.c
  *
@@ -27,7 +56,7 @@ bit task_check()
 
 task_id_t task_get(unsigned char block)
 {
-  task_id_t t = 0;
+  task_id_t t = -1;
   unsigned long ids;
 
   do {
@@ -35,24 +64,18 @@ task_id_t task_get(unsigned char block)
     ids = _task_ids;
     nei();
     if (ids) {
-      for (unsigned char i = 0; t == 0 && i < TASK_COUNT; i++) {
-        if (ids & (1UL << _task_bitno))
+      for (unsigned char i = 0; t == -1 && i < TASK_COUNT; i++) {
+        if (bit_get(ids, _task_bitno)) {
           t = _task_bitno;
-        _task_bitno = (_task_bitno + 1) % TASK_COUNT;
+          ndi();
+          bit_clr(_task_ids, t);
+          nei();
+        }
+        if (++_task_bitno == TASK_COUNT)
+          _task_bitno = 0;
       }
     }
-#if 0 /* Not until we have a crystal and can wake from sleep via tmr module */
-    else
-      SLEEP();
-#endif
-  } while (t == 0 && block == 1);
+  } while (t == -1 && block == 1);
   return t;
 }
 
-void task_post(task_id_t t)
-{
-  ndi();
-  _task_post(t);
-  nei();
-}
-