Add randpool test program.
authorasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Thu, 15 Feb 2007 18:17:51 +0000 (18:17 +0000)
committerasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Thu, 15 Feb 2007 18:17:51 +0000 (18:17 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@788 38d2e660-2303-0410-9eaa-f027e97ec537

app/randpool/appconfig.h [new file with mode: 0755]
app/randpool/randpool_demo.c [new file with mode: 0755]
app/randpool/randpool_demo.mk [new file with mode: 0755]

diff --git a/app/randpool/appconfig.h b/app/randpool/appconfig.h
new file mode 100755 (executable)
index 0000000..6534836
--- /dev/null
@@ -0,0 +1,258 @@
+/**
+ * \file
+ * <!--
+ * Copyright 2003, 2004, 2006 Develer S.r.l. (http://www.develer.com/)
+ * This file is part of DevLib - See README.devlib for information.
+ * -->
+ *
+ * \brief DevLib configuration options
+ *
+ * You should copy this header in your project and rename it to
+ * "config.h" and delete the CONFIG_ macros for the modules
+ * you're not using.
+ *
+ * <h2>Working with multiple applications</h2>
+ *
+ * If your project is made of multiple DevLib-based applications,
+ * create a custom "config.h" file in each application subdirectory
+ * and play with the compiler include path to get the desired result.
+ * You can share common options by creationg a "config_common.h" header
+ * and including it from all your "config.h" copies.
+ *
+ * <h2>Configuration style</h2>
+ *
+ * For improved compile-time checking of configuration options,
+ * the preferred way to use a \c CONFIG_ symbol is keeping it
+ * always defined with a value of either 0 or 1.  This lets
+ * you write tests like this:
+ *
+ * \code
+ *  #if CONFIG_FOO
+ *  void foo(void)
+ *  {
+ *      if (CONFIG_BAR)
+ *          bar();
+ *  }
+ *  #endif // CONFIG_FOO
+ * \endcode
+ *
+ * In most cases, we rely on the optimizer to discard checks
+ * on constant values and performing dead-code elimination.
+ *
+ * \version $Id$
+ * \author Bernardo Innocenti <bernie@develer.com>
+ * \author Stefano Fedrigo <aleph@develer.com>
+ */
+
+/*#*
+ *#* $Log$
+ *#* Revision 1.1  2007/02/15 18:17:51  asterix
+ *#* Add randpool test program.
+ *#*
+ *#* Revision 1.16  2007/02/12 15:29:41  asterix
+ *#* Add CONFIG_RANDPOOL_TIMER macro to swich on or off timer support in randpool.
+ *#*
+ *#* Revision 1.15  2007/02/08 14:20:35  asterix
+ *#* Add CONFIG_SIZE_ENTROPY_POOL.
+ *#*
+ *#* Revision 1.14  2007/02/06 11:37:26  asterix
+ *#* Add CONFIG_MD2_STD_PERM for use standard permutation in MD2.
+ *#*
+ *#* Revision 1.13  2007/01/31 13:49:40  asterix
+ *#* Add config size block for MD2
+ *#*
+ *#* Revision 1.3  2006/09/13 18:29:22  bernie
+ *#* Add a few missing CONFIG_ definitions.
+ *#*
+ *#* Revision 1.2  2006/07/19 12:56:24  bernie
+ *#* Convert to new Doxygen style.
+ *#*
+ *#* Revision 1.1  2006/05/18 00:40:43  bernie
+ *#* Rename appconfig.h to appconfig_common.h.
+ *#*
+ *#* Revision 1.11  2006/04/11 00:08:53  bernie
+ *#* Add smooth scrolling for menus.
+ *#*
+ *#* Revision 1.10  2006/03/22 09:48:51  bernie
+ *#* Add a few more config options.
+ *#*
+ *#* Revision 1.9  2006/02/24 00:27:35  bernie
+ *#* Enable kernel and fix Doxygen markup.
+ *#*
+ *#* Revision 1.8  2006/02/21 16:06:05  bernie
+ *#* Update copyright info.
+ *#*
+ *#* Revision 1.7  2006/02/17 22:28:19  bernie
+ *#* Add missing UART definitions.
+ *#*
+ *#* Revision 1.6  2006/02/15 09:12:56  bernie
+ *#* Switch to BITMAP_FMT_PLANAR_V_LSB.
+ *#*
+ *#* Revision 1.5  2006/02/10 12:34:33  bernie
+ *#* Add missing config options for gfx and kbd.
+ *#*
+ *#* Revision 1.4  2006/01/23 23:12:27  bernie
+ *#* Enable CONFIG_GFX_VCOORDS.
+ *#*
+ *#* Revision 1.3  2006/01/17 02:30:06  bernie
+ *#* Add new config vars.
+ *#*
+ *#* Revision 1.2  2005/11/27 03:04:57  bernie
+ *#* CONFIG_WATCHDOG: New config option.
+ *#*
+ *#* Revision 1.1  2005/11/04 17:42:12  bernie
+ *#* Move cfg/config.h to appconfig.h.
+ *#*/
+
+#ifndef APPCONFIG_H
+#define APPCONFIG_H
+
+/** Baud-rate for the kdebug console */
+#define CONFIG_KDEBUG_BAUDRATE  19200
+
+/**
+ * printf()-style formatter configuration.
+ *
+ * \sa PRINTF_DISABLED
+ * \sa PRINTF_NOMODIFIERS
+ * \sa PRINTF_REDUCED
+ * \sa PRINTF_NOFLOAT
+ * \sa PRINTF_FULL
+ */
+#define CONFIG_PRINTF PRINTF_FULL
+
+/**
+ * Multithreading kernel.
+ *
+ * \sa config_kern.h
+ */
+#define CONFIG_KERNEL 0
+
+/**
+ * \name Serial driver parameters
+ * \{
+ */
+       /** [bytes] Size of the outbound FIFO buffer for port 0. */
+       #define CONFIG_UART0_TXBUFSIZE  32
+
+       /** [bytes] Size of the inbound FIFO buffer for port 0. */
+       #define CONFIG_UART0_RXBUFSIZE  64
+
+       /** [bytes] Size of the outbound FIFO buffer for port 1. */
+       #define CONFIG_UART1_TXBUFSIZE  32
+
+       /** [bytes] Size of the inbound FIFO buffer for port 1. */
+       #define CONFIG_UART1_RXBUFSIZE  64
+
+       /** [bytes] Size of the outbound FIFO buffer for SPI port (AVR only). */
+       #define CONFIG_SPI_TXBUFSIZE    16
+
+       /** [bytes] Size of the inbound FIFO buffer for SPI port (AVR only). */
+       #define CONFIG_SPI_RXBUFSIZE    32
+
+       /** SPI data order (AVR only). */
+       #define CONFIG_SPI_DATA_ORDER   SER_MSB_FIRST
+
+       /** SPI clock division factor (AVR only). */
+       #define CONFIG_SPI_CLOCK_DIV    16
+
+       /** SPI clock polarity: 0 = normal low, 1 = normal high (AVR only). */
+       #define CONFIG_SPI_CLOCK_POL    0
+
+       /** SPI clock phase: 0 = sample on first edge, 1 = sample on second clock edge (AVR only). */
+       #define CONFIG_SPI_CLOCK_PHASE  0
+
+       /** Default transmit timeout (ms). Set to -1 to disable timeout support */
+       #define CONFIG_SER_TXTIMEOUT    -1
+
+       /** Default receive timeout (ms). Set to -1 to disable timeout support */
+       #define CONFIG_SER_RXTIMEOUT    -1
+
+       /** Use RTS/CTS handshake */
+       #define CONFIG_SER_HWHANDSHAKE   0
+
+       /** Default baud rate (set to 0 to disable) */
+       #define CONFIG_SER_DEFBAUDRATE   0
+
+       /** Enable ser_gets() and ser_gets_echo() */
+       #define CONFIG_SER_GETS          0
+
+       /** Enable second serial port in emulator. */
+       #define CONFIG_EMUL_UART1        0
+
+       /**
+        * Transmit always something on serial port 0 TX
+        * to avoid interference when sending burst of data,
+        * using AVR multiprocessor serial mode
+        */
+       #define CONFIG_SER_TXFILL        0
+
+       #define CONFIG_SER_STROBE        0
+/*\}*/
+
+/// Hardware timer selection for drv/timer.c
+#define CONFIG_TIMER  TIMER_ON_OUTPUT_COMPARE2
+
+/// Debug timer interrupt using a strobe pin.
+#define CONFIG_TIMER_STROBE  0
+
+/// Enable ADS strobe.
+#define CONFIG_ADC_STROBE  0
+
+/// Enable watchdog timer.
+#define CONFIG_WATCHDOG 0 
+
+/// EEPROM type for drv/eeprom.c
+#define CONFIG_EEPROM_TYPE EEPROM_24XX256
+
+/// Select bitmap pixel format.
+#define CONFIG_BITMAP_FMT  BITMAP_FMT_PLANAR_V_LSB
+
+/// Enable line clipping algorithm.
+#define CONFIG_GFX_CLIPPING  1
+
+/// Enable text rendering in bitmaps.
+#define CONFIG_GFX_TEXT  1
+
+/// Enable virtual coordinate system.
+#define CONFIG_GFX_VCOORDS  1
+
+/// Keyboard polling method
+#define CONFIG_KBD_POLL  KBD_POLL_SOFTINT
+
+/// Enable keyboard event delivery to observers
+#define CONFIG_KBD_OBSERVER  0
+
+/// Enable key beeps
+#define CONFIG_KBD_BEEP  1
+
+/// Enable long pression handler for keys
+#define CONFIG_KBD_LONGPRESS  1
+
+/**
+ * \name Type for the chart dataset
+ * \{
+ */
+#define CONFIG_CHART_TYPE_X uint8_t
+#define CONFIG_CHART_TYPE_Y uint8_t
+/*\}*/
+
+/// Enable button bar behind menus
+#define CONFIG_MENU_MENUBAR  0
+
+/// Enable smooth scrolling in menus
+#define CONFIG_MENU_SMOOTH  1
+
+/// Size of block for MD2 algorithm.
+#define CONFIG_MD2_BLOCK_LEN 16
+
+/// Use standard permutation in MD2 algorithm.
+#define CONFIG_MD2_STD_PERM 0 
+
+/// Define a size, in byte, of entropy pool.
+#define CONFIG_SIZE_ENTROPY_POOL 256
+
+/// Turn on or off timer support in Randpool.
+#define CONFIG_RANDPOOL_TIMER 1
+
+#endif /* APPCONFIG_H */
diff --git a/app/randpool/randpool_demo.c b/app/randpool/randpool_demo.c
new file mode 100755 (executable)
index 0000000..17041c4
--- /dev/null
@@ -0,0 +1,226 @@
+/**
+ * \file
+ * <!--
+ * Copyright 2007 Develer S.r.l. (http://www.develer.com/)
+ * This file is part of DevLib - See README.devlib for information.
+ * -->
+ *
+ * \brief Test function for randpool API.
+ *
+ * This program return a rand number generate from randpool function.
+ * For use randpool function you need a souce of entropy. In this
+ * program you can choose from:
+ *     - /dev/random
+ *     - /dev/urandom
+ *     - /dev/input/mouse0
+ *     
+ * There are 3 mode of output:
+ *     - binmode: program generate a sequenze of random byte.
+ *     - Matrix of random number for octave program.
+ *     - Vector of random number for octave program.
+ * 
+ * \version $Id$
+ * \author Daniele Basile <asterix@develer.com>
+ */
+
+/*#*
+ *#* $Log$
+ *#* Revision 1.1  2007/02/15 18:17:51  asterix
+ *#* Add randpool test program.
+ *#*
+ *#*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <cfg/compiler.h>
+#include <drv/timer.h>
+#include <algos/md2.h> 
+#include <algos/randpool.h>
+#include <unistd.h>
+
+#define LEN 256      //Size of buffer containing a random number.
+#define SAMPLE 1000  //Defoult number of byte that put in entropy pool.
+
+int main (int argc, char *argv[])
+{
+       EntropyPool pool;
+       uint8_t ch;
+       uint8_t buff[LEN];
+       FILE *pdev;
+       int opt = getopt (argc, argv, "murh");
+       int samp = SAMPLE;
+       int round = 10;
+       int mode = 0;
+       int  pass = 0;
+
+       timer_init();
+
+       randpool_init(&pool, NULL, 0); //Init a entropy pool.
+
+       /*
+        * Chose a source of entropy.
+        */
+       switch(opt)
+       {
+               case 'm':
+               {
+                       pdev = fopen("/dev/input/mouse0", "r");
+                       break;
+               }
+               case 'u':
+               {
+                       pdev = fopen("/dev/urandom", "r");
+                       break;
+               }
+               case 'r':
+               {
+                       pdev = fopen("/dev/random", "r");
+                       break;
+               }
+               case 'h':
+               {
+               }
+               default:
+               {
+                       printf("\n");   
+                       printf("\n");   
+                       printf("randpool_demo [OPTION] [SAMPLE] [ROUND] [MODE]\n");     
+                       printf("\n");   
+                       printf("OPTION:\n");    
+                       printf("  -r  /dev/random\n");  
+                       printf("  -u  /dev/urandom\n"); 
+                       printf("  -m  /dev/input/mouse0\n");    
+                       printf("\n");   
+                       printf("SAMPLE:\n");    
+                       printf("  num  number of entropy byte to put in etropy pool.\n");       
+                       printf("\n");   
+                       printf("ROUND:\n");     
+                       printf("  num  number call of randpool_get function.\n");       
+                       printf("\n");
+                       printf("MODE:\n");      
+                       printf("  0  binmode\n");       
+                       printf("  1  vector mode\n");   
+                       printf("  2  matrix mode\n");   
+                       printf("\n");
+                       printf("Test program of randpool API.\n");      
+                       printf("This program create an entropy pool of 256byte, and fill it\n");        
+                       printf("with entropy from a exsternal source. This source can be:\n");  
+                       printf("  - /dev/random (option: -r)\n");       
+                       printf("  - /dev/urandom (option: -u)\n");      
+                       printf("  - /dev/input/mouse0 (option: -m)\n"); 
+                       printf("\n");   
+                       printf("Once the pool is full, program call a randpool_get ROUND time,\n");     
+                       printf("printing on STDOUT random value, in accord with a select mode.\n");     
+                       printf("The mode are:\n");      
+                       printf("  - binmode: program print on STDOUT random byte. (option: 0 (defaul mode)\n"); 
+                       printf("  - vector mode: program print on STDOUT a ROUND vector of random value.\n");   
+                       printf("                 The output is format for octave program. (option: 1)\n");      
+                       printf("  - matrix mode: program print on STDOUT a matrix of random value.\n"); 
+                       printf("                 The output is format for octave program. (option: 2)\n");      
+                       printf("\n");
+                       exit(1);
+               }
+
+       }
+
+       /*
+        *  
+        */
+       if(argc > 2)
+       {
+               if(argv[2])
+                       samp = atoi(argv[2]);  //Number of byte take from entropy source
+               if(argv[3])
+                       round = atoi(argv[3]); //Number of time we call randpool_get.
+               if(argv[4])
+               {       
+                       switch(atoi(argv[4]))
+                       {
+                               case 1:
+                               {
+                                       mode = 1;
+                                       printf("# Created by Asterix.\n");
+                                       printf("# name: __nargin__\n");
+                                       printf("# type: scalar\n");
+                                       printf("0\n");
+                                       break;
+                               }
+                               case 2:
+                               {
+                                       mode = 2;
+                                       printf("# Created by Asterix.\n");
+                                       printf("# name: __nargin__\n");
+                                       printf("# type: scalar\n");
+                                       printf("0\n");
+                                       break;
+                               }
+                               default:
+                               {
+                                       break;
+                               }
+
+                       }
+
+               }
+
+       }
+
+       /*
+        * Add byte to entropy pool from a source of entropy.
+        */
+       for(int i = 0; i < samp; i++)
+       {
+
+               ch = fgetc(pdev);
+               randpool_add(&pool, &ch, sizeof(ch));
+               
+       }
+
+       fclose(pdev);
+
+       
+       for(int k = 0; k < round; k++)
+       {       
+               switch(mode)
+               {
+                       case 1:
+                       {
+                               printf("\n");
+                               printf("\n# name: vet%d",k);
+                               printf("\n# type: matrix");
+                               printf("\n# rows: 1");
+                               printf("\n# columns: %d\n", LEN);
+                               pass = 1;
+                               break;
+                       }
+                       case 2:
+                       {
+                               printf("\n");
+                               printf("\n# name: randMatrix");
+                               printf("\n# type: matrix");
+                               printf("\n# rows: %d",round);
+                               printf("\n# columns: %d\n", LEN);
+                               pass = 1;
+                               mode = 0;
+                               break;
+                       }
+               }
+
+               randpool_get(&pool, buff, LEN);
+
+               if(pass)
+               {
+                       for(int j = 0; j < LEN; j++)
+                       {
+                               printf("%d ", buff[j]);
+                       }
+                       printf("\n");
+               }
+               else
+                       fwrite(buff, sizeof(uint8_t), LEN, stdout);
+       }
+       
+
+}
+
diff --git a/app/randpool/randpool_demo.mk b/app/randpool/randpool_demo.mk
new file mode 100755 (executable)
index 0000000..11d947e
--- /dev/null
@@ -0,0 +1,37 @@
+#
+# $Id$
+# Copyright 2006 Develer S.r.l. (http://www.develer.com/)
+# All rights reserved.
+#
+# Makefile fragment for DevLib randpool_demo application.
+#
+# Author: Daniele Basile <asterix@develer.com>
+#
+# $Log$
+# Revision 1.1  2007/02/15 18:17:51  asterix
+# Add randpool test program.
+#
+#
+
+
+# Set to 1 for debug builds
+randpool_demo_DEBUG = 0
+
+# Our target application
+TRG += randpool_demo
+
+randpool_demo_CSRC = \
+       app/randpool/randpool_demo.c \
+       algos/randpool.c \
+       algos/md2.c \
+       drv/timer.c \
+       os/hptime.c 
+
+randpool_demo_CFLAGS = -O0 -D'ARCH=0' -Iapp/randpool/ -Iapp/randpool/hw
+
+# Debug stuff
+ifeq ($(randpool_demo_DEBUG),1)
+       randpool_demo_CFLAGS += -D_DEBUG
+       randpool_demo_PCSRC += drv/kdebug.c
+endif
+