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); } }
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); }
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); } }
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; }
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; }