예제 #1
0
파일: main.c 프로젝트: jwcxz/ACRIS
void recv_payload(void) {
    uint8_t idx = 0;

    // get target address
    tx_addr[0] = uart_rb_rx();
    tx_addr[1] = uart_rb_rx();
    tx_addr[2] = uart_rb_rx();

    printf("%c%c%c", tx_addr[0], tx_addr[1], tx_addr[2]);


    // get a full payload's worth of characters
    idx = 0;
    while (idx < COM_PL_SIZE) {
        txbuf[idx++] = uart_rb_rx();
    }


    // send payload, wait until done
    idx = nrf_transmit_packet(tx_addr, txbuf);

    // print result
    if (idx) {
        uart_rb_tx('.');
    } else {
        uart_rb_tx('X');
    }


    // happy blinky lights
    dbg_set(txbuf[0]);

    return;
}
예제 #2
0
int main(void)
{
	ADCON1 = 0x0F;
	CMCON = 0x07;
	TRISA = 0x00;
	PORTA = 0x00;
	
	interrupt_initialize();
	timer_initialize();

	nrf_initialize(nrf_transmit_mode, nrf_channel_0, CAFE_ADDRESS | NODE_ID);

	nrf_packet_t packet;
	uint8_t differ = 0x00;

	PORTA = 0x00;

	while(1)
	{
#if CONSTANT_TRANSMIT
	#if SEND_TO_APP
		packet.address = CAFE_ADDRESS | HUB_ID;
		packet.payload_length = 18;
		packet.payload[0] = 0x05;	// Branch
		packet.payload[1] = (NODE_ID >> 8);	// Source ID
		packet.payload[2] = (NODE_ID & 0xFF);
		packet.payload[3] = (HUB_ID >> 8);	// Destination ID
		packet.payload[4] = (HUB_ID & 0xFF);
		packet.payload[5] = 0x00;	// Source App
		packet.payload[6] = 0x00;
		packet.payload[7] = 0x80;	// Destination App
		packet.payload[8] = 0x41;
		packet.payload[9] = 0x07;	// Command
		packet.payload[10] = 0x00;	// Sub-Command
		packet.payload[11] = 0x06;	// Payload Length
		packet.payload[12] = 0xba;	// Payload
		packet.payload[13] = 0xba;
		packet.payload[14] = 0xde;
		packet.payload[15] = 0xca;
		packet.payload[16] = 0xfe;
		packet.payload[17] = differ++;
		nrf_set_mode(nrf_transmit_mode, true);
		nrf_flush_fifo(true);
		nrf_transmit_packet(packet, false);
		while(!(nrf_read_register(NRF_REG_FIFO_STATUS) & 0x10));
		PORTA ^= 0x01;
		timer_delay_ms(1000);
	#endif
	#if SEND_TO_HUB_APP
		packet.address = CAFE_ADDRESS | HUB_ID;
		packet.payload_length = 12;
		packet.payload[0] = 0x05;	// Branch
		packet.payload[1] = (NODE_ID >> 8);	// Source ID
		packet.payload[2] = (NODE_ID & 0xFF);
		packet.payload[3] = (HUB_ID >> 8);	// Destination ID
		packet.payload[4] = (HUB_ID & 0xFF);
		packet.payload[5] = 0x00;	// Source App
		packet.payload[6] = 0x00;
		packet.payload[7] = 0x00;	// Destination App
		packet.payload[8] = 0x00;
		packet.payload[9] = 0x04;	// Command
		packet.payload[10] = 0x05;	// Sub-Command
		packet.payload[11] = 0x00;	// Payload Length
		nrf_set_mode(nrf_transmit_mode, true);
		nrf_flush_fifo(true);
		nrf_transmit_packet(packet, false);
		while(!(nrf_read_register(NRF_REG_FIFO_STATUS) & 0x10));
		PORTA ^= 0x02;
		timer_delay_ms(1000);
	#endif
	#if SEND_TO_HUB
		packet.address = CAFE_ADDRESS;
		packet.payload_length = 13;
		packet.payload[0] = 0x05;	// Branch
		packet.payload[1] = (NODE_ID >> 8);	// Source ID
		packet.payload[2] = (NODE_ID & 0xFF);
		packet.payload[3] = 0x00;	// Destination ID
		packet.payload[4] = 0x00;
		packet.payload[5] = 0x00;	// Source App
		packet.payload[6] = 0x00;
		packet.payload[7] = 0x00;	// Destination App
		packet.payload[8] = 0x00;
		packet.payload[9] = 0x05;	// Command
		packet.payload[10] = 0x05;	// Sub-Command
		packet.payload[11] = 0x01;	// Payload Length
		packet.payload[11] = differ;	// Payload
		nrf_set_mode(nrf_transmit_mode, true);
		nrf_flush_fifo(true);
		nrf_transmit_packet(packet, false);
		while(!(nrf_read_register(NRF_REG_FIFO_STATUS) & 0x10));
		PORTA ^= 0x02;
		timer_delay_ms(1000);
	#endif
	#if SEND_HUB_ID_REQUEST
		packet.address = CAFE_ADDRESS | HUB_ID;
		packet.payload_length = 13;
		packet.payload[0] = 0x05;	// Branch
		packet.payload[1] = (NODE_ID >> 8);	// Source ID
		packet.payload[2] = (NODE_ID & 0xFF);
		packet.payload[3] = (HUB_ID >> 8);	// Destination ID
		packet.payload[4] = (HUB_ID & 0xFF);
		packet.payload[5] = 0x00;	// Source App
		packet.payload[6] = 0x00;
		packet.payload[7] = 0x00;	// Destination App
		packet.payload[8] = 0x00;
		packet.payload[9] = 0x06;	// Command
		packet.payload[10] = 0x05;	// Sub-Command
		packet.payload[11] = 0x01;	// Payload Length
		packet.payload[12] = 0x01;	// Payload
		nrf_set_mode(nrf_transmit_mode, true);
		nrf_flush_fifo(true);
		nrf_transmit_packet(packet, false);
		while(!(nrf_read_register(NRF_REG_FIFO_STATUS) & 0x10));
		PORTA ^= 0x02;
		timer_delay_ms(1000);
	#endif
#elif SEND_PACKETS
		packet.address = CAFE_ADDRESS | HUB_ID;
		packet.payload_length = 18;
		packet.payload[0] = 0x05;	// Branch
		packet.payload[1] = (NODE_ID >> 8);	// Source ID
		packet.payload[2] = (NODE_ID & 0xFF);
		packet.payload[3] = (HUB_ID >> 8);	// Destination ID
		packet.payload[4] = (HUB_ID & 0xFF);
		packet.payload[5] = 0x00;	// Source App
		packet.payload[6] = 0x00;
		packet.payload[7] = 0x00;	// Destination App
		packet.payload[8] = 0x02;
		packet.payload[9] = 0x01;	// Command
		packet.payload[10] = 0x00;	// Sub-Command
		packet.payload[11] = 0x00;	// Payload Length
		PORTA ^= 0x01;
		nrf_set_mode(nrf_transmit_mode, true);
		nrf_flush_fifo(true);
		nrf_transmit_packet(packet, false);
		while(!(nrf_read_register(NRF_REG_FIFO_STATUS) & 0x10));
		PORTA ^= 0x01;

		nrf_set_mode(nrf_receive_mode, true);
		nrf_flush_fifo(false);

		uint8_t delay_count = 0;
		PORTA ^= 0x02;
		while((nrf_read_register(NRF_REG_FIFO_STATUS) & 0x01) && (delay_count < 40))
		{
			timer_delay_ms(25);
			delay_count++;
		}
		PORTA ^= 0x02;

		if(delay_count < 40)
		{
			if(nrf_read_packet(&packet) != SUCCESS)
				delay_count = 40;
			else
				PORTA ^= 0x04;
		}

		if(delay_count < 40)
			timer_delay_ms(2000);

		timer_delay_ms(2000);
#elif RECEIVE_PACKETS
		nrf_set_mode(nrf_receive_mode, false);
		while(!(nrf_read_register(NRF_REG_FIFO_STATUS) & 0x01))
		{
			timer_delay_ms(50);
			PORTA ^= 0x02;
			nrf_read_packet(&packet);
			uint16_t temp;
			temp = (packet.payload[1] << 8);
			temp |= packet.payload[2];
			packet.address = CAFE_ADDRESS | temp;
			packet.payload_length = 12;
			packet.payload[1] = (NODE_ID >> 8);
			packet.payload[2] = (NODE_ID & 0xFF);
			packet.payload[3] = (temp >> 8);
			packet.payload[4] = (temp & 0xFF);
			temp = (packet.payload[5] << 8);
			temp |= packet.payload[6];
			packet.payload[5] = packet.payload[7];
			packet.payload[6] = packet.payload[8];
			packet.payload[7] = (temp >> 8);
			packet.payload[8] = (temp & 0xFF);
			packet.payload[9] ^= 0x80;
			packet.payload[10] = differ++;
			packet.payload[11] = 0x00;
			PORTA ^= 0x01;
			nrf_set_mode(nrf_transmit_mode, true);
			nrf_flush_fifo(true);
			nrf_transmit_packet(packet, false);
			while(!(nrf_read_register(NRF_REG_FIFO_STATUS) & 0x10));
			PORTA ^= 0x01;
			nrf_set_mode(nrf_receive_mode, false);
			nrf_write_register(NRF_REG_STATUS, 0x20);
		}
#endif
	}
}