Пример #1
0
void ntshell_execute(
        ntshell_t *p,
        int (*func_read)(char *buf, int cnt),
        int (*func_write)(const char *buf, int cnt),
        int (*func_cb)(const char *text))
{
    ntshell_user_data_t user_data;

    user_data.editor = &(p->editor);
    user_data.history = &(p->history);
    user_data.func_read = func_read;
    user_data.func_write = func_write;
    user_data.func_cb = func_cb;

    p->parser.user_data = &user_data;

    vtparse_init(&(p->parser), parser_callback);
    text_editor_init(GET_EDITOR(&(p->parser)));
    text_history_init(GET_HISTORY(&(p->parser)));
    SUGGEST_INDEX(&(p->parser)) = -1;

    SERIAL_WRITE(&(p->parser), ">", 1);
    while(1)
    {
        unsigned char ch;
        SERIAL_READ(&(p->parser), (char *)&ch, sizeof(ch));
        vtparse(&(p->parser), &ch, sizeof(ch));
    }
}
Пример #2
0
void add_phone(void){
	button *btn;
	uint8_t btn_val;
	uint8_t symbol;

	keyboard my_kb =
			{CURSOR_BLINK,
			12,
			3,
			{{'0', 0 , 0 , 0 , 0 ,' '},
			{'1','_', 0 , 0 , 0 , 0 },
			{'2','a','b','c', 0 , 0 },
			{'3','d','e','f', 0 , 0 },
			{'4','g','h','i', 0 , 0 },
			{'5','j','k','l', 0 , 0 },
			{'6','m','n','o', 0 , 0 },
			{'7','p','q','r','s', 0 },
			{'8','t','u','v', 0 , 0 },
			{'9','w','x','y','z', 0 },
			{'<', 0 , 0 , 0 , 0 ,'#'},
			{'*','+', 0 , 0 , 0 ,'^'}},
			"Type text",
			"012345678"};

	text_editor_init(&my_kb);
	do{
		btn = get_btn();
		btn_val = btn->button;
		if(btn_val){
			key_controller(btn_val, btn->duration);
		}
		symbol = read_tmp_symbol();
		if(symbol){
			lcd_putc(symbol);
		}
		symbol = read_symbol();
		if(symbol){
			cursor_shift(RIGHT);
		}

/*
		switch (btn_val){
		case '2':

			break;
		case '1':

			break;
		case '3':

			break;
		case '*':

		}
*/
	}while (btn_val != '2');
	text_editor_close();
}
void text_editor(struct bitmap *keys, struct FLAGS *flags, key_t msgq_key){
	{  //0->1 count
		int i, c=0;
		for(i=0;i<9;i++){
			if(!flags->key[i] && bitmap_get(keys, IN_BUTTON_FPGA_1 + i)){
				c++;
				flags->key[i] = true;
			}
		}
		if(c>0){
			// COUNTER print
			printf("%d\n", c);
			flags->typed += c;
			{  // 1000
				msg_pack i;
				i.mtype = MSG_TO_OUTPUT;
				i.mdata = OUT_7SEGMENTS_FPGA_1;
				i.mbool = true;
				i.mvalue = flags->typed / 1000;
				msgq_send(msgq_key, &i);
			}
			{  // 100
				msg_pack i;
				i.mtype = MSG_TO_OUTPUT;
				i.mdata = OUT_7SEGMENTS_FPGA_2;
				i.mbool = true;
				i.mvalue = (flags->typed / 100) % 10;
				msgq_send(msgq_key, &i);
			}
			{  // 10
				msg_pack i;
				i.mtype = MSG_TO_OUTPUT;
				i.mdata = OUT_7SEGMENTS_FPGA_3;
				i.mbool = true;
				i.mvalue = (flags->typed / 10) % 10;
				msgq_send(msgq_key, &i);
			}
			{  // 1
				msg_pack i;
				i.mtype = MSG_TO_OUTPUT;
				i.mdata = OUT_7SEGMENTS_FPGA_4;
				i.mbool = true;
				i.mvalue = flags->typed % 10;
				msgq_send(msgq_key, &i);
			}
		}
	}
	{  //1->0 wording
		bool pressed[9];
		int j, d=0;
		for(j=0;j<9;j++)
			pressed[j] = false;
		for(j=0;j<9;j++){
			if(flags->key[j] && !bitmap_get(keys, IN_BUTTON_FPGA_1 + j)){
				d++;
				flags->key[j] = false;
				pressed[j] = true;
			}else if(flags->key[j] && bitmap_get(keys, IN_BUTTON_FPGA_1 + j)){
				d++;
				//pressed[j] = true;
			}
		}
		{  // pressed rules;
#define P(i) bitmap_get(keys, IN_BUTTON_FPGA_1 + (i) - 1)
			if(P(2) && P(3)){  // custom mode!
				// TODO
				bitmap_set(keys, IN_BUTTON_FPGA_2, false);
				bitmap_set(keys, IN_BUTTON_FPGA_3, false);
			}else
			if(P(4) && P(5)){  // clear + counter save.
				text_editor_init(keys, flags, msgq_key);
				bitmap_set(keys, IN_BUTTON_FPGA_4, false);
				bitmap_set(keys, IN_BUTTON_FPGA_5, false);
			}else
			if(P(5) && P(6)){  // A<->1
				flags->flag_a_1 = !flags->flag_a_1;
				flags->last_letter = -1;
				flags->last_letter_times = 0;
				if(flags->flag_a_1){  // print A
					msg_pack i;
					i.mtype = MSG_TO_OUTPUT;
					i.mdata = OUT_DOTMATRIX_FPGA_A;
					i.mbool = true;
					msgq_send(msgq_key, &i);
				}else{  // print 1
					msg_pack i;
					i.mtype = MSG_TO_OUTPUT;
					i.mdata = OUT_DOTMATRIX_FPGA_1;
					i.mbool = true;
					msgq_send(msgq_key, &i);
				}
				bitmap_set(keys, IN_BUTTON_FPGA_5, false);
				bitmap_set(keys, IN_BUTTON_FPGA_6, false);
			}else
			if(P(8) && P(9)){  // shutdown
				// TODO
				{
					msg_pack t;
					t.mtype = MSG_TO_PROCESS;
					t.mdata = IN_SWITCH_GPIO_SELECT;
					msgq_send(msgq_key, &t);
				}
				bitmap_set(keys, IN_BUTTON_FPGA_8, false);
				bitmap_set(keys, IN_BUTTON_FPGA_9, false);
			}else
			if(d==1){  // 1 button
				if(flags->flag_a_1){  // A
					char letr[9][3] = {{'.', 'Q', 'Z'}, {'A', 'B', 'C'}, {'D', 'E', 'F'}, {'G', 'H', 'I'},
						{'J', 'K', 'L'}, {'M', 'N', 'O'}, {'P', 'R', 'S'}, {'T', 'U', 'V'}, {'W', 'X', 'Y'}};
					for(j=0;j<9;j++){
						if(pressed[j]){  // j
							//bitmap_set(keys, IN_BUTTON_FPGA_1 + j, false);
							if(flags->last_letter == j){  // jj
								if(flags->last_letter_times == 3){
									flags->last_letter_times = 1;
									{
										msg_pack i;
										i.mtype = MSG_TO_OUTPUT;
										i.mdata = OUT_LCD_FPGA_CHAR;
										i.mbool = true; // XXX no overwrite;
										i.mvalue = letr[j][flags->last_letter_times - 1];
										msgq_send(msgq_key, &i);
									}
								}else{
									flags->last_letter_times++;
									{
										msg_pack i;
										i.mtype = MSG_TO_OUTPUT;
										i.mdata = OUT_LCD_FPGA_CHAR;
										i.mbool = false; // XXX overwrite;
										i.mvalue = letr[j][flags->last_letter_times - 1];
										msgq_send(msgq_key, &i);
									}
								}
							}else{
								flags->last_letter = j;
								flags->last_letter_times = 1;
								{
									msg_pack i;
									i.mtype = MSG_TO_OUTPUT;
									i.mdata = OUT_LCD_FPGA_CHAR;
									i.mbool = true; // XXX no overwrite;
									i.mvalue = letr[j][flags->last_letter_times - 1];
									msgq_send(msgq_key, &i);
								}
							}
							break;
						}
					}
				}else
				if(!flags->flag_a_1){  // 1
					for(j=0;j<9;j++){
						if(pressed[j]){
							//bitmap_set(keys, IN_BUTTON_FPGA_1 + j, false);
							msg_pack i;
							i.mtype = MSG_TO_OUTPUT;
							i.mdata = OUT_LCD_FPGA_CHAR;
							i.mbool = true;  // XXX no overwrite;
							i.mvalue = '1' + j;
							msgq_send(msgq_key, &i);
							break;
						}
					}
				}
			}
		}
	}
}