Exemple #1
0
void CoAPContext::handle_read(const boost::system::error_code& ec)
{
    read_queued = false;
    if (!ec) {
        // call libcoap to let it know that a read is possible
        perform_read();
    }
    if (!ec || ec == boost::asio::error::would_block) {
        // Start over with a new async read
        perform_operations();
    }
    else {
        // Socket error, or something
        throw boost::system::system_error(ec);
    }
}
Exemple #2
0
void pkt_32x32(struct pkt_buf *b)
{
    uint8_t id;
    uint32_t addr;
    uint32_t data;
    bool is_write;
    bool success;

    nios_pkt_32x32_unpack(b->req, &id, &is_write, &addr, &data);

    if (is_write) {
        success = perform_write(id, addr, data);
    } else {
        success = perform_read(id, addr, &data);
    }

    nios_pkt_32x32_resp_pack(b->resp, id, is_write, addr, data, success);
}
Exemple #3
0
static void
channel_is_usable(struct ev_loop *loop, ev_io *watcher, int revents)
{
    pc_channel_t *channel = watcher->data;
    pc_bool_t dirty = FALSE;

    /* Note that we double-check the callbacks. We want to ignore
       spurious signals to read or write, and then we want to try
       to disable those events (again).  */

    if ((revents & EV_READ) != 0)
    {
        if (channel->desire_read)
            dirty = perform_read(channel);
        else
            dirty = TRUE;
    }
    if ((revents & EV_WRITE) != 0)
    {
        if (channel->desire_write)
            dirty |= perform_write(channel);
        else
            dirty = TRUE;
    }

    /* Do we need to adjust what events we're looking for?  */
    if (dirty)
    {
        int events = 0;

        if (channel->desire_read)
            events |= EV_READ;
        if (channel->desire_write)
            events |= EV_WRITE;

        start_watcher(loop, watcher, events);
    }
}
Exemple #4
0
int main(int argc, char **argv)
{
	// action to be performed
	int act = '\0';

	// address offset to the device
	uint32_t addr  = 0;
	int addr_valid = 0;

	// value to be written
	uint32_t value = 0;
	int value_valid = 0;

	// number of bytes to be written or read
	int len = 4;

	// used device-tree to get address
	const char *dtree = DTREE_PATH;

	// name of the device to access
	const char *dev   = NULL;

	// input for -w when -d is missing
	FILE *finput = stdin;

	int opt;
	opterr = 0;

	while((opt = getopt(argc, argv, GETOPT_STR)) != -1) {
		switch(opt) {
		case 'h':
			return print_help(argv[0]);
		
		case 'V':
			return print_version(argv[0]);

		case 'v':
			verbosity += 1;
			break;

		case 'l':
			act = opt;
			break;

		case 'r':
		case 'w':
			dev = optarg;
			act = opt;
			break;

		case 't':
			dtree = optarg;
			break;

		case 'a':
			addr = parse_addr(optarg);
			addr_valid = 1;
			break;

		case 'd':
			value = parse_value(optarg);
			value_valid = 1;
			break;

		case '1':
		case '2':
		case '3':
		case '4':
			len = opt - '0';
			break;

		case '?':
		default:
			return print_opterr(optopt);
		}
	}

	verbosity_printf(1, "Attempt to open device-tree '%s'", dtree);
	if(dtree_open(dtree) != 0) {
		fprintf(stderr, "dtree_open(%s): %s\n", dtree, dtree_errstr());
		return 1;
	}

	int err = 0;

	switch(act) {
	case 'l':
		err = perform_list();
		goto exit;

	case 'r':
		assert(dev != NULL);
		if(addr_valid) {
			err = perform_read(dev, addr, len);
			goto exit;
		}

		break;

	case 'w':
		assert(dev != NULL);

		if(!addr_valid)
			break;

		if(value_valid) {
			err = perform_write(dev, addr, len, value);
			goto exit;
		}
		else {
			verbosity_printf(1, "Reading from <stdin>");
			err = perform_file_write(dev, addr, len, finput);
			goto exit;
		}

		break;

	case '\0':
		fprintf(stderr, "No action has been specified\n");
		err = 1;
		goto exit;

	default:
		fprintf(stderr, "Unknown action to be performed: %c\n", act);
		err = 1;
		goto exit;
	}

	if(!addr_valid) {
		fprintf(stderr, "Address option (-a) is missing\n");
		err = 1;
		goto exit;
	}
	if(!value_valid) {
		fprintf(stderr, "Data option (-d) is missing\n");
		err = 1;
		goto exit;
	}

	fprintf(stderr, "Unknown option error\n");
	err = 1;

exit:
	dtree_close();
	return err;
}
Exemple #5
0
char *uparams_read(char **argv, int argc, char *prog_name)
{

  char *default_params_var;
  char *params_file_path;
  int i;
  int use_default = TRUE;

  /*
   * look at command line args to see if default has been overridden
   */

  for (i = 1; i < argc; i++) {

    if (!strcmp(argv[i], "-params")) {

      if (i < argc - 1) {
	params_file_path = argv[i+1];
	use_default = FALSE;
	break;
      } else {
	fprintf(stderr, "WARNING - uparams_read\n");
	fprintf(stderr,
		"File name missing after -params arg. on command line\n");
      }

    } else if (!strcmp(argv[i], "-noparams")) {

      return ((char *) NULL);

    }
  }
      
  /*
   * if '-params' not specified, use default params variable
   */

  if (use_default == TRUE) {

    /*
     * compute the default params var name from the program name
     */

    default_params_var = (char *)
      umalloc(strlen(prog_name) + strlen("_params") + 1);
    sprintf(default_params_var, "%s%s", prog_name, "_params");
    params_file_path = getenv(default_params_var);
    ufree(default_params_var);

  } /* if (use_default == TRUE) */

  /*
   * read parameters from file
   */

  if(perform_read(params_file_path, prog_name) == FAILURE) {

    fprintf(stderr, "WARNING - uparams_read\n");
    fprintf(stderr, "Cannot find parameters file '%s'.\n",
	    params_file_path);
    fprintf(stderr, "No parameters file used.\n");
    fprintf(stderr,
    "Use '-noparams' arg on command line to suppress this message.\n");

  }
  
  return params_file_path;

}