Ejemplo n.º 1
0
static int read_headers(demuxer_priv_tt * ogg, stream_tt ** streams) {
    int i;
    int err;

    if ((err = read_page(ogg, &i))) return err;
    do {
        if ((err = read_page(ogg, &i))) return err;
    }
    while (i != 0);
    ogg->stream_count = ogg->nstreams;

    for (i = 0; i < ogg->stream_count; i++) {
        int j;
        for (j = 0; codecs[j].magic; j++) {
            if (codecs[j].magic_len > ogg->s[i].packets[0].p.len) continue;
            if (!memcmp(codecs[j].magic, ogg->s[i].packets[0].buf, codecs[j].magic_len)) break;
        }
        if (!codecs[j].magic) return err_ogg_no_codec;
        ogg->s[i].codec_id = codecs[j].id;
    }

    *streams = ogg->s;

    return 0;
}
Ejemplo n.º 2
0
/*
   General reader. Read a page and hand it over for processing.
*/
file_status_e
ogm_reader_c::read(generic_packetizer_c *,
                   bool) {
  // Some tracks may contain huge gaps. We don't want to suck in the complete
  // file.
  if (get_queued_bytes() > 20 * 1024 * 1024)
    return FILE_STATUS_HOLDING;

  ogg_page og;

  do {
    // Make sure we have a page that we can work with.
    if (read_page(&og) == FILE_STATUS_DONE)
      return flush_packetizers();

    // Is this the first page of a new stream? No, so process it normally.
    if (!ogg_page_bos(&og))
      process_page(&og);
  } while (ogg_page_bos(&og));

  size_t i;
  // Are there streams that have not finished yet?
  for (i = 0; i < sdemuxers.size(); i++)
    if (!sdemuxers[i]->eos && sdemuxers[i]->in_use)
      return FILE_STATUS_MOREDATA;

  // No, we're done with this file.
  return flush_packetizers();
}
Ejemplo n.º 3
0
static void
send_page(struct deluge_object *obj, unsigned pagenum)
{
  unsigned char buf[S_PAGE];
  struct deluge_msg_packet pkt;
  unsigned char *cp;

  pkt.cmd = DELUGE_CMD_PACKET;
  pkt.pagenum = pagenum;
  pkt.version = obj->pages[pagenum].version;
  pkt.packetnum = 0;
  pkt.object_id = obj->object_id;
  pkt.crc = 0;

  read_page(obj, pagenum, buf);

  /* Divide the page into packets and send them one at a time. */
  for(cp = buf; cp + S_PKT <= (unsigned char *)&buf[S_PAGE]; cp += S_PKT) {
    if(obj->tx_set & (1 << pkt.packetnum)) {
      pkt.crc = crc16_data(cp, S_PKT, 0);
      memcpy(pkt.payload, cp, S_PKT);
      packetbuf_copyfrom(&pkt, sizeof(pkt));
      broadcast_send(&deluge_broadcast);
    }
    pkt.packetnum++;
  }
  obj->tx_set = 0;
}
Ejemplo n.º 4
0
static int
xc_ia64_pv_recv_vcpu_context(int xc_handle, int io_fd, int32_t dom,
                             uint32_t vcpu)
{
    int rc = -1;

    /* A copy of the CPU context of the guest. */
    vcpu_guest_context_any_t ctxt_any;
    vcpu_guest_context_t *ctxt = &ctxt_any.c;

    if (lock_pages(&ctxt_any, sizeof(ctxt_any))) {
        /* needed for build domctl, but might as well do early */
        ERROR("Unable to lock_pages ctxt");
        return -1;
    }

    if (xc_ia64_recv_vcpu_context(xc_handle, io_fd, dom, vcpu, &ctxt_any))
        goto out;

    /* Then get privreg page.  */
    if (read_page(xc_handle, io_fd, dom, ctxt->privregs_pfn) < 0) {
        ERROR("Could not read vcpu privregs");
        goto out;
    }

    rc = 0;

 out:
    unlock_pages(&ctxt, sizeof(ctxt));
    return rc;
}
Ejemplo n.º 5
0
    RideFile * run() {
        errors.clear();
        rideFile = new RideFile;
        rideFile->setDeviceType("Macro Sync");

        if (!file.open(QIODevice::ReadOnly)) {
            delete rideFile;
            return NULL;
        }
        bool stop = false;

        int data_size = file.size();
        int bytes_read = 0;

        while (!stop && (bytes_read < data_size)) {
            bytes_read += read_page(); // read_page(stop, errors);
        }

        if (stop) {
            delete rideFile;
            return NULL;
        }
        else {
            return rideFile;
        }
    }
Ejemplo n.º 6
0
    RideFile * run() {
        errors.clear();
        rideFile = new RideFile;
        rideFile->setDeviceType("o_synce macro/macrox");
        rideFile->setFileFormat("Macro GoldenCheetah Sync File (osyn)");

        if (!file.open(QIODevice::ReadOnly)) {
            delete rideFile;
            return NULL;
        }
        bool stop = false;

        int data_size = file.size();
        int bytes_read = 0;

        while (!stop && (bytes_read < data_size)) {
            bytes_read += read_page(); // read_page(stop, errors);
        }

        if (stop) {
            file.close();
            delete rideFile;
            return NULL;

        } else {
            file.close();
            return rideFile;
        }
    }
Ejemplo n.º 7
0
int
swap_in(struct addrspace* as, vaddr_t va, void* kbuf){
	(void)kbuf;
	int itr =0;
	
	//spinlock_acquire(&cm_lock);
	for(; itr < MAX_VAL; itr++){
                if(sw_space[itr].sw_addrspace == as && sw_space[itr].sw_vaddr == va){
			if(read_page(kbuf, sw_space[itr].sw_offset)){
				//spinlock_release(&cm_lock);
				panic("Error while swapping in\n");
				return 1;
			}
                        break;
                }
        }
	
	if(itr == MAX_VAL){
		panic("Data lost in swapping\n");
		return 1;
	}else{
		sw_space[itr].sw_addrspace = NULL;
		sw_space[itr].sw_vaddr = 0;
		sw_space[itr].sw_offset = 0;

		//spinlock_release(&cm_lock);
		return 0;
	}
}
Ejemplo n.º 8
0
bool i2cdb::getParams( int code, dbrecord &recout )
{
	uint8_t	buffer[ PACKEDDBRECORD_WIDTH ];
	read_page( m_eeoffset + code * PACKEDDBRECORD_WIDTH, buffer, sizeof(buffer) );
	recout.unpack( buffer );
	return true;
}
Ejemplo n.º 9
0
static int __init read_pagedir(void)
{
	unsigned long addr;
	int i, n = pmdisk_info.pagedir_pages;
	int error = 0;

	pagedir_order = get_bitmask_order(n);

	addr =__get_free_pages(GFP_ATOMIC, pagedir_order);
	if (!addr)
		return -ENOMEM;
	pm_pagedir_nosave = (struct pbe *)addr;

	pr_debug("pmdisk: Reading pagedir (%d Pages)\n",n);

	for (i = 0; i < n && !error; i++, addr += PAGE_SIZE) {
		unsigned long offset = swp_offset(pmdisk_info.pagedir[i]);
		if (offset)
			error = read_page(offset, (void *)addr);
		else
			error = -EFAULT;
	}
	if (error)
		free_pages((unsigned long)pm_pagedir_nosave,pagedir_order);
	return error;
}
Ejemplo n.º 10
0
int main(void)
{
	CLKPR = 0x80;
	CLKPR = 0x00;

	MCUCR = (1<<IVCE);
	MCUCR = (1<<IVSEL);

	i2c_slave_transmit = transmit;
	i2c_slave_receive = receive;
	i2c_slave_init(0x10);

	addr = 0x0000;

	read_page(addr);

	sei();

	do
	{
		_delay_ms(1000);
	} while (state != BOOT);

	cli();

	write_page();

	MCUCR = (1<<IVCE);
	MCUCR = (0<<IVSEL);

	app_main = (void *)addr;
	boot_rww_enable_safe();
	app_main();
}
Ejemplo n.º 11
0
int main(int argc, char * argv[])
{
    /*
     * use example :
     * make
     * ./reader https://pilotweb.nas.faa.gov/common/nat.html
     */

    if (argc != 2)
        return EXIT_FAILURE;

    char * page = read_page(argv[1]);

    if (page == NULL)
        return EXIT_FAILURE;

    stack_t * stack = get_tracks(page);
    char * track = (char *)s_pop(&stack);

    while(track != NULL)
    {
        printf("%s\n", track);
        free(track);
        track = (char *)s_pop(&stack);
    }

    free(page);

    return EXIT_SUCCESS;
}
Ejemplo n.º 12
0
void initialize_program_5() {
	t_swap* swap = create_swap("./spec/config_file_test.txt");
	initialize_program(swap, 1, 2, "1234567890");
	char* data = malloc(5);
	data = read_page(swap, 1, 1);
	CU_ASSERT_NSTRING_EQUAL(data, "67890", 5);
}
Ejemplo n.º 13
0
void read_page_2() {
	t_swap* swap = create_swap("./spec/config_file_test.txt");
	initialize_program(swap, 1, 1, "123");
	char* data = malloc(5);
	data = read_page(swap, 1, 0);
	CU_ASSERT_NSTRING_EQUAL(data, "12300", 5);
}
Ejemplo n.º 14
0
static int fill_buffer(demuxer_priv_tt * ogg) {
    int err, dummy;

    if ((err = read_page(ogg, &dummy))) return err;
    if (ogg->stream_count != ogg->nstreams) return err_ogg_non_interleaved;

    return 0;
}
Ejemplo n.º 15
0
    void init_read(FILE* in) {
        next_findex = 1;
        m_in  = in;
        m_out = NULL;

        read_page(1, (UCHAR*)files);
        next_findex = files[0].first;
        files[0].first = 0;
    }
Ejemplo n.º 16
0
int vmem_read(int address) {
	if(vmem == NULL) {							/* Pruefen ob eine Verbindung zum Shared Memory besteht*/
		vm_init();
	}
	int data;
	int page = address/VMEM_PAGESIZE;					/* Ermitlung der Pagenummer */
	int offset = address%VMEM_PAGESIZE;					/* Ermittlung des Offsets */

	vmem->adm.req_pageno = page;						/* Angeforderte Seite */
	
	sem_wait(&vmem->adm.sema);
	if((vmem->pt.entries[page].flags & PTF_PRESENT) == PTF_PRESENT) {	/* Ist die Seite im Speicher? */
		data = read_page(page, offset);					/* Wenn ja, Seite lesen */
	} else {								/* Wenn nein, Seite anfordern */
		kill(vmem->adm.mmanage_pid, SIGUSR1);				/* Sende Signal an mmanage*/
		sem_wait(&vmem->adm.sema);					/* Warte bis mmanage den Semaphor freigibt */
		data = read_page(page, offset);					/* Page lesen*/
	}
	sem_post(&vmem->adm.sema);
	return data;
}
Ejemplo n.º 17
0
unsigned char receive(volatile unsigned char *buffer, unsigned char size)
{
	if (buffer == 0)
	{
		state = START;
		return 3;
	}
	else
	{
		switch (state)
		{
		case START:
			if (size == 3)
			{
				addr = (uint16_t)buffer[1] << 8 | (uint16_t)buffer[2];
				switch (buffer[0])
				{
				case 0x00:
					state = READ;
					break;
				case 0x01:
					state = WRITE;
					return SPM_PAGESIZE - page_offset(addr);
				case 0x02:
					state = BOOT;
					break;
				default:
					break;
				}
				return 0;
			}
			break;
		case WRITE:
			if(page_address != page_start(addr))
			{
				write_page();
				read_page(page_start(addr));
			}
			for (i = 0; i < size; i++)
			{
				page_buffer[page_offset(addr)] = buffer[i];
				addr++;
				page_dirty = 1;
			}
			return SPM_PAGESIZE - page_offset(addr);
		default:
			break;
		}
	}
	return 0;
}
Ejemplo n.º 18
0
bool
flac_header_extractor_c::extract() {
  mxverb(2, "flac_header_extraction: extract\n");
  if (!read_page()) {
    mxverb(2, "flac_header_extraction: read_page() failed.\n");
    return false;
  }

  int result = (int)FLAC__stream_decoder_process_until_end_of_stream(decoder);

  mxverb(2, boost::format("flac_header_extraction: extract, result: %1%, mdp: %2%, num_header_packets: %3%\n") % result % metadata_parsed % num_header_packets);

  return metadata_parsed;
}
Ejemplo n.º 19
0
Archivo: usb.c Proyecto: kaysin/bladeRF
static int usb_get_otp(struct bladerf *dev, char *otp)
{
    int status, restore_status;
    const uint16_t dummy_page = 0;

    status = change_setting(dev, USB_IF_SPI_FLASH);
    if (status) {
        return status;
    }

    status = read_page(dev, BLADE_USB_CMD_READ_OTP, dummy_page, (uint8_t*)otp);
    restore_status = restore_post_flash_setting(dev);
    return status == 0 ? restore_status : status;
}
Ejemplo n.º 20
0
static unsigned take_phys_page(unsigned virt_page)
{
	unsigned            page;	/* Page to be replaced. */
    coremap_entry_t     *coremap_entry;
    page_table_entry_t  *swap_entry;

	page = (*replace)();

    /*printf("\t%x\n", page);*/
    
    // I renamed ram_entry to coremap_entry:
    coremap_entry = &coremap[page]; 	 // "page" is the page in RAM we want to replace, 
										 // and coremap_entry->page is the same page but on swap.
										 
    swap_entry = &page_table[virt_page]; // swap_entry->page is the page we want to get, 
										 // now (probably) on swap. We want to write this page to "page".
    

    if (coremap_entry->owner != NULL) {
        
        if (coremap_entry->owner->modified) {
            if (!coremap_entry->owner->ondisk) {
                coremap_entry->page = new_swap_page();
                coremap_entry->owner->ondisk = 1;
            }

            write_page(page, coremap_entry->page);
            coremap_entry->owner->modified = 0;
        } 

        coremap_entry->owner->inmemory = 0;
        coremap_entry->owner->page = coremap_entry->page;
        coremap_entry->owner->ondisk = 1;
    }
    
    // after this you can write over page, without loosing the old page.
    
    if(swap_entry->ondisk){
		read_page(page, swap_entry->page);
		coremap_entry->page = swap_entry->page;
	}
	
	swap_entry->inmemory = 1;
	swap_entry->page = page;
	coremap_entry->owner = swap_entry;
	
	return page;
}
Ejemplo n.º 21
0
static int __init read_image_data(void)
{
	struct pbe * p;
	int error = 0;
	int i;

	printk( "Reading image data (%d pages): ", pmdisk_pages );
	for(i = 0, p = pm_pagedir_nosave; i < pmdisk_pages && !error; i++, p++) {
		if (!(i%100))
			printk( "." );
		error = read_page(swp_offset(p->swap_address),
				  (void *)p->address);
	}
	printk(" %d done.\n",i);
	return error;
}
Ejemplo n.º 22
0
static int read_page(demuxer_priv_tt * ogg, int * stream) {
    ogg_stream_tt * os;
    int i, serial, segments;
    char tmp_header[27];
    uint8_t sizes[256];
    int len, tot = 0;

    FREAD(ogg->in, 27, tmp_header);
    if (strncmp(tmp_header, "OggS", 5)) return err_bad_oggs_magic; // including version

    serial = (tmp_header[14] << 24) |
             (tmp_header[15] << 16) |
             (tmp_header[16] <<  8) |
             (tmp_header[17]      );
    *stream = find_stream(ogg, serial);
    os = &ogg->os[*stream];

    segments = tmp_header[26];
    FREAD(ogg->in, segments, sizes);

    len = os->leftover;
    for (i = 0; i < segments; i++) {
        len += sizes[i];
        if (sizes[i] != 255) {
            packet_tt p;
            p.buf = malloc(len);
            p.p.len = len;
            p.p.stream = *stream;
            p.p.flags = p.p.pts = p.p.next_pts = 0; // Ogg sucks
            memcpy(p.buf, os->leftover_buf, os->leftover);
            FREAD(ogg->in, len - os->leftover, p.buf + os->leftover);
            push_packet(&ogg->s[*stream], &p);
            tot++;
            len = 0;
            os->leftover = 0;
        }
    }

    if (len) {
        os->leftover_buf = realloc(os->leftover_buf, len);
        FREAD(ogg->in, len - os->leftover, os->leftover_buf + os->leftover);
        os->leftover = len;
    }
    if (!tot) return read_page(ogg, stream); // this page gave nothing, move on to next page

    return 0;
}
Ejemplo n.º 23
0
void
vionet_notify_rx(struct vionet_dev *dev)
{
	uint64_t q_gpa;
	uint32_t vr_sz, i;
	uint16_t idx, pkt_desc_idx;
	char *vr;
	struct vring_desc *desc, *pkt_desc;
	struct vring_avail *avail;
	struct vring_used *used;

	vr_sz = vring_size(VIONET_QUEUE_SIZE);
	q_gpa = dev->vq[dev->cfg.queue_notify].qa;
	q_gpa = q_gpa * VIRTIO_PAGE_SIZE;

	vr = malloc(vr_sz);
	if (vr == NULL) {
		fprintf(stderr, "malloc error getting vionet ring\n\r");
		return;
	}

	bzero(vr, vr_sz);

	for (i = 0; i < vr_sz; i += VIRTIO_PAGE_SIZE) {
		if (read_page((uint32_t)q_gpa + i, vr + i, PAGE_SIZE, 0)) {
			fprintf(stderr, "error reading gpa 0x%x\n\r",
			    (uint32_t)q_gpa + i);
			free(vr);
			return;
		}
	}

	/* Compute offsets in ring of descriptors, avail ring, and used ring */
	desc = (struct vring_desc *)(vr);
	avail = (struct vring_avail *)(vr +
	    dev->vq[dev->cfg.queue_notify].vq_availoffset);
	used = (struct vring_used *)(vr +
	    dev->vq[dev->cfg.queue_notify].vq_usedoffset);

	idx = dev->vq[dev->cfg.queue_notify].last_avail & VIONET_QUEUE_MASK;
	pkt_desc_idx = avail->ring[idx] & VIONET_QUEUE_MASK;
	pkt_desc = &desc[pkt_desc_idx];

	dev->rx_added = 1;

	free(vr);
}
Ejemplo n.º 24
0
Archivo: usb.c Proyecto: kaysin/bladeRF
static int usb_get_cal(struct bladerf *dev, char *cal)
{
    const uint16_t dummy_page = 0;
    int status, restore_status;

    assert(CAL_BUFFER_SIZE == BLADERF_FLASH_PAGE_SIZE);

    status = change_setting(dev, USB_IF_SPI_FLASH);
    if (status) {
        return status;
    }

    status = read_page(dev, BLADE_USB_CMD_READ_CAL_CACHE,
                       dummy_page, (uint8_t*)cal);

    restore_status = restore_post_flash_setting(dev);
    return status == 0 ? restore_status : status;
}
Ejemplo n.º 25
0
static void pagefault(unsigned virt_page)
{
	unsigned		page;

	num_pagefault += 1;

	page = take_phys_page();

	page_table_entry_t* pt = &page_table[virt_page];

	if (pt->ondisk) {
		coremap[page].page = pt->page;
		read_page(page,pt->page);
	}
	pt->inmemory = 1;
	pt->page = page;
	coremap[page].owner = pt;
}
Ejemplo n.º 26
0
static int __init check_header(void)
{
	const char * reason = NULL;
	int error;

	init_header();

	if ((error = read_page(swp_offset(pmdisk_header.pmdisk_info), 
			       &pmdisk_info)))
		return error;

 	/* Is this same machine? */
	if ((reason = sanity_check())) {
		printk(KERN_ERR "pmdisk: Resume mismatch: %s\n",reason);
		return -EPERM;
	}
	pmdisk_pages = pmdisk_info.image_pages;
	return error;
}
Ejemplo n.º 27
0
long eprom24x_io::read(uint32_t addr, void *data, uint16_t len)
{
  try {
    // Lockdown the read operation
    pthread_mutex_lock(&m_rw_mutex);

    // Check that there is enough room for data on chip
    check_valid_access(addr, len);
    
    // All chips support sequential read using pages    
    read_page(addr, (uint8_t *)data, len);

    pthread_mutex_unlock(&m_rw_mutex);
    
    return EPROM24x_SUCCESS;
  }
  catch (...) {
    pthread_mutex_unlock(&m_rw_mutex);
    throw;
  }
}
Ejemplo n.º 28
0
Archivo: usb.c Proyecto: kaysin/bladeRF
static int usb_read_flash_pages(struct bladerf *dev, uint8_t *buf,
                                uint32_t page_u32, uint32_t count_u32)
{
    int status;
    size_t n_read;
    uint16_t i;

    /* 16-bit control transfer fields are used for these.
     * The current bladeRF build only has a 4MiB flash, anyway. */
    const uint16_t page = (uint16_t) page_u32;
    const uint16_t count = (uint16_t) count_u32;

    assert(page == page_u32);
    assert(count == count_u32);

    status = change_setting(dev, USB_IF_SPI_FLASH);
    if (status != 0) {
        return status;
    }

    log_info("Reading %u pages starting at page %u\n", count, page);

    for (n_read = i = 0; i < count; i++) {
        log_info("Reading page %u%c", page + i, (i+1) == count ? '\n':'\r' );

        status = read_page(dev, BLADE_USB_CMD_FLASH_READ,
                           page + i, buf + n_read);
        if (status != 0) {
            goto error;
        }

        n_read += BLADERF_FLASH_PAGE_SIZE;
    }

    log_info("Done reading %u pages\n", count);

error:
    status = restore_post_flash_setting(dev);
    return status;
}
Ejemplo n.º 29
0
static int __init check_sig(void)
{
	int error;

	memset(&pmdisk_header,0,sizeof(pmdisk_header));
	if ((error = read_page(0,&pmdisk_header)))
		return error;
	if (!memcmp(PMDISK_SIG,pmdisk_header.sig,10)) {
		memcpy(pmdisk_header.sig,pmdisk_header.orig_sig,10);

		/*
		 * Reset swap signature now.
		 */
		error = write_page(0,&pmdisk_header);
	} else { 
		pr_debug(KERN_ERR "pmdisk: Invalid partition type.\n");
		return -EINVAL;
	}
	if (!error)
		pr_debug("pmdisk: Signature found, resuming\n");
	return error;
}
Ejemplo n.º 30
0
static void
init_page(struct deluge_object *obj, int pagenum, int have)
{
  struct deluge_page *page;
  unsigned char buf[S_PAGE];

  page = &obj->pages[pagenum];

  page->flags = 0;
  page->last_request = 0;
  page->last_data = 0;

  if(have) {
    page->version = obj->version;
    page->packet_set = ALL_PACKETS;
    page->flags |= PAGE_COMPLETE;
    read_page(obj, pagenum, buf);
    page->crc = crc16_data(buf, S_PAGE, 0);
  } else {
    page->version = 0;
    page->packet_set = 0;
  }
}