proxmark3/armsrc/Standalone/readme.md

109 lines
3.6 KiB
Markdown
Raw Normal View History

2017-10-22 23:00:53 +08:00
# StandAlone Modes
2017-08-26 19:01:35 +08:00
2019-04-26 05:20:33 +08:00
This contains functionality for different StandAlone modes. The fullimage will be built given the correct compiler flags used. Build targets for these files are contained in `armsrc/Makefile` and `common/Makefile.hal`
2017-08-26 19:01:35 +08:00
2017-10-22 23:00:53 +08:00
If you want to implement a new standalone mode, you need to implement the methods provided in `standalone.h`.
2019-04-26 05:20:33 +08:00
Have a look at the skeleton standalone mode called IceRun, in the files `lf_icerun.c lf_icerun.h`.
As it is now, you can only have one standalone mode installed at the time.
2017-08-26 19:01:35 +08:00
2017-10-22 23:00:53 +08:00
## Implementing a standalone mode
2017-08-26 19:01:35 +08:00
2019-04-26 05:20:33 +08:00
We suggest you keep your standalone code inside the Armsrc/Standalone folder. And that you name your files according to your standalone mode name.
The `standalone.h` states that you must have two function implemented.
The ModInfo function, which is your identification of your standalone mode. This string will show when running the command `hw status` on the client.
The RunMod function, which is your "main" function when running. You need to check for Usb commands, in order to let the pm3 client break the standalone mode. See this basic skeleton of main function RunMod() and Modinfo() below.
2018-09-04 04:36:43 +08:00
2018-09-04 04:45:01 +08:00
````
2019-04-26 03:50:55 +08:00
void ModInfo(void) {
2019-04-26 05:20:33 +08:00
DbpString(" LF good description of your mode - aka FooRun (my name)");
2019-04-26 03:50:55 +08:00
}
void RunMod(void) {
// led show
StandAloneMode();
2019-04-26 05:20:33 +08:00
// Do you target LF or HF?
FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
// main loop
for (;;) {
WDT_HIT();
// exit from standalone mode, just send a usbcommand
if (usb_poll_validate_length()) break;
// do your standalone stuff..
}
2018-09-04 04:45:01 +08:00
````
2017-08-26 19:01:35 +08:00
2019-04-26 05:20:33 +08:00
Each standalone mode needs to have its own compiler flag to be added in `armsrc\makefile`.
## Naming your standalone mode
We suggest that you follow these guidelines,
- Use HF/LF to denote which frequence your mod is targeting.
- Use you own github name/similar for perpetual honour to denote your mode.
sample:
`LF_FOORUN`
2017-10-22 23:00:53 +08:00
2019-04-26 05:20:33 +08:00
Which indicates your mode targets LF and is called FOO.
This leads to your next step, your DEFINE name needed in Makefile.
2019-04-26 05:23:44 +08:00
2019-04-26 05:20:33 +08:00
`WITH_STANDALONE_LF_FOORUN`
## Update COMMON/MAKEFILE.HAL
2017-08-26 19:01:35 +08:00
2019-04-26 05:23:44 +08:00
Samples of directive flag used in the `common/Makefile.ha` and your suggested DEFINE.
2018-09-04 04:45:01 +08:00
```
2019-04-26 04:15:16 +08:00
#PLATFORM_DEFS += -DWITH_STANDALONE_LF_SAMYRUN
#PLATFORM_DEFS += -DWITH_STANDALONE_LF_ICERUN
#PLATFORM_DEFS += -DWITH_STANDALONE_LF_PROXBRUTE
#PLATFORM_DEFS += -DWITH_STANDALONE_LF_HIDBRUTE
#PLATFORM_DEFS += -DWITH_STANDALONE_HF_YOUNG
#PLATFORM_DEFS += -DWITH_STANDALONE_HF_MATTYRUN
#PLATFORM_DEFS += -DWITH_STANDALONE_HF_COLIN
#PLATFORM_DEFS += -DWITH_STANDALONE_HF_BOG
2019-04-26 05:23:44 +08:00
#PLATFORM_DEFS += -DWITH_STANDALONE_LF_FOORUN
2018-09-04 04:45:01 +08:00
```
2019-04-26 05:20:33 +08:00
## Update ARMSRC/MAKEFILE
Add your source code files like the following sample in the `armsrc/Makefile`
2018-09-04 04:36:43 +08:00
```
2019-04-26 05:23:44 +08:00
# WITH_STANDALONE_LF_ICERUN
ifneq (,$(findstring WITH_STANDALONE_LF_ICERUN,$(APP_CFLAGS)))
SRC_STANDALONE = lf_icerun.c
endif
2019-04-26 05:20:33 +08:00
# WITH_STANDALONE_LF_FOO
ifneq (,$(findstring WITH_STANDALONE_LF_FOO,$(APP_CFLAGS)))
SRC_STANDALONE = lf_foo.c
2018-09-04 04:36:43 +08:00
endif
```
2019-04-26 05:20:33 +08:00
## Adding identification string of your mode
2019-04-26 03:50:55 +08:00
Do please add a identification string in a function called `ModInfo` inside your source code file.
2017-10-22 23:00:53 +08:00
This will enable an easy way to detect on client side which standalone mods has been installed on the device.
2018-09-04 04:36:43 +08:00
2019-04-26 05:20:33 +08:00
````
void ModInfo(void) {
DbpString(" LF good description of your mode - aka FooRun (my name)");
}
````
2019-04-26 03:50:55 +08:00
## Compiling your standalone mode
2019-04-26 04:15:16 +08:00
Once all this is done, you and others can now easily compile different standalone modes by just selecting one of the standalone modes in `common/Makefile.hal`, e.g.:
2018-09-04 04:36:43 +08:00
```
2019-04-26 05:20:33 +08:00
PLATFORM_DEFS += -DWITH_STANDALONE_LF_FOO
```
2019-04-26 05:20:33 +08:00
Remember only one can be selected at a time for now.