int receive_data(int fd, int revents, void *cb_data) { struct sr_dev_inst *sdi; struct dev_context *devc; struct dmm_info *dmm; void *info; (void)fd; if (!(sdi = cb_data)) return TRUE; if (!(devc = sdi->priv)) return TRUE; dmm = (struct dmm_info *)sdi->driver; if (revents == G_IO_IN) { /* Serial data arrived. */ info = g_malloc(dmm->info_size); handle_new_data(sdi, info); g_free(info); } else { /* Timeout; send another packet request if DMM needs it. */ if (dmm->packet_request && (req_packet(sdi) < 0)) return FALSE; } if (sr_sw_limits_check(&devc->limits)) sdi->driver->dev_acquisition_stop(sdi); return TRUE; }
SR_PRIV int brymen_dmm_receive_data(int fd, int revents, void *cb_data) { struct sr_dev_inst *sdi; struct dev_context *devc; struct sr_serial_dev_inst *serial; int ret; (void)fd; if (!(sdi = cb_data)) return TRUE; if (!(devc = sdi->priv)) return TRUE; serial = sdi->conn; if (revents == G_IO_IN) { /* Serial data arrived. */ handle_new_data(sdi); } else { /* Timeout, send another packet request. */ if ((ret = brymen_packet_request(serial)) < 0) { sr_err("Failed to request packet: %d.", ret); return FALSE; } } if (sr_sw_limits_check(&devc->sw_limits)) sdi->driver->dev_acquisition_stop(sdi); return TRUE; }
static int receive_data(int fd, int revents, int dmm, void *info, void *cb_data) { struct sr_dev_inst *sdi; struct dev_context *devc; struct sr_serial_dev_inst *serial; int64_t time; int ret; (void)fd; if (!(sdi = cb_data)) return TRUE; if (!(devc = sdi->priv)) return TRUE; serial = sdi->conn; if (revents == G_IO_IN) { /* Serial data arrived. */ handle_new_data(sdi, dmm, info); } else { /* Timeout, send another packet request (if DMM needs it). */ if (dmms[dmm].packet_request) { ret = dmms[dmm].packet_request(serial); if (ret < 0) { sr_err("Failed to request packet: %d.", ret); return FALSE; } } } if (devc->limit_samples && devc->num_samples >= devc->limit_samples) { sr_info("Requested number of samples reached."); sdi->driver->dev_acquisition_stop(sdi, cb_data); return TRUE; } if (devc->limit_msec) { time = (g_get_monotonic_time() - devc->starttime) / 1000; if (time > (int64_t)devc->limit_msec) { sr_info("Requested time limit reached."); sdi->driver->dev_acquisition_stop(sdi, cb_data); return TRUE; } } return TRUE; }
static int receive_data(int fd, int revents, int idx, void *cb_data) { struct sr_dev_inst *sdi; struct dev_context *devc; int64_t t; static gboolean request_new_packet = TRUE; struct sr_serial_dev_inst *serial; (void)fd; if (!(sdi = cb_data)) return TRUE; if (!(devc = sdi->priv)) return TRUE; serial = sdi->conn; if (revents == G_IO_IN) { /* New data arrived. */ request_new_packet = handle_new_data(sdi, idx); } else { /* * Timeout. Send "A" to request a packet, but then don't send * further "A" commands until we received a full packet first. */ if (request_new_packet) { center_send(serial, "A"); request_new_packet = FALSE; } } if (devc->limit_samples && devc->num_samples >= devc->limit_samples) { sr_info("Requested number of samples reached."); sdi->driver->dev_acquisition_stop(sdi); return TRUE; } if (devc->limit_msec) { t = (g_get_monotonic_time() - devc->starttime) / 1000; if (t > (int64_t)devc->limit_msec) { sr_info("Requested time limit reached."); sdi->driver->dev_acquisition_stop(sdi); return TRUE; } } return TRUE; }
/** Driver/serial data reception function. */ SR_PRIV int hcs_receive_data(int fd, int revents, void *cb_data) { struct sr_dev_inst *sdi; struct dev_context *devc; struct sr_serial_dev_inst *serial; uint64_t elapsed_us; (void)fd; if (!(sdi = cb_data)) return TRUE; if (!(devc = sdi->priv)) return TRUE; serial = sdi->conn; if (revents == G_IO_IN) { /* New data arrived. */ handle_new_data(sdi); } else { /* Timeout. */ } if (sr_sw_limits_check(&devc->limits)) { sdi->driver->dev_acquisition_stop(sdi); return TRUE; } /* Request next packet, if required. */ if (sdi->status == SR_ST_ACTIVE) { if (devc->reply_pending) { elapsed_us = g_get_monotonic_time() - devc->req_sent_at; if (elapsed_us > (REQ_TIMEOUT_MS * 1000)) devc->reply_pending = FALSE; return TRUE; } /* Send command to get voltage, current, and mode (CC or CV). */ if (hcs_send_cmd(serial, "GETD\r") < 0) return TRUE; devc->req_sent_at = g_get_monotonic_time(); devc->reply_pending = TRUE; } return TRUE; }
static int receive_data(int fd, int revents, int idx, void *cb_data) { struct sr_dev_inst *sdi; struct dev_context *devc; int64_t t; static gboolean first_time = TRUE; struct sr_serial_dev_inst *serial; (void)fd; if (!(sdi = cb_data)) return TRUE; if (!(devc = sdi->priv)) return TRUE; serial = sdi->conn; if (revents == G_IO_IN) { /* New data arrived. */ handle_new_data(sdi, idx); } else { /* Timeout. */ if (first_time) { mic_cmd_set_realtime_mode(serial); first_time = FALSE; } } if (devc->limit_samples && devc->num_samples >= devc->limit_samples) { sr_info("Requested number of samples reached."); sdi->driver->dev_acquisition_stop(sdi); return TRUE; } if (devc->limit_msec) { t = (g_get_monotonic_time() - devc->starttime) / 1000; if (t > (int64_t)devc->limit_msec) { sr_info("Requested time limit reached."); sdi->driver->dev_acquisition_stop(sdi); return TRUE; } } return TRUE; }
SR_PRIV int brymen_dmm_receive_data(int fd, int revents, void *cb_data) { struct sr_dev_inst *sdi; struct dev_context *devc; int ret; int64_t time; (void)fd; if (!(sdi = cb_data)) return TRUE; if (!(devc = sdi->priv)) return TRUE; if (revents == G_IO_IN) { /* Serial data arrived. */ handle_new_data(sdi); } else { /* Timeout, send another packet request. */ if ((ret = brymen_packet_request(devc->serial)) < 0) { sr_err("Failed to request packet: %d.", ret); return FALSE; } } if (devc->limit_samples && devc->num_samples >= devc->limit_samples) { sr_info("Requested number of samples reached, stopping."); sdi->driver->dev_acquisition_stop(sdi, cb_data); return TRUE; } if (devc->limit_msec) { time = (g_get_monotonic_time() - devc->starttime) / 1000; if (time > (int64_t)devc->limit_msec) { sr_info("Requested time limit reached, stopping."); sdi->driver->dev_acquisition_stop(sdi, cb_data); return TRUE; } } return TRUE; }
SR_PRIV int kern_scale_receive_data(int fd, int revents, void *cb_data) { struct sr_dev_inst *sdi; struct dev_context *devc; struct scale_info *scale; int64_t time; void *info; (void)fd; if (!(sdi = cb_data)) return TRUE; if (!(devc = sdi->priv)) return TRUE; scale = (struct scale_info *)sdi->driver; if (revents == G_IO_IN) { /* Serial data arrived. */ info = g_malloc(scale->info_size); handle_new_data(sdi, info); g_free(info); } if (devc->limit_samples && devc->num_samples >= devc->limit_samples) { sr_info("Requested number of samples reached."); sdi->driver->dev_acquisition_stop(sdi, cb_data); return TRUE; } if (devc->limit_msec) { time = (g_get_monotonic_time() - devc->starttime) / 1000; if (time > (int64_t)devc->limit_msec) { sr_info("Requested time limit reached."); sdi->driver->dev_acquisition_stop(sdi, cb_data); return TRUE; } } return TRUE; }
int main(int argc, const char* argv[]) { int myport = parse_options(argc, argv); std::cout << "Reading genomes...\n"; std::cout.flush(); initializeGenomeSystem(); std::cout << "Reading solution...\n"; initializeSolutionSystem(); std::cout << "Got solutions\n"; try { int listen_socket = start_listening(myport); fd_set mask, dummy_mask, temp_mask; FD_ZERO(&mask); FD_ZERO(&dummy_mask); FD_SET(listen_socket, &mask); std::set<int> sockets; for(;;) { temp_mask = mask; int num = select(FD_SETSIZE, &temp_mask, &dummy_mask, &dummy_mask, NULL); if( num > 0 ) { if( FD_ISSET(listen_socket, &temp_mask) ) { int new_socket = accept(listen_socket, 0, 0); FD_SET(new_socket, &mask); sockets.insert(new_socket); } for( std::set<int>::iterator iter = sockets.begin(); iter != sockets.end(); ++iter ) { int cur_sock = *iter; if( FD_ISSET(cur_sock, &temp_mask) ) { msgpack::unpacker unpack; readBuffer(cur_sock, unpack); message_id_t msg_id; read(unpack, msg_id); switch( msg_id ) { case STORE_NEW_GENOME_ID: handle_new_genome(cur_sock, unpack); break; case STORE_NEW_DATA_ID: handle_new_data(cur_sock, unpack); break; case STORE_NEW_SOLUTION_ID: handle_new_solution(cur_sock, unpack); break; case STORE_QUERY_BY_ID_ID: handle_query_by_id(cur_sock, unpack); break; case STORE_QUERY_BY_COND_ID: handle_query_by_cond(cur_sock, unpack); break; case STORE_GENOME_INFO_QUERY_ID: handle_genome_info_query(cur_sock, unpack); break; case STORE_GENOME_CONTENT_QUERY_ID: handle_genome_content_query(cur_sock, unpack); break; case STORE_MAX_SOL_REQUEST_ID: handle_max_solution(cur_sock, unpack); break; case GENOME_LIST_REQUEST_ID: handle_genome_list(cur_sock, unpack); break; default: std::cerr << "Unknown message type: " << msg_id << " from socket " << cur_sock << "\n"; } } } } } } catch( const std::exception& err ) { std::cerr << err.what() << "\n"; exit(-1); } return 0; }