#ifndef Spot_h #define Spot_h #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef EMBED_WWW #include #endif #ifndef APP_VERSION #define APP_VERSION "v1" #endif #ifndef APP_NAME #define APP_NAME "SpotMicro" #endif #ifndef APPLICATION_CORE #define APPLICATION_CORE -1 #endif class Spot { public: Spot(); void initialize(); // sense void readSensors() { _peripherals.readIMU(); _peripherals.readMag(); _peripherals.readBMP(); } // plan void planMotion() { updatedMotion = _motionService.updateMotion(); } // act void updateActuators() { if (updatedMotion) _servoController.setAngles(_motionService.getAngles()); updatedMotion = false; _servoController.updateServoState(); #if FT_ENABLED(USE_WS2812) _ledService.loop(); #endif } // communicate void emitTelemetry() { if (updatedMotion) EXECUTE_EVERY_N_MS(100, { _motionService.emitAngles(); }); EXECUTE_EVERY_N_MS(250, { _peripherals.emitIMU(); }); // _peripherals.emitSonar(); } private: PsychicHttpServer _server; WiFiService _wifiService; APService _apService; EventSocket _socket; MDNSService _mdnsService; #if FT_ENABLED(USE_UPLOAD_FIRMWARE) FirmwareUploadService _uploadFirmwareService; #endif #if FT_ENABLED(USE_DOWNLOAD_FIRMWARE) DownloadFirmwareService _downloadFirmwareService; #endif #if FT_ENABLED(USE_MOTION) MotionService _motionService; #endif #if FT_ENABLED(USE_CAMERA) Camera::CameraService _cameraService; #endif Peripherals _peripherals; ServoController _servoController; #if FT_ENABLED(USE_WS2812) LEDService _ledService; #endif bool updatedMotion = false; const char *_appName = APP_NAME; const u_int16_t _numberEndpoints = 137 + 36; const u_int32_t _maxFileUpload = 2300000; // 2.3 MB const uint16_t _port = 80; protected: void loop(); static void _loopImpl(void *_this) { static_cast(_this)->loop(); } void setupServer(); void startServices(); }; #endif