Exemple #1
0
static BOOL check_cmd(const char *cmds, const char *cmd)
{
	int start, end;

	for (start = end = 0; cmds[end] != 0 && cmds[end] != '|'; end++);

	while (end > start) {
		if (match_cmd(cmds, start, end - 1, cmd) == TRUE)
			return TRUE;
		if (cmds[end] == 0)
			break;
		if (cmds[end] == '|') {
			end++;
			for (start = end; cmds[end] != 0 && cmds[end] != '|'; end++);
		}
	}

	return FALSE;
}
Exemple #2
0
/* main entry point ... */
unsigned int simple_vsnprintf(char *buf, unsigned int sz,
                              const char *fmt, va_list ap)
{
    unsigned int ret = 0;

    while (*fmt)
    {
        unsigned int wid = 0;
        int prec  = -1;
        int flg_zero  = 0;
        int flg_hash  = 0;
        int flg_minus = 0;
        int flg_plus  = 0;
        int flg_spac  = 0;
        int flg_parse = 1;

        if ((*fmt != '%') || (*++fmt == '%'))
        {
            ADD_C(*fmt++);
            continue;
        }

        /* write out how much data has been written */
        FMT_RET_N("hh", signed char);
        FMT_RET_N("h",  short);
        FMT_RET_N("",   int);
        FMT_RET_N("l",  long);
        FMT_RET_N("ll", long long);
        FMT_RET_N("z",  ssize_t);
        FMT_RET_N("t",  ptrdiff_t);
        FMT_RET_N("j",  intmax_t);

        /* parse the flags for the data */
        while (*fmt && flg_parse)
            switch (*fmt)
            {
            case '0':
                flg_zero  = 1;
                ++fmt;
                break;
            case '#':
                flg_hash  = 1;
                ++fmt;
                break;
            case '-':
                flg_minus = 1;
                ++fmt;
                break;
            case '+':
                flg_plus  = 1;
                ++fmt;
                break;
            case ' ':
                flg_spac  = 1;
                ++fmt;
                break;
            default:
                flg_parse = 0;
                break;
            }

        if (match_cmd(&fmt, "*"))
        {
            int tmp = va_arg(ap, int);
            wid = tmp;
            if (tmp < 0) wid = -wid;
        }
        else
Exemple #3
0
static bool_e readline(void)
{
    uint8_t c;
    uint8_t *p = console_buffer;
    int32_t n = 0;
    int32_t n_pos = 0;
    int32_t ret;

    // 打印提示符
    printf(prompt);
    //fflush(stdout);
    while (TRUE)
    {
        taskDelay(1);
        // 检测输入
        //if ((c = bsp_getchar()) == 0)
        if(ttyRead(consoleFd, &c, 1) == 0)
            continue;
        // 处理输入字符
        switch (c)
        {
        case '\r': // 回车
        case '\n': // 换行,命令结束输入
            p[n] = '\0';
             printf ("\r\n");
            pmatch_cmd = NULL;
            return TRUE;

        case 0x03: // Ctrl + C
            // 清空缓冲区
            console_buffer[0] = '\0';
            printf("\r\n");
            return FALSE;

        case 0x08: //退格键
            if (0 >= n)
                continue;
            // 删除最后一个字符
            p[n] = '\0';
            //p--;
            n--;
            n_pos = n;
            pmatch_cmd = NULL;
            printf(erase_seq);
            continue;

        case 0x09: // TAB
            ret = match_cmd((char_t *)console_buffer, n_pos);
            n = ret > 0 ? ret : n;
            printf("\r");
            printf(prompt);
            printf("%s", console_buffer);
            printf("\033[0K"); // Clear from cursor to end of line
            continue;

        case 0x7F: // DEL
            continue;

        default: // 可接受的字符
            // Buffer full
            if (n >= CFG_CBSIZE - 2)
            {
                printf("\a");//超出命令最大字节数响铃
                continue;
            }
            printf("%c", c);
            // 保存到缓冲区
            p[n] = c;
            n++;
            n_pos = n;
            break;
        }
    }
    return TRUE;
}
Exemple #4
0
/**
 ******************************************************************************
 * @brief      ¶ÁÈ¡Ò»ÐÐÃüÁî
 * @param[in]  None
 * @param[out] None
 * @retval     TRUE     : ³É¹¦
 * @retval     FALSE    : ʧ°Ü
 *
 * @details
 *
 * @note
 ******************************************************************************
 */
static bool_e
readline(void)
{
    uint8_t c;
    uint8_t *p = console_buffer;
    int32_t n = 0;
    int32_t n_pos = 0;
    int32_t ret;

    // ´òÓ¡Ìáʾ·û
    SHELL_PRINTF(prompt);
    //fflush(stdout);
    while (TRUE)
    {
        taskDelay(1);
        // ¼ì²âÊäÈë
        if ((c = bsp_getchar()) == 0)
        //if (ttyRead(consoleFd, &c, 1) == 0) todo
        {
            continue;
        }
        // ´¦ÀíÊäÈë×Ö·û
        switch (c)
        {
        case '\r': // »Ø³µ
        case '\n': // »»ÐУ¬ÃüÁî½áÊøÊäÈë
            p[n] = '\0';
             SHELL_PRINTF ("\r\n");
            pmatch_cmd = NULL;
            return TRUE;

        case 0x03: // Ctrl + C
            // Çå¿Õ»º³åÇø
            console_buffer[0] = '\0';
            SHELL_PRINTF("\r\n");
            return FALSE;

        case 0x08: //Í˸ñ¼ü
            if (0 >= n)
            {
                continue;
            }
            // ɾ³ý×îºóÒ»¸ö×Ö·û
            p[n] = '\0';
            //p--;
            n--;
            n_pos = n;
            pmatch_cmd = NULL;
            SHELL_PRINTF(erase_seq);
            continue;

        case 0x09: // TAB
            ret = match_cmd((char_t *)console_buffer, n_pos);
            n = ret > 0 ? ret : n;
            SHELL_PRINTF("\r");
            SHELL_PRINTF(prompt);
            SHELL_PRINTF("%s", console_buffer);
            SHELL_PRINTF("\033[0K"); // Clear from cursor to end of line
            continue;

        case 0x7F: // DEL
            continue;

        default: // ¿É½ÓÊܵÄ×Ö·û
            // Buffer full
            if (n >= CFG_CBSIZE - 2)
            {
                SHELL_PRINTF("\a");//³¬³öÃüÁî×î´ó×Ö½ÚÊýÏìÁå
                continue;
            }
            SHELL_PRINTF("%c", c);
            // ±£´æµ½»º³åÇø
            p[n] = c;
            n++;
            n_pos = n;
            break;
        }
    }
    return TRUE;
}
void mavlink_message_handler_receive(mavlink_message_handler_t* message_handler, mavlink_received_t* rec) 
{
	mavlink_message_t* msg = &rec->msg;	

	if ( message_handler->debug )
	{
		mavlink_message_handler_msg_default_dbg(msg);
	}

	if (msg->msgid == MAVLINK_MSG_ID_COMMAND_LONG)
	{
		// The message is a command
		mavlink_command_long_t cmd;
		mavlink_msg_command_long_decode(msg, &cmd);
		
		 //print packet command and parameters for debug
		 print_util_dbg_print("target sysID:");
		 print_util_dbg_print_num(cmd.target_system,10);
		 print_util_dbg_print(", target compID:");
		 print_util_dbg_print_num(cmd.target_component,10);
		 print_util_dbg_print("\r\n");
		 print_util_dbg_print("parameters: ");
		 print_util_dbg_print_num(cmd.param1,10);
		 print_util_dbg_print_num(cmd.param2,10);
		 print_util_dbg_print_num(cmd.param3,10);
		 print_util_dbg_print_num(cmd.param4,10);
		 print_util_dbg_print_num(cmd.param5,10);
		 print_util_dbg_print_num(cmd.param6,10);
		 print_util_dbg_print_num(cmd.param7,10);
		 print_util_dbg_print("\r\n");
		 print_util_dbg_print("command id:");
		 print_util_dbg_print_num(cmd.command,10);
		 print_util_dbg_print(", confirmation:");
		 print_util_dbg_print_num(cmd.confirmation,10);
		 print_util_dbg_print("\r\n");
		
		if (cmd.command >= 0 && cmd.command < MAV_CMD_ENUM_END)
		{
			// The command has valid command ID 
			if(	(cmd.target_system == message_handler->mavlink_stream->sysid)||(cmd.target_system == MAV_SYS_ID_ALL) )
			{
				mav_result_t result = MAV_RESULT_UNSUPPORTED;
				
				// The command is for this system
				for (uint32_t i = 0; i < message_handler->cmd_callback_set->callback_count; ++i)
				{
					if ( match_cmd(message_handler, &message_handler->cmd_callback_set->callback_list[i], msg, &cmd) )
					{
						mavlink_cmd_callback_function_t function 		= message_handler->cmd_callback_set->callback_list[i].function;
						handling_module_struct_t 		module_struct 	= message_handler->cmd_callback_set->callback_list[i].module_struct;
						
						// Call appropriate function callback
						result = function(module_struct, &cmd);
						break;
					}
				}
				// Send acknowledgment message 
				mavlink_message_t msg;
				mavlink_msg_command_ack_pack( 	message_handler->mavlink_stream->sysid,
												message_handler->mavlink_stream->compid,
												&msg,
												cmd.command,
												result);
				mavlink_stream_send(message_handler->mavlink_stream, &msg);
			}
		}
	}
	else if ( msg->msgid >= 0 && msg->msgid < MAV_MSG_ENUM_END )
	{
		// The message has a valid message ID, and is not a command
		for (uint32_t i = 0; i < message_handler->msg_callback_set->callback_count; ++i)
		{
			if ( match_msg(message_handler, &message_handler->msg_callback_set->callback_list[i], msg) )
			{
				mavlink_msg_callback_function_t function 		= message_handler->msg_callback_set->callback_list[i].function;
				handling_module_struct_t 		module_struct 	= message_handler->msg_callback_set->callback_list[i].module_struct;
				uint32_t						sys_id			= *message_handler->msg_callback_set->callback_list[i].sys_id;
				
				// Call appropriate function callback
				function(module_struct, sys_id, msg);
			}
		}
	}
}