// SPI needs to be initialized before void wlhl_init_tx(void) { uint8_t k; // -- Basic config wl_module_init(); _delay_ms(50); // Configurate the interrupt WIRELESS_INTERRUPT_FALLING_EDGE(); WIRELESS_INTERRUPT_ENABLE(); // -- Config Module wl_module_tx_config(wl_module_TX_NR_0); // Wait for configuration to complete _delay_ms(10); // -- Check MAX_RT and clear it if set // Read wl_module status wl_module_CSN_lo; // Pull down chip select k = spi_fast_shift(NOP); // Read status register wl_module_CSN_hi; // Pull up chip select if (k & STATUS_MAX_RT) { // Clearing STATUS_MAX_RT wl_module_config_register(STATUS, (1 << MAX_RT)); } _delay_ms(10); // Flush data out of TX FIFO (there may be data after reset) wl_module_CSN_lo; // Pull down chip select spi_fast_shift(FLUSH_TX); // Write cmd to flush tx fifo wl_module_CSN_hi; // Pull up chip select }
void main(void) { uint8_t err; Status_Payload status_payload; TEMP_HUM_Payload temp_hum_payload; memset(&temp_hum_payload,0,sizeof(TEMP_HUM_Payload)); temp_hum_payload.header.msg_id = TEMP_HUM_DATA; temp_hum_payload.header.nodeId = NODE_ID; memset(&status_payload,0,sizeof(Status_Payload)); status_payload.header.msg_id = STATUS_DATA; status_payload.header.nodeId = NODE_ID; status_payload.sw_version = SW_VERSION; /* set all pins to input to save power. */ TRISC = 0xffffff; TRISA = 0xffffff; TRISB = 0xffffff; RF_PWR_PIN_DIR = 0; peripheral_pwr(false); // never works first time, so dummy call... measure_power(); LED_RED_DIR = 0; LED_GRN_DIR = 0; LED_RED = 0b0; LED_GRN = 0b0; /* Configure the oscillator for the device */ ConfigureOscillator(); /* Initialize I/O and Peripherals for application */ InitApp(); /* Check payload size */ if ((temp_hum_payload_size != sizeof (TEMP_HUM_Payload)) || (status_payload_size != sizeof (Status_Payload))) { while (1) { LED_RED = 0b1; LED_GRN = 0b1; sleep(WDT_256_MS); LED_RED = 0b0; LED_GRN = 0b0; sleep(WDT_256_MS); } } sleep(WDT_1_SEC); LED_RED = 0b1; LED_GRN = 0b1; sleep(WDT_256_MS); LED_RED = 0b0; LED_GRN = 0b0; /* Main loop */ while (1) { peripheral_pwr(true); //wait for settling time sleep(WDT_32_MS); err = getTH(&temp_hum_payload.humidity,&temp_hum_payload.temperature); if (err){ status_payload.sensor_err++; } temp_hum_payload.header.count++; wl_module_tx_config(wl_module_TX_NR_0); err = wl_module_send((unsigned char *) &temp_hum_payload, sizeof (temp_hum_payload)); if (err){ status_payload.rf_error++; } if (temp_hum_payload.header.count % 12 == 1) { /* send long payload */ status_payload.millivolts = measure_power(); status_payload.header.count++; err |= wl_module_send((unsigned char *) &status_payload, sizeof (status_payload)); } peripheral_pwr(false); if (err){ LED_RED = 0b1; sleep(WDT_1_MS); LED_RED = 0b0; }else{ LED_GRN = 0b1; sleep(WDT_1_MS); LED_GRN = 0b0; } LED_RED = 0b0; LED_GRN = 0b0; sleep(WDT_256_SEC); sleep(WDT_32_SEC); } }