]> git.donarmstrong.com Git - tmk_firmware.git/blobdiff - common/action_macro.c
Fix rn42.h API
[tmk_firmware.git] / common / action_macro.c
index 72859c0dda429f152e0bab83f0854fce052e16a8..ba93fc8b2324b7cb96e9a5744a21eee89c3f588d 100644 (file)
@@ -14,14 +14,22 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
-#include <util/delay.h>
-#include "debug.h"
 #include "action.h"
+#include "action_util.h"
 #include "action_macro.h"
+#include "wait.h"
+
+#ifdef DEBUG_ACTION
+#include "debug.h"
+#else
+#include "nodebug.h"
+#endif
 
 
-#define MACRO_READ()  (macro = pgm_read_byte(macro_p++))
-void action_macro_play(const prog_macro_t *macro_p)
+#ifndef NO_ACTION_MACRO
+
+#define MACRO_READ()  (macro = MACRO_GET(macro_p++))
+void action_macro_play(const macro_t *macro_p)
 {
     macro_t macro = END;
     uint8_t interval = 0;
@@ -29,32 +37,39 @@ void action_macro_play(const prog_macro_t *macro_p)
     if (!macro_p) return;
     while (true) {
         switch (MACRO_READ()) {
-            case INTERVAL:
-                interval = MACRO_READ();
-                debug("INTERVAL("); debug_dec(interval); debug(")\n");
-                break;
-            case WAIT:
+            case KEY_DOWN:
                 MACRO_READ();
-                debug("WAIT("); debug_dec(macro); debug(")\n");
-                { uint8_t ms = macro; while (ms--) _delay_ms(1); }
+                dprintf("KEY_DOWN(%02X)\n", macro);
+                if (IS_MOD(macro)) {
+                    add_weak_mods(MOD_BIT(macro));
+                } else {
+                    register_code(macro);
+                }
                 break;
-            case MODS_DOWN:
+            case KEY_UP:
                 MACRO_READ();
-                debug("MODS_DOWN("); debug_hex(macro); debug(")\n");
-                debug("MODS_UP("); debug_hex(macro); debug(")\n");
-                add_mods(macro);
+                dprintf("KEY_UP(%02X)\n", macro);
+                if (IS_MOD(macro)) {
+                    del_weak_mods(MOD_BIT(macro));
+                } else {
+                    unregister_code(macro);
+                }
                 break;
-            case MODS_UP:
+            case WAIT:
                 MACRO_READ();
-                debug("MODS_UP("); debug_hex(macro); debug(")\n");
-                del_mods(macro);
+                dprintf("WAIT(%u)\n", macro);
+                { uint8_t ms = macro; while (ms--) wait_ms(1); }
+                break;
+            case INTERVAL:
+                interval = MACRO_READ();
+                dprintf("INTERVAL(%u)\n", interval);
                 break;
             case 0x04 ... 0x73:
-                debug("DOWN("); debug_hex(macro); debug(")\n");
+                dprintf("DOWN(%02X)\n", macro);
                 register_code(macro);
                 break;
             case 0x84 ... 0xF3:
-                debug("UP("); debug_hex(macro); debug(")\n");
+                dprintf("UP(%02X)\n", macro);
                 unregister_code(macro&0x7F);
                 break;
             case END:
@@ -62,6 +77,7 @@ void action_macro_play(const prog_macro_t *macro_p)
                 return;
         }
         // interval
-        { uint8_t ms = interval; while (ms--) _delay_ms(1); }
+        { uint8_t ms = interval; while (ms--) wait_ms(1); }
     }
 }
+#endif