123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- /*
- * Title OnStepX
- * by Howard Dutton
- *
- * Copyright (C) 2021-2024 Howard Dutton
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * Description:
- * Full featured telescope control for
- * Equatorial and Alt-Az mounts
- * Rotator
- * Focusers
- * Accessories (automatic covers, dew heaters, etc.)
- *
- * Author: Howard Dutton
- * http://www.stellarjourney.com
- * hjd1964@gmail.com
- *
- * Revision history, and newer versions:
- * See GitHub: https://github.com/hjd1964/OnStep
- *
- * Documentation:
- * https://groups.io/g/onstep/wiki/home
- *
- * Discussion, Questions, ...etc
- * https://groups.io/g/onstep
- */
- // Use tabs "Config..." to configure OnStep to your requirements
- // Firmware version ----------------------------------------------------------------------------------------------------------------
- #define FirmwareName "On-Step"
- #define FirmwareVersionMajor 10
- #define FirmwareVersionMinor 25 // minor version 00 to 99
- #define FirmwareVersionPatch "c" // for example major.minor patch: 10.03c
- #define FirmwareVersionConfig 6 // internal, for tracking configuration file changes
- #include "src/Common.h"
- NVS nv;
- #include "src/Validate.h"
- #include "src/lib/sense/Sense.h"
- #include "src/lib/tasks/OnTask.h"
- #include "src/telescope/Telescope.h"
- extern Telescope telescope;
- #include "src/plugins/Plugins.config.h"
- #if DEBUG == PROFILER
- extern void profiler();
- #endif
- void systemServices() {
- if (!xBusy) nv.poll(false);
- }
- void sensesPoll() {
- sense.poll();
- }
- void setup() {
- #if ADDON_SELECT_PIN != OFF
- pinMode(ADDON_SELECT_PIN, OUTPUT);
- digitalWrite(ADDON_SELECT_PIN, HIGH);
- #endif
- #if DEBUG != OFF
- SERIAL_DEBUG.begin(SERIAL_DEBUG_BAUD);
- delay(2000);
- #endif
- // let any special processing the pinmap needs happen
- #ifdef PIN_INIT
- PIN_INIT();
- #endif
- // say hello
- VLF("");
- VF("MSG: OnStepX, version "); V(FirmwareVersionMajor); V("."); V(FirmwareVersionMinor); VL(FirmwareVersionPatch);
- VF("MSG: OnStepX, MCU "); VLF(MCU_STR);
- VF("MSG: OnStepX, pinmap "); VLF(PINMAP_STR);
- // start low level hardware
- VLF("MSG: Setup, HAL initialize");
- HAL_INIT();
- if (!HAL_NV_INIT()) {
- DLF("WRN: Setup, NV (EEPROM/FRAM/FlashMem/etc.) device not found!");
- nv.initError = true;
- }
- delay(2000);
- // start system service task
- VF("MSG: Setup, start system service task (rate 10ms priority 7)... ");
- // add task for system services, runs at 10ms intervals so commiting 1KB of NV takes about 10 seconds
- // the cache is scanned (for writing) at 2000 bytes/second but can be slower while reading data into the cache at startup
- if (tasks.add(10, 0, true, 7, systemServices, "SysSvcs")) { VLF("success"); } else { VLF("FAILED!"); }
- // start input sense polling task
- int pollingRate = round((1000.0F/HAL_FRACTIONAL_SEC)/2.0F);
- if (pollingRate < 1) pollingRate = 1;
- VF("MSG: Setup, start input sense polling task (rate "); V(pollingRate); VF("ms priority 7)... ");
- if (tasks.add(pollingRate, 0, true, 7, sensesPoll, "SenPoll")) { VLF("success"); } else { VLF("FAILED!"); }
- // start telescope object
- telescope.init(FirmwareName, FirmwareVersionMajor, FirmwareVersionMinor, FirmwareVersionPatch, FirmwareVersionConfig);
- // start command channel tasks
- commandChannelInit();
- tasks.yield(2000);
- // start any plugins
- #if PLUGIN1 != OFF
- PLUGIN1.init();
- #endif
- #if PLUGIN2 != OFF
- PLUGIN2.init();
- #endif
- #if PLUGIN3 != OFF
- PLUGIN3.init();
- #endif
- #if PLUGIN4 != OFF
- PLUGIN4.init();
- #endif
- #if PLUGIN5 != OFF
- PLUGIN5.init();
- #endif
- #if PLUGIN6 != OFF
- PLUGIN6.init();
- #endif
- #if PLUGIN7 != OFF
- PLUGIN7.init();
- #endif
- #if PLUGIN8 != OFF
- PLUGIN8.init();
- #endif
- // start task manager debug events
- #if DEBUG == PROFILER
- tasks.add(142, 0, true, 7, profiler, "Profilr");
- #endif
- sense.poll();
- telescope.ready = true;
- }
- void loop() {
- tasks.yield();
- }
|