Hacking Spy Video Trakr med Frickin' Laser balkar... Och missiler! (9 / 9 steg)
Steg 9:
-Scanning fjärrkontrollens knappar
-Svarvning GPIOs på och av
-Läsa indata från GPIOs
-Förevisande skärm grafik som skildrar de viktigaste staterna
Denna app kommer att fungera bra utan hårdvara fäst, så du kan se den på skärmen Svaren. Vara medveten om, att utan på kretskortet ansluten, GPC7 flyter någonstans mellan 0v och 2.5V, och du kan få en tillfällig "av missiler" meddelande
C Langugae kod för Trakr Missile Launcher:
/ * Denna app var skrivna och testade med "Anfallare II" skum missillauncher.
Detta torn lanserar tre skum missiler, och har en inriktning laser.
Den torn original USB-gränssnittet styrelse skall ersättas med en drivrutin ombord som
är ansluten till den Trakr GPIO linjer. Denna app bör arbeta med nästan alla
liknande stationära missillauncher.
GPC0 = tilt upp
GPC1 = tilt ner
GPC2 = pannan vänster
GPC3 = pannan rätt
GPC4 = brand laser
GPC5 = brand missiler
GPC6 = missil avfyras (en cam i bränning mekanismen kopplar in en mikrobrytare efter
Varje missil avfyras. Detta håller programvaran refereras till position
lansera hårdvara
GPC7 = ladda om (av ammo)
GO-knappen fungerar som en "funktion" Skift (tack för idén, RorschachUK!).
Då GO-knappen hålls, skiftas fjärrkontrollens knappfunktioner till "missil kontroll" enligt följande:
Lforward = tilt upp
Lback = tilt ner
Rforward = pannan vänster
Rback = pannan rätt
B (Input2) = brand laser
C (menyn) = brand missiler
Observera att alla missil kontrollfunktioner är momentan, med undantag för "brand missiler",
som startar en fullständig sekvens till brand en enda missil.
Speciellt tack till RorschachUK för att förklara de bitmapp manipulation rutinerna.
Jag slutade använda bitmappar exklusivt, men lämnade DrawText kommandon för
demonstrationen
Denna app kan också enkelt modifieras för att styra en robot arm * /
#include "svt.h"
#include "JAPI.h"
#define GPC0 (1 << 0) //bitmask för pin GPC0 = 00000001
#define GPC1 (1 << 1) //bitmask för pin GPC1 = 00000010
#define GPC2 (1 << 2) //bitmask för pin GPC2 = 00000100
#define GPC3 (1 << 3) //bitmask för pin GPC3 = 00001000
#define GPC4 (1 << 4) //bitmask för pin GPC4 = 00010000
#define GPC5 (1 << 5) //bitmask för pin GPC5 = 00100000
#define GPC6 (1 << 6) //bitmask för pin GPC6 = 01000000
#define GPC7 (1 << 7) //bitmask för pin GPC7 = 10000000
/ * Namnen på dessa variabler genereras av kompilatorn och är baserade på
filnamnet för den bild som sammanställts. De är vana att beräkna längden
BMP bilder när konverteras de till data matriser * /
extern char _binary_Images_bkgndimg_bmp_end [];
extern char _binary_Images_bkgndimg_bmp_start [];
extern char _binary_Images_up_bmp_end [];
extern char _binary_Images_up_bmp_start [];
extern char _binary_Images_down_bmp_end [];
extern char _binary_Images_down_bmp_start [];
extern char _binary_Images_left_bmp_end [];
extern char _binary_Images_left_bmp_start [];
extern char _binary_Images_right_bmp_end [];
extern char _binary_Images_right_bmp_start [];
extern char _binary_Images_firemissile_bmp_end [];
extern char _binary_Images_firemissile_bmp_start [];
extern char _binary_Images_firelaser_bmp_end [];
extern char _binary_Images_firelaser_bmp_start [];
extern char _binary_Images_missile_bmp_end [];
extern char _binary_Images_missile_bmp_start [];
extern char _binary_Images_fins_bmp_end [];
extern char _binary_Images_fins_bmp_start [];
extern char _binary_Images_on_bmp_end [];
extern char _binary_Images_on_bmp_start [];
extern char _binary_Images_standby_bmp_end [];
extern char _binary_Images_standby_bmp_start [];
unsigned char stift; definiera variabeln "pins" för att läsa GPIO ingångar
Färg vit, grön, röd, blå, svart, grå, gul; färger som ska användas för text.
handtag från bild register
int bkgndimg;
int upp;
int ner;
int kvar;
int rätt;
int firemissile;
int firelaser;
int missil;
int fenor;
int på;
int standby;
bool bgstate; variabel för bakgrunden omritning staten
RGBColor - returnerar en färg struct
Färg RGBColor (unsigned char R, unsigned char G, unsigned char B, unsigned char T) {
Färg ret;
ret. R = R;
ret. G = G;
ret. B = B;
ret. Transparent = T;
återvändande ret;
}
void Splash() //defines en splash screen rutin
{
OpenGraphics(); Ta kontroll över skärmen
ClearScreen();
SetTextColor(white);
DrawText (1, 30, "Missil kontroll v1.3");
SetTextColor(yellow);
DrawText (15, 60, "av CPT_Hans");
Show();
Sleep(3000);
ClearScreen();
SetTextColor(green);
DrawText (20,15, "Tryck och håll");
DrawText (20.30, "GO nyckeln till");
DrawText (20,45, "Aktivera missil");
DrawText(20,60,"controls");
Show();
Sleep(3000);
ClearScreen();
SetTextColor(green);
DrawText (35,15, "L styrspak =");
DrawText(35,30,"up/down");
DrawText (35,55, "R styrspak =");
DrawText(35,70,"left/right");
Show();
Sleep(4000);
ClearScreen();
SetTextColor(green);
DrawText (35,15, "B-knappen =");
DrawText (35,30, "brand laser");
DrawText (35,55, "C-tangenten =");
DrawText (35,70, "eld missiler");
Show();
Sleep(3000);
}
void Start()
{
JAPI_SetIoOutputMode(GPC0+GPC1+GPC2+GPC3+GPC4+GPC5); Ställ in output stift GPC0 genom GPC5
JAPI_SetIoInputMode(GPC6+GPC7); Ange endast ingångsläge för stift GPC6 och GPC7
bgstate = 1; ange flaggan Rita inledande bakgrund
Registrera dig bilderna - tar en startadress och en storlek, som beräknar vi med tanke på slutet-minus startadressen
OpenImageRegister();
bkgndimg = RegisterImage (_binary_Images_bkgndimg_bmp_start, _binary_Images_bkgndimg_bmp_end - _binary_Images_bkgndimg_bmp_start);
upp = RegisterImage (_binary_Images_up_bmp_start, _binary_Images_up_bmp_end - _binary_Images_up_bmp_start);
ned = RegisterImage (_binary_Images_down_bmp_start, _binary_Images_down_bmp_end - _binary_Images_down_bmp_start);
vänster = RegisterImage (_binary_Images_left_bmp_start, _binary_Images_left_bmp_end - _binary_Images_left_bmp_start);
höger = RegisterImage (_binary_Images_right_bmp_start, _binary_Images_right_bmp_end - _binary_Images_right_bmp_start);
firemissile = RegisterImage (_binary_Images_firemissile_bmp_start, _binary_Images_firemissile_bmp_end - _binary_Images_firemissile_bmp_start);
firelaser = RegisterImage (_binary_Images_firelaser_bmp_start, _binary_Images_firelaser_bmp_end - _binary_Images_firelaser_bmp_start);
missil = RegisterImage (_binary_Images_missile_bmp_start, _binary_Images_missile_bmp_end - _binary_Images_missile_bmp_start);
fenor = RegisterImage (_binary_Images_fins_bmp_start, _binary_Images_fins_bmp_end - _binary_Images_fins_bmp_start);
å = RegisterImage (_binary_Images_on_bmp_start, _binary_Images_on_bmp_end - _binary_Images_on_bmp_start);
standby = RegisterImage (_binary_Images_standby_bmp_start, _binary_Images_standby_bmp_end - _binary_Images_standby_bmp_start);
CloseImageRegister();
Definiera färger för text på skärmen
White=RGBColor(255,255,255,0);
Green=RGBColor(0,255,0,0);
Red=RGBColor(255,0,0,0);
Blue=RGBColor(0,0,255,0);
Black=RGBColor(0,0,0,0);
Grey=RGBColor(128,128,128,0);
Yellow=RGBColor(255,255,0,0);
Ring plaska skärm på första starten
Splash();
Sova (2000);
ClearScreen();
Show();
CloseGraphics(); frigöra kontroll av skärmen
}
bool Run()
/ * Ordningen av kapslade if/else loopar nedan kan tyckas udda, men det
garanterar det korrekta fungerande ordnar av den tillhörande hårdvaran.
Ändringar i denna struktur kan vara nödvändigt när du använder olika hårdvara. */
{
om (GetRemoteKeyStatus (KEY_HOME)) //Check för programmet avslutar
returnera false;
Skanna den delstaten GO för att öppna missil kontroll subloop
om (GetRemoteKeyStatus(KEY_RUN)==1)
{
bgstate = 1; ange flaggan att rita om bakgrunden skärm på loop utgång
OpenMotors(); Detta håller motorerna fortfarande medan vi pan och tilt missil bärraketen
OpenGraphics(); Ta kontroll över skärmen
ClearScreen(); Radera skärm
SetTextColor(red);
DrawText (20, 20, "missil CTL ON"); Meddela att fjärrkontrollens knappfunktioner har förändrats
DrawImage(bkgndimg,0,0,black); Rita bkgndimg bild
DrawImage(missile,70,80,black); Rita vita missil kropp
DrawImage(fins,72,89,black); Rita röda fenor
DrawImage(on,30,20,black);
Show();
CloseGraphics(); frigöra kontroll av skärmen
stift = JAPI_GetIoInput(); binär representation av alla 8 stift
om (stift & GPC6)
{
JAPI_SetIoLow(GPC5);
}
om (stift & GPC7)
{
OpenGraphics(); Ta kontroll över skärmen
DrawImage(bkgndimg,0,0,black); Rita bkgndimg bild
SetTextColor(blue);
DrawText (20,80, "Ur missiler!");
Show();
CloseGraphics(); frigöra kontroll av skärmen
}
om (GetRemoteKeyStatus(KEY_INPUT2)) //Fire laser kommandosekvens
{
OpenGraphics(); Ta kontroll över skärmen
ClearScreen();
DrawImage(bkgndimg,0,0,black); Rita bkgndimg
DrawImage(missile,70,80,black); Rita vita missil kropp
DrawImage(fins,72,89,black); Rita röda fenor
DrawImage(firelaser,110,85,black); Rita laser splash
DrawImage(on,30,20,black);
SetTextColor(red);
DrawText (5, 20, "Bränning Laser!");
Show();
CloseGraphics(); frigöra kontroll av skärmen
JAPI_SetIoHigh(GPC4); Ange GPC4 pin hög (3.3V)
}
annat
{
JAPI_SetIoLow(GPC4); Ange GPC4 pin låg (0v)
}
om (GetRemoteKeyStatus(KEY_LEFT_FORWARD)) //Elevate torn kommandot sekvens
{
OpenGraphics(); Ta kontroll över skärmen
ClearScreen();
DrawImage(bkgndimg,0,0,black); Rita bkgndimg
DrawImage(missile,70,80,black); Rita vita missil kropp
DrawImage(fins,72,89,black); Rita röda fenor
DrawImage(up,75,70,black); Rita upp pil
DrawImage(on,30,20,black);
SetTextColor(white);
DrawText (5, 35, "Att öka missiler");
Show();
CloseGraphics(); frigöra kontroll av skärmen
JAPI_SetIoHigh(GPC0); Ange GPC0 pin hög (3.3V)
}
annat
{
JAPI_SetIoLow(GPC0); Ange GPC0 pin låg (0v)
}
om (GetRemoteKeyStatus(KEY_LEFT_BACK)) //Depress torn kommandot sekvens
{
OpenGraphics(); Ta kontroll över skärmen
ClearScreen();
DrawImage(bkgndimg,0,0,black); Rita bkgndimg
DrawImage(missile,70,80,black); Rita vita missil kropp
DrawImage(fins,72,89,black); Rita röda fenor
DrawImage(down,75,100,black); Dra ned pil
DrawImage(on,30,20,black);
SetTextColor(white);
DrawText (5, 35, "Sänka missiler");
Show();
CloseGraphics(); Ta kontroll över skärmen
JAPI_SetIoHigh(GPC1); Ange GPC1 pin hög (3.3V)
}
annat
{
JAPI_SetIoLow(GPC1); Ange GPC1 pin låg (0v)
}
om (GetRemoteKeyStatus(KEY_RIGHT_FORWARD)) //Traverse torn kvar kommandosekvens
{
OpenGraphics(); Ta kontroll över skärmen
ClearScreen();
DrawImage(bkgndimg,0,0,black); Rita bkgndimg
DrawImage(missile,70,80,black); Rita vita missil kropp
DrawImage(fins,72,89,black); Rita röda fenor
DrawImage(left,60,85,black); Rita pil vänster
DrawImage(on,30,20,black);
SetTextColor(white);
DrawText (5, 50, "Rotera vänster");
Show();
CloseGraphics(); frigöra kontroll av skärmen
JAPI_SetIoHigh(GPC2); Ange GPC2 pin hög (3.3V)
}
annat
{
JAPI_SetIoLow(GPC2); Ange GPC2 pin låg (0v)
}
om (GetRemoteKeyStatus(KEY_RIGHT_BACK)) //Traverse torn rätt kommandosekvens
{
OpenGraphics(); Ta kontroll över skärmen
ClearScreen();
DrawImage(bkgndimg,0,0,black); Rita bkgndimg
DrawImage(missile,70,80,black); Rita vita missil kropp
DrawImage(fins,72,89,black); Rita röda fenor
DrawImage(right,90,85,black); Dra höger pil
DrawImage(on,30,20,black);
SetTextColor(white);
DrawText (5, 50, "Rotera höger");
Show();
CloseGraphics(); frigöra kontroll av skärmen
JAPI_SetIoHigh(GPC3); Ange GPC3 pin hög (3.3V)
}
annat
{
JAPI_SetIoLow(GPC3); Ange GPC3 pin låg (0v)
}
om (GetRemoteKeyStatus(KEY_MENU)) //Missile bränning sekvens
{
OpenGraphics(); Ta kontroll över skärmen
ClearScreen();
DrawImage(bkgndimg,0,0,black); Rita bkgndimg
DrawImage(missile,70,80,black); Rita vita missil kropp
DrawImage(fins,72,89,black); Rita röda fenor
DrawImage(firemissile,60,96,black); Rita missil avgaser
DrawImage(on,30,20,black);
SetTextColor(red);
DrawText (5, 65, "Bränning missil!");
Show();
CloseGraphics(); frigöra kontroll av skärmen
JAPI_SetIoHigh(GPC5); Ange GPC5 pin hög (3.3V)
/ * Det är nödvändigt att pausa här, låta den launcher kamaxel
rotera från mikrobrytare; en mekanisk begränsning
maskinvara * /
Sleep(1500);
}
}
annat
{
stift = JAPI_GetIoInput(); binär representation av alla 8 stift
om (stift & GPC6) //Check för position i camsshaft
{
JAPI_SetIoLow(GPC5); Stäng av signalen att avfyra missiler motor
}
om (bgstate == 1) //check att se om bakgrunden omritning krävs
{
CloseMotors();
OpenGraphics(); Ta kontroll över skärmen
ClearScreen();
SetTextColor(green);
DrawText (20, 20, "missil CTL OFF"); Meddela att fjärrkontrollens knappfunktioner är normala
DrawImage(bkgndimg,0,0,black); Rita bkgndimg bild
DrawImage(standby,25,20,black);
Show();
CloseGraphics(); frigöra kontroll av skärmen
bgstate = 0; återställa flaggan så att bakgrunden inte behöver ritas om
}
}
{
Sleep(200); / / wait för 200ms
}
return true;
}
void End()
{
CloseMotors()
CloseGraphics()
}
Här är några ytterligare resurser som kan vara användbara när hacking Spy Video Trakr:
Spy Video Trakr Wiki
http://www.trakrhakr.com/wiki/index.php?title=main_page
Officiella Spy Video Trakr Forum:
http://www.spygear.net/forum/viewforum.php?f=18
Kul med Snap kretsar Hacks:
http://funwithsnapcircuits.wordpress.com/2011/03/17/and-Now-for-Something-completely-different/
Olydiga Tiger hackor:
http://disobedienttiger.blogspot.com/search/Label/Spy%20Trakr
Hacka en dag första hacka:
http://hackaday.com/2010/09/02/Spy-video-trakr-Software-and-First-Hack/
FCC REFERENS (KRETSSCHEMAN, EXTERNA BILDER, INRE BILDER):
FCC referens för Trakr:
HTTPS://FJALLFOSS.FCC.GOV/OETCF/EAS/REPORTS/VIEWEXHIBITREPORT.CFM?MODE=EXHIBITS&REQUESTTIMEOUT=500&CALLEDFROMFRAME=N&APPLICATION_ID=545152&FCC_ID= "N3ESPYVIDEOTRAKR1"
FCC referens för Trakr:
HTTPS://FJALLFOSS.FCC.GOV/OETCF/EAS/REPORTS/VIEWEXHIBITREPORT.CFM?MODE=EXHIBITS&REQUESTTIMEOUT=500&CALLEDFROMFRAME=N&APPLICATION_ID=884190&FCC_ID= "N3ESPYVIDEOTRAKR2"
ANDRA REFERENSMATERIAL:
W55VA91 Designguide:
http://docs.Google.com/Viewer?URL=http%3A%2F%2Fdl.Dropbox.com%2Fu%2F4295670%2FW55VA91_DesignGuide%2528fullset%2529%2520-%2520A4.pdf
nRF24L01 (Radio Transceiver Chip):
http://www.nordicsemi.com/eng/Products/2.4Ghz-RF/nRF24L01
ARM926EJ-S tekniska referensmanual:
http://Infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0198e/index.html
W9864G6IH 8 MByte SDRAM:
http://www.WINBOND.com/HQ/ENU/ProductAndSales/ProductLines/SpecialtyDRAM/SDRAM/W9864G6IH.htm
JÄRNVAROR SPECIFIKATIONEN:
Två ARM 9 processorer (Nuvoton W55VA91: ARM926EJ core kör @ 192 MHz, och järnvaror-hjälp JPEG codec)
8 MB ombord RAM – för sofistikerad, minneskrävande, användargenererat apps (programmerade i C).
SD-kortplats-för flyttbara, hög kapacitet program, video, ljud och bild lagring.
Tillgänglig USB-host port – för anslutning av USB-enheter.
USB-enheten port – för att ansluta till en dator för omprogrammering och kommunikation.
Omni Vision VGA kamera – potentiella bildhastighet av 30 bilder per sekund (TRAKR är inställd för 15 fps). (Aktiverar programmering för realtid bildbehandling.)
Nordiska 2.4 GHz radio – för låg ström trådlös kommunikation.
Dubbla, hög nuvarande (2A) H-broar med nuvarande sensorer – möjliggör avancerad motorstyrning.
QVGA skärm & högtalare på fjärrkontroll med 5 knappar och 2 joysticks – potentiella tilldela för olika uppgifter.
Ljud block med polyfonisk synt-inkluderar stöd för talsyntes.
Fungerar systemet: Lunix OS
IR-lampan lyser genom att koppla på en SS8050 transistor.
FLASH/SPI/USB Boot
BLÖDNING KANT TRAKR HACKA:
http://www.trakrhakr.com/wiki/index.php?title=bootstrapping