This class can map strings(commands) and functions receiving no arguments returning an int value.

Dependents:   Interference_Simple StrCommandHandler_Demo

StrCommandHandler.h

Committer:
aktk
Date:
2020-08-10
Revision:
4:59a5e39e3e91
Parent:
3:049a5f083f32

File content as of revision 4:59a5e39e3e91:

#ifndef STR_COMMAND_HANDLER_H
#define STR_COMMAND_HANDLER_H
#include "mbed.h"
#include <string>

/** Maps strings and functions
 *
 *  This class can map strings(commands) and functions receiving no arguments
 *  returning int.
 */
class StrCommandHandler
{
public:
    StrCommandHandler(
        int const arg_num_ofcommand = 10
    );

    /** Maps strings and functions
     *
     *  This maps strings(commands) and functions receiving own command,
     *  returning something of pointer.
     */
    void map(
        const char * const   arg_command,
        void * (*arg_pfunc)(const char * const)
    );

    /** Analyzes a command input and executs a function corresponding to it.
     *
     *  This analyzes a string(commands) and executs a corresponding function.
     *  If an error occur, the function returns an error code
     *  Error code:
     *  -   Exception of NULL pointer           returns 0xFFFFFFFF
     *  -   Exception of Null character         returna 0xFFFFFFFE
     *  -   Exception of Over length            returns 0xFFFFFFFD
     *  -   Exception of Not registered Command returns 0xFFFFFFFC;
     */
    void * exe(
        const char* const   arg_command
    );

    /** Lists commands registered
     *
     *  This lists commands registered by users. 
     */
    void list();
    
    
    static char const * const ARROW_UP;     /// ascii code series arrow-up symbol 0x1b 0x5b, 0x41
    static char const * const ARROW_DOWN;   /// ascii code series arrow-up symbol 0x1b 0x5b, 0x42
    static char const * const ARROW_RIGHT;  /// ascii code series arrow-up symbol 0x1b 0x5b, 0x43
    static char const * const ARROW_LEFT;   /// ascii code series arrow-up symbol 0x1b 0x5b, 0x44

private:
    /** Array of commands' name
     *
     *  The length should be within 15 without last '\0'
     *  The number of the array is (int)m_numofcommands
     */
    char (*m_command_name)[16];

    /** Array of pointers to functions
     *  
     *  The number of the array is (int)m_numofcommands
     */
    void * (**m_function)(const char * const);
    
    /** Numbers of commands registered in this.
     *
     *  If commands are registered over this value,
     *  this value increase by 5, and arrays get reallocated.
     */
    int m_num_ofcommands;
    
    /** Result code of exe()
     *  
     *  This is supposed to be offered by pointer
     */
    int m_rescode;
};
#endif