Ejemplo n.º 1
0
/**
 * tft_input() - 实现串口屏的编辑输入功能
 *
 * 当选中一个元素编辑时,应改变其颜色以标记进入编辑状态
 * 编辑输入时有旋钮输入和按键输入两种情况
 */
static void tft_input(void)
{
    input_limit in_lmt;
    int16_t in_v, bg_v;

    // 不同页面
    switch (tft_stt.pgn)
    {
    case ORIGINAL_PG:
        break;
    case MENU_PG:
        // 不同属性
        switch (kvp_menu[tft_stt.etn].attr)
        {
        case R_NUM:
            break;
        // 旋钮输入
        case RW_NUM:
            // 设置颜色
            tft_set_color(tft_stt.etn, TFT_RED);

            // 得到当前编辑的元素输入区间范围
            in_lmt = tft_input_limit(kvp_menu[tft_stt.etn].key);
            // 记录当前元素的初始值
            bg_v = kvp_menu[tft_stt.etn].value;
            knob_enable();
            // 在没有按RET按键的时候,一直保持在编辑状态
            while (get_key_mean(RET_KEY) == N_KEY)
            {
                in_v = bg_v + get_knob_val();
                if (in_v < in_lmt.min)
                {
                    kvp_menu[tft_stt.etn].value = in_lmt.min;
                    bg_v = in_lmt.min;
                    knob_clear();
                }
                else if (in_v > in_lmt.max)
                {
                    kvp_menu[tft_stt.etn].value = in_lmt.max;
                    bg_v = in_lmt.max;
                    knob_clear();
                }
                else
                {
                    kvp_menu[tft_stt.etn].value = in_v;
                }
                sprintf(tft_cmd_str, "%s.val=%u", kvp_menu[tft_stt.etn].key,
                        kvp_menu[tft_stt.etn].value);
                tft_send_cmd(tft_cmd_str);
            }
            knob_disable();
            tft_set_color(tft_stt.etn, TFT_PURPLE);
            // 如果是对系统时间设置的话,要同时更新系统时间
            calendar_info cal;
            cal.year = *get_value_of_kvp("st_y", 0);
            cal.month = *get_value_of_kvp("st_mo", 0);
            cal.mday = *get_value_of_kvp("st_d", 0);
            cal.hour = *get_value_of_kvp("st_h", 0);
            cal.min = *get_value_of_kvp("st_mi", 0);
            cal.sec= *get_value_of_kvp("st_s", 0);
            ds1302_set_time(&cal);
            clear_key_m();
            break;
        // 按键输入的情况
        case RW_PIC:
            tft_set_color(tft_stt.etn, TFT_RED);
            while (get_key_mean(RET_KEY) == N_KEY)
            {
                if (get_key_mean(UP_KEY) == S_KEY
                        || get_key_mean(DOWN_KEY) == S_KEY)
                {
                    kvp_menu[tft_stt.etn].value = !kvp_menu[tft_stt.etn].value;
                    sprintf(tft_cmd_str, "vis %s,%u", kvp_menu[tft_stt.etn].key,
                            kvp_menu[tft_stt.etn].value);
                    tft_send_cmd(tft_cmd_str);
                }
            }
            tft_set_color(tft_stt.etn, TFT_PURPLE);
            clear_key_m();
            break;
        case SW_PAGE:
            break;
        default:
            break;
        }
        break;
    case OBJ_SET_PG:
        switch (kvp_obj_set[tft_stt.objn][tft_stt.etn].attr)
        {
        case R_NUM:
            break;
        case RW_NUM:
            tft_set_color(tft_stt.etn, TFT_RED);
            in_lmt =
                tft_input_limit(kvp_obj_set[tft_stt.objn][tft_stt.etn].key);
            bg_v = kvp_obj_set[tft_stt.objn][tft_stt.etn].value;
            knob_enable();
            while (get_key_mean(RET_KEY) == N_KEY)
            {
                in_v = bg_v + get_knob_val();
                if (in_v < in_lmt.min)
                {
                    kvp_obj_set[tft_stt.objn][tft_stt.etn].value = in_lmt.min;
                    bg_v = in_lmt.min;
                    knob_clear();
                }
                else if (in_v > in_lmt.max)
                {
                    kvp_obj_set[tft_stt.objn][tft_stt.etn].value = in_lmt.max;
                    bg_v = in_lmt.max;
                    knob_clear();
                }
                else
                {
                    kvp_obj_set[tft_stt.objn][tft_stt.etn].value = in_v;
                }
                sprintf(tft_cmd_str, "%s.val=%u",
                        kvp_obj_set[tft_stt.objn][tft_stt.etn].key,
                        kvp_obj_set[tft_stt.objn][tft_stt.etn].value);
                tft_send_cmd(tft_cmd_str);
            }
            knob_disable();
            tft_set_color(tft_stt.etn, TFT_PURPLE);
            clear_key_m();
            break;
        case RW_PIC:
            tft_set_color(tft_stt.etn, TFT_RED);

            while (get_key_mean(RET_KEY) == N_KEY)
            {
                if (get_key_mean(UP_KEY) == S_KEY || get_key_mean(DOWN_KEY))
                {
                    kvp_obj_set[tft_stt.objn][tft_stt.etn].value =
                        !kvp_obj_set[tft_stt.objn][tft_stt.etn].value;
                    sprintf(tft_cmd_str, "vis %s,%u",
                            kvp_obj_set[tft_stt.objn][tft_stt.etn].key,
                            kvp_obj_set[tft_stt.objn][tft_stt.etn].value);
                    tft_send_cmd(tft_cmd_str);
                }
            }
            tft_set_color(tft_stt.etn, TFT_PURPLE);
            clear_key_m();
            break;
        // 设置方向
        case RW_TXT:
            tft_set_color(tft_stt.etn, TFT_RED);
            while (get_key_mean(RET_KEY) == N_KEY)
            {
                if (get_key_mean(UP_KEY) == S_KEY)
                {
                    orient_setspeed(
                            kvp_obj_set[tft_stt.objn][tft_stt.etn].value,
                            ORIENT_LEFT, 100);
                    sprintf(tft_cmd_str, "%s.txt=\"%s\"",
                            kvp_obj_set[tft_stt.objn][tft_stt.etn].key, "左转");
                    tft_send_cmd(tft_cmd_str);
                }
                else if (get_key_mean(DOWN_KEY))
                {
                    orient_setspeed(
                            kvp_obj_set[tft_stt.objn][tft_stt.etn].value,
                            ORIENT_RIGHT, 100);
                    sprintf(tft_cmd_str, "%s.txt=\"%s\"",
                            kvp_obj_set[tft_stt.objn][tft_stt.etn].key, "右转");
                    tft_send_cmd(tft_cmd_str);
                }
                else
                {
                    // 保持上一次循环
                }
            }
            orient_setmode(kvp_obj_set[tft_stt.objn][tft_stt.etn].value,
                    MODE_MANUL);
            orient_presetop(kvp_obj_set[tft_stt.objn][tft_stt.etn].value,
                    PRESET_SET, tft_stt.objn + 1);
            tft_set_color(tft_stt.etn, TFT_PURPLE);
            clear_key_m();
            break;
        case SW_PAGE:
            break;
        default:
            break;
        }
        break;
    default:
        break;
    }
}
Ejemplo n.º 2
0
void uart_process_lb_bt(void)
{
    P_LIST_t *para_head, *curr;
    char *p = NULL;
    unsigned char p_count = 0;

    para_head = (P_LIST_t *)malloc(sizeof(P_LIST_t));

    p = strtok(&LB_BT.buf[0], "|");
    curr = para_head;

    while (p)
    {
        p_count++;

        curr->para = p;
        curr->next = (P_LIST_t *)malloc(sizeof(P_LIST_t));
        curr = curr->next;

        p = strtok(NULL, "|");
    }
    curr->next = NULL;

    if ( !strcmp(para_head->para, "hi") )
    {
        printf("hello\n");
    }
    else if ( !strcmp(para_head->para, "time") )
    {
        RTC_TIME_t tm;
        ds1302_read_time(&tm);

        printf("tm is secs=%d, mins=%d, hours=%d, "
               "mday=%d, mon=%d, year=%d, wday=%d\n",
               tm.tm_sec, tm.tm_min, tm.tm_hour,
               tm.tm_mday, tm.tm_mon + 1, tm.tm_year+2000, tm.tm_wday);
    }
    else if ( !strcmp(para_head->para, "settime") )
    {
        unsigned char year;
        unsigned char mon;
        unsigned char day;
        RTC_TIME_t tm;

        if (p_count != 4)
        {
            printf("lack of parameter(s)\n");
        }
        else
        {
            gps_synctime(&tm);

            tm.tm_year = atoi(para_head->next->para);
            tm.tm_mon = atoi(para_head->next->next->para);
            tm.tm_mday = atoi(para_head->next->next->next->para);
            tm.tm_wday = week_of_day(tm.tm_year+2000, tm.tm_mon, tm.tm_mday);
            ds1302_set_time(&tm);
            printf("done.\n");
        }
    }
    else
    {
        printf("UNKNOW FUNC: %s\n", para_head->para);
    }

    ////////////////
    ////////////////
    p_list_clear(para_head);
    ////////////////
    ////////////////
}