void stats_data_reader::handle_timer_expired(void *ctx) { NOT_IN_USE(ctx); if (!should_write()) { return; } stats_read_map_t::iterator iter; g_lock_skt_stats.lock(); for (iter = m_data_map.begin(); iter != m_data_map.end(); iter++) { memcpy(SHM_DATA_ADDRESS, LOCAL_OBJECT_DATA, COPY_SIZE); } g_lock_skt_stats.unlock(); }
void stats_data_reader::handle_timer_expired(void *ctx) { NOT_IN_USE(ctx); if (!should_write()) { return; } if (g_sh_mem->fd_dump != STATS_FD_STATISTICS_DISABLED) { vma_get_api()->dump_fd_stats(g_sh_mem->fd_dump, g_sh_mem->fd_dump_log_level); g_sh_mem->fd_dump = STATS_FD_STATISTICS_DISABLED; g_sh_mem->fd_dump_log_level = STATS_FD_STATISTICS_LOG_LEVEL_DEFAULT; } stats_read_map_t::iterator iter; m_lock_data_map.lock(); for (iter = m_data_map.begin(); iter != m_data_map.end(); iter++) { memcpy(SHM_DATA_ADDRESS, LOCAL_OBJECT_DATA, COPY_SIZE); } m_lock_data_map.unlock(); }
static int callback_rtl_ws(struct libwebsocket_context *context, struct libwebsocket *wsi, enum libwebsocket_callback_reasons reason, void *user, void *in, size_t len) { int f; int bw; int n, nn = 0; int do_write = 0; struct per_session_data__rtl_ws *pss = (struct per_session_data__rtl_ws *)user; char* buffer = NULL; char tmpbuffer[30]; memset(tmpbuffer, 0, 30); switch (reason) { case LWS_CALLBACK_ESTABLISHED: lwsl_info("protocol starting\n"); pss->id = latest_user_id++; pss->block_id = 0; printf("id: %d\n", pss->id); if (current_user_id == 0) current_user_id = pss->id; printf("cid: %d\n", current_user_id); if (current_user_id != pss->id) { return -1; } break; case LWS_CALLBACK_PROTOCOL_DESTROY: lwsl_notice("protocol cleaning up\n"); send_data = 0; if (current_user_id == pss->id) current_user_id = 0; break; case LWS_CALLBACK_SERVER_WRITEABLE: pthread_mutex_lock(&data_mutex); do_write = transfer.block_id > pss->block_id && should_write(); pss->block_id = transfer.block_id; pthread_mutex_unlock(&data_mutex); if (do_write) { memset(send_buffer, 0, LWS_SEND_BUFFER_PRE_PADDING + SEND_BUFFER_SIZE + LWS_SEND_BUFFER_POST_PADDING); n = sprintf(tmpbuffer, "f %u;b %u;", rtl_freq(), rtl_sample_rate()); memcpy(&send_buffer[LWS_SEND_BUFFER_PRE_PADDING], tmpbuffer, n); nn = write_spectrum_message(&send_buffer[LWS_SEND_BUFFER_PRE_PADDING+n], SEND_BUFFER_SIZE/2); // TODO: LWS_WRITE_BINARY n = libwebsocket_write(wsi, (unsigned char *) &send_buffer[LWS_SEND_BUFFER_PRE_PADDING], n+nn, LWS_WRITE_TEXT); } usleep(1); if (send_data) libwebsocket_callback_on_writable(context, wsi); break; case LWS_CALLBACK_RECEIVE: buffer = malloc(len+1); memset(buffer, 0, len+1); memcpy(buffer, in, len); printf("%s\n", buffer); if ((len >= strlen(FREQ_CMD)) && strncmp(FREQ_CMD, buffer, strlen(FREQ_CMD)) == 0) { f = atoi(&buffer[strlen(FREQ_CMD)])*1000; printf("Trying to tune to %d Hz...\n", f); rtl_tune(f); } else if ((len >= strlen(SAMPLE_RATE_CMD)) && strncmp(SAMPLE_RATE_CMD, buffer, strlen(SAMPLE_RATE_CMD)) == 0) { bw = atoi(&buffer[strlen(SAMPLE_RATE_CMD)])*1000; printf("Trying to set sample rate to %d Hz...\n", bw); rtl_set_sample_rate(bw); } else if ((len >= strlen(START_CMD)) && strncmp(START_CMD, buffer, strlen(START_CMD)) == 0) { send_data = 1; libwebsocket_callback_on_writable_all_protocol( libwebsockets_get_protocol(wsi)); } else if ((len >= strlen(STOP_CMD)) && strncmp(STOP_CMD, buffer, strlen(STOP_CMD)) == 0) { send_data = 0; } free(buffer); break; default: break; } return 0; }