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
- 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
…
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
…
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
…
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
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
[!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):
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:
- GNU/Linux glibc reference manual on terminal I/O
- GNU/Linux glibc reference manual on low-level I/O
- Linux Kernel Userspace APIs
- Linux Manual Page Generic IO using IOCTL
- Linux Generic IOCTL Functions to control data routing
- Linux Manual Page Serial IOCTL
- Linux Serial IOCTL Magic Macros
- Linux Parallel IOCTL Magic Macros
- Linux IOCTL CDROM Magic Macros
- Linux IOCTL PCI-e Magic Macros
- Linux IOCTL USB FS Magic Macros
- Linux Kernel Test Hashing
Theoretical papers:
- TWOs Discrete Event Simulation
- VME TWOs Discrete Event Simulation
- NASA Distributed System simulation
- C/C++ IBM Language Reference
- GNU C Language Reference Manual
- GCC Compiler Reference Manual
- libstdc++ Reference Manual
- GNU libc Reference Manual
- Java-20 APIs Documentation Oracle
- Java-20 JNI API Documentation
- Java-20 Language Reference Oracle
- Java-20 VM Oracle
- NASA C/C++ Native Coding Style
- Java Google Coding Style
- Ubuntu-bionic Internals
Technical Books:
- Serial Port Complete by Jan Axelson’s
- Parallel Port Complete by Jan Axelson’s
- USB Complete by Jan Axelson’s
- USB Embedded Hosts Complete by Jan Axelson’s
- USB Mass Storage Complete by Jan Axelson’s
- Embedded Ethernet and Internet Complete by Jan Axelson’s
- The Microcontroller Idea Book
- Making Printed Circuit Boards
- PCI-e Programming
- AVR Microcontroller Programming
- In-serial Programmer software protocol
- Parallel Programmer software protocol
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.
Our Features
Distributed Simulation
An overview of distributed simulation systems.
NASA DSES Project
Insights into the Distributed Space Exploration Simulation System project of NASA.
Educational Applications
How educational institutions can benefit from simulation systems.
Scalable Solutions
Implementing scalable solutions for various needs.
Contacts:
Name
Pavly Gerges
pepogerges33@gmail.com
Tel
Address
Egypt, Cairo