예제 #1
0
파일: main.c 프로젝트: ArulPrasathK/libemb
interrupt(PORT1_VECTOR) PORT1_ISR(void)
{
    P1IFG &= ~BIT0;                 // Clear interrupt flag
#else
void exti2_isr(void)
{
    exti_reset_request(EXTI2);		// Clear interrupt flag
#endif
	int s;

	// set ACK payload to next squence number
	ptx.data[0]++;
	s = nrf_write_ack_pl(&ptx, 0);

	if(s == NRF_ERR_TX_FULL) {
		cio_printf("Unable to send back ACK payload (TX_FULL)\n\r");
	}

	// receive non-blocking since IRQ already indicates that payload arived
	s = nrf_receive(&prx);

	if(s == NRF_ERR_RX_FULL) {
		cio_printf("Unable to receive any more (RX_FULL)\n\r");
	}
	else {
		cio_printf("Received payload: %c; sending back %u\n\r", prx.data[0], ptx.data[0]);
	}
}
예제 #2
0
void receiverMain() {
    int i;
    char offset;
    char status;

    //doCycle();
    //doOscillate();

    nrf_init();
    delay();

    nrf_rxmode();
    delay();

    Delay10KTCYx(100);

    offset = 0;
    STATUS_LED = 0;
    while(1) {
        //STATUS_LED =
        nrf_receive(&rx_buf);

        updateBuffer();
        updateLEDs();
    }
}
예제 #3
0
파일: main.c 프로젝트: ArulPrasathK/libemb
int main(void)
{
	int i;

	clock_init();
	gpio_init();
	serial_init(9600);
	serirq_init();
	nrf_init();
	nrf_configure_sb();

	prx.size 	= PL_SIZE;
	ptx.size 	= PL_SIZE;

	while (1) {
        ptx.data[0] = 0;

        while(!serial_rb_empty(&srx) && ptx.data[0] < (PL_SIZE - 1)) {
			ptx.data[ptx.data[0] + 1] = serial_rb_read(&srx);
			ptx.data[0]++;
        }

        if(ptx.data[0] > 0) {
#ifdef MSP430
			P1OUT |= RXTX_LED;
#else
            gpio_set(GPIOC, TX_LED);
#endif
            // switch to PTX for sending out data ...
            nrf_set_mode_ptx();

            nrf_send_blocking(&ptx);

            nrf_set_mode_prx();
        }

        if(nrf_receive(&prx) != 0 && prx.data[0] > 0) {
            if(!serial_rb_full(&stx)) {
                for(i = 0; i < prx.data[0]; i++) serial_rb_write(&stx, prx.data[i + 1]);
#ifdef MSP430
				P1OUT |= RXTX_LED;
				IE2 |= UCA0TXIE;
#else
             	gpio_set(GPIOC, RX_LED);
               	USART_CR1(USART1) |= USART_CR1_TXEIE;
#endif
            }
    	}
	}

	return 0;
}
예제 #4
0
파일: firmware.c 프로젝트: xtompok/stm8iot
//
//  Main program loop.
//
int main(void)
{
	unsigned char memflags;
	unsigned char action;
	unsigned char stage;
	unsigned char timeidx;
	unsigned char i;

	time = 0;
	
	__disable_interrupt();
	InitialiseSystemClock();
	InitialiseUSART();
	InitialiseTIM2();
	spi_init();
	nrf_init();
	network_init(RF_ROLE_TX);
	__enable_interrupt();

	delay_ms(1000);
	
#ifdef DUMP
	nrf_setrx();
#endif
#ifdef CITY
	cities_init();
	timeidx = 0;
	memflags = 0;
	my_info.type = TYPE_CITY;
	my_info.team = NO_TEAM;
	my_info.id = MY_ID;
	my_info.units = CITY_UNITS;
	my_info.mode = MODE_DEFENSE;
	my_info.level = 0;

	pk_out.node_from = my_info.id;
	pk_out.type = my_info.type;
	for (i = 0;i<10;i++){
		pk_out.teams[i] = 0xFF;
		pk_out.times[i] = 0xFF;	
	}
#endif

#ifdef SOURCE
	my_info.type = TYPE_SOURCE;
	my_info.team = NO_TEAM;
	my_info.id = MY_ID;	

	pk_out.node_from = my_info.id;
	pk_out.type = my_info.type;
#endif

	// Configure pins
	PB_DDR = (1<<5);
	PB_CR1 = (1<<5);
//	PB_ODR ^= (1<<5);
	// Loop
	do {
	//	PB_ODR ^= (1<<5);

#ifdef DUMP
		nrf_listen();
		delay_ms(10);
		nrf_nolisten();
		if (nrf_receive(data,32)){
			nrf_listen();
			puts("Data:");	
			for (i=0;i<32;i++){
				putchex(data[i]);	
				putc(' ');
			}
			puts("\n");	
		}
#endif
#ifdef SOURCE
		pk_out.team = my_info.team;
		pk_out.units = SOURCE_UNITS;
		pk_out.action = ACTION_SOURCE;
		pk_out.node_to = 0;
		if (memflags & FL_SEC){
			PB_ODR ^= (1<<5);
			network_send(&pk_out,0);
		}
		delay_ms(100);
	
#endif
#ifdef CITY
		pk_out.team = my_info.team;
		if (memflags & FL_SEC){
			puts("Team: ");
			putchex(my_info.team);
			puts(" level: ");
			putchex(my_info.level);
			puts(" units: ");
			putchex(my_info.units);
			puts(" uplevel: ");
			putchex(my_info.uplevel);
			putchex(timeidx);
			putc('\n');
			cities_broadcast();		
			if (time%(10-CITY_MAXLEVEL) == 0){
				if (my_info.units < CITY_MAXUNITS){ 
					my_info.units++;
				} else if (my_info.uplevel < CITY_LEVEL_UP){
					my_info.uplevel++;
				} else {
					my_info.uplevel = 0;
					if (my_info.level < CITY_MAXLEVEL){
						my_info.level++;	
					}	
				}
			}
			if (time%60 == 0){
				pk_out.teams[timeidx]=my_info.team;
				pk_out.times[timeidx]=time/60;	
				timeidx++;
				timeidx %= 10;
			}
		} 
		network_arcv_stop();
		delay_us(100);
                while (network_arcv(&pk_in)){
			if (my_info.units==0){
				break;	
			}
			PB_ODR ^= (1<<5);
                        if (pk_in.action == ACTION_BROADCAST){
				if ((pk_in.team == my_info.team)&&(my_info.units >=1)){
					transfer_start(pk_in.node_from);	
				}
                        } else {
                                if (pk_in.node_to == my_info.id){
					cities_city_process_action();
					puts("Processing\n");
                                }
                        }
                }
 

		delay_us(100);
		network_arcv_start();	
		delay_ms(100);


#endif


			

	memflags = flags;
	flags = 0;		
	} while(1);
}