Пример #1
0
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();

}
Пример #2
0
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();

}
Пример #3
0
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;
}