Пример #1
0
// 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++;	 
   }
}
Пример #2
0
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;
}
Пример #3
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; 
}
Пример #4
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;
		}
	}
}
Пример #5
0
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);
  }
  
}
Пример #6
0
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);
 
    }
 
  }
  
}
Пример #7
0
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);

        }

    }

}