summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openpcd/firmware/src/main_usb.c1
-rw-r--r--openpcd/firmware/src/openpcd.h3
-rw-r--r--openpcd/firmware/src/os/dbgu.h1
-rw-r--r--openpcd/firmware/src/os/dfu.c14
-rw-r--r--openpcd/firmware/src/os/dfu.h4
-rw-r--r--openpcd/firmware/src/os/main.c7
-rw-r--r--openpcd/firmware/src/os/req_ctx.c2
-rw-r--r--openpcd/firmware/src/os/usb_handler.c1
-rw-r--r--openpcd/firmware/src/os/usb_handler.h2
-rw-r--r--openpcd/firmware/src/pcd/main_analog.c1
-rw-r--r--openpcd/firmware/src/pcd/main_dumbreader.c2
-rw-r--r--openpcd/firmware/src/pcd/main_pwm.c2
-rw-r--r--openpcd/firmware/src/pcd/main_reqa.c1
-rw-r--r--openpcd/firmware/src/pcd/pwm.c4
-rw-r--r--openpcd/firmware/src/pcd/rc632.c2
-rw-r--r--openpcd/firmware/src/start/Cstartup.S3
16 files changed, 26 insertions, 24 deletions
diff --git a/openpcd/firmware/src/main_usb.c b/openpcd/firmware/src/main_usb.c
index ee9556c..abb6948 100644
--- a/openpcd/firmware/src/main_usb.c
+++ b/openpcd/firmware/src/main_usb.c
@@ -31,7 +31,6 @@ int _main_dbgu(char key)
void _init_func(void)
{
- udp_init();
usbtest_init();
}
diff --git a/openpcd/firmware/src/openpcd.h b/openpcd/firmware/src/openpcd.h
index a368996..51fa98d 100644
--- a/openpcd/firmware/src/openpcd.h
+++ b/openpcd/firmware/src/openpcd.h
@@ -99,7 +99,4 @@
#define OPENPCD_IRQ_PRIO_UDP (AT91C_AIC_PRIOR_LOWEST+1)
#define OPENPCD_IRQ_PRIO_RC632 AT91C_AIC_PRIOR_LOWEST
-extern void _init_func(void);
-extern void _main_func(void);
-
#endif /* _OPENPCD_H */
diff --git a/openpcd/firmware/src/os/dbgu.h b/openpcd/firmware/src/os/dbgu.h
index 8dd34be..e29e351 100644
--- a/openpcd/firmware/src/os/dbgu.h
+++ b/openpcd/firmware/src/os/dbgu.h
@@ -26,6 +26,7 @@ void AT91F_DBGU_Init(void);
void AT91F_DBGU_Printk( char *buffer);
void AT91F_DBGU_Frame( char *buffer);
int AT91F_DBGU_Get( char *val);
+void dbgu_rb_flush(void);
#ifndef __WinARM__
void AT91F_DBGU_scanf(char * type,unsigned int * val);
#endif
diff --git a/openpcd/firmware/src/os/dfu.c b/openpcd/firmware/src/os/dfu.c
index ec99cef..25040db 100644
--- a/openpcd/firmware/src/os/dfu.c
+++ b/openpcd/firmware/src/os/dfu.c
@@ -24,8 +24,8 @@
#define DEBUGE DEBUGP
#define DEBUGI DEBUGP
#else
-#define DEBUGE(x, args ...)
-#define DEBUGI(x, args ...)
+#define DEBUGE(x, args ...) do { } while (0)
+#define DEBUGI(x, args ...) do { } while (0)
#endif
/* this is only called once before DFU mode, no __dfufunc required */
@@ -160,7 +160,7 @@ static __dfufunc int handle_upload(u_int16_t val, u_int16_t len)
if (ptr + len > AT91C_IFLASH_SIZE)
len = AT91C_IFLASH_SIZE - (u_int32_t) ptr;
- udp_ep0_send_data(ptr, len);
+ udp_ep0_send_data((char *)ptr, len);
ptr+= len;
return len;
@@ -176,7 +176,7 @@ static __dfufunc void handle_getstatus(void)
dstat.bStatus = status;
dstat.bState = dfu_state;
dstat.iString = 0;
- udp_ep0_send_data(&dstat, sizeof(dstat));
+ udp_ep0_send_data((char *)&dstat, sizeof(dstat));
}
static void __dfufunc handle_getstate(void)
@@ -368,7 +368,7 @@ send_zlp:
static u_int8_t cur_config;
/* USB DFU Device descriptor in DFU mode */
-__dfustruct struct usb_device_descriptor dfu_dev_descriptor = {
+__dfustruct const struct usb_device_descriptor dfu_dev_descriptor = {
.bLength = USB_DT_DEVICE_SIZE,
.bDescriptorType = USB_DT_DEVICE,
.bcdUSB = 0x0100,
@@ -386,7 +386,7 @@ __dfustruct struct usb_device_descriptor dfu_dev_descriptor = {
};
/* USB DFU Config descriptor in DFU mode */
-__dfustruct struct _dfu_desc dfu_cfg_descriptor = {
+__dfustruct const struct _dfu_desc dfu_cfg_descriptor = {
.ucfg = {
.bLength = USB_DT_CONFIG_SIZE,
.bDescriptorType = USB_DT_CONFIG,
@@ -665,7 +665,7 @@ void __dfufunc dfu_main(void)
while (1) ;
}
-struct dfuapi __dfufunctab dfu_api = {
+const struct dfuapi __dfufunctab dfu_api = {
.ep0_send_data = &udp_ep0_send_data,
.ep0_send_zlp = &udp_ep0_send_zlp,
.ep0_send_stall = &udp_ep0_send_stall,
diff --git a/openpcd/firmware/src/os/dfu.h b/openpcd/firmware/src/os/dfu.h
index a663688..e68f62d 100644
--- a/openpcd/firmware/src/os/dfu.h
+++ b/openpcd/firmware/src/os/dfu.h
@@ -72,8 +72,8 @@ struct dfuapi {
u_int16_t val, u_int16_t len);
void (*dfu_switch)(void);
u_int8_t *dfu_state;
- struct usb_device_descriptor *dfu_dev_descriptor;
- struct _dfu_desc *dfu_cfg_descriptor;
+ const struct usb_device_descriptor *dfu_dev_descriptor;
+ const struct _dfu_desc *dfu_cfg_descriptor;
};
diff --git a/openpcd/firmware/src/os/main.c b/openpcd/firmware/src/os/main.c
index c40fd79..4f637e5 100644
--- a/openpcd/firmware/src/os/main.c
+++ b/openpcd/firmware/src/os/main.c
@@ -3,6 +3,9 @@
#include <include/lib_AT91SAM7.h>
#include <os/dbgu.h>
#include <os/led.h>
+#include <os/dfu.h>
+#include <os/main.h>
+#include <os/pcd_enumerate.h>
#include "../openpcd.h"
int main(void)
@@ -14,6 +17,10 @@ int main(void)
/* call application specific init function */
_init_func();
+ /* initialize USB */
+ udp_init();
+ udp_open();
+
// Enable User Reset and set its minimal assertion to 960 us
AT91C_BASE_RSTC->RSTC_RMR =
AT91C_RSTC_URSTEN | (0x4 << 8) | (unsigned int)(0xA5 << 24);
diff --git a/openpcd/firmware/src/os/req_ctx.c b/openpcd/firmware/src/os/req_ctx.c
index 831d48e..99d248b 100644
--- a/openpcd/firmware/src/os/req_ctx.c
+++ b/openpcd/firmware/src/os/req_ctx.c
@@ -31,7 +31,7 @@ struct req_ctx *req_ctx_find_get(unsigned long old_state, unsigned long new_stat
u_int8_t req_ctx_num(struct req_ctx *ctx)
{
- return ((void *)ctx - (void *)&req_ctx[0])/sizeof(*ctx);
+ return ((char *)ctx - (char *)&req_ctx[0])/sizeof(*ctx);
}
void req_ctx_set_state(struct req_ctx *ctx, unsigned long new_state)
diff --git a/openpcd/firmware/src/os/usb_handler.c b/openpcd/firmware/src/os/usb_handler.c
index 82620be..274353c 100644
--- a/openpcd/firmware/src/os/usb_handler.c
+++ b/openpcd/firmware/src/os/usb_handler.c
@@ -21,6 +21,7 @@ static usb_cmd_fn *cmd_hdlrs[16];
int usb_hdlr_register(usb_cmd_fn *hdlr, u_int8_t class)
{
cmd_hdlrs[class] = hdlr;
+ return 0;
}
void usb_hdlr_unregister(u_int8_t class)
diff --git a/openpcd/firmware/src/os/usb_handler.h b/openpcd/firmware/src/os/usb_handler.h
index a281c66..3efcc1f 100644
--- a/openpcd/firmware/src/os/usb_handler.h
+++ b/openpcd/firmware/src/os/usb_handler.h
@@ -2,12 +2,14 @@
#define _USB_HANDLER_H
#include "openpcd.h"
+#include <os/req_ctx.h>
#define MAX_PAYLOAD_LEN (64 - sizeof(struct openpcd_hdr))
typedef int usb_cmd_fn(struct req_ctx *rctx);
extern int usb_hdlr_register(usb_cmd_fn *hdlr, u_int8_t class);
+extern void usb_hdlr_unregister(u_int8_t class);
extern void usb_in_process(void);
extern void usb_out_process(void);
diff --git a/openpcd/firmware/src/pcd/main_analog.c b/openpcd/firmware/src/pcd/main_analog.c
index 45869e1..8ffa1d4 100644
--- a/openpcd/firmware/src/pcd/main_analog.c
+++ b/openpcd/firmware/src/pcd/main_analog.c
@@ -19,7 +19,6 @@
void _init_func(void)
{
- //udp_init();
trigger_init();
rc632_init();
DEBUGPCRF("turning on RF");
diff --git a/openpcd/firmware/src/pcd/main_dumbreader.c b/openpcd/firmware/src/pcd/main_dumbreader.c
index 9e20876..1535e27 100644
--- a/openpcd/firmware/src/pcd/main_dumbreader.c
+++ b/openpcd/firmware/src/pcd/main_dumbreader.c
@@ -12,8 +12,6 @@
void _init_func(void)
{
rc632_init();
- udp_init();
- udp_open();
rc632_test(RAH);
}
diff --git a/openpcd/firmware/src/pcd/main_pwm.c b/openpcd/firmware/src/pcd/main_pwm.c
index 85d304a..691c27d 100644
--- a/openpcd/firmware/src/pcd/main_pwm.c
+++ b/openpcd/firmware/src/pcd/main_pwm.c
@@ -95,8 +95,6 @@ void _init_func(void)
pwm_duty_set_percent(0, 22); /* 22% of 9.43uS = 2.07uS */
rc632_modulate_mfin();
- udp_init();
-
DEBUGPCRF("Initializing SSC RX");
ssc_rx_init();
}
diff --git a/openpcd/firmware/src/pcd/main_reqa.c b/openpcd/firmware/src/pcd/main_reqa.c
index 179b423..e28fdff 100644
--- a/openpcd/firmware/src/pcd/main_reqa.c
+++ b/openpcd/firmware/src/pcd/main_reqa.c
@@ -26,7 +26,6 @@
void _init_func(void)
{
- //udp_init();
trigger_init();
DEBUGPCRF("enabling RC632");
rc632_init();
diff --git a/openpcd/firmware/src/pcd/pwm.c b/openpcd/firmware/src/pcd/pwm.c
index ef1ee3f..e05699b 100644
--- a/openpcd/firmware/src/pcd/pwm.c
+++ b/openpcd/firmware/src/pcd/pwm.c
@@ -107,7 +107,7 @@ void pwm_duty_set_percent(int channel, u_int16_t duty)
static int pwm_usb_in(struct req_ctx *rctx)
{
struct openpcd_hdr *poh = (struct openpcd_hdr *) &rctx->rx.data[0];
- struct openpcd_hdr *pih = (struct openpcd_hdr *) &rctx->tx.data[0];
+ /* struct openpcd_hdr *pih = (struct openpcd_hdr *) &rctx->tx.data[0]; */
u_int32_t *freq;
switch (poh->cmd) {
@@ -126,7 +126,7 @@ static int pwm_usb_in(struct req_ctx *rctx)
case OPENPCD_CMD_PWM_FREQ_SET:
if (rctx->rx.tot_len < sizeof(*poh)+4)
break;
- freq = (void *) poh + sizeof(*poh);
+ freq = (unsigned char *) poh + sizeof(*poh);
pwm_freq_set(0, *freq);
break;
case OPENPCD_CMD_PWM_FREQ_GET:
diff --git a/openpcd/firmware/src/pcd/rc632.c b/openpcd/firmware/src/pcd/rc632.c
index 9fc7428..620d0a0 100644
--- a/openpcd/firmware/src/pcd/rc632.c
+++ b/openpcd/firmware/src/pcd/rc632.c
@@ -397,7 +397,7 @@ static int rc632_usb_in(struct req_ctx *rctx)
break;
case OPENPCD_CMD_READ_FIFO:
{
- u_int16_t req_len = poh->val, remain_len, pih_len;
+ u_int16_t req_len = poh->val, remain_len = req_len, pih_len;
if (req_len > MAX_PAYLOAD_LEN) {
pih_len = MAX_PAYLOAD_LEN;
remain_len -= pih_len;
diff --git a/openpcd/firmware/src/start/Cstartup.S b/openpcd/firmware/src/start/Cstartup.S
index 731d4c3..1c9f1db 100644
--- a/openpcd/firmware/src/start/Cstartup.S
+++ b/openpcd/firmware/src/start/Cstartup.S
@@ -19,11 +19,12 @@
//#define DEBUG_LL
#ifdef DEBUG_LL
+/* Debugging macros for switching on/off LED1 (green) */
#define PIOA_PER 0xFFFFF400
#define PIOA_OER 0xFFFFF410
#define PIOA_SODR 0xFFFFF430
#define PIOA_CODR 0xFFFFF434
-#define LED1 25
+#define LED1 25 /* this only works on OpenPICC, not Olimex */
.macro led1on
ldr r2, =PIOA_CODR
mov r1, #(1 << LED1)
personal git repositories of Harald Welte. Your mileage may vary