コード例 #1
0
ファイル: excrate.c プロジェクト: igordertigor/xwax
static int excrate_init(struct excrate *e, const char *script,
                        const char *search, struct listing *storage)
{
    pid_t pid;

    fprintf(stderr, "External scan '%s'...\n", search);

    pid = fork_pipe_nb(&e->fd, script, "scan", search, NULL);
    if (pid == -1)
        return -1;

    e->pid = pid;
    e->pe = NULL;
    e->terminated = false;
    e->refcount = 0;
    rb_reset(&e->rb);
    listing_init(&e->listing);
    e->storage = storage;
    event_init(&e->completion);
    e->search = search;

    list_add(&e->excrates, &excrates);
    rig_post_excrate(e);

    return 0;
}
コード例 #2
0
ファイル: ringbuffer.c プロジェクト: mnhauke/sdr-power
ring_buffer* rb_create(size_t size, size_t elem_size)
{
    ring_buffer* rb = malloc(sizeof(ring_buffer));
    rb->buffer = malloc(size * elem_size);
    rb->size = size;
    rb_reset(rb);
    return rb;
}
コード例 #3
0
ファイル: ringbuffer.c プロジェクト: Talustus/culfw
int
main(int ac, char **av)
{
  rb_t buffer;
  rb_reset(&buffer);
  //d_s(&buffer, "T40484269E72E;T40484369001F;");
  d_s(&buffer, "T40484269E743001F;T404847690118;");
  FHT_compress(&buffer);
  p(&buffer);
}
コード例 #4
0
ファイル: rf_router.c プロジェクト: MariusRumpf/a-culfw
static void
rf_router_send(uint8_t addAddr)
{
#ifdef RFR_DEBUG
       if(RFR_Buffer.buf[5] == 'T') nr_t++;
  else if(RFR_Buffer.buf[5] == 'F') nr_f++;
  else if(RFR_Buffer.buf[5] == 'E') nr_e++;
  else if(RFR_Buffer.buf[5] == 'K') nr_k++;
  else if(RFR_Buffer.buf[5] == 'H') nr_h++;
  else                              nr_r++;
#endif

  uint8_t buf[7], l = 1;
  buf[0] = RF_ROUTER_PROTO_ID;
  if(addAddr) {
    tohex(rf_router_target, buf+1);
    tohex(rf_router_myid,   buf+3),
    buf[5] = 'U';
    l = 6;
  }
  rf_router_ping();           // 15ms
  ccInitChip(EE_FASTRF_CFG);  // 1.6ms
  my_delay_ms(3);             // 3ms: Found by trial and error

  CC1100_ASSERT;
  cc1100_sendbyte(CC1100_WRITE_BURST | CC1100_TXFIFO);
#ifdef RFR_USBECHO
  uint8_t nbuf = RFR_Buffer.nbytes;
#endif
  cc1100_sendbyte(RFR_Buffer.nbytes+l);
  for(uint8_t i = 0; i < l; i++)
    cc1100_sendbyte(buf[i]);
  while(RFR_Buffer.nbytes)
    cc1100_sendbyte(rb_get(&RFR_Buffer));
  CC1100_DEASSERT;
  ccTX();
  rb_reset(&RFR_Buffer); // needed by FHT_compress

  // Wait for the data to be sent
  uint8_t maxwait = 20;        // max 20ms
  while((cc1100_readReg(CC1100_TXBYTES) & 0x7f) && maxwait--)
    my_delay_ms(1);
  set_txrestore();
#ifdef RFR_USBECHO
#warning RFR USB DEBUGGING IS ACTIVE
  uint8_t odc = display_channel;
  display_channel = DISPLAY_USB;
  DC('.'); DU(nbuf, 2); DNL();
  display_channel = odc;
#endif
}
コード例 #5
0
void test_rb_insertion_function(int num_bytes_to_insert,
                                int (*insertion_fn)(ring_buffer *, uint8),
                                const char insertion_fn_name[]) {
    SerialUSB.println("resetting ring buffer.");
    rb_reset(rb);
    print_rb_contents();

    SerialUSB.print(insertion_fn_name);
    SerialUSB.print("-ing ");
    SerialUSB.print(num_bytes_to_insert);
    SerialUSB.println(" bytes.");
    for (uint8 i = 1; i <= num_bytes_to_insert; i++)
        insertion_fn(rb, i);

    uint16 count = rb_full_count(rb);
    SerialUSB.print("rb_full_count(rb) = ");
    SerialUSB.println(count);

    print_rb_contents();
}
コード例 #6
0
ファイル: rf_router.c プロジェクト: MariusRumpf/a-culfw
void
rf_router_func(char *in)
{
  if(in[1] == 0) {               // u: display id and router
    DH2(rf_router_myid);
    DH2(rf_router_target);
    DNL();
#ifdef RFR_DEBUG 
  } else if(in[1] == 'd') {     // ud: Debug
    DH((uint16_t)ticks, 4); DC('.');
    DH2(rf_router_sendtime);
    DNL();
  } else if(in[1] == 's') {     // us: Statistics
    DH(nr_t,1); DC('.');
    DH(nr_f,1); DC('.');
    DH(nr_e,1); DC('.');
    DH(nr_k,1); DC('.');
    DH(nr_h,1); DC('.');
    DH(nr_r,1); DC('.');
    DH(nr_plus,1);
    DNL();
#endif

  } else if(in[1] == 'i') {      // uiXXYY: set own id to XX and router id to YY
    fromhex(in+2, &rf_router_myid, 1);
    ewb(EE_RF_ROUTER_ID, rf_router_myid);
    fromhex(in+4, &rf_router_target, 1);
    ewb(EE_RF_ROUTER_ROUTER, rf_router_target);

  } else {                      // uYYDATA: send data to node with id YY
    rb_reset(&RFR_Buffer);
    while(*++in)
      rb_put(&RFR_Buffer, *in);
    rf_router_send(0);

  }
}
コード例 #7
0
int usb_ioctl(int request, void *ctl)
{
	switch(request)
	{
		case I_USB_CLEAR:
			if (!rxfifo)
			{
				return 0;
			}
			rb_reset(rxfifo);
			return 1;
		case I_USB_CONNECTED:
			*((U8 *)ctl) = is_usb_connected(usb_attr);
			break;
		case I_USB_GETATTR:
			if (usb_attr)
			{
				*((usb_attr_t **)ctl) = usb_attr;
			}
			else
			{
				return 0;
			}
			break;
		case I_USB_SETATTR:
			if (ctl == NULL)
			{
				return 0;
			}
			usb_attr = (usb_attr_t *)ctl;
			return usb_configure(usb_attr);
		default:
			return 0;
	}
	return 1;
}
コード例 #8
0
ファイル: main.c プロジェクト: kaiman1234/a-culfw
//------------------------------------------------------------------------------
/// Application entry point. Configures the DBGU, PIT, TC0, LEDs and buttons
/// and makes LED\#1 blink in its infinite loop, using the Wait function.
/// \return Unused (ANSI-C compatibility).
//------------------------------------------------------------------------------
int main(void)
{


  // DBGU configuration
  TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
  TRACE_INFO_WP("\n\r");
  TRACE_INFO("Getting new Started Project --\n\r");
  TRACE_INFO("%s\n\r", BOARD_NAME);
  TRACE_INFO("Compiled: %s %s --\n\r", __DATE__, __TIME__);

  //Configure Reset Controller
  AT91C_BASE_RSTC->RSTC_RMR= 0xa5<<24;

  // Configure EMAC PINS
  PIO_Configure(emacRstPins, PIO_LISTSIZE(emacRstPins));

  // Execute reset
  RSTC_SetExtResetLength(0xd);
  RSTC_ExtReset();

  // Wait for end hardware reset
  while (!RSTC_GetNrstLevel());

  TRACE_INFO("init Flash\n\r");
  flash_init();

  TRACE_INFO("init Timer\n\r");
  // Configure timer 0
  ticks=0;
  extern void ISR_Timer0();
  AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_TC0);
  AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS;
  AT91C_BASE_TC0->TC_IDR = 0xFFFFFFFF;
  AT91C_BASE_TC0->TC_SR;
  AT91C_BASE_TC0->TC_CMR = AT91C_TC_CLKS_TIMER_DIV5_CLOCK | AT91C_TC_CPCTRG;
  AT91C_BASE_TC0->TC_RC = 375;
  AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS;
  AIC_ConfigureIT(AT91C_ID_TC0, AT91C_AIC_PRIOR_LOWEST, ISR_Timer0);
  AIC_EnableIT(AT91C_ID_TC0);
  AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG;

  // Configure timer 1
  extern void ISR_Timer1();
  AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_TC1);
  AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKDIS;	//Stop clock
  AT91C_BASE_TC1->TC_IDR = 0xFFFFFFFF;		//Disable Interrupts
  AT91C_BASE_TC1->TC_SR;						//Read Status register
  AT91C_BASE_TC1->TC_CMR = AT91C_TC_CLKS_TIMER_DIV4_CLOCK | AT91C_TC_CPCTRG;  // Timer1: 2,666us = 48MHz/128
  AT91C_BASE_TC1->TC_RC = 0xffff;
  AT91C_BASE_TC1->TC_IER = AT91C_TC_CPCS;
  AIC_ConfigureIT(AT91C_ID_TC1, 1, ISR_Timer1);
  AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG;

  led_init();

  TRACE_INFO("init EEprom\n\r");
  eeprom_init();

  rb_reset(&TTY_Rx_Buffer);
  rb_reset(&TTY_Tx_Buffer);

  input_handle_func = analyze_ttydata;

  LED_OFF();
  LED2_OFF();
  LED3_OFF();

  spi_init();
  fht_init();
  tx_init();

  #ifdef HAS_ETHERNET

  ethernet_init();

  #endif

  TRACE_INFO("init USB\n\r");
  CDCDSerialDriver_Initialize();
  USBD_Connect();

  wdt_enable(WDTO_2S);

  fastrf_on=0;

  display_channel = DISPLAY_USB;

  TRACE_INFO("init Complete\n\r");

  checkFrequency();

  // Main loop
  while (1) {

    CDC_Task();
    Minute_Task();
    RfAnalyze_Task();

    #ifdef HAS_FASTRF
      FastRF_Task();
    #endif
    #ifdef HAS_RF_ROUTER
      rf_router_task();
    #endif
    #ifdef HAS_ASKSIN
      rf_asksin_task();
    #endif
    #ifdef HAS_MORITZ
      rf_moritz_task();
    #endif
    #ifdef HAS_RWE
      rf_rwe_task();
    #endif
    #ifdef HAS_MBUS
      rf_mbus_task();
    #endif
    #ifdef HAS_MAICO
      rf_maico_task();
    #endif

    #ifdef HAS_ETHERNET
      Ethernet_Task();
    #endif

#ifdef DBGU_UNIT_IN
    if(DBGU_IsRxReady()){
      unsigned char volatile * const ram = (unsigned char *) AT91C_ISRAM;
      unsigned char x;

      x=DBGU_GetChar();
      switch(x) {

      case 'd':
        puts("USB disconnect\n\r");
        USBD_Disconnect();
        break;
      case 'c':
        USBD_Connect();
        puts("USB Connect\n\r");
        break;
      case 'r':
        //Configure Reset Controller
        AT91C_BASE_RSTC->RSTC_RMR=AT91C_RSTC_URSTEN | 0xa5<<24;
        break;
      case 'S':
        USBD_Disconnect();

        my_delay_ms(250);
        my_delay_ms(250);

        //Reset
        *ram = 0xaa;
        AT91C_BASE_RSTC->RSTC_RCR = AT91C_RSTC_PROCRST | AT91C_RSTC_PERRST | AT91C_RSTC_EXTRST   | 0xA5<<24;
        while (1);
        break;
      default:
        rb_put(&TTY_Tx_Buffer, x);
      }
    }
#endif

    if (USBD_GetState() == USBD_STATE_CONFIGURED) {
      if( USBState == STATE_IDLE ) {
        CDCDSerialDriver_Read(usbBuffer,
                              DATABUFFERSIZE,
                              (TransferCallback) UsbDataReceived,
                              0);
        LED3_ON();
        USBState=STATE_RX;
      }
    }
    if( USBState == STATE_SUSPEND ) {
      TRACE_INFO("suspend  !\n\r");
      USBState = STATE_IDLE;
    }
    if( USBState == STATE_RESUME ) {
      TRACE_INFO("resume !\n\r");
      USBState = STATE_IDLE;
    }

  }
}
コード例 #9
0
void usb_reset_tx()
{
	APP_Rx_ptr_in = 0;
	rb_reset(txfifo);
}
コード例 #10
0
void usb_reset_rx()
{
	rb_reset(rxfifo);
}
コード例 #11
0
ファイル: rb_test1.c プロジェクト: 7890/csnip
//=============================================================================
int main(int argc, char *argv[])
{
	if(argc<2)
	{
		fprintf(stderr,"need number\n");
		exit(1);
	}

	int rb_size_request=atoi(argv[1]);

	fprintf(stderr,"\n==creating new ringbuffer of size %d\n",rb_size_request);
	
	rb_t *rb=rb_new(rb_size_request);
	if(rb==NULL)
	{
		fprintf(stderr,"ringbuffer with size 0?\n");
		exit(1);
	}
	rb_debug(rb);

	fprintf(stderr,"\n==write full + 1\n");
	int i;
	for(i=0;i<rb_size_request+1;i++)
	{
		char put[1]={i};
		int wrote=rb_write(rb,put,1);
		rb_debug(rb);
	}

	fprintf(stderr,"\n==peek full + 1\n");
	char pull[rb_size_request];
	int peeked=rb_peek(rb,pull,rb_size_request+1);
	rb_debug(rb);

	fprintf(stderr,"\n==read full + 1\n");
	for(i=0;i<rb_size_request+1;i++)
	{
		char pull[1];
		int read=rb_read(rb,pull,1);
		rb_debug(rb);
	}

	fprintf(stderr,"\n==write full\n");
	for(i=0;i<rb_size_request;i++)
	{
		char put[1]={i};
		int wrote=rb_write(rb,put,1);
		rb_debug(rb);
	}

	rb_print_regions(rb);

	fprintf(stderr,"\n==advance read pointer 1\n");
	rb_advance_read_index(rb,1);
	rb_debug(rb);

	fprintf(stderr,"\n==drop\n");
	rb_drop(rb);
	rb_debug(rb);
	rb_print_regions(rb);

	fprintf(stderr,"\n==write 1\n");
	char put[1]={'a'};
	int wrote=rb_write(rb,put,1);
	rb_debug(rb);
	rb_print_regions(rb);

	fprintf(stderr,"\n==read 1\n");
	char put2[1];
	int read=rb_read(rb,put2,1);
	rb_debug(rb);
	rb_print_regions(rb);

	fprintf(stderr,"\n==write 4\n");
	char put3[4]={'a','b','c','d'};
	wrote=rb_write(rb,put3,4);
	rb_debug(rb);

	rb_print_regions(rb);

	int advanced;
	int k;
	for(k=0;k<20;k++)
	{
		fprintf(stderr,"\n==advance write 3\n");
		advanced=rb_advance_write_index(rb,3);
		rb_debug(rb);
		rb_print_regions(rb);

		fprintf(stderr,"\n==advance read 2\n");
		advanced=rb_advance_read_index(rb,2);
		rb_debug(rb);
		rb_print_regions(rb);
	}
	for(k=0;k<20;k++)
	{
		fprintf(stderr,"\n==advance read 3\n");
		advanced=rb_advance_read_index(rb,2);
		rb_debug(rb);
		rb_print_regions(rb);

		fprintf(stderr,"\n==advance write 2\n");
		advanced=rb_advance_write_index(rb,3);
		rb_debug(rb);
		rb_print_regions(rb);
	}

	rb_region_t d;
	rb_get_next_write_region(rb,&d);

	fprintf(stderr,"\n==got next write buffer, can write %" PRId64 "\n",d.size);

	fprintf(stderr,"\n==drop\n");
	rb_drop(rb);
	rb_debug(rb);
	rb_print_regions(rb);

	rb_get_next_write_region(rb,&d);

	fprintf(stderr,"\n==got next write buffer, can write %" PRId64 "\n",d.size);
	d.buffer[0]='x';

	fprintf(stderr,"\n==advance write 4\n");
	advanced=rb_advance_write_index(rb,4);
	rb_debug(rb);
	rb_print_regions(rb);

	rb_get_next_read_region(rb,&d);

	fprintf(stderr,"\n==got next read buffer, can read %" PRId64 "\n",d.size);

	fprintf(stderr,"\n==advance read 4\n");
	rb_advance_read_index(rb,4);
	rb_debug(rb);
	rb_print_regions(rb);

	rb_get_next_read_region(rb,&d);

	fprintf(stderr,"\n==got next read buffer, can read %" PRId64 "\n",d.size);
	d.buffer[0]='x';

	fprintf(stderr,"\n==advance read 1\n");
	advanced=rb_advance_read_index(rb,1);
	rb_debug(rb);
	rb_print_regions(rb);
	
	fprintf(stderr,"\n==reset\n");
	rb_reset(rb);
	rb_debug(rb);
	fprintf(stderr,"\n==free\n");
	rb_free(rb);
	rb_debug(rb);

	return 0;
}//end main
コード例 #12
0
ファイル: rf_router.c プロジェクト: MariusRumpf/a-culfw
void
rf_router_task(void)
{
  if(rf_router_status == RF_ROUTER_INACTIVE)
    return;

  uint8_t hsec = (uint8_t)ticks;

  if(rf_router_status == RF_ROUTER_GOT_DATA) {

    uint8_t len = cc1100_readReg(CC1100_RXFIFO);
    uint8_t proto = 0;

    if(len > 5) {
      rb_reset(&TTY_Rx_Buffer);
      CC1100_ASSERT;
      cc1100_sendbyte( CC1100_READ_BURST | CC1100_RXFIFO );
      proto = cc1100_sendbyte(0);
      while(--len)
        rb_put(&TTY_Rx_Buffer, cc1100_sendbyte(0));
      CC1100_DEASSERT;
    }
    set_txrestore();
    rf_router_status = RF_ROUTER_INACTIVE;

    if(proto == RF_ROUTER_PROTO_ID) {
      uint8_t id;
      if(fromhex(TTY_Rx_Buffer.buf, &id, 1) == 1 &&     // it is for us
         id == rf_router_myid) {

        if(TTY_Rx_Buffer.buf[4] == 'U') {               // "Display" the data
          while(TTY_Rx_Buffer.nbytes)                   // downlink: RFR->CUL
            DC(rb_get(&TTY_Rx_Buffer));
          DNL();

        } else {                                        // uplink: CUL->RFR
          TTY_Rx_Buffer.nbytes -= 4;                    // Skip dest/src bytes
          TTY_Rx_Buffer.getoff = 4;
          rb_put(&TTY_Rx_Buffer, '\n');
          input_handle_func(DISPLAY_RFROUTER);          // execute the command
        }

      } else {
        rb_reset(&TTY_Rx_Buffer);
      }
    }

  } else if(rf_router_status == RF_ROUTER_DATA_WAIT) {
    uint8_t diff = hsec - rf_router_hsec;
    if(diff > 7) {              // 3 (delay above) + 3 ( ((4+64)*8)/250kBaud )
      set_txrestore();
      rf_router_status = RF_ROUTER_INACTIVE;
    }

  } else if(rf_router_status == RF_ROUTER_SYNC_RCVD) {
    ccInitChip(EE_FASTRF_CFG);
    ccRX();
    rf_router_status = RF_ROUTER_DATA_WAIT;
    rf_router_hsec = hsec;

  } 
}