// Run program which save in eeprom void program_run (void) { uint16_t i; uint8_t ch,j; uint8_t buff[MAX_BUFF]; i = 0; while ((ch = eeprom_read_byte(&g_program_eeprom[i]))) //Get EEPROM BYTE/BYTE { g_program_buff[i] = ch; i++; } g_program_index = i; i = 0; j = 0; while ((ch = g_program_buff[i])) { buff[j] = ch; j++; if ((ch == 0x0D) || (ch == 0x0A)) // CANNOT USE UDR to compare { // Copy to buffer buff[j] = 0; // End with null for decode uart_puts(buff); cmd_decode(buff); // Check both finish before proceed next command while ((g_status[0] | g_status[1])); // Need to put volatile for g_status j = 0; } i++; } }
int main(int argc, char** argv) { if(argc < 2) { print_help(); return 1; } const char* const command = argv[1]; const char** const cargv = const_quirk(argv); if(IS_CMD("decode-all", 1)) { return cmd_get_all_and_decode(argv + 2, argc - 2); } else if(IS_CMD("decode", 2)) { return cmd_decode(argv[2], cargv + 3, argc - 3); } else if(IS_CMD("append-all", 2)) { return cmd_append_all(argv[2], argv[3]); } else if(IS_CMD("recode", 3)) { return cmd_recode(argv[2], argv[3], cargv + 4, argc - 4); } else if(IS_CMD("info", 1)) { return cmd_info(argv[2]); } else if(IS_CMD("dump", 1)) { return cmd_dump(argv[2]); } else { print_help(); return 1; } return 0; }
int process(int length, const char* buffer) { int next = 0, len = 0,cmd,num; char str[100]; while(next < length) { len = get_line(buffer + next , str); // 返回从buffer中读取的长度 并不是str的长度。 //比如 换行符被读取但并没在str中 next += len; cmd = cmd_decode(str); if(cmd > 0) //是命令 { switch(cmd) { case 1: ClearData(); num = 0; state = SEAT; break; case 3: num = 0; state = BLIND; break; case 5: num = 0; state = HOLD; break; case 7: num = 0; state = INQUIRE; break; case 9: num = 0; state = FLOP; break; case 11: num = 0; state = TURN; break; case 13: num = 0; state = RIVER; break; case 15: num = 0; state = SHOWDOWN; break; case 17: num = 0; state = COMMON; break; case 19: num = 0; state = POTWIN; break; case 18:// /COMMON 指令 退回SHOWDOWN状态 num = 0; state = SHOWDOWN; break; case 2: CountOpponentNum(); if(1 == g_Is_First_Game) { Fill_Players_ID();//第一局记录各玩家ID } g_game_Num++; FloatToStr((float)g_game_Num , "Game_num:", "\n"); write(debug_fd,g_Str,strlen(g_Str));//////////////////1 state = DEF; break; // /**** 指令 退回DEF状态 case 8: Updata_Players_Bet();//跟新对手赌注 CountBetMax();//计算跟注注额,在Updata_Players_Bet之后被调用 FloatToStr((float)g_Money_Max , "Oppon_Bet_Infos:", "\n"); write(debug_fd,g_Str,strlen(g_Str)); write(debug_fd,"\n",1); state = DEF; break; case 4: case 6: case 10: case 12: case 14: case 16: case 20: state = DEF; break; case 21:// gameover 指令 返回 return -1; default: state = DEF; } } else //不是命令 根据命令执行语句 { switch(state) { case SEAT: num++; if(num==1) { seat_button_msg(str); } if(num==2 || num==3) { seat_blind_msg(str,num-1); } if(num>=4 && num<=8) { seat_msg(str,num-3); } break; case BLIND: num++; blind_msg(str,num); break; case HOLD: num++; hd_cards_msg(str,num); break; case INQUIRE: num++; if(*str!='t') { inquire_action_msg(str,num); } else { inquire_totalpot_msg(str); UpdataOpponentNum(); FloatToStr((float)updata_AllOpponentNum, "AllOpponentNum :", NULL); write(debug_fd,g_Str,strlen(g_Str)); write(debug_fd,"\n",1); if(updata_AllOpponentNum==0) { write(skfd,"call",4); } else { p_Action=ActionForMsg(); write(skfd,p_Action,strlen(p_Action)); } } break; case FLOP: num++; pb_cards_msg(str,num); break; case TURN: pb_cards_msg(str,num+4); break; case RIVER: pb_cards_msg(str,num+5); break; case SHOWDOWN: num++; showdown_msg(str,num); break; case COMMON: num++; pb_cards_msg(str,num); break; case POTWIN: num++; potwin_dis_msg(str,num); break; case DEF: break; default: // def_process(str,strlen(str)); break; } } } return 0; }
/* * Main command processor. * Accept and execute commands until a quit command, then return. */ void commands(void) { int c, action; last_mca = 0; nscroll = (sc_height + 1) / 2; for (;;) { mca = 0; number = 0; /* * See if any signals need processing. */ if (sigs) { psignals(); if (quitting) quit(); } /* * Display prompt and accept a character. */ CMD_RESET; if (!prompt()) { next_file(1); continue; } noprefix(); c = getcc(); again: if (sigs) continue; /* * If we are in a multicharacter command, call mca_char. * Otherwise we call cmd_decode to determine the * action to be performed. */ if (mca) switch (mca_char(c)) { case MCA_MORE: /* * Need another character. */ c = getcc(); goto again; case MCA_DONE: /* * Command has been handled by mca_char. * Start clean with a prompt. */ continue; case NO_MCA: /* * Not a multi-char command * (at least, not anymore). */ break; } /* decode the command character and decide what to do. */ switch (action = cmd_decode(c)) { case A_DIGIT: /* first digit of a number */ start_mca(A_DIGIT, ":"); goto again; case A_F_SCREEN: /* forward one screen */ CMD_EXEC; if (number <= 0 && (number = sc_window) <= 0) number = sc_height - 1; forward(number, 1); break; case A_B_SCREEN: /* backward one screen */ CMD_EXEC; if (number <= 0 && (number = sc_window) <= 0) number = sc_height - 1; backward(number, 1); break; case A_F_LINE: /* forward N (default 1) line */ CMD_EXEC; forward(number <= 0 ? 1 : number, 0); break; case A_B_LINE: /* backward N (default 1) line */ CMD_EXEC; backward(number <= 0 ? 1 : number, 0); break; case A_F_SCROLL: /* forward N lines */ CMD_EXEC; if (number > 0) nscroll = number; forward(nscroll, 0); break; case A_B_SCROLL: /* backward N lines */ CMD_EXEC; if (number > 0) nscroll = number; backward(nscroll, 0); break; case A_FREPAINT: /* flush buffers and repaint */ if (!ispipe) { ch_init(0, 0); clr_linenum(); } /* FALLTHROUGH */ case A_REPAINT: /* repaint the screen */ CMD_EXEC; repaint(); break; case A_GOLINE: /* go to line N, default 1 */ CMD_EXEC; if (number <= 0) number = 1; jump_back(number); break; case A_PERCENT: /* go to percent of file */ CMD_EXEC; if (number < 0) number = 0; else if (number > 100) number = 100; jump_percent(number); break; case A_GOEND: /* go to line N, default end */ CMD_EXEC; if (number <= 0) jump_forw(); else jump_back(number); break; case A_STAT: /* print file name, etc. */ longprompt = 1; continue; case A_QUIT: /* exit */ quit(); case A_F_SEARCH: /* search for a pattern */ case A_B_SEARCH: if (number <= 0) number = 1; start_mca(action, (action==A_F_SEARCH) ? "/" : "?"); last_mca = mca; wsearch = 1; c = getcc(); if (c == '!') { /* * Invert the sense of the search; set wsearch * to 0 and get a new character for the start * of the pattern. */ start_mca(action, (action == A_F_SEARCH) ? "!/" : "!?"); wsearch = 0; c = getcc(); } goto again; case A_AGAIN_SEARCH: /* repeat previous search */ if (number <= 0) number = 1; if (wsearch) start_mca(last_mca, (last_mca == A_F_SEARCH) ? "/" : "?"); else start_mca(last_mca, (last_mca == A_F_SEARCH) ? "!/" : "!?"); CMD_EXEC; (void)search(mca == A_F_SEARCH, (char *)NULL, number, wsearch); break; case A_HELP: /* help */ lower_left(); clear_eol(); fputs("help", stdout); CMD_EXEC; help(); break; case A_TAGFILE: /* tag a new file */ CMD_RESET; start_mca(A_TAGFILE, "Tag: "); c = getcc(); goto again; case A_FILE_LIST: /* show list of file names */ CMD_EXEC; showlist(); repaint(); break; case A_EXAMINE: /* edit a new file */ CMD_RESET; start_mca(A_EXAMINE, "Examine: "); c = getcc(); goto again; case A_VISUAL: /* invoke the editor */ if (ispipe) { error("Cannot edit standard input"); break; } CMD_EXEC; editfile(); ch_init(0, 0); clr_linenum(); break; case A_NEXT_FILE: /* examine next file */ if (number <= 0) number = 1; next_file(number); break; case A_PREV_FILE: /* examine previous file */ if (number <= 0) number = 1; prev_file(number); break; case A_SETMARK: /* set a mark */ lower_left(); clear_eol(); start_mca(A_SETMARK, "mark: "); c = getcc(); if (c == erase_char || c == kill_char) break; setmark(c); break; case A_GOMARK: /* go to mark */ lower_left(); clear_eol(); start_mca(A_GOMARK, "goto mark: "); c = getcc(); if (c == erase_char || c == kill_char) break; gomark(c); break; case A_PREFIX: /* * The command is incomplete (more chars are needed). * Display the current char so the user knows what's * going on and get another character. */ if (mca != A_PREFIX) start_mca(A_PREFIX, ""); if (CONTROL_CHAR(c)) { putchar('^'); c = CARAT_CHAR(c); } putchar(c); c = getcc(); goto again; default: putchar('\7'); break; } } }
void main() { uint8_t sw1,sw2,i; uint16_t k; int16_t backemf; int8_t d1,d2; uint8_t show[3] = {0,'f','b'}; init_board(); d1 = 0; d2 = 0; backemf =0; while (1) { sw1 = _7SEGMENT_SW1_IN_PORT & _7SEGMENT_SW1; if (!sw1) // SW1 Press { d1++; if (d1 > MOTOR_BACKWARD) d1 = MOTOR_STOP; for (k = 0; k < 500 ;k++) // Delay for key bounce delay(6000); g_mode[0] = d1; g_angle[0] = 1; // Continuous move } sw2 = _7SEGMENT_SW2_IN_PORT & _7SEGMENT_SW2; if (!sw2) // SW2 Press { d2++; if (d2 > MOTOR_BACKWARD) d2 = MOTOR_STOP; for (k = 0; k < 500 ;k++) // Delay for key bounce delay(6000); g_mode[1] = d2; g_angle[1] = 1; // Continuous move } // Command decode if ( g_cmd_decode) { // Decode command cmd_decode (); g_cmd_decode = 0; g_pos[g_motor] = 0; } for (i = 0 ; i < MOTOR_MAX ; i++) { // 7 Segments display d7segment_display(show[g_mode[i]],i+1); delay(10000); } // adc_init(3); // backemf = read_adc((g_adc_channel[0])); // backemf = MOTOR_OFFSET- backemf; // debug_value(backemf,10); } }
void main() { uint8_t sw1,sw2,i; uint16_t k; int16_t backemf; int8_t d1,d2; uint8_t show[3] = {0,'f','b'}; init_board(); d1 = 0; d2 = 0; backemf =0; while (1) { sw1 = _7SEGMENT_SW1_IN_PORT & _7SEGMENT_SW1; if (!sw1) // SW1 Press { d1++; if (d1 > MOTOR_BACKWARD) d1 = MOTOR_STOP; for (k = 0; k < 500 ;k++) // Delay for key bounce delay(6000); g_mode[0] = d1; g_angle[0] = 1; // Continuous move } sw2 = _7SEGMENT_SW2_IN_PORT & _7SEGMENT_SW2; if (!sw2) // SW2 Press { d2++; if (d2 > MOTOR_BACKWARD) d2 = MOTOR_STOP; for (k = 0; k < 500 ;k++) // Delay for key bounce delay(6000); g_mode[1] = d2; g_angle[1] = 1; // Continuous move } // Command decode if ( g_cmd_decode) { // Decode command cmd_decode (g_rcv_buff); g_cmd_decode = 0; // g_pos[g_motor] = 0; } if(g_ircode) { remote_decode (g_ircode); g_ircode =0; } for (i = 0 ; i < MOTOR_MAX ; i++) { // 7 Segments display d7segment_display(show[g_mode[i]],i+1); delay(500); } } }
void main() { uint8_t sw1,sw2,i; int16_t backemf[MOTOR_MAX]; uint16_t k,pwm,loop[MOTOR_MAX] = {0.0}; int8_t d1,d2; uint8_t show[3] = {0,'f','b'}; init_board(); d1 = 0; d2 = 0; while (1) { sw1 = _7SEGMENT_SW1_IN_PORT & _7SEGMENT_SW1; if (!sw1) // SW1 Press { d1++; if (d1 > MOTOR_BACKWARD) d1 = MOTOR_STOP; for (k = 0; k < 500 ; k++) // Delay for key bounce delay(6000); g_mode[0] = d1; g_angle[0] = 1; // Continuous move g_motor_change[0] =1; } sw2 = _7SEGMENT_SW2_IN_PORT & _7SEGMENT_SW2; if (!sw2) // SW2 Press { d2++; if (d2 > MOTOR_BACKWARD) d2 = MOTOR_STOP; for (k = 0; k < 500 ; k++) // Delay for key bounce delay(6000); g_mode[1] = d2; g_angle[1] = 1; // Continuous move g_motor_change[1] =1; } // Command decode if ( g_cmd_decode) { // Decode command cmd_decode (); g_cmd_decode = 0; loop[g_motor] = 0; } for (i = 0 ; i < MOTOR_MAX ; i++) { // If angle > 1 loop start if (g_angle[i] > 1) { loop[i]++; if ( loop[i] == (g_angle[i]*50)) { g_mode[i] = MOTOR_STOP; g_motor_change[i] = 1; loop[i] =0; } } if (g_motor_change[i] ) // Motor command change { // Motor contol section // Set speed pwm = (uint16_t)(g_speed[i] * 100); // Start from + speed*2^4 if (i == 0 ) OCR1A = pwm; if (i == 1) OCR1B = pwm; // Set direction motor_control(i+1, g_mode[i]); g_motor_change[i] = 0; } // Read ADC value // backemf[i] = read_adc( // 7 Segments display d7segment_display(show[g_mode[i]],i+1); // delay(10000); } } }