Reverse Engineering att emulera bläckpatroner för skrivare Epson (8 / 8 steg)
Steg 8: Efterlikna bläckpatroner
Nu är problemet med detta att jag inte vill min falska bläckpatroner att någonsin få användas upp, så för att göra det är vi har en fast soptipp som mikrokontroller kommer att ladda in i RAM-minne varje gång den startar. Detta gör att skrivaren inte läsa bara skriva till den också. När mikrokontroller är avstängd sedan tillbaka på, återställs tidigare data. (Dubbel Bonus)
Lagra datamatriser i mikrokontroller, placera detta någonstans under inkludera, men innan void main)
Obs: Detta kan variera mellan olika microcontroller familjer, men det fungerar fint med min PIC18F
ram unsigned char svart [32] = {0x10, 0x00, 0x02, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x90, 0x6A, 0x17, 0xE3, 0x54, 0xA3, 0x39, 0x50, 0x14, 0x15, 0x31, 0x93, 0xE4, 0xB4, 0x24, 0x96, 0x57, 0x04, 0x35, 0xF5, 0xE4, 0x14};
ram unsigned char cyan [32] = {0x4C, 0x04, 0x01, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x90, 0x5A, 0x19, 0xF0, 0x94, 0x03, 0x3B, 0x50, 0x16, 0x17, 0x31, 0x93, 0xE4, 0xB4, 0x24, 0x96, 0x57, 0x04, 0x35, 0xF5, 0xE4, 0x34};
ram unsigned char gul [32] = {0x4A, 0x04, 0x01, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x90, 0x6A, 0x8B, 0xC9, 0xA4, 0x41, 0x3B, 0x50, 0x1A, 0x1B, 0x31, 0x93, 0xE4, 0xB4, 0x24, 0x96, 0x57, 0x04, 0x35, 0xF5, 0xE4, 0x74};
Obs: Märkte att jag inte har Magenta? Det är eftersom det är den bläckpatron som jag inte har.
Nästa steg är att skriva en rutin som kontrollerar vilken bläckpatron som efterfrågas och tillåta värd att läsa och skriva till den.
Detta är hur jag gjorde det:
void main () { While(1) { epsnCartStartListen(); While(epsnCartReady()==1); Vänta på signalen redo att gå tillbaka till låg While(epsnCartReady()==0); om (addr & 0x7 == 0x01) {/ / om de första 3 bitarna är lika med 0x01 IF(addr&0x08) {//WriteMode-Check till se om den vill skriva
unsigned char * inkPtr;
char addr = 0x00;
...
addr = espnCartGetAddr();
inkPtr = & svart [0]; Peka på den svarta datan
} else om (addr & 0x7 == 0x03) {/ / om de första 3 bitarna är lika med 0x03
inkPtr = & cyan [0]; Peka på den cyan datan
} else om (addr [i] & 0x7 == 0x05) {
inkPtr = & cyan [0]; Detta är tänkt att vara Magenta, men jag har inte som
} else om (addr [i] & 0x7 == 0x07) {
inkPtr = & gul [0];
} annat {
fortsätter: / / gå tillbaka till början av huvudloop eftersom vi inte vet denna adress
}
While(epsnCartReady()) {//keep looping tills första går låg
* inkPtr = epsnCartIn();
data pekaren pekar på
skrivs med nya data
inkPtr ++; Öka pekaren
}
} annat {//Read läge
While(epsnCartReady()) {
epsnCartOut(*inkPtr);
Utgång data pekaren pekar på
inkPtr ++; Inrement pekaren
}
}
}
}
Efter denna nya programmeringskod och slå på skrivaren, accepterade skrivaren 4 imaginära patroner tack vare min mikrokontroller. Jag är också ganska chockad att jag accepterade cyan ink cartridge data för magenta aswell!
Detta är en enorm bedrift för mig eftersom detta är min första riktiga världen omvänd ingenjörskonst jag någonsin gjort och jag fick lovande resultat.
Nu kan jag fortsätta med att vrida skrivaren i en 3D-skrivare
Jag hoppas ni gillade detta, detta är min andra instructable och detta tog mig ett tag att skriva: P
Om du glåmig, är ni mer än välkommen att hämta källfiler
Skål!
Romerska