Embedded code-base updated to actual version from uLan repository.
authorppisa <pisa@cmp.felk.cvut.cz>
Sun, 23 Nov 2008 13:11:32 +0000 (14:11 +0100)
committerppisa <pisa@cmp.felk.cvut.cz>
Sun, 23 Nov 2008 13:11:32 +0000 (14:11 +0100)
Signed-off-by: ppisa <pisa@cmp.felk.cvut.cz>
58 files changed:
embedded/Makefile
embedded/app/Makefile
embedded/app/usbcan/Makefile
embedded/arch/Makefile
embedded/arch/arm/Makefile
embedded/arch/arm/generic/Makefile
embedded/arch/arm/generic/defines/Makefile
embedded/arch/arm/generic/libs/Makefile
embedded/arch/arm/generic/libs/misc/Makefile
embedded/arch/arm/generic/libs/misc/system_stub.c
embedded/arch/arm/generic/libs/misc/system_stub.h
embedded/arch/arm/mach-lpc21xx/Makefile
embedded/arch/arm/mach-lpc21xx/defines/Makefile
embedded/arch/arm/mach-lpc21xx/libs/Makefile
embedded/arch/arm/mach-lpc21xx/libs/hal/Makefile
embedded/arch/arm/mach-lpc21xx/libs/iap/Makefile
embedded/arch/arm/mach-lpc21xx/libs/iap/iap.c
embedded/arch/generic/Makefile
embedded/arch/generic/defines/Makefile
embedded/arch/generic/defines/Makefile.omk
embedded/arch/generic/defines/keyval_id_his.h [new file with mode: 0644]
embedded/board/Makefile
embedded/board/arm/Makefile
embedded/board/arm/ul_usb1/Makefile
embedded/board/arm/ul_usb1/config/config.u2uv2
embedded/board/arm/ul_usb1/config/config.ulboot
embedded/board/arm/ul_usb1/defines/Makefile
embedded/board/arm/ul_usb1/defines/system_def.h
embedded/board/arm/ul_usb1/libs/Makefile
embedded/board/arm/ul_usb1/libs/bspbase/Makefile
embedded/board/arm/ul_usb1/libs/bspbase/bsp0hwinit.c
embedded/board/arm/ul_usb1/libs/ldscripts/Makefile
embedded/libs4c/Makefile
embedded/libs4c/i2c/Makefile
embedded/libs4c/i2c/i2c_c552.c
embedded/libs4c/kbd/Makefile
embedded/libs4c/keyval/Makefile
embedded/libs4c/keyval/Makefile.omk
embedded/libs4c/keyval/keyval_mem_store.c [new file with mode: 0644]
embedded/libs4c/keyval/keyval_mem_store.h [new file with mode: 0644]
embedded/libs4c/keyval/keyvalpb.c
embedded/libs4c/keyval/keyvalpb.h
embedded/libs4c/usb/Makefile
embedded/libs4c/usb/base/Makefile
embedded/libs4c/usb/base/Makefile.omk
embedded/libs4c/usb/base/usb/usb.h
embedded/libs4c/usb/base/usb/usb_devdes.h [new file with mode: 0644]
embedded/libs4c/usb/base/usb/usb_spec.h
embedded/libs4c/usb/lpcusb/Makefile
embedded/libs4c/usb/lpcusb/lpc.c
embedded/libs4c/usb/lpcusb/lpcusb.c
embedded/libs4c/usb/more/Makefile
embedded/libs4c/usb/more/Makefile.omk
embedded/libs4c/usb/more/usb/usb_loader.h
embedded/libs4c/usb/more/usb_srq.c
embedded/libs4c/usb/pdiusb/Makefile
embedded/libs4c/usb/pdiusb/pdi.c
embedded/libs4c/usb/pdiusb/usb/pdi.h

index bdb6d45..b22a357 100644 (file)
@@ -1,15 +1,14 @@
 # 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
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index 24fa2f9..31a8f66 100644 (file)
@@ -30,7 +30,7 @@ _read (int file,
 
 int
 _write (int    file,
-       char * ptr,
+       const char * ptr,
        int    len)
 {
   if(!system_stub_ops.write)
@@ -76,6 +76,12 @@ _exit (int n)
   while(1);
 }
 
+void abort(void)
+{
+  ((local_call_t*)0)();
+  while(1);
+}
+
 int
 _kill (int n, int m)
 {
@@ -83,14 +89,14 @@ _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;
@@ -121,7 +127,7 @@ _sbrk (int incr)
   
   heap_end += incr;
 
-  return (caddr_t) prev_heap_end;
+  return /*(caddr_t)*/ prev_heap_end;
 }
 
 int
@@ -136,13 +142,13 @@ int _stat (const char *fname, struct stat *st)
 }
 
 int
-_link (void)
+_link (const char *path1, const char *path2 )
 {
   return -1;
 }
 
 int
-_unlink (void)
+_unlink (const char *path)
 {
   return -1;
 }
@@ -207,3 +213,47 @@ _rename (const char * oldpath, const char * newpath)
 {
   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);}
index b1e3375..d697635 100644 (file)
@@ -7,7 +7,7 @@ typedef struct system_stub_ops_t {
   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;
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index 9403f68..cc39097 100644 (file)
@@ -2,6 +2,8 @@
 #include <cpu_def.h>
 #include <hal_machperiph.h>
 
+#define IAP_PLL_FULL_SPEED      1
+
 #define CMD_SUCCESS 0
 #define BUSY 11
 
@@ -21,7 +23,7 @@ inline int addr2sec(unsigned long addr)
 {
   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);
@@ -74,14 +76,18 @@ int lpcisp_erase(void *addr, int len)
   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);
@@ -96,7 +102,9 @@ int lpcisp_write(void *addr_des, const void *addr_src, int len)
   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;
@@ -109,7 +117,9 @@ int lpcisp_write(void *addr_des, const void *addr_src, int len)
 
   iap_entry(command, result);
 
+ #ifndef IAP_PLL_FULL_SPEED
   lpc_pll_on();
+ #endif
   restore_flags(flags);
 
   return (CMD_SUCCESS == *result);
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index 5bbf0f6..65c8142 100644 (file)
@@ -1,4 +1,4 @@
 # -*- 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)) 
diff --git a/embedded/arch/generic/defines/keyval_id_his.h b/embedded/arch/generic/defines/keyval_id_his.h
new file mode 100644 (file)
index 0000000..f07cc45
--- /dev/null
@@ -0,0 +1,12 @@
+#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_ */
+
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index 6deb39e..e320cf6 100644 (file)
@@ -14,6 +14,7 @@ CONFIG_OC_UL_DRV_U450_TMELATE=y
 #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
index 52b0004..509c3d7 100644 (file)
@@ -5,6 +5,7 @@ MACH=lpc21xx
 BOARD=ul_usb1
 
 CONFIG_ULBOOT=y
+CONFIG_ULBOOT_WITH_USB=y
 
 CONFIG_OC_UL_DRV_SYSLESS=y
 CONFIG_OC_UL_DRV_U450_VARPINS=y
@@ -13,6 +14,10 @@ CONFIG_OC_UL_DRV_U450_TMELATE=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-
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index 12c6cac..4364199 100644 (file)
 #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_ */
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index eceffb4..468e172 100644 (file)
@@ -88,7 +88,7 @@ void timerInit(void)
 
 #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;
@@ -269,7 +269,9 @@ int uLanInit()
             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 */
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index bdb6d45..b22a357 100644 (file)
@@ -1,15 +1,14 @@
 # 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
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index 56837d0..7cede72 100644 (file)
@@ -79,14 +79,14 @@ static int c552_sfnc_ms_end(struct i2c_drv *drv)
   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) {
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index 36743e7..35b5272 100644 (file)
@@ -5,5 +5,9 @@ default_CONFIG = CONFIG_KEYVAL=n
 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
diff --git a/embedded/libs4c/keyval/keyval_mem_store.c b/embedded/libs4c/keyval/keyval_mem_store.c
new file mode 100644 (file)
index 0000000..b32e4df
--- /dev/null
@@ -0,0 +1,63 @@
+/******************************************************************************/
+/* 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 */
diff --git a/embedded/libs4c/keyval/keyval_mem_store.h b/embedded/libs4c/keyval/keyval_mem_store.h
new file mode 100644 (file)
index 0000000..af3fdeb
--- /dev/null
@@ -0,0 +1,10 @@
+#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*/
index 8dd6d1e..e1f48b3 100644 (file)
@@ -17,7 +17,7 @@
   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.
 
  *******************************************************************/
@@ -57,16 +57,16 @@ kvpb_sum_t kvpb_memsum(KVPB_DPTRTYPE uint8_t *base, kvpb_size_t size)
  * 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);
   }
@@ -142,9 +142,9 @@ int __kvpb_check(uint8_t mode)
   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) {
@@ -172,7 +172,7 @@ int __kvpb_check(uint8_t mode)
     if(ret>=0)
       ret=0;
   }
-  
+
   if(ret){
     if(!mode) {
       kvpb_block->flags|=KVPB_DESC_RO;
@@ -207,7 +207,7 @@ int __kvpb_check(uint8_t mode)
       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;
 }
@@ -236,7 +236,7 @@ KVPB_DPTRTYPE kvpb_key_t *__kvpb_first(uint8_t mode)
   }
   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;
@@ -310,9 +310,9 @@ KVPB_DPTRTYPE kvpb_key_t *__kvpb_find(kvpb_keyid_t keyid, uint8_t mode, KVPB_DPT
  * 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;
@@ -321,22 +321,24 @@ int __kvpb_compact_region(uint8_t mode, kvpb_keyid_t keyid)
   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);
     }
@@ -397,12 +399,12 @@ int __kvpb_set_key(kvpb_keyid_t keyid, kvpb_size_t size, const void *buf)
   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;
@@ -429,10 +431,10 @@ int __kvpb_set_key(kvpb_keyid_t keyid, kvpb_size_t size, const void *buf)
 
   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){
@@ -462,7 +464,7 @@ int __kvpb_set_key(kvpb_keyid_t keyid, kvpb_size_t size, const void *buf)
     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));
index dbb7774..210a02b 100644 (file)
@@ -17,7 +17,7 @@
   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.
 
  *******************************************************************/
@@ -63,7 +63,7 @@
 #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;
@@ -84,7 +84,7 @@ typedef uint32_t kvpb_keyid_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
@@ -111,14 +111,15 @@ typedef struct kvpb_block {
 } 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
@@ -135,7 +136,7 @@ typedef struct kvpb_block {
 /**
  * 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
@@ -180,7 +181,7 @@ typedef struct kvpb_block {
  */
  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) ;
  }
 
 /**
@@ -222,15 +223,18 @@ typedef struct kvpb_block {
                 ((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 */
 
 /**
@@ -284,7 +288,7 @@ int __kvpb_check(uint8_t mode);
 #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)
@@ -301,7 +305,7 @@ int __kvpb_check(uint8_t mode);
  */
 #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
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index 01d6e0b..b9d0731 100644 (file)
@@ -9,7 +9,7 @@ lib_LIBRARIES = usbbase
 
 #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 
 
index 40338a6..4807b59 100644 (file)
@@ -9,6 +9,7 @@
   #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))
diff --git a/embedded/libs4c/usb/base/usb/usb_devdes.h b/embedded/libs4c/usb/base/usb/usb_devdes.h
new file mode 100644 (file)
index 0000000..11d1337
--- /dev/null
@@ -0,0 +1,34 @@
+/*************************************************/
+/***   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*/
+
index 841a2a4..7d6f87b 100644 (file)
@@ -29,7 +29,7 @@
     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
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index 7d9f20c..159c899 100644 (file)
@@ -8,6 +8,23 @@
 #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));
@@ -27,12 +44,16 @@ void usb_lpc_ack_setup( usb_device_t *udev) {
 
 /* 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);
 }
 
 /**
@@ -147,10 +168,13 @@ int usb_lpc_write_endpoint( usb_ep_t *ep, const void *ptr, int size)
 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;
index 1cf130d..09b1eac 100644 (file)
@@ -150,11 +150,10 @@ int lpc_usb_read_endpoint( unsigned int ep_num, void *ptr, int size)
   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;
       }
     }
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index c28fbda..e90fb15 100644 (file)
@@ -5,6 +5,8 @@ default_CONFIG = CONFIG_USB_MORE=n
 ifeq ($(CONFIG_USB_MORE),y) 
 lib_LIBRARIES = usbmore
 
+nobase_include_HEADERS = usb/usb_loader.h
+
 #shared_LIBRARIES = 
 
 #include_HEADERS  = 
index 5c215e4..1246534 100644 (file)
 
 #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*/
index 463f039..d235bb5 100644 (file)
@@ -5,20 +5,19 @@
 /*****************************************************/
 
 #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) {
@@ -31,6 +30,7 @@
       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;
         }
@@ -78,6 +90,7 @@
 
   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 {
index f595272..b22a357 100644 (file)
@@ -1,14 +1,14 @@
 # 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
 
index 3229d36..1cc4cb2 100644 (file)
 
 #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) {
@@ -157,7 +175,17 @@ if ( LastInt) {
       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); 
     }
   }
 
@@ -184,10 +212,13 @@ if ( LastInt) {
 
    #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;
index 21bb5db..3493c00 100644 (file)
@@ -18,6 +18,8 @@
     #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
@@ -25,6 +27,7 @@
     #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
 
@@ -33,6 +36,8 @@
   #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);
@@ -40,6 +45,7 @@
     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;