summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openpcd/firmware/Makefile27
-rw-r--r--openpcd/firmware/include/librfid/rfid.h2
-rw-r--r--openpcd/firmware/link/AT91SAM7S256-ROM-dfu-fullimage.ld145
-rw-r--r--openpcd/firmware/src/openpcd.h43
-rw-r--r--openpcd/firmware/src/os/dbgu.c (renamed from openpcd/firmware/src/dbgu.c)11
-rw-r--r--openpcd/firmware/src/os/dbgu.h (renamed from openpcd/firmware/src/dbgu.h)0
-rw-r--r--openpcd/firmware/src/os/dfu.c (renamed from openpcd/firmware/src/dfu.c)9
-rw-r--r--openpcd/firmware/src/os/dfu.h (renamed from openpcd/firmware/src/dfu.h)0
-rw-r--r--openpcd/firmware/src/os/fifo.c (renamed from openpcd/firmware/src/fifo.c)0
-rw-r--r--openpcd/firmware/src/os/fifo.h (renamed from openpcd/firmware/src/fifo.h)0
-rw-r--r--openpcd/firmware/src/os/flash.c (renamed from openpcd/firmware/src/flash.c)0
-rw-r--r--openpcd/firmware/src/os/led.c (renamed from openpcd/firmware/src/led.c)7
-rw-r--r--openpcd/firmware/src/os/led.h (renamed from openpcd/firmware/src/led.h)0
-rw-r--r--openpcd/firmware/src/os/main.c (renamed from openpcd/firmware/src/main.c)6
-rw-r--r--openpcd/firmware/src/os/main.h (renamed from openpcd/firmware/src/main.h)0
-rw-r--r--openpcd/firmware/src/os/pcd_enumerate.c (renamed from openpcd/firmware/src/pcd_enumerate.c)9
-rw-r--r--openpcd/firmware/src/os/pcd_enumerate.h (renamed from openpcd/firmware/src/pcd_enumerate.h)0
-rw-r--r--openpcd/firmware/src/os/pio_irq.c (renamed from openpcd/firmware/src/pio_irq.c)0
-rw-r--r--openpcd/firmware/src/os/pio_irq.h (renamed from openpcd/firmware/src/pio_irq.h)0
-rw-r--r--openpcd/firmware/src/os/req_ctx.c (renamed from openpcd/firmware/src/req_ctx.c)5
-rw-r--r--openpcd/firmware/src/os/req_ctx.h47
-rw-r--r--openpcd/firmware/src/os/syscalls.c (renamed from openpcd/firmware/src/syscalls.c)0
-rw-r--r--openpcd/firmware/src/os/trigger.c (renamed from openpcd/firmware/src/trigger.c)4
-rw-r--r--openpcd/firmware/src/os/trigger.h (renamed from openpcd/firmware/src/trigger.h)0
-rw-r--r--openpcd/firmware/src/os/usb_benchmark.c (renamed from openpcd/firmware/src/usb_benchmark.c)9
-rw-r--r--openpcd/firmware/src/os/usb_handler.c (renamed from openpcd/firmware/src/usb_handler.c)13
-rw-r--r--openpcd/firmware/src/os/usb_handler.h (renamed from openpcd/firmware/src/usb_handler.h)0
-rw-r--r--openpcd/firmware/src/pcd/main_analog.c (renamed from openpcd/firmware/src/main_analog.c)10
-rw-r--r--openpcd/firmware/src/pcd/main_dumbreader.c (renamed from openpcd/firmware/src/main_dumbreader.c)12
-rw-r--r--openpcd/firmware/src/pcd/main_pwm.c (renamed from openpcd/firmware/src/main_pwm.c)10
-rw-r--r--openpcd/firmware/src/pcd/main_reqa.c (renamed from openpcd/firmware/src/main_reqa.c)19
-rw-r--r--openpcd/firmware/src/pcd/pwm.c (renamed from openpcd/firmware/src/pwm.c)9
-rw-r--r--openpcd/firmware/src/pcd/pwm.h (renamed from openpcd/firmware/src/pwm.h)0
-rw-r--r--openpcd/firmware/src/pcd/rc632.c (renamed from openpcd/firmware/src/rc632.c)11
-rw-r--r--openpcd/firmware/src/pcd/rc632.h (renamed from openpcd/firmware/src/rc632.h)0
-rw-r--r--openpcd/firmware/src/pcd/rc632_highlevel.c (renamed from openpcd/firmware/src/rc632_highlevel.c)6
-rw-r--r--openpcd/firmware/src/pcd/rfid_layer2_iso14443a.c (renamed from openpcd/firmware/src/rfid_layer2_iso14443a.c)0
-rw-r--r--openpcd/firmware/src/picc/load_modulation.c31
-rw-r--r--openpcd/firmware/src/picc/load_modulation.h7
-rw-r--r--openpcd/firmware/src/picc/piccsim.h2
-rw-r--r--openpcd/firmware/src/picc/tc.c (renamed from openpcd/firmware/src/tc.c)5
-rw-r--r--openpcd/firmware/src/picc/tc.h (renamed from openpcd/firmware/src/tc.h)0
-rw-r--r--openpcd/firmware/src/start/Cstartup.S56
43 files changed, 319 insertions, 196 deletions
diff --git a/openpcd/firmware/Makefile b/openpcd/firmware/Makefile
index 2999093..4d8f2a6 100644
--- a/openpcd/firmware/Makefile
+++ b/openpcd/firmware/Makefile
@@ -75,17 +75,32 @@ SRC =
# List C source files here which must be compiled in ARM-Mode.
# use file-extension c for "c-only"-files
+
+# First, build library ...
SRCARM = lib/lib_AT91SAM7.c
-SRCARM += src/pcd_enumerate.c src/fifo.c src/dbgu.c \
- src/led.c src/rc632.c src/rc632_highlevel.c src/req_ctx.c \
- src/trigger.c src/main.c src/syscalls.c src/pwm.c src/tc.c \
- src/usb_handler.c src/ssc.c src/usb_benchmark.c src/dfu.c \
- src/$(TARGET).c src/start/Cstartup_SAM7.c
ifdef DEBUG
SRCARM += lib/vsprintf.c lib/ctype.c lib/string.c
endif
-SRCARM += src/rfid_layer2_iso14443a.c
+# then, OS ...
+SRCARM += src/os/pcd_enumerate.c src/os/fifo.c src/os/dbgu.c \
+ src/os/led.c src/os/req_ctx.c src/os/trigger.c \
+ src/os/main.c src/os/syscalls.c src/os/usb_handler.c \
+ src/os/usb_benchmark.c src/os/dfu.c src/start/Cstartup_SAM7.c
+
+ifdef PCD
+# PCD support code
+SRCARM += src/pcd/rc632.c src/pcd/rc632_highlevel.c \
+ src/pcd/pwm.c src/pcd/rfid_layer2_iso14443a.c
+# finally, the actual main application
+SRCARM += src/pcd/$(TARGET).c
+else
+# PICC support code
+SRCARM += src/picc/tc.c src/picc/ssc.c
+# finally, the actual main application
+SRCARM += src/picc/$(TARGET).c
+endif
+
# List C++ source files here.
# use file-extension cpp for C++-files (use extension .cpp)
diff --git a/openpcd/firmware/include/librfid/rfid.h b/openpcd/firmware/include/librfid/rfid.h
index eb96378..308f46e 100644
--- a/openpcd/firmware/include/librfid/rfid.h
+++ b/openpcd/firmware/include/librfid/rfid.h
@@ -1,7 +1,7 @@
#ifndef _RFID_H
#define _RFID_H
-#include "dbgu.h"
+#include <os/dbgu.h>
#define rfid_hexdump hexdump
diff --git a/openpcd/firmware/link/AT91SAM7S256-ROM-dfu-fullimage.ld b/openpcd/firmware/link/AT91SAM7S256-ROM-dfu-fullimage.ld
index 9bb5163..3932e64 100644
--- a/openpcd/firmware/link/AT91SAM7S256-ROM-dfu-fullimage.ld
+++ b/openpcd/firmware/link/AT91SAM7S256-ROM-dfu-fullimage.ld
@@ -41,82 +41,79 @@ MEMORY
SECTIONS
{
- . = 0x00000000;
- /* first section is .text which is used for code */
- .text : {
- src/start/Cstartup*.o (.text)
- *(.dfu.func)
- *(.dfu.struct)
- } >FLASH
- _etext_dfu = . ;
-
- .data : AT (_etext_dfu) {
- _data_dfu = . ;
- KEEP(*(.vectram))
- src/dfu.o (.data)
+ . = 0x00000000;
+ /* first section is .text which is used for code */
+ .dfu.text 0x00100000: AT ( 0x00000000 ) {
+ src/start/Cstartup*.o (.text)
+ *(.dfu.func)
+ *(.dfu.struct)
+ . = ALIGN(4);
+ } >FLASH
+
+ _etext_dfu = . ;
+
+ .dfu.data 0x00200000: AT ( ADDR(.dfu.text) + SIZEOF(.dfu.text) - ADDR(.dfu.text) ) {
+ _data_dfu = . ;
+ *(.vectram)
+ src/os/dfu.o (.data)
+ . = ALIGN(4);
+ } >DATA
+
_edata_dfu = . ;
- } >DATA
- .text : {
- . = 0x00002000;
- *(.dfu.functab)
-
- . = 0x00002100;
- *(.text) /* remaining code */
-
- *(.glue_7t) *(.glue_7)
-
- } >FLASH
-
- . = ALIGN(4);
-
- /* .rodata section which is used for read-only data (constants) */
-
- .rodata :
- {
- *(.rodata)
- } >FLASH
-
- . = ALIGN(4);
-
- _etext = . ;
- PROVIDE (etext = .);
-
- /* .data section which is used for initialized data */
-
- .data : AT (_etext)
- {
- _data = . ;
- *(.data)
- SORT(CONSTRUCTORS)
- . = ALIGN(4);
- *(.fastrun)
- } >DATA
- . = ALIGN(4);
-
- _edata = . ;
- PROVIDE (edata = .);
-
- /* .bss section which is used for uninitialized data */
-
- .bss :
- {
- __bss_start = . ;
- __bss_start__ = . ;
- *(.bss)
- *(COMMON)
- }
- . = ALIGN(4);
- __bss_end__ = . ;
- __bss_end__ = . ;
- _end = .;
- . = ALIGN(4);
- .int_data :
- {
- *(.internal_ram_top)
- }> STACK
-
- PROVIDE (end = .);
+ .dfu.functab 0x00102100: AT ( ADDR(.dfu.functab) - ADDR(.dfu.text) ) {
+ *(.dfu.functab)
+ . = ALIGN(4);
+ } >FLASH
+
+ .text 0x00102200: AT ( ADDR(.text) - ADDR(.dfu.text) ) {
+ *(.text) /* remaining code */
+ *(.glue_7t) *(.glue_7)
+ . = ALIGN(4);
+ } >FLASH
+
+
+ /* .rodata section which is used for read-only data (constants) */
+ .rodata : AT ( ADDR(.text) + SIZEOF(.text) - ADDR(.dfu.text) ) {
+ *(.rodata*)
+ . = ALIGN(4);
+ } >FLASH
+
+ _etext = . ;
+ PROVIDE (etext = .);
+
+ /* .data section which is used for initialized data */
+ .data : AT ( ADDR(.rodata) + SIZEOF(.rodata) - ADDR(.dfu.text) ) {
+ _data = . ;
+ *(.data)
+ SORT(CONSTRUCTORS)
+ . = ALIGN(4);
+ *(.fastrun)
+ . = ALIGN(4);
+ } >DATA
+
+ _edata = . ;
+ PROVIDE (edata = .);
+
+ /* .bss section which is used for uninitialized data */
+ .bss : {
+ __bss_start = . ;
+ __bss_start__ = . ;
+ *(.bss)
+ *(COMMON)
+ } >DATA
+
+ . = ALIGN(4);
+ __bss_end__ = . ;
+ __bss_end__ = . ;
+ _end = . ;
+
+ . = ALIGN(4);
+ .int_data : {
+ *(.internal_ram_top)
+ } >STACK
+
+ PROVIDE (end = .);
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
diff --git a/openpcd/firmware/src/openpcd.h b/openpcd/firmware/src/openpcd.h
index ec577d3..aa47fa4 100644
--- a/openpcd/firmware/src/openpcd.h
+++ b/openpcd/firmware/src/openpcd.h
@@ -49,49 +49,6 @@
#define OPENPCD_IRQ_PRIO_UDP (AT91C_AIC_PRIOR_LOWEST+1)
#define OPENPCD_IRQ_PRIO_RC632 AT91C_AIC_PRIOR_LOWEST
-#define MAX_HDRSIZE sizeof(struct openpcd_hdr)
-#define MAX_REQSIZE (64-MAX_HDRSIZE)
-
-#define req_buf_payload(x) (x->data[x->hdr_len])
-#define req_buf_hdr(x) (x->data[0])
-
-#include <sys/types.h>
-
-struct req_buf {
- u_int16_t hdr_len;
- u_int16_t tot_len;
- u_int8_t data[64];
-};
-
-struct req_ctx {
- u_int16_t seq; /* request sequence number */
- u_int16_t flags;
- volatile u_int32_t state;
- struct req_buf rx;
- struct req_buf tx;
-};
-
-#define RCTX_STATE_FREE 0x00
-#define RCTX_STATE_UDP_RCV_BUSY 0x01
-#define RCTX_STATE_UDP_RCV_DONE 0x02
-#define RCTX_STATE_MAIN_PROCESSING 0x03
-#define RCTX_STATE_RC632IRQ_BUSY 0x04
-
-#define RCTX_STATE_UDP_EP2_PENDING 0x10
-#define RCTX_STATE_UDP_EP2_BUSY 0x11
-
-#define RCTX_STATE_UDP_EP3_PENDING 0x12
-#define RCTX_STATE_UDP_EP3_BUSY 0x13
-
-#define RCTX_STATE_SSC_RX_BUSY 0x20
-
-#define NUM_REQ_CTX 8
-extern struct req_ctx *req_ctx_find_get(unsigned long old_state, unsigned long new_state);
-extern struct req_ctx *req_ctx_find_busy(void);
-extern void req_ctx_set_state(struct req_ctx *ctx, unsigned long new_state);
-extern void req_ctx_put(struct req_ctx *ctx);
-extern u_int8_t req_ctx_num(struct req_ctx *ctx);
-
extern void _init_func(void);
extern void _main_func(void);
diff --git a/openpcd/firmware/src/dbgu.c b/openpcd/firmware/src/os/dbgu.c
index 2e8cb8b..e64d8eb 100644
--- a/openpcd/firmware/src/dbgu.c
+++ b/openpcd/firmware/src/os/dbgu.c
@@ -15,11 +15,10 @@
// Include Standard files
#include <board.h>
-#include "dbgu.h"
-#include "rc632.h"
-#include "openpcd.h"
-#include "led.h"
-#include "main.h"
+#include <os/dbgu.h>
+#include "../openpcd.h"
+#include <os/led.h>
+#include <os/main.h>
#include <asm/system.h>
#define USART_SYS_LEVEL 4
@@ -79,6 +78,7 @@ static void DBGU_irq_handler(void)
AT91F_DBGU_Printk("Toggling LED 2\n\r");
led_toggle(2);
break;
+#if 0
case '4':
AT91F_DBGU_Printk("Testing RC632 : ");
if (rc632_test(RAH) == 0)
@@ -99,6 +99,7 @@ static void DBGU_irq_handler(void)
case '7':
rc632_dump();
break;
+#endif
default:
if (_main_dbgu(value) < 0)
AT91F_DBGU_Printk("\n\r");
diff --git a/openpcd/firmware/src/dbgu.h b/openpcd/firmware/src/os/dbgu.h
index 8dd34be..8dd34be 100644
--- a/openpcd/firmware/src/dbgu.h
+++ b/openpcd/firmware/src/os/dbgu.h
diff --git a/openpcd/firmware/src/dfu.c b/openpcd/firmware/src/os/dfu.c
index a56e538..ec99cef 100644
--- a/openpcd/firmware/src/dfu.c
+++ b/openpcd/firmware/src/os/dfu.c
@@ -11,13 +11,14 @@
#include <usb_dfu.h>
#include <lib_AT91SAM7.h>
-#include "dfu.h"
-#include "pcd_enumerate.h"
-#include "openpcd.h"
+#include <os/dfu.h>
+#include <os/pcd_enumerate.h>
+#include <os/req_ctx.h>
+#include "../openpcd.h"
/* If debug is enabled, we need to access debug functions from flash
* and therefore have to omit flashing */
-#define DEBUG_DFU
+//#define DEBUG_DFU
#ifdef DEBUG_DFU
#define DEBUGE DEBUGP
diff --git a/openpcd/firmware/src/dfu.h b/openpcd/firmware/src/os/dfu.h
index a663688..a663688 100644
--- a/openpcd/firmware/src/dfu.h
+++ b/openpcd/firmware/src/os/dfu.h
diff --git a/openpcd/firmware/src/fifo.c b/openpcd/firmware/src/os/fifo.c
index b0ec152..b0ec152 100644
--- a/openpcd/firmware/src/fifo.c
+++ b/openpcd/firmware/src/os/fifo.c
diff --git a/openpcd/firmware/src/fifo.h b/openpcd/firmware/src/os/fifo.h
index d91c6c2..d91c6c2 100644
--- a/openpcd/firmware/src/fifo.h
+++ b/openpcd/firmware/src/os/fifo.h
diff --git a/openpcd/firmware/src/flash.c b/openpcd/firmware/src/os/flash.c
index 2aaf760..2aaf760 100644
--- a/openpcd/firmware/src/flash.c
+++ b/openpcd/firmware/src/os/flash.c
diff --git a/openpcd/firmware/src/led.c b/openpcd/firmware/src/os/led.c
index 1620444..8c34c6c 100644
--- a/openpcd/firmware/src/led.c
+++ b/openpcd/firmware/src/os/led.c
@@ -3,9 +3,10 @@
#include <errno.h>
#include <lib_AT91SAM7.h>
#include <openpcd.h>
-#include "openpcd.h"
-#include "usb_handler.h"
-#include "dbgu.h"
+#include "../openpcd.h"
+#include <os/usb_handler.h>
+#include <os/req_ctx.h>
+#include <os/dbgu.h>
static int led2port(int led)
{
diff --git a/openpcd/firmware/src/led.h b/openpcd/firmware/src/os/led.h
index 394107b..394107b 100644
--- a/openpcd/firmware/src/led.h
+++ b/openpcd/firmware/src/os/led.h
diff --git a/openpcd/firmware/src/main.c b/openpcd/firmware/src/os/main.c
index def9e57..c40fd79 100644
--- a/openpcd/firmware/src/main.c
+++ b/openpcd/firmware/src/os/main.c
@@ -1,9 +1,9 @@
#include <errno.h>
#include <string.h>
#include <include/lib_AT91SAM7.h>
-#include "dbgu.h"
-#include "led.h"
-#include "openpcd.h"
+#include <os/dbgu.h>
+#include <os/led.h>
+#include "../openpcd.h"
int main(void)
{
diff --git a/openpcd/firmware/src/main.h b/openpcd/firmware/src/os/main.h
index 1adc8f6..1adc8f6 100644
--- a/openpcd/firmware/src/main.h
+++ b/openpcd/firmware/src/os/main.h
diff --git a/openpcd/firmware/src/pcd_enumerate.c b/openpcd/firmware/src/os/pcd_enumerate.c
index 4d89e87..ed71a50 100644
--- a/openpcd/firmware/src/pcd_enumerate.c
+++ b/openpcd/firmware/src/os/pcd_enumerate.c
@@ -21,10 +21,11 @@
#include <lib_AT91SAM7.h>
#include <openpcd.h>
-#include "pcd_enumerate.h"
-#include "dfu.h"
-#include "openpcd.h"
-#include "dbgu.h"
+#include <os/pcd_enumerate.h>
+#include <os/req_ctx.h>
+#include <os/dfu.h>
+#include "../openpcd.h"
+#include <os/dbgu.h>
#define DEBUG_UDP_IRQ
#define DEBUG_UDP_EP0
diff --git a/openpcd/firmware/src/pcd_enumerate.h b/openpcd/firmware/src/os/pcd_enumerate.h
index 57ff88c..57ff88c 100644
--- a/openpcd/firmware/src/pcd_enumerate.h
+++ b/openpcd/firmware/src/os/pcd_enumerate.h
diff --git a/openpcd/firmware/src/pio_irq.c b/openpcd/firmware/src/os/pio_irq.c
index 3e65561..3e65561 100644
--- a/openpcd/firmware/src/pio_irq.c
+++ b/openpcd/firmware/src/os/pio_irq.c
diff --git a/openpcd/firmware/src/pio_irq.h b/openpcd/firmware/src/os/pio_irq.h
index 86021df..86021df 100644
--- a/openpcd/firmware/src/pio_irq.h
+++ b/openpcd/firmware/src/os/pio_irq.h
diff --git a/openpcd/firmware/src/req_ctx.c b/openpcd/firmware/src/os/req_ctx.c
index 984f6b9..831d48e 100644
--- a/openpcd/firmware/src/req_ctx.c
+++ b/openpcd/firmware/src/os/req_ctx.c
@@ -2,9 +2,10 @@
#include <stdlib.h>
#include <sys/types.h>
#include <asm/bitops.h>
+#include <os/dbgu.h>
+#include <os/req_ctx.h>
-#include "openpcd.h"
-#include "dbgu.h"
+#include "../openpcd.h"
/* FIXME: locking, FIFO order processing */
diff --git a/openpcd/firmware/src/os/req_ctx.h b/openpcd/firmware/src/os/req_ctx.h
new file mode 100644
index 0000000..f57f02f
--- /dev/null
+++ b/openpcd/firmware/src/os/req_ctx.h
@@ -0,0 +1,47 @@
+#ifndef _REQ_CTX_H
+#define _REQ_CTX_H
+
+#define MAX_HDRSIZE sizeof(struct openpcd_hdr)
+#define MAX_REQSIZE (64-MAX_HDRSIZE)
+
+#define req_buf_payload(x) (x->data[x->hdr_len])
+#define req_buf_hdr(x) (x->data[0])
+
+#include <sys/types.h>
+
+struct req_buf {
+ u_int16_t hdr_len;
+ u_int16_t tot_len;
+ u_int8_t data[64];
+};
+
+struct req_ctx {
+ u_int16_t seq; /* request sequence number */
+ u_int16_t flags;
+ volatile u_int32_t state;
+ struct req_buf rx;
+ struct req_buf tx;
+};
+
+#define RCTX_STATE_FREE 0x00
+#define RCTX_STATE_UDP_RCV_BUSY 0x01
+#define RCTX_STATE_UDP_RCV_DONE 0x02
+#define RCTX_STATE_MAIN_PROCESSING 0x03
+#define RCTX_STATE_RC632IRQ_BUSY 0x04
+
+#define RCTX_STATE_UDP_EP2_PENDING 0x10
+#define RCTX_STATE_UDP_EP2_BUSY 0x11
+
+#define RCTX_STATE_UDP_EP3_PENDING 0x12
+#define RCTX_STATE_UDP_EP3_BUSY 0x13
+
+#define RCTX_STATE_SSC_RX_BUSY 0x20
+
+#define NUM_REQ_CTX 8
+extern struct req_ctx *req_ctx_find_get(unsigned long old_state, unsigned long new_state);
+extern struct req_ctx *req_ctx_find_busy(void);
+extern void req_ctx_set_state(struct req_ctx *ctx, unsigned long new_state);
+extern void req_ctx_put(struct req_ctx *ctx);
+extern u_int8_t req_ctx_num(struct req_ctx *ctx);
+
+#endif /* _REQ_CTX_H */
diff --git a/openpcd/firmware/src/syscalls.c b/openpcd/firmware/src/os/syscalls.c
index ed989f1..ed989f1 100644
--- a/openpcd/firmware/src/syscalls.c
+++ b/openpcd/firmware/src/os/syscalls.c
diff --git a/openpcd/firmware/src/trigger.c b/openpcd/firmware/src/os/trigger.c
index 7fc51d1..b8cedf3 100644
--- a/openpcd/firmware/src/trigger.c
+++ b/openpcd/firmware/src/os/trigger.c
@@ -1,6 +1,6 @@
#include <lib_AT91SAM7.h>
-#include "openpcd.h"
-#include "trigger.h"
+#include <os/trigger.h>
+#include "../openpcd.h"
void trigger_init(void)
{
diff --git a/openpcd/firmware/src/trigger.h b/openpcd/firmware/src/os/trigger.h
index 597704b..597704b 100644
--- a/openpcd/firmware/src/trigger.h
+++ b/openpcd/firmware/src/os/trigger.h
diff --git a/openpcd/firmware/src/usb_benchmark.c b/openpcd/firmware/src/os/usb_benchmark.c
index 9f593f8..3637bc3 100644
--- a/openpcd/firmware/src/usb_benchmark.c
+++ b/openpcd/firmware/src/os/usb_benchmark.c
@@ -1,10 +1,11 @@
#include <errno.h>
#include <string.h>
#include <lib_AT91SAM7.h>
-#include "openpcd.h"
-#include "led.h"
-#include "pcd_enumerate.h"
-#include "usb_handler.h"
+#include <os/led.h>
+#include <os/pcd_enumerate.h>
+#include <os/usb_handler.h>
+#include <os/req_ctx.h>
+#include "../openpcd.h"
static struct req_ctx dummy_rctx;
static struct req_ctx empty_rctx;
diff --git a/openpcd/firmware/src/usb_handler.c b/openpcd/firmware/src/os/usb_handler.c
index 7a736e8..82620be 100644
--- a/openpcd/firmware/src/usb_handler.c
+++ b/openpcd/firmware/src/os/usb_handler.c
@@ -8,12 +8,13 @@
#include <openpcd.h>
-#include "pcd_enumerate.h"
-#include "usb_handler.h"
-#include "openpcd.h"
-#include "rc632.h"
-#include "led.h"
-#include "dbgu.h"
+#include <os/pcd_enumerate.h>
+#include <os/usb_handler.h>
+#include <os/req_ctx.h>
+#include <os/led.h>
+#include <os/dbgu.h>
+
+#include "../openpcd.h"
static usb_cmd_fn *cmd_hdlrs[16];
diff --git a/openpcd/firmware/src/usb_handler.h b/openpcd/firmware/src/os/usb_handler.h
index a281c66..a281c66 100644
--- a/openpcd/firmware/src/usb_handler.h
+++ b/openpcd/firmware/src/os/usb_handler.h
diff --git a/openpcd/firmware/src/main_analog.c b/openpcd/firmware/src/pcd/main_analog.c
index 92de3a4..45869e1 100644
--- a/openpcd/firmware/src/main_analog.c
+++ b/openpcd/firmware/src/pcd/main_analog.c
@@ -11,11 +11,11 @@
#include <string.h>
#include <librfid/rfid_layer2_iso14443a.h>
#include "rc632.h"
-#include "dbgu.h"
-#include "led.h"
-#include "trigger.h"
-#include "pcd_enumerate.h"
-#include "main.h"
+#include <os/dbgu.h>
+#include <os/led.h>
+#include <os/trigger.h>
+#include <os/pcd_enumerate.h>
+#include <os/main.h>
void _init_func(void)
{
diff --git a/openpcd/firmware/src/main_dumbreader.c b/openpcd/firmware/src/pcd/main_dumbreader.c
index d9172ed..21c4135 100644
--- a/openpcd/firmware/src/main_dumbreader.c
+++ b/openpcd/firmware/src/pcd/main_dumbreader.c
@@ -1,13 +1,13 @@
#include <errno.h>
#include <include/lib_AT91SAM7.h>
#include <include/openpcd.h>
-#include "dbgu.h"
+#include <os/dbgu.h>
#include "rc632.h"
-#include "led.h"
-#include "pcd_enumerate.h"
-#include "usb_handler.h"
-#include "openpcd.h"
-#include "main.h"
+#include <os/led.h>
+#include <os/pcd_enumerate.h>
+#include <os/usb_handler.h>
+#include "../openpcd.h"
+#include <os/main.h>
void _init_func(void)
{
diff --git a/openpcd/firmware/src/main_pwm.c b/openpcd/firmware/src/pcd/main_pwm.c
index 51ecf48..85d304a 100644
--- a/openpcd/firmware/src/main_pwm.c
+++ b/openpcd/firmware/src/pcd/main_pwm.c
@@ -7,15 +7,15 @@
#include <errno.h>
#include <string.h>
#include <lib_AT91SAM7.h>
-#include "openpcd.h"
+#include "../openpcd.h"
#include "rc632.h"
-#include "dbgu.h"
-#include "led.h"
+#include <os/dbgu.h>
+#include <os/led.h>
#include "pwm.h"
#include "tc.h"
#include "ssc.h"
-#include "pcd_enumerate.h"
-#include "usb_handler.h"
+#include <os/pcd_enumerate.h>
+#include <os/usb_handler.h>
static u_int8_t force_100ask = 1;
static u_int8_t mod_conductance = 0x3f;
diff --git a/openpcd/firmware/src/main_reqa.c b/openpcd/firmware/src/pcd/main_reqa.c
index 0e9acea..179b423 100644
--- a/openpcd/firmware/src/main_reqa.c
+++ b/openpcd/firmware/src/pcd/main_reqa.c
@@ -13,11 +13,16 @@
#include <lib_AT91SAM7.h>
#include <librfid/rfid_layer2_iso14443a.h>
#include "rc632.h"
-#include "dbgu.h"
-#include "led.h"
-#include "pcd_enumerate.h"
-#include "trigger.h"
+#include <os/dbgu.h>
+#include <os/led.h>
+#include <os/pcd_enumerate.h>
+#include <os/trigger.h>
+
+#include "../openpcd.h"
+
+#ifdef WITH_TC
#include "tc.h"
+#endif
void _init_func(void)
{
@@ -25,8 +30,10 @@ void _init_func(void)
trigger_init();
DEBUGPCRF("enabling RC632");
rc632_init();
+#ifdef WITH_TC
DEBUGPCRF("enabling TC");
tc_cdiv_init();
+#endif
DEBUGPCRF("turning on RF");
rc632_turn_on_rf(RAH);
DEBUGPCRF("initializing 14443A operation");
@@ -149,6 +156,7 @@ int _main_dbgu(char key)
case 'l':
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, OPENPCD_PIO_TRIGGER);
break;
+#ifdef WITH_TC
case '<':
tc_cdiv_phase_inc();
break;
@@ -165,6 +173,7 @@ int _main_dbgu(char key)
cdiv_idx++;
tc_cdiv_set_divider(cdivs[cdiv_idx]);
break;
+#endif
case '-':
if (speed_idx > 0)
speed_idx--;
@@ -206,7 +215,9 @@ void _main_func(void)
rc632_reg_write(RAH, RC632_REG_MFOUT_SELECT, mfout_sel);
for (i = 0; i < 0x3ffff; i++) {}
//rc632_dump();
+#ifdef WITH_TC
tc_cdiv_print();
+#endif
switch (mode) {
case MODE_REQA:
diff --git a/openpcd/firmware/src/pwm.c b/openpcd/firmware/src/pcd/pwm.c
index 8247921..ef1ee3f 100644
--- a/openpcd/firmware/src/pwm.c
+++ b/openpcd/firmware/src/pcd/pwm.c
@@ -9,10 +9,11 @@
#include <sys/types.h>
#include <errno.h>
#include <openpcd.h>
-#include "usb_handler.h"
-#include "pcd_enumerate.h"
-#include "dbgu.h"
-#include "openpcd.h"
+#include <os/usb_handler.h>
+#include <os/pcd_enumerate.h>
+#include <os/req_ctx.h>
+#include <os/dbgu.h>
+#include "../openpcd.h"
#define Hz
#define kHz *1000 Hz
diff --git a/openpcd/firmware/src/pwm.h b/openpcd/firmware/src/pcd/pwm.h
index 8836c32..8836c32 100644
--- a/openpcd/firmware/src/pwm.h
+++ b/openpcd/firmware/src/pcd/pwm.h
diff --git a/openpcd/firmware/src/rc632.c b/openpcd/firmware/src/pcd/rc632.c
index 54ff58d..9fc7428 100644
--- a/openpcd/firmware/src/rc632.c
+++ b/openpcd/firmware/src/pcd/rc632.c
@@ -13,11 +13,12 @@
#include <lib_AT91SAM7.h>
#include <cl_rc632.h>
#include <openpcd.h>
-#include "openpcd.h"
-#include "fifo.h"
-#include "dbgu.h"
-#include "pcd_enumerate.h"
-#include "usb_handler.h"
+#include "../openpcd.h"
+#include <os/fifo.h>
+#include <os/dbgu.h>
+#include <os/pcd_enumerate.h>
+#include <os/usb_handler.h>
+#include <os/req_ctx.h>
#include "rc632.h"
#define ALWAYS_RESPOND
diff --git a/openpcd/firmware/src/rc632.h b/openpcd/firmware/src/pcd/rc632.h
index 1a4dc22..1a4dc22 100644
--- a/openpcd/firmware/src/rc632.h
+++ b/openpcd/firmware/src/pcd/rc632.h
diff --git a/openpcd/firmware/src/rc632_highlevel.c b/openpcd/firmware/src/pcd/rc632_highlevel.c
index 6fa0f70..8cb1b86 100644
--- a/openpcd/firmware/src/rc632_highlevel.c
+++ b/openpcd/firmware/src/pcd/rc632_highlevel.c
@@ -24,7 +24,7 @@
#include <errno.h>
#include <cl_rc632.h>
#include "rc632.h"
-#include "dbgu.h"
+#include <os/dbgu.h>
#include <librfid/rfid_layer2_iso14443a.h>
#include <librfid/rfid_protocol_mifare_classic.h>
@@ -837,7 +837,7 @@ struct tx_config {
u_int8_t mod_width;
};
-static struct rx_config rx_configs[] = {
+static const struct rx_config rx_configs[] = {
{
.subc_pulses = RC632_RXCTRL1_SUBCP_8,
.rx_coding = RC632_DECCTRL_MANCHESTER,
@@ -864,7 +864,7 @@ static struct rx_config rx_configs[] = {
},
};
-static struct tx_config tx_configs[] = {
+static const struct tx_config tx_configs[] = {
{
.rate = RC632_CDRCTRL_RATE_106K,
.mod_width = 0x13,
diff --git a/openpcd/firmware/src/rfid_layer2_iso14443a.c b/openpcd/firmware/src/pcd/rfid_layer2_iso14443a.c
index 80d9d5f..80d9d5f 100644
--- a/openpcd/firmware/src/rfid_layer2_iso14443a.c
+++ b/openpcd/firmware/src/pcd/rfid_layer2_iso14443a.c
diff --git a/openpcd/firmware/src/picc/load_modulation.c b/openpcd/firmware/src/picc/load_modulation.c
new file mode 100644
index 0000000..d2af070
--- /dev/null
+++ b/openpcd/firmware/src/picc/load_modulation.c
@@ -0,0 +1,31 @@
+
+#ifdef CONFIG_PICCSIM
+
+#include <sys/types.h>
+#include <lib_AT91SAM7.h>
+
+#include "../openpcd.h"
+
+void load_mod_level(u_int8_t level)
+{
+ if (level > 3)
+ level = 3;
+
+ if (level & 0x1)
+ AT91F_PIO_SetOutput(AT91C_BASE_PIOA, OPENPCD_PIO_LOAD1);
+ else
+ AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, OPENPCD_PIO_LOAD1);
+
+ if (level & 0x2)
+ AT91F_PIO_SetOutput(AT91C_BASE_PIOA, OPENPCD_PIO_LOAD2);
+ else
+ AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, OPENPCD_PIO_LOAD2);
+}
+
+void load_mod_init(void)
+{
+ AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, OPENPCD_PIO_LOAD1);
+ AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, OPENPCD_PIO_LOAD2);
+}
+
+#endif /* CONFIG_PICCSIM */
diff --git a/openpcd/firmware/src/picc/load_modulation.h b/openpcd/firmware/src/picc/load_modulation.h
new file mode 100644
index 0000000..71f9d6f
--- /dev/null
+++ b/openpcd/firmware/src/picc/load_modulation.h
@@ -0,0 +1,7 @@
+#ifndef _LOAD_MODULATION_H
+#define _LOAD_MODULATION_H
+
+extern void load_mod_level(u_int8_t level);
+extern void load_mod_init(void);
+
+#endif
diff --git a/openpcd/firmware/src/picc/piccsim.h b/openpcd/firmware/src/picc/piccsim.h
index 34c7bf0..3cf6514 100644
--- a/openpcd/firmware/src/picc/piccsim.h
+++ b/openpcd/firmware/src/picc/piccsim.h
@@ -1,5 +1,5 @@
-#include <librfdi/rfid_layer2_iso14443a.h>
+#include <librfid/rfid_layer2_iso14443a.h>
struct piccsim_state {
enum rfid_layer2_id l2prot;
diff --git a/openpcd/firmware/src/tc.c b/openpcd/firmware/src/picc/tc.c
index 2f4628a..d23afa2 100644
--- a/openpcd/firmware/src/tc.c
+++ b/openpcd/firmware/src/picc/tc.c
@@ -17,8 +17,9 @@
*/
#include <lib_AT91SAM7.h>
-#include "openpcd.h"
-#include "dbgu.h"
+#include <os/dbgu.h>
+
+#include "../openpcd.h"
#include "tc.h"
static AT91PS_TCB tcb = AT91C_BASE_TCB;
diff --git a/openpcd/firmware/src/tc.h b/openpcd/firmware/src/picc/tc.h
index e7aa7e4..e7aa7e4 100644
--- a/openpcd/firmware/src/tc.h
+++ b/openpcd/firmware/src/picc/tc.h
diff --git a/openpcd/firmware/src/start/Cstartup.S b/openpcd/firmware/src/start/Cstartup.S
index 68e1a07..731d4c3 100644
--- a/openpcd/firmware/src/start/Cstartup.S
+++ b/openpcd/firmware/src/start/Cstartup.S
@@ -16,6 +16,41 @@
//*- 1.1 01/Apr/05 JPP : save SPSR
//*-----------------------------------------------------------------------------*/
+//#define DEBUG_LL
+
+#ifdef DEBUG_LL
+#define PIOA_PER 0xFFFFF400
+#define PIOA_OER 0xFFFFF410
+#define PIOA_SODR 0xFFFFF430
+#define PIOA_CODR 0xFFFFF434
+#define LED1 25
+ .macro led1on
+ ldr r2, =PIOA_CODR
+ mov r1, #(1 << LED1)
+ str r1, [r2]
+ .endm
+ .macro led1off
+ ldr r2, =PIOA_SODR
+ mov r1, #(1 << LED1)
+ str r1, [r2]
+ .endm
+ .macro ledinit
+ ldr r2, =PIOA_PER
+ mov r1, #(1 << LED1)
+ str r1, [r2]
+ ldr r2, =PIOA_OER
+ str r1, [r2]
+ led1off
+ .endm
+#else
+ .macro ledinit
+ .endm
+ .macro led1on
+ .endm
+ .macro led1off
+ .endm
+#endif
+
.equ IRQ_Stack_Size, 0x00000400
.equ AIC_IVR, (256)
@@ -128,6 +163,7 @@ IRQ_Handler_EntryR:
.global remap
.func remap
_remap:
+# led1on
# Remap RAM to 0x00000000 for DFU
ldr r1, =AT91C_BASE_AIC
mov r2, #0x01
@@ -236,11 +272,12 @@ InitReset:
/*- minumum C initialization */
/*- call AT91F_LowLevelInit( void) */
- ldr r13,.RAM_TOP /* temporary stack in internal RAM */
+ ldr r13,.RAM_TOP /* temporary stack in internal RAM */
/*--Call Low level init function in ABSOLUTE through the Interworking */
- ldr r0,=AT91F_LowLevelInit
- mov lr, pc
- bx r0
+ ldr r0,=AT91F_LowLevelInit
+ mov lr, pc
+ bx r0
+ ledinit
/*------------------------------------------------------------------------------
//*- Stack Sizes Definition
//*------------------------
@@ -287,6 +324,15 @@ InitReset:
msr CPSR_c, #ARM_MODE_SVC
mov r13, r0 /* Init stack Sup */
+/*- Relocate DFU .data section (Copy from ROM to RAM)*/
+ ldr r1, =_etext_dfu
+ ldr r2, =_data_dfu
+ ldr r3, =_edata_dfu
+LoopRelDFU: cmp r2, r3
+ ldrlo r0, [r1], #4
+ strlo r0, [r2], #4
+ blo LoopRelDFU
+
# Relocate .data section (Copy from ROM to RAM)
LDR R1, =_etext
LDR R2, =_data
@@ -304,6 +350,8 @@ LoopZI: CMP R1, R2
STRLO R0, [R1], #4
BLO LoopZI
+ led1on
+
ldr r0, =_remap
bx r0
personal git repositories of Harald Welte. Your mileage may vary