[Armadeus-commitlog] armadeus branch, master, updated. armadeus-5.1-7-geda9897
Brought to you by:
sszy
|
From: jscheer <js...@us...> - 2012-10-09 13:54:31
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "armadeus".
The branch, master has been updated
via eda9897bd608cce07978c8dbb6bf0be9a5a18efc (commit)
via 8c41bffa58d0c75b24bfe9ce2ef60af30a245eef (commit)
from 2ace8d34b8277745533592480308414a90c3beb1 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit eda9897bd608cce07978c8dbb6bf0be9a5a18efc
Merge: 8c41bff 2ace8d3
Author: Jeremie Scheer <jer...@ar...>
Date: Tue Oct 9 15:54:02 2012 +0200
Merge branch 'master' of ssh://armadeus.git.sourceforge.net/gitroot/armadeus/armadeus
commit 8c41bffa58d0c75b24bfe9ce2ef60af30a245eef
Author: Jeremie Scheer <jer...@ar...>
Date: Tue Oct 9 15:53:24 2012 +0200
[PACKAGES][AS_DEVICES] C and C++ wrapper for I2C EEPROM.
-----------------------------------------------------------------------
Summary of changes:
target/packages/as_devices/c/Makefile | 1 +
target/packages/as_devices/c/as_i2c_eeprom.c | 193 ++++++++++++++++++++
target/packages/as_devices/c/as_i2c_eeprom.h | 100 ++++++++++
target/packages/as_devices/cpp/Makefile | 1 +
.../cpp/{as_backlight.cpp => as_i2c_eeprom.cpp} | 46 ++----
.../cpp/{as_backlight.hpp => as_i2c_eeprom.hpp} | 52 +++---
target/packages/as_devices/main.c | 5 +-
target/packages/as_devices/test_c.h | 166 +++++++++++++++++
target/packages/as_devices/test_cpp.h | 165 +++++++++++++++++
9 files changed, 668 insertions(+), 61 deletions(-)
create mode 100644 target/packages/as_devices/c/as_i2c_eeprom.c
create mode 100644 target/packages/as_devices/c/as_i2c_eeprom.h
copy target/packages/as_devices/cpp/{as_backlight.cpp => as_i2c_eeprom.cpp} (52%)
copy target/packages/as_devices/cpp/{as_backlight.hpp => as_i2c_eeprom.hpp} (50%)
diff --git a/target/packages/as_devices/c/Makefile b/target/packages/as_devices/c/Makefile
index 12014cc..2aab51f 100644
--- a/target/packages/as_devices/c/Makefile
+++ b/target/packages/as_devices/c/Makefile
@@ -22,6 +22,7 @@ OBJ += as_as1531.o
OBJ += as_max1027.o
OBJ += as_max5821.o
OBJ += as_backlight.o
+OBJ += as_i2c_eeprom.o
OBJ += as_helpers.o
LIBRARY=as_devices
diff --git a/target/packages/as_devices/c/as_i2c_eeprom.c b/target/packages/as_devices/c/as_i2c_eeprom.c
new file mode 100644
index 0000000..3f5a165
--- /dev/null
+++ b/target/packages/as_devices/c/as_i2c_eeprom.c
@@ -0,0 +1,193 @@
+/*
+** THE ARMadeus Systems
+**
+** Copyright (C) 2012 The armadeus systems team
+** Jérémie Scheer <jer...@ar...>
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+**
+** This library is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+** Lesser General Public License for more details.
+**
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "as_i2c_eeprom.h"
+
+//#define DEBUG
+#ifdef DEBUG
+# define ERROR(fmt, ...) printf(fmt, ##__VA_ARGS__)
+#else
+# define ERROR(fmt, ...) /*fmt, ##__VA_ARGS__*/
+#endif
+
+/*------------------------------------------------------------------------------*/
+
+struct as_i2c_eeprom_device * as_i2c_eeprom_open(int aBusNumber,
+ uint32_t anEeprom_addr,
+ uint32_t anAddr_width,
+ uint32_t aPage_buffer_size,
+ uint16_t aNumber_pages,
+ uint16_t aPage_size)
+{
+ struct as_i2c_eeprom_device *dev;
+
+ /* Open I2C bus */
+ struct as_i2c_device *i2c_dev;
+ i2c_dev = as_i2c_open(aBusNumber);
+ if (i2c_dev == NULL) {
+ ERROR("Can't open I2C device");
+ return NULL;
+ }
+
+ if (as_i2c_set_slave_addr(i2c_dev, anEeprom_addr) < 0)
+ {
+ ERROR("Can't set EEPROM address on I2C\n");
+ return NULL;
+ }
+
+ /* verify datas */
+ if (!((anAddr_width == 8) || (anAddr_width == 16)))
+ return NULL;
+ if (!((aPage_buffer_size == 16) || (aPage_buffer_size == 32)))
+ return NULL;
+ if (!((aNumber_pages == 1) || (aNumber_pages == 2) || (aNumber_pages == 4)))
+ return NULL;
+ if (!((aPage_size == 256) || (aPage_size == 8*1024)))
+ return NULL;
+
+ dev = (struct as_i2c_eeprom_device *)malloc(sizeof(struct as_i2c_eeprom_device));
+ if (dev == NULL)
+ {
+ ERROR("Can't allocate memory for I2C eeprom structure device\n");
+ return NULL;
+ }
+
+ /* fill in spidev structure */
+ dev->i2c_dev = i2c_dev;
+ dev->eeprom_addr = anEeprom_addr;
+ dev->addr_width = anAddr_width;
+ dev->page_buffer_size = aPage_buffer_size;
+ dev->number_pages = aNumber_pages;
+ dev->page_size = aPage_size;
+
+ return dev;
+}
+
+/** @brief close the device
+ *
+ * @param aDev i2c eeprom structure
+ *
+ */
+void as_i2c_eeprom_close(struct as_i2c_eeprom_device *aDev)
+{
+ as_i2c_close(aDev->i2c_dev);
+ free(aDev);
+}
+
+int32_t as_i2c_eeprom_read(struct as_i2c_eeprom_device *aDev, uint16_t aPage_number, uint8_t* aBuffer)
+{
+ int16_t len = 0;
+ uint8_t buffer[8*1024];
+
+ if (aPage_number > aDev->number_pages) {
+ aPage_number = aDev->number_pages;
+ ERROR("Wrong page number\n");
+ }
+
+ if (aDev->addr_width == 8) {
+ buffer[0] = 0;
+ len = 1;
+ } else { // 16
+ buffer[0] = 0;
+ buffer[1] = 0;
+ len = 2;
+ }
+
+ if (as_i2c_set_slave_addr(aDev->i2c_dev, aDev->eeprom_addr) < 0)
+ {
+ ERROR("Can't set EEPROM address on I2C\n");
+ return -1;
+ }
+
+ if (as_i2c_write(aDev->i2c_dev, buffer, len) < 0)
+ {
+ ERROR("Can't write on I2C EEPROM\n");
+ return -1;
+ }
+
+ if (as_i2c_set_slave_addr(aDev->i2c_dev, aDev->eeprom_addr|aPage_number) < 0)
+ {
+ ERROR("Can't set EEPROM address on I2C\n");
+ return -1;
+ }
+
+ if (as_i2c_read(aDev->i2c_dev, buffer, 256) < 0)
+ {
+ ERROR("Can't read on I2C EEPROM\n");
+ return -1;
+ }
+
+ memcpy( aBuffer, buffer, 256 );
+
+ return 0;
+}
+
+int32_t as_i2c_eeprom_write(struct as_i2c_eeprom_device *aDev, uint16_t aPage_number, uint8_t* aBuffer, uint16_t aBuffer_size)
+{
+ int16_t nb_it = 0;
+ int16_t current_pos = 0;
+ int16_t msg_size = 0;
+ uint8_t buffer[8*1024];
+
+ if (aBuffer_size > aDev->page_size) {
+ ERROR("Size too long -> truncated to page size\n");
+ aBuffer_size = aDev->page_size;
+ }
+ // Only buffer size write (16 or 32) are taken into account
+ nb_it = aBuffer_size / aDev->page_buffer_size;
+
+ int16_t i;
+ for (i = 0; i < nb_it; i++)
+ {
+ if (aDev->addr_width == 8) {
+ buffer[0] = current_pos;
+ memcpy( buffer+1, aBuffer + current_pos, aDev->page_buffer_size );
+ msg_size = aDev->page_buffer_size+1;
+ } else { // 16
+ buffer[0] = 0;
+ buffer[1] = current_pos;
+ memcpy( buffer+2, aBuffer + current_pos, aDev->page_buffer_size );
+ msg_size = aDev->page_buffer_size+2;
+ }
+
+ if (as_i2c_set_slave_addr(aDev->i2c_dev, aDev->eeprom_addr|aPage_number) < 0)
+ {
+ ERROR("Can't set EEPROM address on I2C\n");
+ return -1;
+ }
+
+ if (as_i2c_write(aDev->i2c_dev, buffer, msg_size) < 0)
+ {
+ ERROR("Can't write on I2C EEPROM\n");
+ return -1;
+ }
+
+ usleep(3000);
+
+ current_pos += aDev->page_buffer_size;
+ }
+
+ return 0;
+}
diff --git a/target/packages/as_devices/c/as_i2c_eeprom.h b/target/packages/as_devices/c/as_i2c_eeprom.h
new file mode 100644
index 0000000..74d20db
--- /dev/null
+++ b/target/packages/as_devices/c/as_i2c_eeprom.h
@@ -0,0 +1,100 @@
+/*
+** THE ARMadeus Systems
+**
+** Copyright (C) 2012 The armadeus systems team
+** Jérémie Scheer <jer...@ar...>
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+**
+** This library is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+** Lesser General Public License for more details.
+**
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#ifndef AS_I2C_EEPROM_H_
+#define AS_I2C_EEPROM_H_
+
+
+/** @file
+ * @brief Provide standard commands to drive i2c eeprom (from microchip)
+ *
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <inttypes.h>
+#include <sys/types.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "as_i2c.h"
+
+/**
+ * Store eeprom parameters
+ */
+struct as_i2c_eeprom_device {
+ struct as_i2c_device *i2c_dev;
+ uint32_t eeprom_addr;
+ uint32_t addr_width;
+ uint32_t page_buffer_size;
+ uint16_t number_pages;
+ uint16_t page_size;
+};
+
+/** @brief open the device
+ *
+ * @param aBusNumber number of I2C bus used by EEPROM
+ * @param anEeprom_addr EEPROM address on I2C bus
+ * @param anAddr_width width of EEPROM address
+ * @param aPage_buffer_size size of the page write buffer
+ * @param aNumber_pages number of pages in EEPROM
+ * @param aPage_size page size
+ */
+struct as_i2c_eeprom_device * as_i2c_eeprom_open(int aBusNumber,
+ uint32_t anEeprom_addr,
+ uint32_t anAddr_width,
+ uint32_t aPage_buffer_size,
+ uint16_t aNumber_pages,
+ uint16_t aPage_size);
+
+/** @brief close the device
+ *
+ * @param aDev spidev structure
+ *
+ */
+void as_i2c_eeprom_close(struct as_i2c_eeprom_device *aDev);
+
+/** @brief Read an EEPROM page
+ *
+ * @param aDev EEPROM structure
+ * @param aPage_number page to read on
+ * @param aBuffer data buffer
+ */
+int32_t as_i2c_eeprom_read(struct as_i2c_eeprom_device *aDev, uint16_t aPage_number, uint8_t* aBuffer);
+
+/** @brief Write on an EEPROM page
+ *
+ * @param aDev EEPROM structure
+ * @param aPage_number page to write on
+ * @param aBuffer data buffer
+ * @param aBuffer_size data buffer size
+ */
+int32_t as_i2c_eeprom_write(struct as_i2c_eeprom_device *aDev, uint16_t aPage_number, uint8_t* aBuffer, uint16_t aBuffer_size);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* AS_I2C_EEPROM_H_ */
+
diff --git a/target/packages/as_devices/cpp/Makefile b/target/packages/as_devices/cpp/Makefile
index 592fbdb..c1344fc 100644
--- a/target/packages/as_devices/cpp/Makefile
+++ b/target/packages/as_devices/cpp/Makefile
@@ -14,6 +14,7 @@ OBJS += as_adc.o
OBJS += as_pwm.o
OBJS += as_backlight.o
OBJS += as_93lcxx.o
+OBJS += as_i2c_eeprom.o
OBJS += as_spi.o
diff --git a/target/packages/as_devices/cpp/as_backlight.cpp b/target/packages/as_devices/cpp/as_i2c_eeprom.cpp
similarity index 52%
copy from target/packages/as_devices/cpp/as_backlight.cpp
copy to target/packages/as_devices/cpp/as_i2c_eeprom.cpp
index 451bafa..7d8768c 100644
--- a/target/packages/as_devices/cpp/as_backlight.cpp
+++ b/target/packages/as_devices/cpp/as_i2c_eeprom.cpp
@@ -2,7 +2,7 @@
** THE ARMadeus Systems
**
** Copyright (C) 2012 The armadeus systems team
-** Jérémie Scheer <jer...@ar...>
+** Jérémie Scheer <jer...@ar...>
**
** This library is free software; you can redistribute it and/or
** modify it under the terms of the GNU Lesser General Public
@@ -20,67 +20,49 @@
**
*/
-#include "as_backlight.hpp"
+#include "as_i2c_eeprom.hpp"
#include <iostream>
-AsBacklight::AsBacklight()
+AsI2CEeprom::AsI2CEeprom(int aBusNumber, unsigned long anEepromAddr, unsigned long anAddrWidth, \
+unsigned long aPageBufferSize, unsigned int aNumberPages, unsigned int aPageSize)
{
- mDev = as_backlight_open();
+ mDev = as_i2c_eeprom_open(aBusNumber, anEepromAddr, anAddrWidth, aPageBufferSize, aNumberPages, aPageSize);
}
-AsBacklight::~AsBacklight()
+AsI2CEeprom::~AsI2CEeprom()
{
- int ret;
-
if (mDev != NULL)
{
- ret = as_backlight_close(mDev);
- if (ret < 0)
- {
- std::cout<<"AsBacklight destruction error"<<std::endl;
- }
+ as_i2c_eeprom_close(mDev);
}
else
{
- std::cerr<<"AsBacklight device structure not allocated"<<std::endl;
- }
-}
-
-long AsBacklight::getActualBrightness() const
-{
- if (mDev != NULL)
- {
- return as_backlight_get_actual_brightness(mDev);
- }
- else
- {
- std::cerr<<"AsBacklight device structure not allocated"<<std::endl;
- return -1;
+ std::cerr<<"AsI2CEeprom device structure not allocated"<<std::endl;
}
}
-long AsBacklight::getMaxBrightness() const
+long AsI2CEeprom::read(unsigned int aPageNumber, unsigned char* aBuffer)
{
if (mDev != NULL)
{
- return as_backlight_get_max_brightness(mDev);
+ return as_i2c_eeprom_read(mDev, aPageNumber, aBuffer);
}
else
{
- std::cerr<<"AsBacklight device structure not allocated"<<std::endl;
+ std::cerr<<"AsI2CEeprom device structure not allocated"<<std::endl;
return -1;
}
}
-long AsBacklight::setBrightness(int aBrightness)
+long AsI2CEeprom::write(unsigned int aPageNumber, unsigned char* aBuffer, unsigned int aBufferSize)
{
if (mDev != NULL)
{
- return as_backlight_set_brightness(mDev, aBrightness);
+ return as_i2c_eeprom_write(mDev, aPageNumber, aBuffer, aBufferSize);
}
else
{
- std::cerr<<"AsBacklight device structure not allocated"<<std::endl;
+ std::cerr<<"AsI2CEeprom device structure not allocated"<<std::endl;
return -1;
}
}
diff --git a/target/packages/as_devices/cpp/as_backlight.hpp b/target/packages/as_devices/cpp/as_i2c_eeprom.hpp
similarity index 50%
copy from target/packages/as_devices/cpp/as_backlight.hpp
copy to target/packages/as_devices/cpp/as_i2c_eeprom.hpp
index b30904b..0c90d2c 100644
--- a/target/packages/as_devices/cpp/as_backlight.hpp
+++ b/target/packages/as_devices/cpp/as_i2c_eeprom.hpp
@@ -2,7 +2,7 @@
** THE ARMadeus Systems
**
** Copyright (C) 2012 The armadeus systems team
-** Jérémie Scheer <jer...@ar...>
+** Jérémie Scheer <jer...@ar...>
**
** This library is free software; you can redistribute it and/or
** modify it under the terms of the GNU Lesser General Public
@@ -20,45 +20,41 @@
**
*/
-#ifndef AS_BACKLIGHT__HPP__
-#define AS_BACKLIGHT__HPP__
+#ifndef AS_I2C_EEPROM__HPP__
+#define AS_I2C_EEPROM__HPP___
-#include "as_backlight.h"
+#include "as_i2c_eeprom.h"
/**
- * C++ wrapper for Backlight device
+ * C++ wrapper for I2C EEPROM device
*/
-class AsBacklight
+class AsI2CEeprom
{
public:
/**
* Constructor
*/
- AsBacklight();
- virtual ~AsBacklight();
-
- /** @brief Get actual brightness
- *
- * @return actual brightness value, negative value on error
- */
- long getActualBrightness() const;
-
- /** @brief Get maximum brightness
- *
- * @return maximum allowed brightness, negative value on error
+ AsI2CEeprom(int aBusNumber, unsigned long anEepromAddr, unsigned long anAddrWidth, \
+unsigned long aPageBufferSize, unsigned int aNumberPages, unsigned int aPageSize);
+ virtual ~AsI2CEeprom();
+
+ /** @brief Read an EEPROM page
+ *
+ * @param aPageNumber page to read on
+ * @param aBuffer data buffer
*/
- long getMaxBrightness() const;
+ long read(unsigned int aPageNumber, unsigned char* aBuffer);
- /** @bief Set brightness
- *
- * @param aBrightness backlight brightness
- *
- * @return negative value on error
- */
- long setBrightness(int aBrightness);
+ /** @brief Write on an EEPROM page
+ *
+ * @param aPageNumber page to write on
+ * @param aBuffer data buffer
+ * @param aBufferSize data buffer size
+ */
+ long write(unsigned int aPageNumber, unsigned char* aBuffer, unsigned int aBufferSize);
protected:
- mutable struct as_backlight_device *mDev;
+ mutable struct as_i2c_eeprom_device *mDev;
};
-#endif // AS_BACKLIGHT__HPP__
+#endif // AS_I2C_EEPROM__HPP__
diff --git a/target/packages/as_devices/main.c b/target/packages/as_devices/main.c
index b0debbf..a87afbf 100644
--- a/target/packages/as_devices/main.c
+++ b/target/packages/as_devices/main.c
@@ -45,7 +45,8 @@ int main(int argc, char ** argv)
printf(" 6) max1027\n");
printf(" 7) max5821\n");
printf(" 8) as1531\n");
- printf(" 9) backlight\n");
+ printf(" 9) backlight\n");
+ printf(" a) i2c eeprom\n");
printf("> ");
scanf("%s",buffer);
@@ -69,6 +70,8 @@ int main(int argc, char ** argv)
break;
case '9' : test_backlight();
break;
+ case 'a': test_i2c_eeprom();
+ break;
default : break;
}
}
diff --git a/target/packages/as_devices/test_c.h b/target/packages/as_devices/test_c.h
index 3f9d8aa..859118c 100644
--- a/target/packages/as_devices/test_c.h
+++ b/target/packages/as_devices/test_c.h
@@ -31,6 +31,7 @@
#include "as_adc.h"
#include "as_dac.h"
#include "as_backlight.h"
+#include "as_i2c_eeprom.h"
#include "as_helpers.h"
#define PWM_NUM 0
@@ -869,3 +870,168 @@ void test_backlight(void)
return;
}
}
+
+void test_i2c_eeprom()
+{
+ unsigned char page_buffer[500];
+ char buffer[50];
+ int i;
+
+ /* defaults values */
+ int bus_number = 0;
+ unsigned long eeprom_addr = 0x50;
+ unsigned long addr_width = 8;
+ unsigned long page_buffer_size = 16;
+ unsigned int number_pages = 2;
+ unsigned int page_size = 256;
+
+ struct as_i2c_eeprom_device *dev;
+
+ int value, value2;
+ int initialized=0;
+
+ while(buffer[0] != 'q')
+ {
+ system("clear");
+ printf("*********************************\n");
+ printf("* Testing I2C EEPROM menu *\n");
+ printf("*********************************\n");
+ printf("Choose ('q' to quit):\n");
+ if (initialized == 0)
+ {
+ printf(" 1) Change I2C bus number (%d)\n", bus_number);
+ printf(" 2) Change eeprom address (%d)\n", eeprom_addr);
+ printf(" 3) Change eeprom address width (%d)\n", addr_width);
+ printf(" 4) Change page write buffer size (%d)\n", page_buffer_size);
+ printf(" 5) Change number of pages (%d)\n", number_pages);
+ printf(" 6) Change page size (%d)\n", page_size);
+ printf(" 7) Initialize eeprom\n");
+ } else {
+ printf(" 1) Close eeprom\n");
+ printf(" 2) Read specific page\n");
+ printf(" 3) Write on specific page\n");
+ }
+
+ printf("> ");
+ scanf("%s",buffer);
+
+ if (initialized == 0)
+ {
+ switch(buffer[0])
+ {
+ case '1' : printf("Give new I2C bus number (0 or 1): ");
+ scanf("%d", &value);
+ if ( (value != 0) && (value != 1) )
+ {
+ printf("Wrong value\n");
+ pressEnterToContinue();
+ } else {
+ bus_number = value;
+ printf("Bus number changed to %d\n", bus_number);
+ }
+ break;
+ case '2' : printf("Give eeprom address: ");
+ scanf("%d", &value);
+ eeprom_addr = value;
+ printf("Eeprom address changed to %d\n", eeprom_addr);
+ break;
+ case '3' : printf("Give eeprom address width: ");
+ scanf("%d", &value);
+ if ( (value != 8) && (value != 16) )
+ {
+ printf("Wrong value\n");
+ pressEnterToContinue();
+ } else {
+ addr_width = value;
+ printf("Eeprom address width changed to %d\n", addr_width);
+ }
+ break;
+ case '4' : printf("Give new page write buffer size (16 or 32): ");
+ scanf("%d", &value);
+ if ( (value != 16) && (value != 32) )
+ {
+ printf("Wrong value\n");
+ pressEnterToContinue();
+ } else {
+ page_buffer_size = value;
+ printf("Page write buffer size changed to %d\n", page_buffer_size);
+ }
+ break;
+ case '5' : printf("Give number of pages: \n");
+ scanf("%d", &value);
+ if ( (value != 1) && (value != 2) && (value != 4) )
+ {
+ printf("Wrong value\n");
+ pressEnterToContinue();
+ } else {
+ number_pages = value;
+ printf("Number of pages changed to %d\n", number_pages);
+ }
+ break;
+ case '6' : printf("Give page size: \n");
+ scanf("%d", &value);
+ page_size = value;
+ printf("Page size changed to %d\n", page_size);
+ break;
+ case '7' : dev = as_i2c_eeprom_open(bus_number, eeprom_addr, addr_width, page_buffer_size, number_pages, page_size);
+ if (dev == NULL)
+ {
+ printf("Error, can't initialize eeprom.\n");
+ } else {
+ initialized = 1;
+ }
+ pressEnterToContinue();
+ break;
+ default : break;
+ }
+ } else {
+ switch(buffer[0])
+ {
+ case '1' : as_i2c_eeprom_close(dev);
+ printf("eeprom closed\n");
+ initialized = 0;
+ pressEnterToContinue();
+ break;
+ case '2' : printf(" Read specific page\n");
+ printf("Give page number (max. %d):",
+ number_pages);
+ scanf("%d",&value);
+ if (value > number_pages)
+ {
+ printf(" Error, wrong page number\n");
+ } else {
+ value2 = as_i2c_eeprom_read(dev, value, page_buffer);
+ if (value2 < 0)
+ {
+ printf("Error, can't read eeprom page\n");
+ } else {
+ printf(" Read %s at page %d", page_buffer, value );
+ }
+ }
+ pressEnterToContinue();
+ break;
+ case '3' : printf("Write on specific page\n");
+ printf("Give page number (max. %d):",
+ number_pages);
+ scanf("%d",&value);
+ if (value > number_pages)
+ {
+ printf(" Error, wrong page number\n");
+ pressEnterToContinue();
+ break;
+ }
+ printf("Give data to write :");
+ scanf("%s",page_buffer);
+ value2 = as_i2c_eeprom_write(dev, value, page_buffer, 500);
+ if (value2 < 0)
+ {
+ printf("Error, can't write on page\n");
+ }
+ pressEnterToContinue();
+ break;
+ default : break;
+ }
+ }
+ }
+}
+
diff --git a/target/packages/as_devices/test_cpp.h b/target/packages/as_devices/test_cpp.h
index a3c0be1..934b325 100644
--- a/target/packages/as_devices/test_cpp.h
+++ b/target/packages/as_devices/test_cpp.h
@@ -33,6 +33,7 @@
#include "as_pwm.hpp"
#include "as_93lcxx.hpp"
#include "as_backlight.hpp"
+#include "as_i2c_eeprom.hpp"
#define _STR(x) #x
@@ -904,3 +905,167 @@ void test_as1531(void)
pressEnterToContinue();
}
+void test_i2c_eeprom()
+{
+ unsigned char page_buffer[500];
+ char buffer[50];
+ int i;
+
+ /* defaults values */
+ int bus_number = 0;
+ unsigned long eeprom_addr = 0x50;
+ unsigned long addr_width = 8;
+ unsigned long page_buffer_size = 16;
+ unsigned int number_pages = 2;
+ unsigned int page_size = 256;
+
+ AsI2CEeprom* dev = NULL;
+
+ int value, value2;
+ int initialized=0;
+
+ while(buffer[0] != 'q')
+ {
+ system("clear");
+ printf("*********************************\n");
+ printf("* Testing I2C EEPROM menu *\n");
+ printf("*********************************\n");
+ printf("Choose ('q' to quit):\n");
+ if (initialized == 0)
+ {
+ printf(" 1) Change I2C bus number (%d)\n", bus_number);
+ printf(" 2) Change eeprom address (%d)\n", eeprom_addr);
+ printf(" 3) Change eeprom address width (%d)\n", addr_width);
+ printf(" 4) Change page write buffer size (%d)\n", page_buffer_size);
+ printf(" 5) Change number of pages (%d)\n", number_pages);
+ printf(" 6) Change page size (%d)\n", page_size);
+ printf(" 7) Initialize eeprom\n");
+ } else {
+ printf(" 1) Close eeprom\n");
+ printf(" 2) Read specific page\n");
+ printf(" 3) Write on specific page\n");
+ }
+
+ printf("> ");
+ scanf("%s",buffer);
+
+ if (initialized == 0)
+ {
+ switch(buffer[0])
+ {
+ case '1' : printf("Give new I2C bus number (0 or 1): ");
+ scanf("%d", &value);
+ if ( (value != 0) && (value != 1) )
+ {
+ printf("Wrong value\n");
+ pressEnterToContinue();
+ } else {
+ bus_number = value;
+ printf("Bus number changed to %d\n", bus_number);
+ }
+ break;
+ case '2' : printf("Give eeprom address: ");
+ scanf("%d", &value);
+ eeprom_addr = value;
+ printf("Eeprom address changed to %d\n", eeprom_addr);
+ break;
+ case '3' : printf("Give eeprom address width: ");
+ scanf("%d", &value);
+ if ( (value != 8) && (value != 16) )
+ {
+ printf("Wrong value\n");
+ pressEnterToContinue();
+ } else {
+ addr_width = value;
+ printf("Eeprom address width changed to %d\n", addr_width);
+ }
+ break;
+ case '4' : printf("Give new page write buffer size (16 or 32): ");
+ scanf("%d", &value);
+ if ( (value != 16) && (value != 32) )
+ {
+ printf("Wrong value\n");
+ pressEnterToContinue();
+ } else {
+ page_buffer_size = value;
+ printf("Page write buffer size changed to %d\n", page_buffer_size);
+ }
+ break;
+ case '5' : printf("Give number of pages: \n");
+ scanf("%d", &value);
+ if ( (value != 1) && (value != 2) && (value != 4) )
+ {
+ printf("Wrong value\n");
+ pressEnterToContinue();
+ } else {
+ number_pages = value;
+ printf("Number of pages changed to %d\n", number_pages);
+ }
+ break;
+ case '6' : printf("Give page size: \n");
+ scanf("%d", &value);
+ page_size = value;
+ printf("Page size changed to %d\n", page_size);
+ break;
+ case '7' : dev = new AsI2CEeprom(bus_number, eeprom_addr, addr_width, page_buffer_size, number_pages, page_size);
+ if (dev == NULL)
+ {
+ printf("Error, can't initialize eeprom.\n");
+ } else {
+ initialized = 1;
+ }
+ pressEnterToContinue();
+ break;
+ default : break;
+ }
+ } else {
+ switch(buffer[0])
+ {
+ case '1' : ;
+ printf("eeprom closed\n");
+ delete dev;
+ initialized = 0;
+ pressEnterToContinue();
+ break;
+ case '2' : printf(" Read specific page\n");
+ printf("Give page number (max. %d):",
+ number_pages);
+ scanf("%x",&value);
+ if (value > number_pages)
+ {
+ printf(" Error, wrong page number\n");
+ } else {
+ value2 = dev->read(value, page_buffer);
+ if (value2 < 0)
+ {
+ printf("Error, can't read eeprom page\n");
+ } else {
+ printf(" Read %s at page %d", page_buffer, value );
+ }
+ }
+ pressEnterToContinue();
+ break;
+ case '3' : printf("Write on specific page\n");
+ printf("Give page number (max. %d):",
+ number_pages);
+ scanf("%d",&value);
+ if (value > number_pages)
+ {
+ printf(" Error, wrong page number\n");
+ pressEnterToContinue();
+ break;
+ }
+ printf("Give data to write :");
+ scanf("%s",page_buffer);
+ value2 = dev->write(value, page_buffer, 500);
+ if (value2 < 0)
+ {
+ printf("Error, can't write on page\n");
+ }
+ pressEnterToContinue();
+ break;
+ default : break;
+ }
+ }
+ }
+}
hooks/post-receive
--
armadeus
|