~ruther/qmk_firmware

47bc3016d36cbfd83904fff5947acb6436dd37c3 — tmk 11 years ago 4069776
Ad hoc fix of command API
2 files changed, 27 insertions(+), 11 deletions(-)

M common/command.c
M common/command.h
M common/command.c => common/command.c +19 -9
@@ 63,19 63,22 @@ static uint8_t numkey2num(uint8_t code);
static void switch_default_layer(uint8_t layer);


typedef enum { ONESHOT, CONSOLE, MOUSEKEY } cmdstate_t;
static cmdstate_t state = ONESHOT;
command_state_t command_state = ONESHOT;


bool command_proc(uint8_t code)
{
    switch (state) {
    switch (command_state) {
        case ONESHOT:
            if (!IS_COMMAND())
                return false;
            return (command_extra(code) || command_common(code));
            break;
        case CONSOLE:
            command_console(code);
            if (IS_COMMAND())
                return (command_extra(code) || command_common(code));
            else
                return (command_console_extra(code) || command_console(code));
            break;
#ifdef MOUSEKEY_ENABLE
        case MOUSEKEY:


@@ 83,12 86,13 @@ bool command_proc(uint8_t code)
            break;
#endif
        default:
            state = ONESHOT;
            command_state = ONESHOT;
            return false;
    }
    return true;
}

/* TODO: Refactoring is needed. */
/* This allows to define extra commands. return false when not processed. */
bool command_extra(uint8_t code) __attribute__ ((weak));
bool command_extra(uint8_t code)


@@ 96,6 100,12 @@ bool command_extra(uint8_t code)
    return false;
}

bool command_console_extra(uint8_t code) __attribute__ ((weak));
bool command_console_extra(uint8_t code)
{
    return false;
}


/***********************************************************
 * Command common


@@ 203,7 213,7 @@ static bool command_common(uint8_t code)
            command_console_help();
            print("\nEnter Console Mode\n");
            print("C> ");
            state = CONSOLE;
            command_state = CONSOLE;
            break;
        case KC_PAUSE:
            clear_keyboard();


@@ 388,14 398,14 @@ static bool command_console(uint8_t code)
        case KC_Q:
        case KC_ESC:
            print("\nQuit Console Mode\n");
            state = ONESHOT;
            command_state = ONESHOT;
            return false;
#ifdef MOUSEKEY_ENABLE
        case KC_M:
            mousekey_console_help();
            print("\nEnter Mousekey Console\n");
            print("M0>");
            state = MOUSEKEY;
            command_state = MOUSEKEY;
            return true;
#endif
        default:


@@ 555,7 565,7 @@ static bool mousekey_console(uint8_t code)
            mousekey_param = 0;
            print("\nQuit Mousekey Console\n");
            print("C> ");
            state = CONSOLE;
            command_state = CONSOLE;
            return false;
        case KC_P:
            mousekey_param_print();

M common/command.h => common/command.h +8 -2
@@ 18,10 18,16 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#ifndef COMMAND_H
#define COMMAND

/* TODO: Refactoring */
typedef enum { ONESHOT, CONSOLE, MOUSEKEY } command_state_t;
extern command_state_t command_state;

/* This allows to extend commands. Return false when command is not processed. */
bool command_extra(uint8_t code);
bool command_console_extra(uint8_t code);

#ifdef COMMAND_ENABLE
bool command_proc(uint8_t code);
/* This allows to extend commands. Return 0 when command is not processed. */
bool command_extra(uint8_t code);
#else
#define command_proc(code)      false
#endif