# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
-# DO NOT DELETE
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
int
_write (int file,
- char * ptr,
+ const char * ptr,
int len)
{
if(!system_stub_ops.write)
while(1);
}
+void abort(void)
+{
+ ((local_call_t*)0)();
+ while(1);
+}
+
int
_kill (int n, int m)
{
}
int
-_getpid (int n)
+_getpid (void)
{
return 1;
}
-caddr_t
-_sbrk (int incr)
+void *
+_sbrk (ptrdiff_t incr)
{
extern char end asm ("end"); /* Defined by the linker. */
static char *heap_end;
heap_end += incr;
- return (caddr_t) prev_heap_end;
+ return /*(caddr_t)*/ prev_heap_end;
}
int
}
int
-_link (void)
+_link (const char *path1, const char *path2 )
{
return -1;
}
int
-_unlink (void)
+_unlink (const char *path)
{
return -1;
}
{
return -1;
}
+
+/* extern (.*) ([^ ]*) _PARAMS \(\(struct _reent \*(,*)(.*)\)\); */
+/* \1 \2 (struct _reent *\3\4) { return \2(\4);} */
+
+struct _reent;
+
+int _close_r(struct _reent * reent, int file)
+ { return _close(file);}
+/*
+int _fcntl_r(struct _reent *, int, int, int)
+ { return _fcntl( int, int, int);}
+*/
+int _fstat_r(struct _reent * reent, int file, struct stat * st)
+ { return _fstat(file, st);}
+
+int _getpid_r(struct _reent * reent)
+ { return _getpid();}
+
+int _kill_r(struct _reent * reent, int n, int m)
+ { return _kill(n, m);}
+
+int _link_r(struct _reent * reent, const char *path1, const char *path2)
+ { return _link(path1, path2);}
+
+_off_t _lseek_r(struct _reent * reent, int file, _off_t pos, int dir)
+ { return _lseek(file, pos, dir);}
+
+int _open_r(struct _reent * reent, const char * path, int flags, int opts)
+ { return _open(path, flags, opts);}
+
+_ssize_t _read_r(struct _reent * reent, int file, void * ptr, size_t len)
+ { return _read(file, ptr, len);}
+
+void *_sbrk_r(struct _reent * reent, ptrdiff_t incr)
+ { return _sbrk(incr);}
+
+int _stat_r(struct _reent * reent, const char * path, struct stat * st)
+ { return _stat(path, st);}
+
+int _unlink_r(struct _reent * reent, const char * path)
+ { return _unlink(path);}
+
+_ssize_t _write_r(struct _reent * reent, int file, const void * ptr, size_t len)
+ { return _write(file, ptr, len);}
int (*open)(const char * path, int flags, ...);
int (*close)(int file);
int (*read)(int file, char * ptr, int len);
- int (*write)(int file, char * ptr, int len);
+ int (*write)(int file, const char * ptr, int len);
int (*lseek)(int file, int ptr, int dir);
} system_stub_ops_t;
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
#include <cpu_def.h>
#include <hal_machperiph.h>
+#define IAP_PLL_FULL_SPEED 1
+
#define CMD_SUCCESS 0
#define BUSY 11
{
return addr/0x2000;
}
-#elif defined INC_LPC214x_H
+#elif defined INC_LPC214x_H || defined INC_LPC2348_H
inline int addr2sec(unsigned long addr)
{
if (addr<0x8000) return (addr>>12);
if (end<start) return 0;
save_and_cli(flags);
+ #ifndef IAP_PLL_FULL_SPEED
lpc_pll_off();
+ #endif
lpcisp_prepare_sectors(start,end);
if (CMD_SUCCESS != *result) return 0;
lpcisp_erase_sectors(start,end);
+ #ifndef IAP_PLL_FULL_SPEED
lpc_pll_on();
+ #endif
restore_flags(flags);
return (CMD_SUCCESS == *result);
end=start;
save_and_cli(flags);
+ #ifndef IAP_PLL_FULL_SPEED
lpc_pll_off();
+ #endif
lpcisp_prepare_sectors(start,end);
if (CMD_SUCCESS != *result) return 0;
iap_entry(command, result);
+ #ifndef IAP_PLL_FULL_SPEED
lpc_pll_on();
+ #endif
restore_flags(flags);
return (CMD_SUCCESS == *result);
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# -*- makefile -*-
-include_HEADERS += byteswap.h endian.h lt_timer.h lt_timer_types.h
+include_HEADERS += byteswap.h endian.h lt_timer.h lt_timer_types.h keyval_id_his.h
#include_HEADERS = $(notdir $(wildcard $(SOURCES_DIR)/*.h))
--- /dev/null
+#ifndef _KEYVAL_ID_HIS_H_
+#define _KEYVAL_ID_HISC_H_
+
+#include "keyvalpb.h"
+
+#define KVPB_KEYID_BLINDER_POSSITION 0x20
+#define KVPB_KEYID_BLINDER_OPENTIME 0x21
+#define KVPB_KEYID_BLP_UP 0x22
+#define KVPB_KEYID_BLP_DOWN 0x23
+
+#endif /* _KEYVAL_ID_HIS_H_ */
+
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
#CONFIG_KEYVAL=y
CONFIG_USB_BASE=y
CONFIG_USB_LPCUSB=y
+CONFIG_USB_MORE=y
CONFIG_APP_U2U_V2=y
#CONFIG_APP_TEST_LPC=y
BOARD=ul_usb1
CONFIG_ULBOOT=y
+CONFIG_ULBOOT_WITH_USB=y
CONFIG_OC_UL_DRV_SYSLESS=y
CONFIG_OC_UL_DRV_U450_VARPINS=y
CONFIG_KEYVAL=y
CONFIG_ULAN_DY=y
+CONFIG_USB_BASE=y
+CONFIG_USB_LPCUSB=y
+CONFIG_USB_MORE=y
+
# CONFIG_STDIO_COM_PORT=0
CROSS_COMPILE = arm-elf-
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
#define I2C_DRV_SYSLESS_BITRATE 100000
#define I2C_DRV_SYSLESS_SLADR 0
+/***************************************************************************/
+/* Constants for JTAG and supply control port pins: */
+#define JTAGIN (IO0PIN) // Control ports are on P5.x
+#define JTAGSET (IO0SET)
+#define JTAGCLR (IO0CLR)
+#define JTAGDIR (IO0DIR)
+#define JTAGOUT_RDBACK (IO0PIN) // used to read actual TCLK output value
+#undef JTAGSEL
+#define TMS_PIN (1<<20) // P0.20 JTAG TMS input pin
+#define TDI_PIN (1<<19) // P0.19 JTAG TDI input pin (SIMO1 if SPI mode)
+#define TDO_PIN (1<<18) // P0.18 JTAG TDO output pin (SOMI1 if SPI mode)
+#define TCK_PIN (1<<17) // P0.17 JTAG TCK input pin (UCLK1 if SPI mode)
+#define TDICTRL2_PIN 0 // Px.x switch TDO to TDI
+#define TDICTRL1_PIN 0 // Px.x connects TDI
+#define TEST_PIN 0 // Px.x TEST pin (20 & 28-pin devices only)
+#define VCCTGT_PIN 0 // Px.x Supply voltage of target board
+#define TCLK_PIN TDI_PIN // P7.3 TDI (former XOUT) receives TCLK
+
+#define ClrTMS() do {(JTAGCLR) |= (TMS_PIN);} while(0);
+#define SetTMS() do {(JTAGSET) |= (TMS_PIN);} while(0);
+#define ClrTDI() do {(JTAGCLR) |= (TDI_PIN);} while(0);
+#define SetTDI() do {(JTAGSET) |= (TDI_PIN);} while(0);
+#define ClrTCK() do {(JTAGCLR) |= (TCK_PIN);} while(0);
+#define SetTCK() do {(JTAGSET) |= (TCK_PIN);} while(0);
+#define ClrTCLK() do {(JTAGCLR) |= (TCLK_PIN);} while(0);
+#define SetTCLK() do {(JTAGSET) |= (TCLK_PIN);} while(0);
+#define StoreTCLK() ((JTAGOUT_RDBACK & TCLK_PIN) ? 1:0)
+#define RestoreTCLK(x) (x == 0 ? (JTAGCLR |= TCLK_PIN) : (JTAGSET |= TCLK_PIN))
+#define ScanTDO() ((JTAGIN & TDO_PIN)) // assumes TDO to be bit0
+
+#define JTAG_IODELAY() __asm__ __volatile__ ("nop\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop\n": : )
+
+/****************************************************************************/
+/* Define section for user, related to the controller used (here MSP430F149)*/
+/****************************************************************************/
+
+// Constants for Error LED control port:
+#define JTAGLEDSET (IO0SET) // LED ports are P0.x
+#define JTAGLEDCLR (IO0CLR) // LED ports are P0.x
+#define JTAGLEDDIR (IO0DIR)
+#undef JTAGLEDSEL /*P1SEL*/
+#define JTAGLEDRED (1<<13) // P0.13 Red LED (ERROR)
+#define JTAGLEDGREEN (1<<15) // P0.15 Green LED (OK)
+
#endif /* _SYSTEM_DEF_H_ */
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
#ifdef CONFIG_STDIO_COM_PORT
-int uartcon_write(int file, char * ptr, int len)
+int uartcon_write(int file, const char * ptr, int len)
{
int cnt;
unsigned char ch;
UL_DRV_SYSLESS_BAUD, /* baud */
UL_DRV_SYSLESS_MY_ADR_DEFAULT, /* my adr */
#ifdef CONFIG_OC_UL_DRV_U450_VARPINS
- #ifdef CONFIG_OC_UL_DRV_U450_VARPINS_MSRSWAP
+ #if defined(CONFIG_OC_UL_DRV_U450_VARPINS_DIRNEG) && defined(CONFIG_OC_UL_DRV_U450_VARPINS_MSRSWAP)
+ "16450-dirneg-msrswap", /* chip name */
+ #elif defined(CONFIG_OC_UL_DRV_U450_VARPINS_MSRSWAP)
"16450-msrswap", /* chip name */
#elif defined(CONFIG_OC_UL_DRV_U450_VARPINS_DIRNEG)
"16450-dirneg", /* chip name */
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
-# DO NOT DELETE
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
i2c_msg_head_t *msg=drv->msg_act;
if(msg) {
- if((msg->flags&I2C_MSG_CB_END) && (msg->callback))
- msg->callback(drv,I2C_MSG_CB_END,msg);
if(msg->flags&I2C_MSG_REPEAT){
drv->master_queue=msg->next;
}else{
i2c_drv_queue_msg(msg->flags&I2C_MSG_NOPROC?NULL:&drv->proc_queue,msg);
}
msg->flags|=I2C_MSG_FINISHED;
+ if((msg->flags&I2C_MSG_CB_END) && (msg->callback))
+ msg->callback(drv,I2C_MSG_CB_END,msg);
}
if(drv->master_queue) {
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
ifeq ($(CONFIG_KEYVAL),y)
lib_LIBRARIES = keyval
include_HEADERS += keyvalpb.h keyval_id.h
-keyval_SOURCES += keyvalpb.c
+keyval_SOURCES += keyvalpb.c
+
+include_HEADERS += keyval_mem_store.h
+keyval_SOURCES += keyval_mem_store.c
+
endif #CONFIG_KEYVAL
--- /dev/null
+/******************************************************************************/
+/* Key Value block in RAM */
+
+#include <malloc.h>
+#include <string.h>
+#include <keyvalpb.h>
+#include <keyval_mem_store.h>
+
+int kvpb_mem_erase(kvpb_block_t *store, void *base,int size)
+{
+ memset(base,0xff,size);
+ return 0;
+}
+
+int kvpb_mem_copy(kvpb_block_t *store, void *dst,const void *src,int len)
+{
+ memcpy(dst,src,len);
+ return 0;
+}
+
+#ifndef KVPB_MINIMALIZED
+kvpb_block_t *kvpb_store_create_ram(int size)
+{
+ kvpb_block_t *store;
+ int res;
+
+ if(!size)
+ size=0x4000;
+
+ store = malloc(sizeof(*store));
+ if(store == NULL)
+ return NULL;
+
+ memset(store, 0, sizeof(*store));
+
+ store->base = malloc(size*2);
+ if(store->base == NULL)
+ goto error_ret;
+
+ store->size = size;
+ store->flags = KVPB_DESC_DOUBLE;
+ #ifndef KVPB_MINIMALIZED
+ store->erase = kvpb_mem_erase,
+ store->copy = kvpb_mem_copy;
+ #endif /* KVPB_MINIMALIZED */
+
+ kvpb_block_erase(store, store->base,store->size);
+ if(store->flags & KVPB_DESC_DOUBLE)
+ kvpb_block_erase(store, (uint8_t*)store->base+store->size,store->size);
+
+ res=kvpb_check(store,3);
+
+ if(res<0)
+ goto error_ret;
+
+ return store;
+
+ error_ret:
+ if(store)
+ free(store);
+ return NULL;
+}
+#endif /* KVPB_MINIMALIZED */
--- /dev/null
+#ifndef _KEYVAL_MEM_STORE_H
+#define _KEYVAL_MEM_STORE_H
+
+#include <keyvalpb.h>
+
+int kvpb_mem_erase(kvpb_block_t *store, void *base,int size);
+int kvpb_mem_copy(kvpb_block_t *store, void *dst,const void *src,int len);
+kvpb_block_t *kvpb_store_create_ram(int size);
+
+#endif /*_KEYVAL_MEM_STORE_H*/
some of the licenses, he/she can delete appropriate line.
Warning, if you delete all lines, you are not allowed to
distribute source code and/or binaries utilizing code.
-
+
See files COPYING and README for details.
*******************************************************************/
* File: keyvalpb.c
*/
KVPB_DPTRTYPE kvpb_sum_t *kvpb_get_psum(kvpb_block_t *kvpb_block,
- KVPB_DPTRTYPE uint8_t *base, kvpb_size_t size)
+ KVPB_DPTRTYPE uint8_t *base, kvpb_size_t size)
#else
KVPB_DPTRTYPE kvpb_sum_t *__kvpb_get_psum(
- KVPB_DPTRTYPE uint8_t *base, kvpb_size_t size)
+ KVPB_DPTRTYPE uint8_t *base, kvpb_size_t size)
#endif
{
KVPB_DPTRTYPE kvpb_sum_t *psum;
psum=kvpb_psum_align(kvpb_block,(KVPB_DPTRTYPE kvpb_sum_t*)(base+size)-1);
while((KVPB_DPTRTYPE uint8_t*)psum>=base) {
- if (*kvpb_psum_valid_loc(kvpb_block,psum)!=0)
+ if (*kvpb_psum_valid_loc(kvpb_block,psum)!=0)
return psum;
psum=kvpb_psum_align(kvpb_block,psum-1);
}
KVPB_DPTRTYPE uint8_t *p;
KVPB_LOCALDATA int ret=-1;
KVPB_LOCALDATA kvpb_sum_t sum;
-
+
kvpb_block->flags&=~KVPB_DESC_USE2ND;
-
+
p=kvpb_region_base(kvpb_block,0);
kvpb_block->psum1=kvpb_get_psum(kvpb_block,p,kvpb_block->size);
if (kvpb_block->psum1) {
if(ret>=0)
ret=0;
}
-
+
if(ret){
if(!mode) {
kvpb_block->flags|=KVPB_DESC_RO;
kvpb_block->flags&=~KVPB_DESC_RO;
}
}
- kvpb_block_flush(kvpb_block);
+ kvpb_block_flush(kvpb_block);
if(ret>=0) kvpb_block->flags|=KVPB_DESC_VALID;
return ret;
}
}
while(*kvpb_keyid_valid(kvpb_block,key)==KVPB_KEYID_INVALID) {
key=kvpb_next(kvpb_block,key);
- if (!key)
+ if (!key)
return NULL;
}
return key->size!=KVPB_EMPTY?key:NULL;
* Return Value: Operation cannot be finished.
* File: keyvalpb.c
*/
-int kvpb_compact_region(kvpb_block_t *kvpb_block, uint8_t mode, kvpb_keyid_t keyid)
+int kvpb_compact_region(kvpb_block_t *kvpb_block, uint8_t mode, kvpb_keyid_t keyid)
#else
-int __kvpb_compact_region(uint8_t mode, kvpb_keyid_t keyid)
+int __kvpb_compact_region(uint8_t mode, kvpb_keyid_t keyid)
#endif
{
KVPB_DPTRTYPE uint8_t *p;
p=kvpb_region_base(kvpb_block,0);
src=(KVPB_DPTRTYPE kvpb_key_t*)kvpb_region_base(kvpb_block,1);
des=(KVPB_DPTRTYPE kvpb_key_t*)p;
- kvpb_block->psum1=kvpb_psum_align(kvpb_block,
- (KVPB_DPTRTYPE kvpb_sum_t*)(kvpb_region_base(kvpb_block,1))-1);
if((!mode && (kvpb_block->flags & KVPB_DESC_USE2ND))||(mode==2)) {
if(!(kvpb_block->flags&KVPB_DESC_DOUBLE))
return -1;
+ des=src;
src=(KVPB_DPTRTYPE kvpb_key_t*)p;
- des=(KVPB_DPTRTYPE kvpb_key_t*)kvpb_region_base(kvpb_block,1);
+ p=(KVPB_DPTRTYPE uint8_t *)des;
kvpb_block->psum2=kvpb_psum_align(kvpb_block,
- (KVPB_DPTRTYPE kvpb_sum_t*)(kvpb_region_base(kvpb_block,2))-1);
+ (KVPB_DPTRTYPE kvpb_sum_t*)(p+kvpb_block->size)-1);
+ } else {
+ kvpb_block->psum1=kvpb_psum_align(kvpb_block,
+ (KVPB_DPTRTYPE kvpb_sum_t*)(p+kvpb_block->size)-1);
}
kvpb_block_flush(kvpb_block);
kvpb_block_erase(kvpb_block,des,kvpb_block->size);
while(src) {
int s=kvpb_chunk_align(kvpb_block,src->size+sizeof(kvpb_key_t));
if((*kvpb_keyid_valid(kvpb_block,src)!=KVPB_KEYID_INVALID) && (src->keyid!=keyid)) {
- kvpb_block_copy(kvpb_block,des,src,s);
+ kvpb_block_copy(kvpb_block,des,src,s);
if (kvpb_block->flags&KVPB_DESC_CHUNKWO) s+=kvpb_chunk_size(kvpb_block);
des=(KVPB_DPTRTYPE kvpb_key_t*)((uint8_t*)des+s);
}
KVPB_DPTRTYPE kvpb_sum_t *psum;
KVPB_DPTRTYPE kvpb_key_t *key;
KVPB_DPTRTYPE uint8_t *p;
-
+
if(!(kvpb_block->flags&KVPB_DESC_VALID))
return -1;
if(kvpb_block->flags&KVPB_DESC_RO)
return -1;
-
+
/*first region*/
psum=kvpb_psum_align(kvpb_block,kvpb_block->psum1);
sum=0;
p=kvpb_region_base(kvpb_block,0);
sum=kvpb_memsum(p,(KVPB_DPTRTYPE uint8_t*)kvpb_block->psum1-p);
- kvpb_block_copy(kvpb_block,kvpb_block->psum1,&sum,sizeof(kvpb_sum_t));
+ kvpb_block_copy(kvpb_block,kvpb_block->psum1,&sum,sizeof(kvpb_sum_t));
kvpb_block_flush(kvpb_block);
if(!(kvpb_block->flags&KVPB_DESC_DOUBLE))
- return key?size:-1;
+ return key?size:-1;
/*Write in the first region failed, switching to backup region */
if(kvpb_block->flags&KVPB_DESC_RO){
kvpb_block_copy(kvpb_block,(uint8_t*)(key+1),buf,/*align???*/ size);
}
kvpb_block_flush(kvpb_block);
-
+
p=kvpb_region_base(kvpb_block,1);
sum=kvpb_memsum(p,(KVPB_DPTRTYPE uint8_t*)kvpb_block->psum2-p);
kvpb_block_copy(kvpb_block,kvpb_block->psum2,&sum,sizeof(kvpb_sum_t));
some of the licenses, he/she can delete appropriate line.
Warning, if you delete all lines, you are not allowed to
distribute source code and/or binaries utilizing code.
-
+
See files COPYING and README for details.
*******************************************************************/
#define KVPB_DESC_RO 0x08
#define KVPB_DESC_CHUNKWO 0x10
#define KVPB_DESC_ALIGN4 0x40
-#define KVPB_DESC_FLASH 0x80
+#define KVPB_DESC_FLASH 0x80
#ifdef KVPB_MINIMALIZED
typedef uint16_t kvpb_sum_t;
* %KVPB_DESC_USE2ND - data will be read from the second copy because first one is damaged;
* %KVPB_DESC_VALID - at least one region is valid;
* %KVPB_DESC_RO - because of some problems, only read access is allowed
- * %KVPB_DESC_CHUNKWO - chunk can be written only once between erase operations
+ * %KVPB_DESC_CHUNKWO - chunk can be written only once between erase operations
* %KVPB_DESC_ALIGN4 - data has to be aligned to four bytes
* %KVPB_DESC_FLASH - flash memory is used for data storage
* @psum1: Pointer to the control checksum of the first data region
} kvpb_block_t;
-#define kvpb_region_base(block,regidx) (((block)->base+(regidx*(block)->size)))
+#define kvpb_region_base(block,regidx) \
+ ((((KVPB_DPTRTYPE uint8_t *)(block)->base)+(regidx*(block)->size)))
#ifndef KVPB_MINIMALIZED
#ifndef kvpb_chunk_size
#define kvpb_chunk_size(store) ((store)->chunk_size<4?4:(store)->chunk_size)
#endif /*kvpb_chunk_size*/
#define kvpb_chunk_size_mask(store) (kvpb_chunk_size(store)-1)
-
+
/**
* kvpb_chunk_align - Round up KVPB size to minimal store chunk size multiple
* @store: Pointer to the KVPB access information/state structure
/**
* kvpb_psum_align - Round up KVPB size to minimal store chunk size multiple
* @store: Pointer to the KVPB access information/state structure
- * @psum: Pointer to proposed location of next check sum location
+ * @psum: Pointer to proposed location of next check sum location
*
* Return Value: Pointer to next check sum location rounded down to next slot.
* File: keyvalpb.h
*/
static inline int kvpb_block_erase(struct kvpb_block *store, void *base,int size)
{
- return store->erase(store, base,size) ;
+ return store->erase(store, base,size) ;
}
/**
((KVPB_DPTRTYPE kvpb_sum_t*)((unsigned)(x)&~kvpb_chunk_size_mask(store)))
#define kvpb_psum_valid_loc(store,x) \
((kvpb_sum_t*)((char*)(x)+0*kvpb_chunk_size(store)))
+#ifndef kvpb_block_copy
#define kvpb_block_erase(store, base, size) flash_erase(base, size)
- #define kvpb_block_copy(store, des, src, len) flash_copy(des, src, len)
- #define kvpb_block_flush(store) flash_flush()
+ #define kvpb_block_copy(store, des, src, len) flash_copy(des, src, len)
+ #define kvpb_block_flush(store) flash_flush()
+
/* forward declarations for external procedures */
int flash_erase(void *base,int size);
int flash_copy(void *des,const void *src,int len);
#ifndef flash_flush
int flash_flush(void);
#endif /* flash_flush */
+#endif /* kvpb_block_copy */
#endif /* KVPB_MINIMALIZED */
/**
#define kvpb_find(block, keyid, mode, key) __kvpb_find(keyid, mode, key)
#define kvpb_get_key(block, keyid, size, buf) __kvpb_get_key(keyid, size, buf)
#define kvpb_set_key(block, keyid, size, buf) __kvpb_set_key(keyid, size, buf)
-#define kvpb_err_keys(block,keyid) kvpb_set_key(block,keyid,0,NULL)
+#define kvpb_err_keys(block,keyid) kvpb_set_key(block,keyid,0,NULL)
#define kvpb_check(block, mode) __kvpb_check(mode)
#define kvpb_compact_region(block, mode, keyid) __kvpb_compact_region(mode, keyid)
#define kvpb_get_cfk(block,mode,size) __kvpb_get_cfk(mode,size)
*/
#define kvpb_for_each(root, key,mode) \
for(key=kvpb_first(root,mode);key;\
- key=kvpb_next(key))
+ key=kvpb_next(root, key))
/**
* kvpb_for_each - Iterate over all key value pairs matching given key ID
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
#include_HEADERS =
-nobase_include_HEADERS = usb/usb.h usb/usb_spec.h usb/usb_srq.h usb/usbdebug.h
+nobase_include_HEADERS = usb/usb.h usb/usb_spec.h usb/usb_srq.h usb/usbdebug.h usb/usb_devdes.h
usbbase_SOURCES = usb.c usbdebug.c
#define _USB_MODULE_
#include "usb_spec.h"
+ #include "usb_devdes.h"
#if defined(SDCC) || defined(__KEIL__) || defined(__C51__)
/*8051 special handling*/
int (*vendor_fnc)( struct usb_device_t *udev) REENTRANT_SIGN; /* pointer to vendor request processing function */
int (*class_fnc)( struct usb_device_t *udev) REENTRANT_SIGN; /* pointer to class request processing function */
+ const USB_DEVICE_DESCRIPTORS_TABLE *devdes_table;
+
#ifdef USB_WITH_UDEV_FNC
int (*init)( struct usb_device_t *udev) REENTRANT_SIGN; /* function for hw specific part of initialize usb device */
+ int (*set_addr)( struct usb_device_t *udev, unsigned char addr) REENTRANT_SIGN; /* set device address */
+ int (*set_configuration)( struct usb_device_t *udev, unsigned char iCfg) REENTRANT_SIGN; /* set device configuration */
int (*connect)( struct usb_device_t *udev) REENTRANT_SIGN; /* function for hw specific part of connecting device to usb */
int (*disconnect)( struct usb_device_t *udev) REENTRANT_SIGN; /* function for hw specific part of disconnecting device to usb */
void (*ack_setup)( struct usb_device_t *udev) REENTRANT_SIGN; /* function for hw specific part of control response acknowledge */
void (*ack_control_setup)( struct usb_device_t *udev) REENTRANT_SIGN; /* function for hw specific part of control response acknowledge */
int (*check_events)( struct usb_device_t *udev) REENTRANT_SIGN; /* hw specific part of function for checking events */
- void (*stall)( usb_ep_t *ep) REENTRANT_SIGN; /* hw specific function for stall endpoint */
+ void (*stall)( usb_ep_t *ep) REENTRANT_SIGN; /* hw specific function to stall endpoint */
+ void (*unstall)( usb_ep_t *ep) REENTRANT_SIGN; /* hw specific function to unstall endpoint */
int (*read_endpoint)( usb_ep_t *ep, void *ptr, int size) REENTRANT_SIGN;
int (*write_endpoint)( usb_ep_t *ep, const void *ptr, int size) REENTRANT_SIGN;
#endif /*USB_WITH_UDEV_FNC*/
int usb_connect( usb_device_t *udev);
int usb_disconnect( usb_device_t *udev);
void usb_stall( usb_ep_t *ep);
-
+ void usb_unstall( usb_ep_t *ep);
+
#define usb_stall_ep0( udev) \
do { \
usb_stall( &(udev->ep0)); \
#define usb_udev_is_fnc(_M_udev, _M_fnc) (_M_udev->_M_fnc)
#define usb_udev_init(_M_udev) (_M_udev->init(_M_udev))
+ #define usb_udev_set_addr(_M_udev, _M_addr) (_M_udev->set_addr(_M_udev, _M_addr))
+ #define usb_udev_set_configuration(_M_udev, _M_iCfg) (_M_udev->set_configuration(_M_udev, _M_iCfg))
#define usb_udev_connect(_M_udev) (_M_udev->connect(_M_udev))
#define usb_udev_disconnect(_M_udev) (_M_udev->disconnect(_M_udev))
#define usb_udev_ack_setup(_M_udev) (_M_udev->ack_setup(_M_udev))
#define usb_udev_check_events(_M_udev) (_M_udev->check_events(_M_udev))
#define usb_udev_stall(_M_ep) ((_M_ep)->udev->stall(_M_ep))
+ #define usb_udev_unstall(_M_ep) ((_M_ep)->udev->unstall(_M_ep))
#define usb_udev_read_endpoint(_M_ep, _M_ptr, _M_size) \
((_M_ep)->udev->read_endpoint(_M_ep, _M_ptr, _M_size))
--- /dev/null
+/*************************************************/
+/*** Module : USB device descriptor table ***/
+/*** Author : Roman Bartosinski, Pavel Pisa ***/
+/*** Modify : 10.11.2008 ***/
+/*************************************************/
+
+#ifndef _USB_DEVICE_DESCRIPTOR_TABLE
+ #define _USB_DEVICE_DESCRIPTOR_TABLE
+
+ #include "usb_spec.h"
+
+ struct _tag_usb_device_configuration_entry {
+ const USB_CONFIGURATION_DESCRIPTOR *pConfigDescription;
+ int iConfigTotalLength;
+ };
+ typedef struct _tag_usb_device_configuration_entry
+ USB_DEVICE_CONFIGURATION_ENTRY, *PUSB_DEVICE_CONFIGURATION_ENTRY;
+
+ struct _tag_usb_device_descriptors_table {
+ const USB_DEVICE_DESCRIPTOR *pDeviceDescription;
+ const USB_DEVICE_CONFIGURATION_ENTRY *pConfigurations;
+ const USB_INTERFACE_DESCRIPTOR **pInterfaceDescriptors;
+ const PUSB_STRING_DESCRIPTOR *pStrings;
+ int iNumStrings;
+ uint8_t bNumEndpoints;
+ uint8_t bNumConfigurations;
+ uint8_t bNumInterfaces;
+ };
+ typedef struct _tag_usb_device_descriptors_table
+ USB_DEVICE_DESCRIPTORS_TABLE, *PUSB_DEVICE_DESCRIPTOR_TABLE;
+
+
+#endif /*_USB_DEVICE_DESCRIPTOR_TABLE*/
+
uint16_t wLength;
} USB_DEVICE_REQUEST;
-/****************************************************************************************/
+/****************************************************************************************/
/*** definitions for USB tranfer standard packets described in USB secif. - chapter 9 ***/
/****************************************************************************************/
#define DEVICE_ADDRESS_MASK 0x7F
uint8_t iSerialNumber;
uint8_t bNumConfigurations;
} PACKED;
- typedef struct _tag_usb_device_descriptor
+ typedef struct _tag_usb_device_descriptor
USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
/* *** DEVICE_QUALIFIER *** (spec. 9.6.2) */
} PACKED;
typedef struct _tag_usb_string_descriptor
USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR;
-
+
/*******************************************/
/*** USB_IF - Defined USB device classes ***/
/* define application specific device class subclasses */
#define USB_APPL_SUBCLASS_FIRMWARE_UPDATE 0x01
#define USB_APPL_SUBCLASS_IRDA_USB_BRIDGE 0x02
-
+
#endif
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
#include <usb/usb.h>
#include <usb/lpcusb.h>
+/* set device address */
+int usb_lpc_set_addr( usb_device_t *udev, unsigned char addr) {
+ lpc_usb_set_addr(addr);
+ return 0;
+}
+
+int usb_lpc_set_configuration( usb_device_t *udev, unsigned char iCfg) {
+ lpc_usb_config_device(iCfg);
+ if ( iCfg) {
+ int i;
+ for(i = 0; i < udev->cntep; i++) {
+ lpc_usb_configEP(udev->ep[i].epnum, udev->ep[i].max_packet_size);
+ }
+ }
+ return 0;
+}
+
/* connect usb */
int usb_lpc_connect( usb_device_t *udev) {
lpc_write_cmd_data(USB_CMD_SET_DEV_STAT,USB_DAT_WR_BYTE(USBC_DEV_CON));
/* stall endpoint X */
void usb_lpc_stall( usb_ep_t *ep) {
- if ( ep->epnum) {
- lpc_write_cmd_data(USB_CMD_SEL_EP_CLRI(lpc_ep2addr(ep->epnum)),USB_DAT_WR_BYTE(USBC_EP_STAT_ST));
- } else { // endpoint0
- lpc_write_cmd_data(USB_CMD_SEL_EP_CLRI(lpc_ep2addr(0x80|ep->epnum)),USB_DAT_WR_BYTE(USBC_EP_STAT_ST));
- lpc_write_cmd_data(USB_CMD_SEL_EP_CLRI(lpc_ep2addr(ep->epnum)),USB_DAT_WR_BYTE(USBC_EP_STAT_ST));
- }
+ if (!ep->epnum)
+ lpc_usb_setstallEP(0x80|ep->epnum);
+ lpc_usb_setstallEP(ep->epnum);
+}
+
+/* unstall endpoint X */
+void usb_lpc_unstall( usb_ep_t *ep) {
+ if (!ep->epnum)
+ lpc_usb_clrstallEP(0x80|ep->epnum);
+ lpc_usb_clrstallEP(ep->epnum);
}
/**
int usb_lpc_init( usb_device_t *udev) {
udev->connect = usb_lpc_connect;
+ udev->set_addr = usb_lpc_set_addr;
+ udev->set_configuration = usb_lpc_set_configuration;
udev->disconnect = usb_lpc_disconnect;
udev->ack_setup = usb_lpc_ack_setup;
udev->ack_control_setup = NULL;
udev->stall = usb_lpc_stall;
+ udev->unstall = usb_lpc_unstall;
udev->check_events = usb_lpc_check_events;
udev->read_endpoint = usb_lpc_read_endpoint;
udev->write_endpoint = usb_lpc_write_endpoint;
while (USBCtrl & USBCtrl_RD_EN) {
dwData = USBRxData;
if (p != NULL) {
- for (i = 0; i < 4; i++) {
- if (size-- != 0) {
- *p = dwData & 0xFF;
- p++;
- }
+ for (i = 0; (i < 4) && size; i++) {
+ size--;
+ *p = dwData & 0xFF;
+ p++;
dwData >>= 8;
}
}
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
ifeq ($(CONFIG_USB_MORE),y)
lib_LIBRARIES = usbmore
+nobase_include_HEADERS = usb/usb_loader.h
+
#shared_LIBRARIES =
#include_HEADERS =
#define USB_VENDOR_MEMORY_BY_BULK 0x80
-#if 0 /* MSP430 */
+/* COMMON */
+#define USB_VENDOR_TARGET_RAM 0x01
+#define USB_VENDOR_TARGET_FLASH 0x02
+/* MSP430 */
#define USB_VENDOR_TARGET_ADAPTER 0x01
#define USB_VENDOR_TARGET_MSP430 0x02
-#else /* MSC1210 */
+/* MSC1210 */
#define USB_VENDOR_TARGET_DATA 0x01
#define USB_VENDOR_TARGET_XDATA 0x02
-#endif
#define USB_VENDOR_TARGET_MASK 0x07
+/* bRequest - type of request */
+/* wValue - lower address word */
+/* wIndex - higher address word */
+/* wLength - data or length of data */
+
#endif /*_USB_LOADER_H*/
/*****************************************************/
#include <string.h>
-
+#include <cpu_def.h>
#include <system_def.h>
#include <usb/usb.h>
#include <usb/usb_spec.h>
-#include <usb/pdiusb.h>
#include <usb/usbdebug.h>
#include <usb/usb_srq.h>
-#include <usb/usb_defs.h>
// ****************************
int usb_stdreq_get_status( usb_device_t *udev)
{
unsigned char c, buf[2] = { 0, 0};
unsigned char epid = (unsigned char) udev->request.wIndex;
+ usb_ep_t *ep0 = &(udev->ep0);
usb_debug_print( DEBUG_LEVEL_HIGH, ("GetStatus\n"));
switch( udev->request.bmRequestType & USB_RECIPIENT) {
case USB_RECIPIENT_INTERFACE:
break;
case USB_RECIPIENT_ENDPOINT:
+ #if 0
if ( epid & USB_ENDPOINT_DIRECTION_MASK)
c = pdiSelectEp(pdiEp2Idx(epid)); // endpoint in
else
#else
buf[0] = 0;
#endif
+ #endif
+ #warning usb_stdreq_get_status is DUMMY
break;
default:
return USB_COMPLETE_FAIL;
}
- pdiWriteEndpoint( PDI_EP0_TX, 2, buf);
+ usb_udev_write_endpoint( ep0, buf, 2);
return USB_COMPLETE_OK;
}
int usb_stdreq_clear_feature( usb_device_t *udev)
{
+ usb_ep_t *ep = NULL;
USB_DEVICE_REQUEST *dreq = &(udev->request);
unsigned char epid = (unsigned char) dreq->wIndex;
}
break;
case USB_RECIPIENT_ENDPOINT:
+ if(!epid) {
+ ep = &udev->ep0;
+ } else {
+ unsigned char i;
+ for(i = 0; i < udev->cntep; i++) {
+ if(udev->ep[i].epnum == epid) {
+ ep = &udev->ep[i];
+ }
+ }
+ if(!ep)
+ break;
+ }
if ( dreq->wValue == USB_FEATURE_ENDPOINT_STALL) {
- if ( epid & USB_ENDPOINT_DIRECTION_MASK)
- pdiSetEpStatus(pdiEp2Idx(epid), 0); // clear TX stall for IN on EPn
- else
- pdiSetEpStatus(pdiEp2Idx(epid), 0); // clear RX stall for OUT on EPn
+ usb_udev_unstall(ep);
usb_udev_ack_setup( udev);
return USB_COMPLETE_OK;
}
int usb_stdreq_set_feature( usb_device_t *udev)
{
+ usb_ep_t *ep = NULL;
USB_DEVICE_REQUEST *dreq = &(udev->request);
unsigned char epid = (unsigned char) dreq->wIndex;
}
break;
case USB_RECIPIENT_ENDPOINT:
+ if(!epid) {
+ ep = &udev->ep0;
+ } else {
+ unsigned char i;
+ for(i = 0; i < udev->cntep; i++) {
+ if(udev->ep[i].epnum == epid) {
+ ep = &udev->ep[i];
+ }
+ }
+ if(!ep)
+ break;
+ }
if ( dreq->wValue == USB_FEATURE_ENDPOINT_STALL) {
- if ( epid & USB_ENDPOINT_DIRECTION_MASK)
- pdiSetEpStatus( pdiEp2Idx(epid), 1); // set TX stall for IN on EPn
- else
- pdiSetEpStatus( pdiEp2Idx(epid), 1); // set RX stall for OUT on EPn
+ usb_udev_stall(ep);
usb_udev_ack_setup( udev);
return USB_COMPLETE_OK;
}
int usb_stdreq_set_address( usb_device_t *udev)
{
+ int adr;
USB_DEVICE_REQUEST *dreq = &(udev->request);
- usb_debug_print( DEBUG_LEVEL_HIGH, ("SetAddr\n"));
+ adr=dreq->wValue & DEVICE_ADDRESS_MASK;
+ usb_debug_print( DEBUG_LEVEL_HIGH, ("SetAddr-%d\n",adr));
usb_udev_ack_setup( udev);
- pdiSetAddressEnable( (dreq->wValue & DEVICE_ADDRESS_MASK) + PDI_ENAD_ENABLE);
+ usb_udev_set_addr( udev, adr);
return USB_COMPLETE_OK;
}
int usb_stdreq_get_configuration( usb_device_t *udev)
{
unsigned char buf = udev->configuration; //usb_flags.configured;
+ usb_ep_t *ep0 = &(udev->ep0);
usb_debug_print( DEBUG_LEVEL_HIGH, ("GetConfig\n"));
- pdiWriteEndpoint( PDI_EP0_TX, 1, &buf);
+ usb_udev_write_endpoint( ep0, &buf, 1);
return USB_COMPLETE_OK;
}
USB_DEVICE_REQUEST *dreq = &(udev->request);
unsigned char iCfg = dreq->wValue & 0xff;
usb_debug_print( DEBUG_LEVEL_HIGH, ("SetConfig\n"));
- if ( iCfg < 2) { // put device in unconfigured state or set configuration 1 ( no else)
- usb_udev_ack_setup( udev);
- pdiSetEndpointEnable( 0); // USBInitUnconfig();
- if ( iCfg) {
- pdiSetEndpointEnable( PDI_EPEN_ENABLE); //USBInitConfig();
- udev->flags |= USB_FLAG_CONFIGURED;
- } else {
- udev->flags &= ~USB_FLAG_CONFIGURED;
+ while (1) { // put device in unconfigured state or set configuration 1 ( no else)
+ const USB_DEVICE_CONFIGURATION_ENTRY *pcd = udev->devdes_table->pConfigurations;
+ if(iCfg) {
+ unsigned char i = udev->devdes_table->bNumConfigurations;
+ for(; i && (pcd->pConfigDescription->bConfigurationValue != iCfg); i--, pcd++);
+ if(!i)
+ break;
}
+
+ udev->flags &= ~USB_FLAG_CONFIGURED;
+
+ usb_udev_ack_setup( udev);
+
+ usb_udev_set_configuration( udev, iCfg);
+
udev->configuration = iCfg; //usb_flags.configured = iCfg;
+
+ if(iCfg)
+ udev->flags |= USB_FLAG_CONFIGURED;
+
return USB_COMPLETE_OK;
- } else
- return USB_COMPLETE_FAIL;
+ }
+ return USB_COMPLETE_FAIL;
}
int usb_stdreq_get_interface( usb_device_t *udev)
{
unsigned char buf = 0; /// udev->interface
+ usb_ep_t *ep0 = &(udev->ep0);
usb_debug_print( DEBUG_LEVEL_HIGH, ("GetIface\n"));
- pdiWriteEndpoint( PDI_EP0_TX, 1, &buf);
+ usb_udev_write_endpoint( ep0, &buf, 1);
return USB_COMPLETE_OK;
}
int usb_stdreq_get_descriptor( usb_device_t *udev)
{
+ unsigned char confidx;
unsigned char *pDesc;
unsigned short Len = 0;
USB_DEVICE_REQUEST *dreq = &(udev->request);
+ const USB_DEVICE_CONFIGURATION_ENTRY *pconfent;
int i;
i = (dreq->wValue >> 8) & 0xff; /* MSB part of wValue */
switch (i) {
case USB_DESCRIPTOR_TYPE_DEVICE:
- pDesc = (unsigned char *)&DeviceDescription;
+ pDesc = (unsigned char *)udev->devdes_table->pDeviceDescription;
Len = sizeof( USB_DEVICE_DESCRIPTOR);
break;
case USB_DESCRIPTOR_TYPE_CONFIGURATION:
- pDesc = (unsigned char *)&ConfigDescription;
- Len = CONFIG_DESCRIPTOR_LENGTH;
+ /* FIXME confidx = udev->configuration; */
+ confidx = 0;
+ pconfent = &udev->devdes_table->pConfigurations[confidx];
+ pDesc = (unsigned char *)pconfent->pConfigDescription;
+ Len = pconfent->iConfigTotalLength;
break;
case USB_DESCRIPTOR_TYPE_INTERFACE:
- pDesc = (unsigned char *)&ConfigDescription.interface;
+ /* FIXME multiple interfaces */
+ pDesc = (unsigned char *)udev->devdes_table->pInterfaceDescriptors[0];
Len = sizeof( USB_INTERFACE_DESCRIPTOR);
break;
case USB_DESCRIPTOR_TYPE_STRING:
i = dreq->wValue & 0xff; /* LSB part of wValue */
/*printf("Get descriptor indx=0x%02x\n", i);*/
- if ( i < CNT_STRINGS) {
- pDesc = (unsigned char *) StringDescriptors[ i];
+ if ( i < udev->devdes_table->iNumStrings) {
+ pDesc = (unsigned char *) udev->devdes_table->pStrings[i];
Len = *pDesc;
/*usb_debug_print(0,("indx=0x%02x ptr=%p len=%d : '%c'\n", i, pDesc, Len, pDesc[2]));*/
} else {
# Generic directory or leaf node makefile for OCERA make framework
ifndef MAKERULES_DIR
-MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
endif
ifeq ($(MAKERULES_DIR),)
all : default
.DEFAULT::
@echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
-else
+else
include $(MAKERULES_DIR)/Makefile.rules
endif
#endif /*PDIUSBD11*/
+ int usb_pdi_set_addr( usb_device_t *udev, unsigned char addr) {
+ #if !defined(PDIUSBH11A_MULTIPLE) // D11,D12,H11,H11A_S(emb.fnc)
+ pdiSetAddressEnable(addr | PDI_ENAD_ENABLE);
+ #else
+ /*void pdiSetEmbFncAddressEnable( unsigned char byFnc, unsigned char byAddress, unsigned char byEnable);*/
+ #error usb_pdi_set_addr not implemented for PDIUSBH11A_MULTIPLE
+ #endif
+ return 0;
+ }
+
+ int usb_pdi_set_configuration( usb_device_t *udev, unsigned char iCfg) USB_UDEV_REENTRANT_SIGN
+ {
+ pdiSetEndpointEnable( 0); // USBInitUnconfig();
+ if ( iCfg) {
+ pdiSetEndpointEnable( PDI_EPEN_ENABLE); //USBInitConfig();
+ }
+ return 0;
+ }
/* connect usb */
int usb_pdi_connect( usb_device_t *udev) {
pdiSetEpStatus( ep->epnum, PDI_SET_EP_STALLED);
} else { // endpoint0
pdiSetEpStatus( PDI_EP0_TX, PDI_SET_EP_STALLED);
- pdiSetEpStatus( PDI_EP0_RX, PDI_SET_EP_STALLED);
+ pdiSetEpStatus( PDI_EP0_RX, PDI_SET_EP_STALLED);
+ }
+ }
+
+/* stall endpoint X */
+ void usb_pdi_unstall( usb_ep_t *ep) {
+ if ( ep->epnum) {
+ pdiSetEpStatus( ep->epnum, 0);
+ } else { // endpoint0
+ pdiSetEpStatus( PDI_EP0_TX, 0);
+ pdiSetEpStatus( PDI_EP0_RX, 0);
}
}
#ifndef USB_PDI_DIRECT_FNC
udev->connect = usb_pdi_connect;
+ udev->set_addr = usb_pdi_set_addr;
+ udev->set_configuration = usb_pdi_set_configuration;
udev->disconnect = usb_pdi_disconnect;
udev->ack_setup = usb_pdi_ack_setup;
udev->ack_control_setup = usb_pdi_ack_control_setup;
udev->stall = usb_pdi_stall;
+ udev->unstall = usb_pdi_unstall;
udev->check_events = usb_pdi_check_events;
udev->read_endpoint = usb_pdi_read_endpoint;
udev->write_endpoint = usb_pdi_write_endpoint;
#define usb_udev_is_fnc(_M_udev, _M_fnc) (1)
#define usb_udev_init usb_pdi_init
+ #define usb_udev_set_addr usb_pdi_set_addr
+ #define usb_udev_set_configuration usb_pdi_set_configuration
#define usb_udev_connect usb_pdi_connect
#define usb_udev_disconnect usb_pdi_disconnect
#define usb_udev_ack_setup usb_pdi_ack_setup
#define usb_udev_check_events usb_pdi_check_events
#define usb_udev_stall usb_pdi_stall
+ #define usb_udev_unstall usb_pdi_unstall
#define usb_udev_read_endpoint usb_pdi_read_endpoint
#define usb_udev_write_endpoint usb_pdi_write_endpoint
#ifdef USB_PDI_EXPORT_FNC
int usb_pdi_init( usb_device_t *udev);
+ int usb_pdi_set_addr( usb_device_t *udev, unsigned char addr);
+ int usb_pdi_set_configuration( usb_device_t *udev, unsigned char iCfg);
int usb_pdi_connect( usb_device_t *udev);
int usb_pdi_disconnect( usb_device_t *udev);
void usb_pdi_ack_setup( usb_device_t *udev);
int usb_pdi_check_events( usb_device_t *udev);
void usb_pdi_stall( usb_ep_t *ep);
+ void usb_pdi_unstall( usb_ep_t *ep);
int usb_pdi_read_endpoint( usb_ep_t *ep, void *ptr, int size) USB_UDEV_REENTRANT_SIGN;
int usb_pdi_write_endpoint( usb_ep_t *ep, const void *ptr, int size) USB_UDEV_REENTRANT_SIGN;