Fattibilità di esecuzione sketch con attiny

Auguri a tutti ! :grin:
Ciao a tutti !

Stavo rispolverando la lista delle cose da fare con gli atmega.
Mi chiedevo se posso realizzare questo hack dongle http://blog.spiderlabs.com/2012/10/pentesting-hotels-with-pens.html con un attiny anziché con un atmega328.

Il problema non è tanto il circuito, almeno secondo me:

ma più che altro nello sketch (http://demoseen.com/bhpaper.html):

#define CONSERVATIVE

int ioPin = 3;
#define BUFSIZE 200
unsigned char buf[BUFSIZE];

#define pullLow() pinMode(ioPin, OUTPUT)
#define pullHigh() pinMode(ioPin, INPUT)

unsigned char dbits[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0};

unsigned char bits[][144] = {
  {
    0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 
    1, 0, 1, 0, 0, 0, 1, 0, 
    0, 1, 

    1, 0, 0, 0, 1, 0, 0, 0, 1, 
    1, 0, 1, 0, 0, 1, 0, 1, 1, 
    1, 1, 0, 0, 0, 0, 1, 1, 1, 
    0, 0, 0, 1, 1, 1, 0, 1, 1,

    1, 1, 1, 1, 1, 1, 1, 1, 
    0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0
  }, 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0}
};

unsigned char bval;

void wentLow() {
  bval = 1;
}

void setup() {
}

bool open() {
  pinMode(ioPin, OUTPUT);
  digitalWrite(ioPin, LOW);
  pinMode(ioPin, INPUT);
  digitalWrite(ioPin, LOW);

  for(int i = 0; i < sizeof(dbits); ++i) {
    if(dbits[i] == 0) {
      pullLow();
      delayMicroseconds(16);
      pullHigh();
      delayMicroseconds(190);
    } else {
      pullLow();
      delayMicroseconds(16);
      pullHigh();
      delayMicroseconds(56);
      pullLow();
      delayMicroseconds(16);
      pullHigh();
      delayMicroseconds(112);
    }
  }

  pullLow();
  delayMicroseconds(16);
  pullHigh();

  bval = 0;
  attachInterrupt(1, wentLow, FALLING);

  unsigned int i = 0;
  while(digitalRead(ioPin) == HIGH && i++ < 32767) {}
  if(i == 32767)
    return false;

  delayMicroseconds(20);
  for(int i = 0; i < 164; ++i) {
    buf[i] = 0;
    pullLow();
    delayMicroseconds(8);
    pullHigh();
    bval = 0;
    delayMicroseconds(184);
    buf[i] = bval;
  }

  for(int i = 0; i < 32+3; ++i)
    bits[0][50+i] = buf[22+i];

  for(int i = 0; i < 8; ++i)
    bits[0][86+i] = bits[0][50+i] ^ bits[0][50+9+i] ^ bits[0][50+18+i] ^ bits[0][50+27+i];
  bits[0][86] ^= 1;
  bits[0][87] ^= 0;
  bits[0][88] ^= 1;
  bits[0][89] ^= 1;
  bits[0][90] ^= 1;
  bits[0][91] ^= 0;
  bits[0][92] ^= 1;
  bits[0][93] ^= 1;

#ifdef CONSERVATIVE
  delay(100);
#endif
  for(int j = 0; j < 11; ++j) {
    for(int i = 0; i < sizeof(bits[j]); ++i) {
      if(bits[j][i] == 0) {
        pullLow();
        delayMicroseconds(16);
        pullHigh();
        delayMicroseconds(190);
      } else {
        pullLow();
        delayMicroseconds(16);
        pullHigh();
        delayMicroseconds(56);
        pullLow();
        delayMicroseconds(16);
        pullHigh();
        delayMicroseconds(112);
      }
    }
#ifdef CONSERVATIVE
    delayMicroseconds(2700);
#else
    delayMicroseconds(500);
#endif
  }
  return true;
}

void loop() {
    open();
}

Ora sto cercando di capire cosa fa questo schema, o meglio cosa siano tutti quei “0 e 1”.
Voi che dite ?

Con un Tiny ho paura che non puoi farlo, hai 2 array da diverse centinaia di byte di SRAM, quando di memoria un Tiny85 o un Tiny85 ha solo 512 byte e ci devono stare anche tutte le altre variabili.

Su tiny85 NO!

Lo sketch usa 3.170 byte (38%) dello spazio disponibile per i programmi. Il massimo è 8.192 byte.
Le variabili globali usano 1.874 byte (366%) di memoria dinamica, lasciando -1.362 byte liberi per le variabili locali. Il massimo è 512 byte.

:grin:

Forse con PROGMEM, ma io non lo so usare.
No… non sono valori costanti.

Grazie ragazzi =D

Ora

Lo sketch usa 3.170 byte (38%) dello spazio disponibile per i programmi. Il massimo è 8.192 byte.
Le variabili globali usano 1.874 byte (366%) di memoria dinamica, lasciando -1.362 byte liberi per le variabili locali. Il massimo è 512 byte.

questo da dove esce ?! :expressionless: XD

IDE 1.5.5 --> Compilare sketch per ATtiny su IDE 1.5.8 - Generale - Arduino Forum

Ah. Grazie frat :*

Senza dover disturbale l'instabile v1.5.5 dell'IDE ]:smiley: , già da moltissimo tempo, all'interno del package di Arduino, è disponibile l'utility avr-size (... che suppongo è quella che usa l'IDE 1.5.x per dare quelle info) ... basta saperla usare ... e QUI è spiegato come :wink:

Guglielmo

La parte AVR della 1.5.5 non è altro che la 1.0.5 + patch.
La parte SAM è in beta.
Siccome non ho la DUE, usa la 1.5.5 per ATmega e ATtiny e mi trovo BENISSIMO!!

Grazie ragazzi !
Ora mi son ricordato dell'ava-size :smiley:

Per quanto riguarda l'IDE non lo sapevo, dato che ancora uso l'1.0

PaoloP:
La parte AVR della 1.5.5 non è altro che la 1.0.5 + patch.
La parte SAM è in beta.
Siccome non ho la DUE, usa la 1.5.5 per ATmega e ATtiny e mi trovo BENISSIMO!!

Paolo, il fatto che tu ti ci trovi "benissimo" non cambia che, sul sito ufficiale ? definita : "Arduino 1.5.5 BETA" ... e, mi spiace per te, ma finchè un prodotto ? definito BETA, ? un prodotto "instabile".

Tu vuoi divertirtici ? Fai pure, ma quando la suggerisci devi dire che si tratta di una BETA ! ]:smiley:

Guglielmo

@anerdev:
se vuoi sapere di più su avr-size e su come usarlo senza passare all’IDE 1.5, ti segnalo questo mio articolo.

leo72:
se vuoi sapere di più su avr-size e su come usarlo senza passare all'IDE 1.5, ti segnalo questo mio articolo.

Emmm ... Leo ... cosa sono ancora gli effetti della mente offuscata dall'alcol e dal panettone ??? ]:smiley:

E' esattamente quello che gli ho linkato io alcuni post più su ... QUI XD :grin: XD :grin: XD

Guglielmo

Grazie a tutti ragazzi :smiley:
Ora devo solo trovare quel tipo di serratura hi hi hi

gpb01:
Emmm ... Leo ... cosa sono ancora gli effetti della mente offuscata dall'alcol e dal panettone ??? ]:smiley:

Oltre al panettone+alcool ho gli effetti del casino dei figlioli a casa che mi sfondano costantemente i timpani ed il lavoro per la restante parte della giornata. Mi sto accorgendo di iniziare a sognare il 7 gennaio come la fine di tutti i miei incubi :sweat_smile: