Feature Request: Refactor SPI to allow alternative implementations (e.g., Software SPI)

Ouverte
#9,293 0 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
35/100
Type d'issue
Fonctionnalité
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
cpp
Domaine
embedded-iot

Piste de recherche

Commencez par lire ESP8266AVRISP.cpp et l’implémentation principale de SPIClass, en vous concentrant sur les appels directs à SPI.begin() et SPI.transfer(), ainsi que sur la dépendance globale à SPI. Comparez la conception SPI matérielle existante avec l’implémentation Software SPI proposée. Le travail sera considéré comme terminé lorsqu’ESP8266AVRISP pourra utiliser une implémentation SPI alternative injectée au lieu d’être liée aux broches SPI matérielles.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

The problem

Currently, the core SPIClass is a concrete implementation tied directly to the hardware SPI peripheral (HSPI).

Libraries included in this repository, such as ESP8266AVRISP, are hard-coded to use the global SPI instance. For example, ESP8266AVRISP.cpp directly calls SPI.begin() and SPI.transfer().

This creates a problem: it's impossible to use ESP8266AVRISP (or other similarly-coded libraries) if the hardware SPI pins (GPIO 12, 13, 14) are already in use by another device. It also prevents the use of a "bit-bang" (software) SPI implementation on arbitrary pins.

My goal is to add a Software SPI implementation and be able to use it with the ESP8266AVRISP library.

Proposed solution

I propose refactoring the SPI ecosystem to allow for "Dependency Injection," where a library (like ESP8266AVRISP) accepts an SPI implementation in its constructor instead of being hard-coded to the global SPI object.

My contribution

I have working solution with modified ESP8266AVRISP which use software SPI implementation I made. I can make PR if this propose is accepted

Langage dominant
C++
Étoiles
16.7k
Forks
13k
Métriques de merge des PR
Aucune PR mergée en 30 j

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de esp8266/Arduino

Toutes les issues de esp8266/Arduino

Issues similaires

Plus d'issues C++

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.