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)); } }
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; } } } } } } }