Skip to content

Latest commit

 

History

History
391 lines (344 loc) · 16 KB

README.md

File metadata and controls

391 lines (344 loc) · 16 KB

The Electrostatic-Sandbox SDK

Preface and terminology:

The Electrostatic-Sandbox SDK is a complete work-in-progress Software Development Suite written purely in ISO GNU/C99 with stock Java bindings with a software distributed simulation engineering interface based on the IEEE-1516 High-level Architecture (HLA), and the National Aeronautics and Space Administration Distributed space exploration simulation system (NASA DSES).

Electrobox is an electronic monstrosity workstation designed to examine and develop systems for distributed simulations by providing an integrated environment housing the basic nostalgic communication protocols (i.e., Serial and Parallel COMs), the abstract networking interfaces, and a range of other electronic modules providing standards for controller interfaces, and sensor modules (e.g., the underdeveloped ShiftAvr, and Arduinos).

This electronic monstrosity features and leverages a powerful system-engineering infrastructure framework, the Electrostatic-Sandbox Framework for distributed simulation systems, a complete SDK suite written purely in C programming language with a JNI binding based on the IEEE-1516 HLA Spec. and NASA DSES.

Jump to the Electrobox Specification

Provisional Software/Hardware Specification:

Provisional Hardware/Software Abstraction Layer (HAL):

The HAL is a type of software hierarchial architectural design that provides generic Application Programming Interfaces for the system as abstractions with replaceable infrastructure. The Infrastructure is decomposed into major bulky parts Networking Infrastructure, Software Infrastructure, and Simulation Infrastructure (aka. IEEE-1516 HLA RTI). Each infrastructure is further decomposed into finer components that operate on specific resources. System Resources are either OS Resources, Hardware Resources, or Simulation Resources. Development phases are created by introducing a milestone, the milestone operates on one or more of the major bulky infrastructures and brings decomposed features to the SDK gradually until the milestone is achieved.

  • Simplified Paradigm:
block-beta
columns 1
  block:IEEE
    _IEEE["Simulation Infrastructure (ElectroSim Project)"]
  end
  block:__IEEE
    RTI_IEEE["IEEE-1516 RTI"]
    FED_IEEE["RTI Federates"]
    FOM_IEEE["FOM"]
  end
  block:MIG
    _MIG["Migrated APIs and Frameworks"]
  end
  block:MIG_APIs
      SERIAL["Serial4j"]
      JECTOR["Jector"]
      ART["Articular-ES"]
      JME["Jme-alloc"]
      JSNAP["jSnapLoader"]
      AUTO["Automata4j"]
  end
  NETSOFT_INFRA["Networking and Software Infrastructure (ElectroNetSoft Project)"]
  OS_RES["Base OS Resources and Std Libraries APIs"]
  block:TITLE
    block:STD
      Std["Std Libs"]
    end
    block:OS
      OSRES["Base OS Resources"]
    end
  end
  block:HAL
    block:_STD
      ADT["ADTs"]
      _STD_CONT["..."]
    end
    block:_OS
      FS["Abstract Filesystems"]
      _OS_CONT["..."]
    end
  end

  block:INFRA
      _INFRA["Hardware Infrastructure (ElectroIO Project)"]
  end
  block:ELECTROMIO
      _ELECTROMIO["ElectroMIO (formerly ShiftAvr)"]
  end
  block:__ELECTROMIO
      GPIO["GPIO"]
      UART["USART"]
      ADC["ADC"]
      MCONT["..."]
  end
  MCU["Microcontrollers Toolchains Binaries"]

  block:ELECTROKIO
      _ELECTROKIO["ElectroKIO"]
  end

  block:__ELECTROKIO
      USB["USB-FS"]
      RS232["RS232"]
      PARA["IEEE-1284"]
      KCONT["..."]
  end
  KIO["Linux Kernel userspace APIs"]

  style INFRA fill:#000,stroke:#999
  style ELECTROMIO fill:#000,stroke:#999
  style __ELECTROMIO fill:#000,stroke:#999
  style MCU fill:#000,stroke:#999

  style ELECTROKIO fill:#000,stroke:#999
  style __ELECTROKIO fill:#000,stroke:#999
  style KIO fill:#000,stroke:#999

  style MIG fill:#999,stroke:#999
  style MIG_APIs fill:#999,stroke:#999

  style NETSOFT_INFRA stroke:#333
  style OS_RES stroke:#333

  style OS fill:#969,stroke:#333
  style STD fill:#999,stroke:#333
  style _OS fill:#969,stroke:#333
  style _STD fill:#999,stroke:#333
Loading
  • Detailed Architecture:
block-beta
columns 1
block:IEEE
    _IEEE["Simulation Infrastructure (ElectroSim Project)"]
end
block:__IEEE
  RTI_IEEE["IEEE-1516 RTI"]
  FED_IEEE["RTI Federates"]
  FOM_IEEE["FOM"]
end
Loading

...

block-beta
columns 1
block:MIG
  _MIG["Migrated APIs and Frameworks"]
end
block:MIG_APIs
    SERIAL["Serial4j"]
    JECTOR["Jector"]
    ART["Articular-ES"]
    JME["Jme-alloc"]
    JSNAP["jSnapLoader"]
    AUTO["Automata4j"]
end
style MIG fill:#999,stroke:#999
style MIG_APIs fill:#999,stroke:#999
Loading

...

block-beta
columns 1
NETSOFT_INFRA["Networking and Software Infrastructure (ElectroNetSoft Project)"]
OS_RES["Base OS Resources and Std Libraries APIs"]
block:TITLE
  block:STD
    Std["Std Libs"]
  end
  block:OS
    OSRES["Base OS Resources"]
  end
end
block:HAL
  block:_STD
    ADT["ADTs"]
    ELECTROMATHS["ElectroMaths"]
    ELECTROAUTO["ElectroAuto"]
    ELECTROJECTOR["ElectroJector"]
    ELECTROART["ElectroArticular-ES"]
    LOG["ElectroLogger"]
  end
  block:_OS
    FS["Abstract Filesystems"]
    SOCK["Sockets"]
    PROC["Process Control"]
    THR["Thread Control"]
    MEM["Memory Control"]
  end
end
style NETSOFT_INFRA stroke:#333
style OS_RES stroke:#333
Loading

...

block-beta
columns 1
block:INFRA
    _INFRA["Hardware Infrastructure (ElectroIO Project)"]
end
block:ELECTROMIO
    _ELECTROMIO["ElectroMIO (formerly ShiftAvr)"]
end
block:__ELECTROMIO
  GPIO["GPIO"]
  UART["USART"]
  ADC["ADC"]
  EEPROM["EEPROM"]
  TWI["TWI"]
  SPI["SPI"]
  SOCKET["WiFi-Sockets"]
end
MCU["Microcontrollers Toolchains Binaries"]

block:ELECTROKIO
    _ELECTROKIO["ElectroKIO"]
end

block:__ELECTROKIO
    USB["USB-FS"]
    RS232["RS232"]
    PARA["IEEE-1284"]
    ETH["IEEE-802.3"]
    CD["DVD-CDROM"]
    PCI["PCI-e"]
end
KIO["Linux Kernel userspace APIs"]

style INFRA fill:#000,stroke:#999
style ELECTROMIO fill:#000,stroke:#999
style __ELECTROMIO fill:#000,stroke:#999
style MCU fill:#000,stroke:#999

style ELECTROKIO fill:#000,stroke:#999
style __ELECTROKIO fill:#000,stroke:#999
style KIO fill:#000,stroke:#999
Loading

Project Milestones:

timeline
title The Electrostatic-Sandbox SDK Milestones
2024-2025 (Tight Period): Primer version 1.0.0 (v1.0.0-p1): Migration of the supportive projects: ElectroNetSoft (Std Libraries - OS Resources Control): ElectroIO (AVR Only)
2025-2026 (Proof-of-concept Period): Intermediary period for testing and prototyping simulation projects: ElectroIO (PIC MCU. Integrations)
2025-2026 (Production Period): Software & Networking Infrastructure (Mature ElectroNetSoft): Stable version v1.0.0
2026-2028 (Production Period): Simulation Infrastructure: Base IEEE-1516 HLA API and RTI integration for distributed simulation building (ElectroSim Project): Stable version v2.0.0
2028-.... (Open Period): Open period for: testing,: prototyping simulation projects,: communicating with contemplated teams,: and publications on JOSS
Loading

Important

Migration Milestones:

  • Migrating Serial4j to the project.
  • Migrating ShiftAvr to the project.
  • Migrating jSnapLoader to the project.
  • Migrating Automata4j to the project.
  • Migrating Jector to the project.

Important

Primer version 1.0.0 (v1.0.0-p1) "ElectroNetSoft Project & ElectroIO Project":

  • Low-level Abstract Data types (ADTs).
  • Low-level popular text-manipulation algorithms.
  • Low-level popular switching algebra algorithms.
  • Low-level popular elementary algebra algorithms.
  • Low-level popular transcendental algebra algorithms.
  • Abstract filesystem utilities.
  • Thread control utilities and interface.
  • Sockets control utilities and interface.
  • Process control utilities and interface.
  • Logging Utilities.
  • Memory Allocation Utilities.
  • Memory Inspection Utilities.
  • Memory Control Utilities.
  • Crytographic utilities and interfaces.
  • Base System Databases utilities and interfaces.
  • ElectroIO for AVR MCUs (formerly ShiftAvr).

Stable version v1.0.0 "The Base OS Resources Control APIs (The Mature ElectroNetSoft Project)".

...

Stable version v2.0.0 "The Base IEEE-1516 HLA API and RTI integration (Project ElectroSim)".

Challenges:

  • Building the appropriate HAL on top of the low-level OS resources and communication protocols.
  • Handling security and network firewall dilemmas.
  • Recruiting developers for open-source sofware engineering.
  • Working in a multi-disciplinary environment of both software, hardware engineering perspectives and managing the interactions between them.

Major End-goals:

  • The capability to build a complete distributed system on top of a GNU/Linux in a sandboxed environment bearing in mind all the perspective of truely performant software (e.g., concurrency, security, reliability, failure handlers, ...etc).
  • Connecting to peripheral digital/analog devices via simulation interfaces in a sandboxed environment (Hardware/Software Co-design).
  • Simulating large Space Missions into small finite simulations (e.g., Rocket Launch, Rocket separation stages, Nose separation, Rocket Launch Abort, and Rocket Engine Failure).
  • Building in-home, office, and outdoor distributed IoT projects (e.g., Smart Homes, Smart Hospitals, Switch Control Military and Traffic control systems).

Board Overview (Migrated Projects Dismissed):

HAL-Electrostatic

General progress:

API used:

  • Serial4j.
  • Articular-ES.
  • Automata4j.
  • Jector.
  • ShiftAvr.
  • Parallel4j.
  • Socket4j.
  • Electrostatic-sandbox-framework.

Environment Setup:

  • setup-tools scripting.
  • setup-framework scripting.

Electrostatic-sandbox framework:

  • Electroserial API: wraps Serial4j API providing a generic boundary to the Electrocomponent API.
  • Electroparallel API: wraps Parallel4j API providing a generic boundary to the Electrocomponent API.
  • Electrosocket API: wraps Socket4j API providing a generic boundary to the Electrocomponent API.
  • Electrocomponent API: provides the vertical HAL for interacting with devices through device managers based on the scientific model provided by the Set Theory.
  • Electrostatic-sandbox-examples: examples and techdemos utilizing the HAL API directly to interact with peripheral devices and/or use one of the above core APIs.
  • Deployment to Maven Central.
  • Build the framework into an SDK.

References (Direct links to useful topics):

Operational:

Theoretical papers:

Technical Books:

Credits:

Credits should go to these products and platforms for being open-source and widely available with no constraints, hooray to them:

  • The Java Platform.
  • Oracle Corporation.
  • The CMake Building Framework.
  • The jMonkeyEngine game engine.
  • The Gradle API.
  • The Android Studio IDE.
  • The Jetbrains Fleet Code Editor.
  • The GraalVM team.
  • The Linux Kernel.
  • The GNU/Linux Operating Systems.
  • The Avrdude tool.
  • The Arduino Platform.
  • The OpenAI API (GPT-3) mainly for scripting and project management.
  • The Gigabyte Company (not open-source, but the main board depends on).
  • Zorin OS (the main OS currently in-use).
  • SanDisk (flash drive).
  • Microchip & ATMEL (for AVR microcontrollers).
  • The Linux Man Page & Micheal Kerrisk's Linux Interfacing Book.
  • The GNU/Linux glibc and the interfacing libraries.
  • IEEE for providing the standards of I/O Communication interfaces.
  • The Universal Serial Bus (USB) Corporation.
  • The Microsoft Corp. for providing VsCode, an easy-to-use code editor.
  • The Jetbrains Corp. for providing Intellij-IDEA IDE.
  • The NASA Technical Reports Server (NTRS) for providing open publications from their distributed simulation systems.
  • Maven Central, Sonatype and JIRA services for hosting open-source APIs.
  • Springer Nature for providing Mathematics books and publications on predicate calculus and logic analysis.
  • The ACM digital library for providing publications about distributed simulation systems.
  • The GitHub Platform and Git VCS for hosting this project.
  • The KiCad project.
  • The Fritzing project.

And, To others who I didn't mention, and were essential predicates for the success of this project.