Exemple #1
0
int main(int argc, char *argv[]){
	char bf_ip[SIZE] = "", bf_rfcomm[SIZE] = "", bf_seial[SIZE] = "";
	char buffer[20] = "";

	int port_no = atoi(argv[1]);
	uint32_t svc_uuid_int[] = {0x1101, 0x1000, 0x80000080 ,0x5f9b34fb};

	FD_ZERO(&readfds);

	printf("Program start up!\n");

	// setup_serial(BAUD, DEVICE_ARDUINO);
	// setup_rfcomm(svc_uuid_int);
	setup_ip(port_no);

	fflush(stdin);
	FD_SET(STDIN, &readfds);
	fd_set readfds_temp;
	while(1){
		readfds_temp = readfds;
		
		select(FD_SETSIZE, &readfds_temp, NULL, NULL, NULL);

		// just for jumping out of loop through command
		if (FD_ISSET(STDIN, &readfds_temp)){
			scanf("%s", buffer);
			if(strcmp(buffer, "end")==0){
				break;
			}
		}

		// if (FD_ISSET(fd_rfcomm_server, &readfds_temp)){
		// 	accept_rfcomm();
		// }

		if (FD_ISSET(fd_ip_server, &readfds_temp)){
			accept_ip();
		}

		//if all three connections are established, start reading
		//ip or rfcomm writing should be before serial.
		// if(fd_rfcomm > 0 && fd_serial > 0 && fd_ip > 0){
			// if (FD_ISSET(fd_rfcomm, &readfds_temp)){
			// 	read_rfcomm(bf_rfcomm);
			// 	if(strcmp(bf_rfcomm, EXPLORE)==0)
			// 		write_serial(bf_rfcomm);
			// 	else if(strcmp(bf_rfcomm, RUN)==0)
			// 		write_ip(bf_rfcomm);
			// 	bzero(bf_rfcomm,sizeof(bf_rfcomm));
			// }
			// if (FD_ISSET(fd_serial, &readfds_temp)){
			// 	read_serial(bf_seial);
			// 	write_ip(bf_seial);
			// 	bzero(bf_seial,sizeof(bf_seial));
			// }
			if (FD_ISSET(fd_ip, &readfds_temp)){
				read_ip(bf_ip);
				write_ip(bf_ip);
				// write_serial(bf_ip);
				bzero(bf_ip,sizeof(bf_ip));
			}
		}
	// }

	close_ip();
	// close_rfcomm();
	// close_serial();

	printf("Programm terminating...\n");
}
Exemple #2
0
/* read a dhcp option and add it to opt_list */
static int read_opt(char *line, void *arg)
{
	struct option_set **opt_list = arg;
	char *opt, *val, *endptr;
	struct dhcp_option *option = NULL;
	int retval = 0, length = 0;
	char buffer[255];
	u_int16_t result_u16;
	u_int32_t result_u32;
	int i;

	if (!(opt = strtok(line, " \t="))) return 0;
	
	for (i = 0; options[i].code; i++)
		if (!strcmp(options[i].name, opt))
			option = &(options[i]);
		
	if (!option) return 0;
	
	do {
		val = strtok(NULL, ", \t");
		if (val) {
			length = option_lengths[option->flags & TYPE_MASK];
			retval = 0;
			switch (option->flags & TYPE_MASK) {
			case OPTION_IP:
				retval = read_ip(val, buffer);
				break;
			case OPTION_IP_PAIR:
				retval = read_ip(val, buffer);
				if (!(val = strtok(NULL, ", \t/-"))) retval = 0;
				if (retval) retval = read_ip(val, buffer + 4);
				break;
			case OPTION_STRING:
				length = strlen(val);
				if (length > 0) {
					if (length > 254) length = 254;
					memcpy(buffer, val, length);
					retval = 1;
				}
				break;
			case OPTION_BOOLEAN:
				retval = read_yn(val, buffer);
				break;
			case OPTION_U8:
				buffer[0] = strtoul(val, &endptr, 0);
				retval = (endptr[0] == '\0');
				break;
			case OPTION_U16:
				result_u16 = htons(strtoul(val, &endptr, 0));
				memcpy(buffer, &result_u16, 2);
				retval = (endptr[0] == '\0');
				break;
			case OPTION_S16:
				result_u16 = htons(strtol(val, &endptr, 0));
				memcpy(buffer, &result_u16, 2);
				retval = (endptr[0] == '\0');
				break;
			case OPTION_U32:
				result_u32 = htonl(strtoul(val, &endptr, 0));
				memcpy(buffer, &result_u32, 4);
				retval = (endptr[0] == '\0');
				break;
			case OPTION_S32:
				result_u32 = htonl(strtol(val, &endptr, 0));	
				memcpy(buffer, &result_u32, 4);
				retval = (endptr[0] == '\0');
				break;
			default:
				break;
			}
			if (retval) 
				attach_option(opt_list, option, buffer, length);
		};
	} while (val && retval && option->flags & OPTION_LIST);
	return retval;
}
Exemple #3
0
int args_read(int argc, char *argv[], s_gimx_params* params)
{
  int ret = 0;
  int c;
  unsigned char controller = 0;
  unsigned char input = 0;

  struct option long_options[] =
  {
    /* These options set a flag. */
    {"nograb",         no_argument, &params->grab,           0},
    {"status",         no_argument, &params->status,         1},
    {"subpos",         no_argument, &params->subpositions,   1},
    {"force-updates",  no_argument, &params->force_updates,  1},
    {"curses",         no_argument, &params->curses,         1},
    {"window-events",  no_argument, &params->window_events,  1},
    {"btstack",        no_argument, &params->btstack,        1},
    /* These options don't set a flag. We distinguish them by their indices. */
    {"bdaddr",  required_argument, 0, 'b'},
    {"config",  required_argument, 0, 'c'},
    {"dst",     required_argument, 0, 'd'},
    {"event",   required_argument, 0, 'e'},
    {"hci",     required_argument, 0, 'h'},
    {"help",    no_argument,       0, 'm'},
    {"keygen",  required_argument, 0, 'k'},
    {"log",     required_argument, 0, 'l'},
    {"port",    required_argument, 0, 'p'},
    {"refresh", required_argument, 0, 'r'},
    {"src",     required_argument, 0, 's'},
    {"type",    required_argument, 0, 't'},
    {"version", no_argument,       0, 'v'},
    {0, 0, 0, 0}
  };
  
  while (1)
  {
    /* getopt_long stores the option index here. */
    int option_index = 0;

    c = getopt_long (argc, argv, "b:c:d:e:h:k:l:p:r:s:t:vm", long_options, &option_index);

    /* Detect the end of the options. */
    if (c == -1)
    break;

    if(controller == MAX_CONTROLLERS)
    {
      printf(_("ignoring: -%c %s (max controllers reached)\n"), c, optarg);
      continue;
    }

    switch (c)
    {
      case 0:
        /* If this option set a flag, do nothing else now. */
        if (long_options[option_index].flag != 0)
          break;
        printf(_("option %s"), long_options[option_index].name);
        if (optarg)
          printf(_(" with arg %s"), optarg);
        printf("\n");
        break;

      case 'b':
        adapter_get(controller)->atype = E_ADAPTER_TYPE_BLUETOOTH;
        adapter_get(controller)->bdaddr_dst = optarg;
        if(adapter_get(controller)->ctype == C_TYPE_NONE)
        {
          adapter_get(controller)->ctype = C_TYPE_SIXAXIS;
        }
        printf(_("controller #%d: option -b with value `%s'\n"), controller + 1, optarg);
        ++controller;
        printf(_("now reading arguments for controller #%d\n"), controller + 1);
        break;

      case 'c':
        params->config_file = optarg;
        printf(_("global option -c with value `%s'\n"), optarg);
        input = 1;
        break;

      case 'e':
        {
          char label[AXIS_NAME_MAX_SIZE];
          int axis;
          int value;
          if(sscanf(optarg, "%"STR(AXIS_NAME_MAX_SIZE)"[^(](%d)", label, &value) != 2)
          {
            fprintf(stderr, _("Bad event format: %s\n"), optarg);
            ret = -1;
          }
          else
          {
            // strip trailing spaces
            char * end;
            for (end = label + strlen(label) - 1; end > label && *end == ' '; --end) {}
            *(end + 1) = '\0';
            if((axis = controller_get_axis_index(label)) != -1)
            {
              printf(_("controller #%d: option -e with value `%s(%d)'\n"), controller + 1, label, value);
              adapter_set_axis(controller, axis, value);
              adapter_get(controller)->event = 1;
              input = 1;
            }
            else
            {
              fprintf(stderr, _("Bad axis name for event: %s\n"), optarg);
              ret = -1;
            }
          }
        }
        break;

      case 'h':
        adapter_get(controller)->dongle_index = atoi(optarg);
        printf(_("controller #%d: option -h with value `%d'\n"), controller + 1, adapter_get(controller)->dongle_index);
        break;

      case 'd':
        if(read_ip(optarg, &adapter_get(controller)->dst_ip,
            &adapter_get(controller)->dst_port) < 0)
        {
          printf(_("Bad format for argument -d: '%s'\n"), optarg);
          ret = -1;
        }
        else
        {
          adapter_get(controller)->atype = E_ADAPTER_TYPE_REMOTE_GIMX;
          printf(_("controller #%d: option -d with value `%s'\n"), controller + 1, optarg);
          ++controller;
          printf(_("now reading arguments for controller #%d\n"), controller + 1);
        }
        break;

      case 'm':
        usage();
        exit(0);
        break;

      case 's':
        if(read_ip(optarg, &adapter_get(controller)->src_ip,
            &adapter_get(controller)->src_port) < 0)
        {
          printf(_("Bad format for argument -s: '%s'\n"), optarg);
          ret = -1;
        }
        else
        {
          printf(_("controller #%d: option -s with value `%s'\n"), controller + 1, optarg);
          input = 1;
          params->network_input = 1;
        }
        break;

      case 'k':
        params->keygen = optarg;
        printf(_("controller #%d: option -k with value `%s'\n"), controller + 1, optarg);
        break;

      case 'l':
        if(params->logfilename == NULL)
        {
          if(!params->curses)
          {
            params->logfilename = optarg;
            if(params->logfilename && strlen(params->logfilename))
            {
              char file_path[PATH_MAX];
              snprintf(file_path, sizeof(file_path), "%s%s%s%s", params->homedir, GIMX_DIR, LOG_DIR, params->logfilename);
              params->logfile = fopen(file_path, "w");
              if(params->logfile != NULL)
              {
                dup2(fileno(params->logfile), fileno(stdout));
                dup2(fileno(params->logfile), fileno(stderr));
              }
              else
              {
                printf(_("can't open log file (%s)\n"), file_path);
                ret = -1;
              }
            }
            printf(_("global option -l with value `%s'\n"), optarg);
          }
          else
          {
            printf(_("log file can't be used with curses\n"));
            ret = -1;
          }
        }
        else
        {
          printf(_("only one log file can be specified\n"));
          ret = -1;
        }
        break;

      case 'p':
        if(adapter_get(controller)->atype == E_ADAPTER_TYPE_NONE)
        {
          // no adapter type specified => try to guess it from the port
          if(strstr(optarg, DEV_HIDRAW) || !strstr(optarg, DEV_SERIAL))
          {
            adapter_get(controller)->atype = E_ADAPTER_TYPE_GPP;
          }
          else
          {
            adapter_get(controller)->atype = E_ADAPTER_TYPE_DIY_USB;
          }
        }
        if(adapter_set_port(controller, optarg) < 0)
        {
          printf(_("port already used: `%s'\n"), optarg);
          ret = -1;
        }
        else
        {
          printf(_("controller #%d: option -p with value `%s'\n"), controller + 1, optarg);
          ++controller;
          printf(_("now reading arguments for controller #%d\n"), controller + 1);
        }
        break;

      case 'r':
        params->refresh_period = atof(optarg) * 1000;
        if(params->refresh_period)
        {
          params->postpone_count = 3 * DEFAULT_REFRESH_PERIOD / params->refresh_period;
          printf(_("global option -r with value `%s'\n"), optarg);
        }
        else
        {
          fprintf(stderr, "Bad refresh period: %s\n", optarg);
          ret = -1;
        }
        break;

      case 't':
        printf(_("controller #%d: option -t with value `%s'\n"), controller + 1, optarg);
        if (!strcmp(optarg, "GPP"))
        {
          adapter_get(controller)->atype = E_ADAPTER_TYPE_GPP;
        }
        else
        {
          adapter_get(controller)->ctype = controller_get_type(optarg);
          if (adapter_get(controller)->ctype == C_TYPE_NONE)
          {
            fprintf(stderr, "Bad controller type: %s\n", optarg);
            ret = -1;
          }
        }
        break;

      case 'v':
        printf("GIMX %s %s\n", INFO_VERSION, INFO_ARCH);
        exit(0);
        break;

      case '?':
        usage();
        exit(-1);
        break;

      default:
        printf(_("unrecognized option: %c\n"), c);
        ret = -1;
        break;
    }
  }

  if(params->status || params->logfilename)
    params->curses = 0;

  if(!params->grab)
    printf(_("grab flag is unset\n"));
  if(params->status)
    printf(_("status flag is set\n"));
  if(params->subpositions)
    printf(_("subpos flag is set\n"));
  if(params->force_updates)
    printf(_("force_updates flag is set\n"));
  if(params->curses)
    printf(_("curses flag is set\n"));
  if(params->window_events)
    printf(_("window_events flag is set\n"));
  if(params->btstack)
    printf(_("btstack flag is set\n"));

  if(!input)
  {
    fprintf(stderr, "At least a config file, an event, or a source IP:port should be specified as argument.\n");
    ret = -1;
  }

  if(params->logfile)
  {
    log_info();
  }

  return ret;
}