int main(void) { static console_command_t commands[2]; commands[0].callback = command_callback; commands[1].callback = branch_hub_command_callback; commands[1].help_callback = branch_hub_help_callback; ADCON1 = 0x0F; CMCON = 0x07; TRISA = 0x00; PORTA = 0x00; interrupt_initialize(); timer_initialize(); timer_register(timer_callback, 1000, &timer_id); timer_enable(timer_id); console_initialize(); console_register_command(commands[0], "main"); console_register_command(commands[1], "hub"); hub_init(HUB_ADDRESS); while(1) { console_process_tasks(); } }
extern "C" void __initialize_hardware() { // Avoid peripheal libs additional init code. #define RCC_APB2Periph_SPIz_Enabled #define RCC_APB2Periph_SPIy_Enabled #define RCC_APB2Periph_ETH_Enabled #define RCC_APB2Periph_RC522_Enabled #define RCC_APB2Periph_RC522_2_Enabled /* Enable GPIOC clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /* Configure PC.4 as Output push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure PC.4 as Output push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); // initialize peripheal hardware pins. rc522_set_pins(); rc522_2_set_pins(); enc28j60_set_pins(); // Initilize SPIz hardware settings (pins and spi registers). set_spi_registers(); set_spi2_registers(); interrupt_initialize(); initialize_timer(); initialize_systick(); }
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 } }