// This must be the first module to be initialized! void systemInit(void) { if(isInit) return; canStartMutex = xSemaphoreCreateMutex(); xSemaphoreTake(canStartMutex, portMAX_DELAY); usblinkInit(); sysLoadInit(); /* Initialized hear and early so that DEBUG_PRINT (buffered) can be used early */ crtpInit(); consoleInit(); DEBUG_PRINT("----------------------------\n"); DEBUG_PRINT(P_NAME " is up and running!\n"); DEBUG_PRINT("Build %s:%s (%s) %s\n", V_SLOCAL_REVISION, V_SREVISION, V_STAG, (V_MODIFIED)?"MODIFIED":"CLEAN"); DEBUG_PRINT("I am 0x%X%X%X and I have %dKB of flash!\n", *((int*)(MCU_ID_ADDRESS+8)), *((int*)(MCU_ID_ADDRESS+4)), *((int*)(MCU_ID_ADDRESS+0)), *((short*)(MCU_FLASH_SIZE_ADDRESS))); configblockInit(); workerInit(); adcInit(); ledseqInit(); pmInit(); buzzerInit(); isInit = true; }
portTASK_FUNCTION_PROTO(signalTask, pvParameters) { portTickType xLastWakeTime; // Initialise the xLastWakeTime variable with the current time. xLastWakeTime = xTaskGetTickCount(); /* Create timers for LED & buzzer */ LedTimer[LED_STS] = xTimerCreate((signed char *) "TimLedSTS", 10, pdFALSE, (void *) LED_STS, LedTimerCallback); LedTimer[LED_ERR] = xTimerCreate((signed char *) "TimLedERR", 10, pdFALSE, (void *) LED_ERR, LedTimerCallback); LedTimer[LED_NAV] = xTimerCreate((signed char *) "TimLedNAV", 10, pdFALSE, (void *) LED_NAV, LedTimerCallback); BuzzerTimer = xTimerCreate((signed char *) "TimBuzzer", 10, pdFALSE, (void *) 0, BuzzerTimerCallback); buzzerInit(); ledInit(); while (1) { beep_handler(); // Wait for the next cycle. vTaskDelayUntil(&xLastWakeTime, 100); // Task cycle time 100 ms } }
void setup(void) { watchdogConfig(WATCHDOG_OFF); setupSPI(); #ifdef SDN_pin pinMode(SDN_pin, OUTPUT); //SDN digitalWrite(SDN_pin, 0); #endif //LED and other interfaces pinMode(Red_LED, OUTPUT); //RED LED pinMode(Green_LED, OUTPUT); //GREEN LED #ifdef Red_LED2 pinMode(Red_LED2, OUTPUT); //RED LED pinMode(Green_LED2, OUTPUT); //GREEN LED #endif // pinMode(BTN, INPUT); //Button pinMode(SLAVE_SELECT, INPUT); digitalWrite(SLAVE_SELECT, HIGH); // enable pullup for TX:s with open collector output buzzerInit(); serialInit(115200,SERIAL_8N1); checkOperatingMode(); printStr("OpenLRSng DL starting "); printVersion(version); printStr(" on HW "); printUL(BOARD_TYPE); printStr(" ("); printUL(RFMTYPE); printStr("MHz) MDOE="); buzzerOn(BZ_FREQ); digitalWrite(BTN, HIGH); Red_LED_ON ; sei(); delay(50); if (!slaveMode) { printStrLn("MASTER"); if (!bindReadEeprom()) { printStrLn("eeprom bogus reinit...."); bindInitDefaults(); bindWriteEeprom(); } if (!digitalRead(BTN)) { bindMode(); } } else { printStrLn("SLAVE"); if (!digitalRead(BTN) || !bindReadEeprom()) { bindRX(false); } else { bindRX(true); } } packetInterval = getInterval(&bind_data); printStrLn("Entering normal mode"); serialFlush(); serialInit(bind_data.serial_baudrate, bind_data.serial_mode); Red_LED_OFF; buzzerOff(); init_rfm(0); rfmSetChannel(RF_channel); rx_reset(); if (slaveMode) { to_rx_mode(); RF_Mode = Receive; } watchdogConfig(WATCHDOG_2S); lastReceived=micros(); }