Example #1
0
int main(void)
{
    gfxInitDefault();

	if(R_FAILED(ndspInit()))
		return 0;

#ifdef DEBUG
    LightLock_Init(&debug_lock);
    consoleInit(GFX_BOTTOM, &bottomScreen);
    consoleDebugInit(debugDevice_CONSOLE);
#endif

    consoleInit(GFX_TOP, &topScreen);
    //aptHook(&hookCookie, AptEventHook, NULL);

    svcCreateEvent(&bufferReadyConsumeRequest, RESET_STICKY);
    svcCreateEvent(&bufferReadyProduceRequest, RESET_STICKY);
    getFiles();

    bool exit = false;
    while (!exit)
    {
        std::string filename = select_file();
        exit = stream_file(filename);
    }

    ndspExit();
    gfxExit();

    return 0;
}
Example #2
0
File: file.c Project: nielssp/ctodo
int save_todolist(TODOLIST *todolist, char *filename) {
  STREAM *file = stream_file(filename, "w");
  if (!file) {
    error("%s", strerror(errno));
    return 0;
  }
  write_todolist(file, todolist);
  stream_close(file);
  return 1;
}
Example #3
0
File: file.c Project: nielssp/ctodo
TODOLIST *load_todolist(char *filename) {
  TODOLIST *list = NULL;
  STREAM *file = stream_file(filename, "r");
  if (!file) {
    if (touch_file(filename)) {
      return load_todolist(filename);
    }
    else {
      error("%s", strerror(errno));
      return NULL;
    }
  }
  list = read_todolist(file);
  stream_close(file);
  return list;
}
Example #4
0
/*
 * Nutella SERVER
 */
int main(int argc, char** argv)
{
	port = PORT;
	request_address = M_REQ_ADDR;
	request_port = M_REQ_PORT;
	response_address = M_RES_ADDR;
	response_port = M_RES_PORT;

	int c;
	while((c = getopt(argc, argv, "d:q:s:p:h")) != EOF){
		switch(c){
			case 'd':
				movie_dir = optarg;
				break;
			case 'q':
				request_address = optarg;
				request_port = get_port(request_address);
				break;
			case 's':
				response_address = optarg;
				response_port = get_port(response_address);
				break;
			case 'p':
				port = atoi(optarg);
				break;
			case 'h':
			default:
				usage(argv);
				break;
		}
	}

	if(!movie_dir){
		usage(argv);
	}

	//get hostname
	char hostname[256];
	if((gethostname(hostname, 256)) < 0){
		fprintf(stderr, "Unable to get hostname\n");
		exit(1);
	}
	sprintf(connectAddr, "%s:%d", hostname, port);
	printf("connectTo: %s\n", connectAddr);

	int mdlen = strlen(movie_dir);
	if(movie_dir[mdlen-1] == '/'){
		movie_dir[mdlen-1] = '\0';
	}

	//create a thread to handle multicast request/response loop
	pthread_t query_thread;
	pthread_create(&query_thread, NULL, monitor_queries, NULL);


	int sock = socket_server(port);

	while(1){
		int client = socket_accept(sock);
		if(client > 0){
			int pid = fork();
			if(pid == 0){
				char* request = socket_read(client);
				printf("Streaming %s...\n", request);
				stream_file(client, request);
				socket_write(client, "end\n"); //end stream with blank frame
				close(client);
				printf("done streaming \"%s\"\n", request);
				exit(0);
			}
		}
	}

	return 0;
}
Example #5
0
static void process_strm(u8_t *pkt, int len) {
	struct strm_packet *strm = (struct strm_packet *)pkt;

	LOG_INFO("strm command %c", strm->command);

	switch(strm->command) {
	case 't':
		sendSTAT("STMt", strm->replay_gain); // STMt replay_gain is no longer used to track latency, but support it
		break;
	case 'q':
		output_flush();
		status.frames_played = 0;
		stream_disconnect();
		sendSTAT("STMf", 0);
		buf_flush(streambuf);
		break;
	case 'f':
		output_flush();
		status.frames_played = 0;
		if (stream_disconnect()) {
			sendSTAT("STMf", 0);
		}
		buf_flush(streambuf);
		break;
	case 'p':
		{
			unsigned interval = unpackN(&strm->replay_gain);
			LOCK_O;
			output.pause_frames = interval * status.current_sample_rate / 1000;
			output.state = interval ? OUTPUT_PAUSE_FRAMES : OUTPUT_STOPPED;				
			UNLOCK_O;
			if (!interval) sendSTAT("STMp", 0);
			LOG_INFO("pause interval: %u", interval);
		}
		break;
	case 'a':
		{
			unsigned interval = unpackN(&strm->replay_gain);
			LOCK_O;
			output.skip_frames = interval * status.current_sample_rate / 1000;
			output.state = OUTPUT_SKIP_FRAMES;				
			UNLOCK_O;
			LOG_INFO("skip ahead interval: %u", interval);
		}
		break;
	case 'u':
		{
			unsigned jiffies = unpackN(&strm->replay_gain);
			LOCK_O;
			output.state = jiffies ? OUTPUT_START_AT : OUTPUT_RUNNING;
			output.start_at = jiffies;
			UNLOCK_O;
			LOCK_D;
			decode.state = DECODE_RUNNING;
			UNLOCK_D;
			LOG_INFO("unpause at: %u now: %u", jiffies, gettime_ms());
			sendSTAT("STMr", 0);
		}
		break;
	case 's':
		{
			unsigned header_len = len - sizeof(struct strm_packet);
			char *header = (char *)(pkt + sizeof(struct strm_packet));
			in_addr_t ip = (in_addr_t)strm->server_ip; // keep in network byte order
			u16_t port = strm->server_port; // keep in network byte order
			if (ip == 0) ip = slimproto_ip; 

			LOG_INFO("strm s autostart: %c transition period: %u transition type: %u", 
					 strm->autostart, strm->transition_period, strm->transition_type - '0');

			autostart = strm->autostart - '0';
			sendSTAT("STMf", 0);
			if (header_len > MAX_HEADER -1) {
				LOG_WARN("header too long: %u", header_len);
				break;
			}
			codec_open(strm->format, strm->pcm_sample_size, strm->pcm_sample_rate, strm->pcm_channels, strm->pcm_endianness);
			if (ip == LOCAL_PLAYER_IP && port == LOCAL_PLAYER_PORT) {
				// extension to slimproto for LocalPlayer - header is filename not http header, don't expect cont
				stream_file(header, header_len, strm->threshold * 1024);
				autostart -= 2;
			} else {
				stream_sock(ip, port, header, header_len, strm->threshold * 1024, autostart >= 2);
			}
			sendSTAT("STMc", 0);
			sentSTMu = sentSTMo = sentSTMl = false;
			LOCK_O;
			output.threshold = strm->output_threshold;
			output.next_replay_gain = unpackN(&strm->replay_gain);
			output.fade_mode = strm->transition_type - '0';
			output.fade_secs = strm->transition_period;
			LOG_INFO("set fade mode: %u", output.fade_mode);
			UNLOCK_O;
		}
		break;
	default:
		LOG_INFO("unhandled strm %c", strm->command);
		break;
	}
}