亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xbee_gpio_client.c

?? Dynamic C 程式語言源碼 嵌入式控制系統 Xbee蜂群網路~
?? C
?? 第 1 頁 / 共 4 頁
字號:
      return 0;
   }

   if (ch == 8)
   {
      // Received a backspace character
      if (ptr != buf)
      {
      	--ptr;
         *ptr = 0; // add null character
         putchar(ch); // print newline character
      }
      return 1;
   }
   else {
   	putchar(ch); // print non-newline character
   }

   if (ch != 13)
   {
      *ptr = (char)toupper(ch);
      if ((++ptr) < (&buf[PARSE_MAX_BUF]))
      {
         return 1;
      }
   }
   if (ptr == buf) {
      printf("\nG> ");
      return 1;
   }

   // CR received or buffer full, process command string
   *ptr = 0;
   ptr = buf;
   printf("\n");

   for(state = PARSE_CMD; *ptr; ptr = end)
   {
	   // Ignore leading spaces
	   while (isspace(*ptr)) ++ptr;
      // Find end of word and break into substring
      end = strpbrk(ptr, " ");
	   if (end)
	   {
	      *end++ = 0;
	   }
      else {
         end = ptr + strlen(ptr);
      }

      switch (state) {
      	case PARSE_CMD:
	         switch (*ptr)
	         {
	            case 'C':
	               if (!strcmp(ptr, "CLOSE")) {
                     gpio_help(SHOW_NET_HELP);
                     return 0;    // Close node and set main state back to idle
                  }
                  else {
                     state = PARSE_ERROR;
                  }
	               break;

	            case 'G':
	               state = (strcmp(ptr, "GET") ? PARSE_ERROR : PARSE_SIGNAL);
	               cmd = SIGNAL_GET;
	               break;

	            case 'H':
	               if (!strcmp(ptr, "HELP")) {
                     gpio_help(SHOW_GPIO_HELP);
                     state = PARSE_EXIT;
                  }
                  else {
                     state = PARSE_ERROR;
                  }
	               break;

	            case 'N':
	               if (!strcmp(ptr, "NAMES")) {
                     gpio_help(SHOW_SIGNALS);
                     state = PARSE_EXIT;
                  }
                  else {
                     state = PARSE_ERROR;
                  }
	               break;

	            case 'S':
	               state = (strcmp(ptr, "SET") ? PARSE_ERROR : PARSE_SIGNAL);
	               cmd = SIGNAL_SET;
	               break;

               default:
	               state = PARSE_ERROR;
	               break;
	         }
            break;

        	case PARSE_SIGNAL:
            max = gpio_device[gpio_index].io_count;
	         if (cmd == SIGNAL_GET && !strcmp(ptr, "ALL"))
	         {
               // Get all inputs
               request_gpio_read(gpio_device[gpio_index].node_index,
                                   0, max - 1);
               state = PARSE_EXIT;
               break;
            }
            else {
               for (i = 0; i < max; i++)
               {
                  if (!strcmp(ptr, gpio_signal[i].name)) {
                     signal = i;
                     break;
                  }
               }
               if (i < max) {
	               if (gpio_signal[i].type & XBEE_GPIO_MASK_TYPE_INPUT) {
	                  if (cmd == SIGNAL_SET) {
	                     printf("\nCannot set value to an input signal.\n");
	                     state = PARSE_EXIT;
	                  }
	                  else {
	                     state = PARSE_DONE;
	                  }
	               }
	               else {
	                  if (cmd == SIGNAL_SET) {
                        state = PARSE_VALUE;
                     }
	                  else {
	                     state = PARSE_DONE;
	                  }
	               }
               }
               else {
                  printf("\nSignal '%s' not found on current node.\n", ptr);
                  state = PARSE_EXIT;
               }
            }
            break;

	      case PARSE_VALUE:
            type = gpio_signal[i].type;
            if (type == XBEE_GPIO_TYPE_ANALOG_OUT) {
               if (isdigit(*ptr) || *ptr == '-') {
	               fp_value = atof(ptr);
   	            state = PARSE_DONE;
	            }
	            else {
                  state = PARSE_ERROR;
	            }
            }
            else {
               state = PARSE_DONE;
               switch (*ptr)
               {
                  case 'H': // "H", "HI", "HIGH"
                  case '1': // "1"
                     if (*(ptr + 1) != 0 &&  strcmp(ptr, "HI")
                     	 && strcmp(ptr, "HIGH")) {
                        state = PARSE_ERROR;
                     }
                     else {
                     	value = 1;
                     }
							break;

                  case 'L': // "L", "LO", "LOW"
                  case '0': // "0"
                     if (*(ptr + 1) != 0 &&  strcmp(ptr, "LO")
                     	 && strcmp(ptr, "LOW")) {
                        state = PARSE_ERROR;
                     }
                     else {
                     	value = 0;
                     }
							break;

                  case 'O': // "ON", "OFF"
                     if (!strcmp(ptr, "ON")) {
                        value = (type == XBEE_GPIO_TYPE_SINK_OUT ? 0 : 1);
                     }
                     else {
                        if (!strcmp(ptr, "OFF")) {
                           value = ((type == XBEE_GPIO_TYPE_DIGITAL_OUT ||
                                    type == XBEE_GPIO_TYPE_LED_OUT) ? 0 : 2);
                        }
                        else {
                           state = PARSE_ERROR;
                        }
                     }
                     break;

                  case 'T': // "T", "TRI"
                  case '2': // "2"
                     if (*(ptr + 1) != 0 && strcmp(ptr, "TRI")) {
                        state = PARSE_ERROR;
                     }
                     value = 2;
                     break;
	               default:
	                  state = PARSE_ERROR;
	                  break;
               }
            }
            break;

         default:
            state = PARSE_ERROR;
            break;
      }

      if (state >= PARSE_DONE) {
         if (state == PARSE_DONE) {
	         if (cmd == SIGNAL_GET) {
	            request_gpio_read(gpio_device[gpio_index].node_index,
                                     signal, signal);
	         }
	         else {
	            if (cmd == SIGNAL_SET) {
                  if (gpio_signal[i].type == XBEE_GPIO_TYPE_ANALOG_OUT) {
	                  gpio_write_analog(gpio_device[gpio_index].node_index,
                                         signal, fp_value);
                  }
                  else {
	                  gpio_write_digital(gpio_device[gpio_index].node_index,
                                       signal, value);
                  }
	            }
               else {
                  printf("G> ");
               }
	         }
         }
         else {
            if (state == PARSE_ERROR) {
               printf("\nInvalid command string.\n\nG> ");
            }
            else {
               if (gpio_device[gpio_index].state == CLIENT_STATE_IDLE) {
	               printf("\nG> ");
               }
            }
         }
         break;
      }
   }
   if (state < PARSE_DONE) {
      printf("\nInvalid command string.\n\nG> ");
   }
   ptr = buf;
   return 1;
}


void main(void)
{
	int i, state, tickres;
	unsigned long now;
	int initres;	// Result of xbee_init()
	unsigned long join_start;
	int c;

	printf( "Starting XBee GPIO Client....\n\n\r");

	// *** Initialization ***

	// Initialize the radio portion of the board
	join_start = 0;
	while ( (initres = xbee_init()) == -EBUSY)
	{
		if (! join_start)
		{
	      join_start = SEC_TIMER;
	      printf( "Waiting for sleeping XBee to wake before continuing.");
		}
      if (join_start != SEC_TIMER)
      {
         join_start = SEC_TIMER;
         printf( ".");
      }
	}
	printf( "\n");

	if (initres)
	{
		printf( "xbee_init failed.  result code: %d (%ls)\n",
				initres, error_message(initres));
		exit( initres);
	}
	// Join the network.  For more information on ZB_JOINING_NETWORK,
	// perform a function lookup (ctrl-H) on ZB_LAST_STATUS().
	printf( "Waiting to join network...\n");
	join_start = MS_TIMER;
	while (ZB_JOINING_NETWORK())
	{
		// If unable to join a network, timeout after arbitrary time
		if (MS_TIMER - join_start > XBEE_JOIN_TIMEOUT)
		{
	      // There was an error, do something about it
	      printf( "\n*** Error ***\n");
	      printf( "Timed out while trying to join a network, halting.\n");
	      exit( -ETIME);
	   }
	}
	printf( "Done (%s network)\n", xbee_protocol());
	// Wait for node discovery (6-7 seconds, can do something else between calls
	printf( "Waiting for node discovery...\n");
	while (ZB_ND_RUNNING());
	printf( "Discovery done.\n\n");
	// *** End Initialization ***

   // Scan network nodes for GPIO servers (5+ seconds)
	find_gpio_servers();
   gpio_last = gpio_index;
   if (!gpio_index) {
      printf("\nNo GPIO servers found on the network.\n\n");
   }
   gpio_help(SHOW_NET_HELP);
   parse_cmd(-1);  // Initialize command parser

	for (state = ZB_IDLE, gpio_index = 0; state != ZB_EXIT; )
	{
      if (!gpio_last || gpio_device[gpio_index].state == CLIENT_STATE_IDLE)
      {
	      if (kbhit()) {
	         c = getchar();
	         if (state == ZB_IDLE) {
               putchar(c);
	            if (c >= '0' && c <= '9') {
                  c -= '0';
                  if (c < gpio_last) {
	                  state = gpio_open_node(c);
	                  if (state == ZB_IDLE) {
	                     printf("\nN> ");
	                  }
                  }
                  else {
                     printf("\n\nGPIO #%d is not valid.\n\nN> ", c);
                  }
	            }
               else switch (c) {
	               case 'h':
	               case 'H':
                     gpio_help(SHOW_NET_HELP);
                     break;
	               case 'x':
	               case 'X':
                     state = ZB_EXIT;
                     break;
	               case 'd':
	               case 'D':
	                  printf("\nStarting node discovery...\n");
	                  _zb_begin_service_discovery();
	                  while (ZB_ND_RUNNING());
	                  printf( "Discovery done.\n");
	                  // fall through to "list nodes"
	               case 'n':
	               case 'N':
	                  find_gpio_servers();
                     gpio_last = gpio_index;
	                  if (!gpio_index) {
	                     printf( "\nNo GPIO servers found.\n");
	                  }
                     // fall through to show prompt
                  default:
                     printf("\nN> ");
                     break;
	            }
	         }
	         else {
	            // Parse input character
	            if (!parse_cmd(c)) {
	               state = ZB_IDLE;
	            }
	         }
	      }
      }
      else {
         query_gpio_node();
      }

		// Let the library advance its state
      tickres = zb_tick();
#ifdef GPIO_VERBOSE
	   if (tickres == ZB_MESSAGE)
	   {
			printf( "Unknown message arrived\n");
			xb_hexdump( ZB_LAST_MSG_DATA(), ZB_LAST_MSG_DATALEN() );
		}
      else if (tickres == ZB_RADIO_STAT)
		{
         printf( "Radio status change: %s\n", ZB_LAST_STATUS() == ZB_JOINED ?
				"joined" : "unjoined");
		}
      else if (tickres == ZB_MSG_STAT)
		{
			printf( "Transmission Status received: %d\n", ZB_XMIT_STATUS());
		}
#endif
	}
} //main()


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
26uuu国产一区二区三区| 日韩欧美国产小视频| 肉色丝袜一区二区| 欧美国产精品专区| 中文字幕中文在线不卡住| 欧洲精品中文字幕| 国产精品1区二区.| 久久久精品天堂| 亚洲视频香蕉人妖| 欧美一区二区大片| 91蝌蚪porny九色| 另类的小说在线视频另类成人小视频在线 | 色先锋aa成人| 精品一区二区三区在线播放| 亚洲综合无码一区二区| 欧美国产日韩一二三区| 欧美一卡二卡在线| 欧美日韩一区二区在线观看| fc2成人免费人成在线观看播放| 久久精品国产第一区二区三区| 亚洲一区二区av电影| 欧美激情一区在线| 久久久久国产精品免费免费搜索| 欧美久久一二三四区| 在线这里只有精品| 99久久婷婷国产| 成人午夜激情视频| 国产一区二区在线看| 久久精品国产久精国产| 日韩1区2区日韩1区2区| 午夜视频久久久久久| 波多野结衣中文字幕一区二区三区| 欧美一级午夜免费电影| 欧美午夜一区二区| 不卡一区在线观看| 国产91丝袜在线18| 国产成人免费网站| 国产酒店精品激情| 国产精品一区免费视频| 国内不卡的二区三区中文字幕| 蜜臀av国产精品久久久久| 免费三级欧美电影| 蜜桃免费网站一区二区三区| 日本在线不卡视频| 人人爽香蕉精品| 久久成人综合网| 久久国产精品第一页| 精品一区二区三区在线观看| 久久国产精品色| 国产一区二区精品久久99| 国产成人免费av在线| 成人黄动漫网站免费app| 99热99精品| 在线观看一区日韩| 欧美福利视频导航| 欧美成人a视频| 国产人成亚洲第一网站在线播放 | 亚洲欧美偷拍另类a∨色屁股| 日本一区二区不卡视频| 国产精品国产精品国产专区不片| 国产精品女主播在线观看| 中文字幕一区二区三区av| 91在线精品一区二区| 91官网在线观看| 欧美一二三区在线观看| 2023国产精华国产精品| 国产精品国产三级国产专播品爱网 | 欧美色视频一区| 9191久久久久久久久久久| 日韩欧美一级精品久久| 国产日韩欧美一区二区三区乱码 | 亚洲激情av在线| 天天综合天天做天天综合| 精品中文字幕一区二区小辣椒 | 91小视频在线观看| 欧美日韩一区成人| 久久先锋影音av鲁色资源| 国产精品第五页| 日韩精品欧美精品| 国产99久久久国产精品| 欧美亚洲丝袜传媒另类| 精品欧美一区二区三区精品久久| 国产精品久久久久影视| 五月天中文字幕一区二区| 激情综合网天天干| 91高清视频免费看| 久久综合国产精品| 亚洲精品国产第一综合99久久| 日韩av一区二区三区| 成人a免费在线看| 91精品国产综合久久精品| 欧美激情一区二区三区不卡| 亚洲国产精品自拍| 成人精品一区二区三区四区| 欧美区视频在线观看| 国产精品久久综合| 久久国产尿小便嘘嘘尿| 91行情网站电视在线观看高清版| 精品成人a区在线观看| 亚洲在线视频网站| 高清av一区二区| 日韩欧美国产精品| 一区二区三区成人| 风间由美一区二区av101| 在线不卡欧美精品一区二区三区| 国产精品伦一区二区三级视频| 麻豆一区二区在线| 欧美最新大片在线看| 中文字幕av一区二区三区| 麻豆精品视频在线观看视频| 色老汉av一区二区三区| 欧美国产日韩精品免费观看| 美女视频黄久久| 欧美久久婷婷综合色| 一区二区三区四区高清精品免费观看 | 日本欧美一区二区| 欧美亚洲动漫另类| 一区在线播放视频| 国产精品99久久久久久宅男| 欧美一区二区久久| 同产精品九九九| 欧美在线三级电影| 亚洲欧美经典视频| 91亚洲精品一区二区乱码| 欧美激情艳妇裸体舞| 极品销魂美女一区二区三区| 91精品福利在线一区二区三区| 亚洲午夜精品17c| 在线观看成人免费视频| 亚洲欧美日韩人成在线播放| 成人av免费观看| 欧美国产视频在线| 成人爱爱电影网址| 一区视频在线播放| 成人av集中营| 中文字幕视频一区二区三区久| 成人国产精品视频| 亚洲私人黄色宅男| 91原创在线视频| 一区二区在线看| 色噜噜狠狠成人中文综合| 亚洲精品伦理在线| 欧美性猛交xxxx黑人交| 亚洲香肠在线观看| 中文子幕无线码一区tr| 激情综合网最新| 久久综合九色综合97婷婷| 国产精品一区在线观看你懂的| 久久久一区二区| 国产999精品久久久久久| 日本一区二区高清| thepron国产精品| 亚洲视频在线一区二区| 91电影在线观看| 亚洲va欧美va国产va天堂影院| 蓝色福利精品导航| 久久综合色8888| 成人亚洲精品久久久久软件| 亚洲视频一二三区| 欧美视频中文字幕| 久久草av在线| 国产精品日韩成人| 精品视频1区2区| 日韩电影一二三区| 久久精品人人做| a4yy欧美一区二区三区| 亚洲永久免费av| 欧美电视剧免费全集观看| 国产成a人亚洲| 一区二区三区视频在线观看| 在线播放一区二区三区| 国产精品乡下勾搭老头1| 亚洲色图.com| 欧美一级国产精品| 成人精品一区二区三区四区 | 91在线视频在线| 亚洲综合一区二区三区| 欧美一区二区三区系列电影| 久久99精品久久久| 国产精品久久久久久久浪潮网站 | 久久婷婷色综合| 色综合久久88色综合天天免费| 日韩成人av影视| 中文字幕第一区二区| 欧美精品精品一区| 不卡一区二区三区四区| 日韩激情中文字幕| 国产精品欧美极品| 制服视频三区第一页精品| 成人污污视频在线观看| 午夜在线电影亚洲一区| 国产日韩欧美一区二区三区乱码| 欧美日韩综合不卡| 成人性视频免费网站| 日韩av网站免费在线| 亚洲免费观看高清完整版在线观看| 欧美大片一区二区三区| 欧美综合亚洲图片综合区| 国产精品综合一区二区三区| 五月婷婷激情综合|