From: Vaibhav G. <vai...@gm...> - 2009-10-20 17:22:30
|
hi everyone I had followed the instructions given below for adding my own function. I need to pass four unsigned values to the robostix. //******************************************************************************************** INSTRUCTIONS posted on the groups: On the gumstix side of things, you'll want to add a function to robostix/gumstix/Common/i2c-io-api.h and i2c-io-api.c. These are fairly simple functions that just take their arguments, stuff them into the corresponding structure and call an appropriate I2c function to write the data. For writing structures with no return, I2cWriteBlock is the right functions to use. //******************************************************************************************** Problem 1: I was facing problems with i2c-dev on the gumstix side of things. I have changed i2c-io-api.c (I have added a definition to the H File as well) //******************************************************************************************** int I2C_IO_SerialPWM( int i2cDev, uint16_t val1, uint16_t val2, uint16_t val3, uint16_t val4 ) { I2C_IO_SerialPWM_t writeReg; writeReg.val1 = val1; writeReg.val2 = val2; writeReg.val3 = val3; writeReg.val4 = val4; if ( I2cWriteBlock( i2cDev, I2C_IO_SerialPWM_4, &writeReg, sizeof( writeReg )) != 0 ) { LogError( "I2C_IO_WriteReg16: I2cWriteBlockFailed: %s (%d)\n", strerror( errno ), errno ); return FALSE; } return TRUE; } // I2C_IO_Serial PWM //******************************************************************************************** My program was derived from the i2c-adc but has a lot more right now. So, uses the same makefile. On compiling this (after making the above changes), I get the following error: //*************************************************************************************************** user@ubuntu8041:/gumstix-buildroot/robostix/gumstix/i2c-io$ make Creating svn-version.h ... /gumstix-buildroot/robostix/gumstix/i2c-io/../../../../gumstix-buildroot/build_arm_nofpu/staging_dir/bin/arm-linux-gcc -O2 -Wall -I . -I ../Common -I ../../Shared -Os -march=armv5te -mtune=xscale -Wa,-mcpu=xscale -c -o i2c-adc.o i2c-adc.c In file included from ../../Shared/Log.h:34, from i2c-adc.c:27: /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/include/stdarg.h: In function 'I2C_IO_SerialPWM': /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/include/stdarg.h:105: error: storage class specified for parameter 'va_list' In file included from i2c-adc.c:27: ../../Shared/Log.h:163: error: storage class specified for parameter 'gLogFs' ../../Shared/Log.h:183: error: expected declaration specifiers or '...' before 'va_list' ../../Shared/Log.h:183: error: storage class specified for parameter 'LogFunc_t' ../../Shared/Log.h:185: error: storage class specified for parameter 'gVerbose' ../../Shared/Log.h:186: error: storage class specified for parameter 'gDebug' ../../Shared/Log.h:187: error: storage class specified for parameter 'gQuiet' ../../Shared/Log.h:191: error: expected declaration specifiers or '...' before 'va_list' ../../Shared/Log.h:192: error: expected declaration specifiers or '...' before 'va_list' ../../Shared/Log.h:201: error: expected ')' before 'logFunc' ../../Shared/Log.h:202: error: expected declaration specifiers or '...' before 'va_list' In file included from /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/linux/types.h:14, from ../Common/i2c-dev.h:27, from i2c-adc.c:28: /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/linux/posix_types.h:38: error: storage class specified for parameter '__kernel_fd_set' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/linux/posix_types.h:41: error: storage class specified for parameter '__kernel_sighandler_t' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/linux/posix_types.h:44: error: storage class specified for parameter '__kernel_key_t' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/linux/posix_types.h:45: error: storage class specified for parameter '__kernel_mqd_t' In file included from /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/linux/types.h:15, from ../Common/i2c-dev.h:27, from i2c-adc.c:28: /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/asm/types.h:6: error: storage class specified for parameter 'umode_t' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/asm/types.h:13: error: storage class specified for parameter '__s8' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/asm/types.h:14: error: storage class specified for parameter '__u8' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/asm/types.h:16: error: storage class specified for parameter '__s16' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/asm/types.h:17: error: storage class specified for parameter '__u16' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/asm/types.h:19: error: storage class specified for parameter '__s32' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/asm/types.h:20: error: storage class specified for parameter '__u32' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/asm/types.h:23: error: storage class specified for parameter '__s64' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/asm/types.h:24: error: storage class specified for parameter '__u64' In file included from ../Common/i2c-dev.h:27, from i2c-adc.c:28: /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/linux/types.h:181: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__le16' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/linux/types.h:182: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__be16' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/linux/types.h:183: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__le32' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/linux/types.h:184: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__be32' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/linux/types.h:186: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__le64' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/linux/types.h:187: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__be64' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/linux/types.h:189: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__sum16' /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/linux/types.h:190: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__wsum' In file included from /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/asm/ioctl.h:1, from /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/asm/ioctls.h:4, from /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/bits/ioctls.h:24, from /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/sys/ioctl.h:27, from ../Common/i2c-dev.h:28, from i2c-adc.c:28: /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/asm-generic/ioctl.h:51: error: storage class specified for parameter '__invalid_size_argument_for_IOC' In file included from ../Common/i2c-dev.h:28, from i2c-adc.c:28: /gumstix-buildroot/build_arm_nofpu/staging_dir/bin-ccache/../lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../arm-linux-uclibcgnueabi/sys-include/sys/ioctl.h:42: error: storage class specified for parameter 'ioctl' In file included from i2c-adc.c:28: ../Common/i2c-dev.h:38: error: expected specifier-qualifier-list before '__u16' ../Common/i2c-dev.h:48: warning: empty declaration ../Common/i2c-dev.h:117: error: expected specifier-qualifier-list before '__u8' ../Common/i2c-dev.h:122: warning: empty declaration ../Common/i2c-dev.h:182: error: expected specifier-qualifier-list before '__u8' ../Common/i2c-dev.h:185: warning: empty declaration ../Common/i2c-dev.h:191: warning: empty declaration ../Common/i2c-dev.h:194: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i2c_smbus_access' ../Common/i2c-dev.h:211: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i2c_smbus_write_quick' ../Common/i2c-dev.h:216: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i2c_smbus_read_byte' ../Common/i2c-dev.h:225: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i2c_smbus_write_byte' ../Common/i2c-dev.h:231: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i2c_smbus_read_byte_data' ../Common/i2c-dev.h:241: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i2c_smbus_write_byte_data' ../Common/i2c-dev.h:250: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i2c_smbus_read_word_data' ../Common/i2c-dev.h:260: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i2c_smbus_write_word_data' ../Common/i2c-dev.h:269: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i2c_smbus_process_call' ../Common/i2c-dev.h:282: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i2c_smbus_read_block_data' ../Common/i2c-dev.h:297: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i2c_smbus_write_block_data' ../Common/i2c-dev.h:312: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i2c_smbus_read_i2c_block_data' ../Common/i2c-dev.h:327: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i2c_smbus_write_i2c_block_data' ../Common/i2c-dev.h:342: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i2c_smbus_block_process_call' i2c-adc.c:38: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token i2c-adc.c:1004: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token i2c-adc.c:1013: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token i2c-adc.c:1031: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token i2c-adc.c:1041: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token i2c-adc.c:1051: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token i2c-adc.c:1058: error: old-style parameter declarations in prototyped function definition i2c-adc.c:1058: error: expected '{' at end of input i2c-adc.c:1058: warning: no return statement in function returning non-void make: *** [i2c-adc.o] Error 1 //*************************************************************************************************** On the ROBOSTIX, side of things I followed the instructions below. //******************************************************************************************** INSTRUCTIONS posted on the groups: The basic outline of what has to be done to add a command is: 1 - Add a #define to robostix/Shared/i2c-io.h 2 - Add a structure to go along with the command. In your case you want a 16-bit value, and probably some type of channel indicator to indicate which PWM channel to change. The way that I2C_IO_WRITE_REG_16 works would be a good one to follow. 3 - Add a case statement to the big switch inside the ProcessCommand function in robostix/i2c-io/i2c-io.c case I2C_IO_MY_CUSTOM_COMMAND: { I2C_IO_MyCommand_t *req = (I2C_IO_MyCommand_t *)&packet->m_data[ 2 ]; // +1 for cmd, +1 for len All of the functions which take a structure as an argument will have a line like the above to get a pointer to their structure data. The ProcessCommand function is passed a pointer to the i2c packet that was received. The ProcessCommand function returns the number of bytes that should be returned to the caller. This only applies to commands that retrieve information or have some type of return. For write-only commands, like the one you want to add, return 0; The req pointer will be a pointer to the request (hence req for short). For the rest of the case statement you need to deal with whatever your command is doing. For anything non-trivial, you should probably call a function. //******************************************************************************************** I added this to robostix/Shared/i2c-io.h //******************************************************************************************** typedef struct{ uint16_t val1; ///< Value to write uint16_t val2; ///< Value to write uint16_t val3; ///< Value to write uint16_t val4; ///< Value to write} I2C_IO_SerialPWM_t; #define I2C_IO_SerialPWM_4 0x0B //******************************************************************************************** In the robostix/i2c-io/i2c-io.c, I added this to the case statement: //******************************************************************************************** case I2C_IO_SerialPWM_4: { I2C_IO_SerialPWM_t *req = (I2C_IO_SerialPWM_t *)&packet->m_data[ 2 ]; // +1 for cmd, +1 for len volatile uint8_t *regPtr = (volatile uint8_t *)(int)(req->reg); uint8_t val1 = req->val1; uint8_t val2 = req->val2; uint8_t val3 = req->val3; uint8_t val4 = req->val4; //Some kind of logging //IO_LOG3( "WriteReg16 reg:0x%02x wrote 0x%02x%02x\n", (uint8_t)(int)regPtr, valH, valL ); return 0; } //******************************************************************************************** Problem 2: The issue is I load the i2c-Boot-m128-16MHz.hex file to my robostix right now. The make file for this doesn't include robostix/i2c-io/i2c-io.c and robostix/Shared/i2c-io.h where I am making the changes for the commands. //******************************************************************************************* TARGET = i2c-Boot-m$(CPU_MCU)-$(CPU_FREQ)MHz$(STANDALONE_$(STANDALONE)_suffix)BOOT_START = $(BOOT_START_m$(CPU_MCU))CPPFLAGS += -DCFG_CPU_CLOCK=$(CPU_FREQ)000000CFLAGS += -gstabsAVR_MCU = atmega$(CPU_MCU)MAIN_OBJS = BootLoader.oCOMMON_OBJS = \ i2c-slave.o \ Crc8.o \ Timer.o \ eeprom-init.oifeq ($(CPU_MCU),128)COMMON_OBJS += memcpy_EP.oendif //****************************************************************************************** I would truly appreciate if anyone could help me. Thanks. |
From: Dave H. <dhy...@gm...> - 2009-10-20 18:20:34
|
Hi, On Tue, Oct 20, 2009 at 10:21 AM, Vaibhav Ghadiok <vai...@gm...> wrote: > hi everyone ...snip... > I have changed i2c-io-api.c (I have added a definition to the H File as > well) Unfortunately, you didn't include the change to the .h file, and I think that's where the problem is. ...snip... > Problem 2: The issue is I load the i2c-Boot-m128-16MHz.hex file to my > robostix right now. > > The make file for this doesn't include robostix/i2c-io/i2c-io.c and > robostix/Shared/i2c-io.h where I am making the changes for the commands. The bootloader and i2c-io are two completely separate programs. I wouldn't expect changes in i2c-io to cause the bootloader to need to be changed. The bootloader can be used with many different programs, i2c-io is just one of them. You shouldn't need to rebuild or redownload the bootloader to effect a change in i2c-io (or i2c-adc). You need to rebuild i2c-io (or i2c-adc) and redownload it, using i2c-load. -- Dave Hylands Shuswap, BC, Canada http://www.DaveHylands.com/ |
From: VaibhavGhadiok <vai...@gm...> - 2009-10-20 19:11:44
|
The first problem was sorted out. I was missing a semi-colon in the function declaration in the header file i2c-io-api. I understand what you said about the second one. WHEN i COMPILE I2C-IO (ROBOSTIX ONE), the problem is it gives me warnings stating that val1, val2, val3, val4 are not being used. It also says it is treating these warning as errors. I am not very clear about this: I2C_IO_SerialPWM_t *req = (I2C_IO_SerialPWM_t *)&packet->m_data[ 2 ]; // +1 for cmd, +1 for len //volatile uint8_t *regPtr = (volatile uint8_t *)(int)(req->reg); Is what I have done right? (I have pasted my code snippets below) I pass 4 unsigned integers and want to receive them in my robostix program where I could use them. I added this to robostix/Shared/i2c-io.h //***************************************************************************** typedef struct{ uint16_t val1; ///< Value to write uint16_t val2; ///< Value to write uint16_t val3; ///< Value to write uint16_t val4; ///< Value to write} I2C_IO_SerialPWM_t; #define I2C_IO_SerialPWM_4 0x0B //***************************************************************************** In the robostix/i2c-io/i2c-io.c, I added this to the case statement: //***************************************************************************** case I2C_IO_SerialPWM_4: { I2C_IO_SerialPWM_t *req = (I2C_IO_SerialPWM_t *)&packet->m_data[ 2 ]; // +1 for cmd, +1 for len //volatile uint8_t *regPtr = (volatile uint8_t *)(int)(req->reg); uint8_t val1 = req->val1; uint8_t val2 = req->val2; uint8_t val3 = req->val3; uint8_t val4 = req->val4; //Some kind of logging //IO_LOG3( "WriteReg16 reg:0x%02x wrote 0x%02x%02x\n", (uint8_t)(int)regPtr, valH, valL ); return 0; } //***************************************************************************** -- View this message in context: http://www.nabble.com/Problem-with-trying-to-add-own-command-to-i2c-io-following-instructions-on-the-groups-tp25979174p25980777.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: VaibhavGhadiok <vai...@gm...> - 2009-10-20 19:22:47
|
Just to add, I would want to receive these 4 unsigned values in the robostix i2c-io program as volatile globals. I access these both from the main program as well as an interrupt to change the duty cycle. I am not sure if this makes things different, but just in case. -- View this message in context: http://www.nabble.com/Problem-with-trying-to-add-own-command-to-i2c-io-following-instructions-on-the-groups-tp25979174p25980951.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Dave H. <dhy...@gm...> - 2009-10-20 22:47:51
|
Hi, On Tue, Oct 20, 2009 at 12:11 PM, VaibhavGhadiok <vai...@gm...> wrote: > > The first problem was sorted out. > I was missing a semi-colon in the function declaration in the header file > i2c-io-api. > > I understand what you said about the second one. > > WHEN i COMPILE I2C-IO (ROBOSTIX ONE), the problem is it gives me warnings > stating that val1, val2, val3, val4 are not being used. > It also says it is treating these warning as errors. It would be better if you could copy and paste the exact error messages. > I am not very clear about this: > I2C_IO_SerialPWM_t *req = (I2C_IO_SerialPWM_t *)&packet->m_data[ 2 ]; // > +1 for cmd, +1 for len > //volatile uint8_t *regPtr = (volatile uint8_t > *)(int)(req->reg); The data which was received by the robostix is available in the memory packet->m_data. The first byte of the data is the command, the second byte is the length and the 3rd and subsequent bytes is the data passed into I2cWriteBlock on the gumstix side (writeRegs from the I2C_IO_SerialPWM routine). Once you've done that assignment, you can use req->val1, req->val2, req->val3 and req->val4 to access those values. The next few lines should stash those in the volatiles you mentioned in your other email. > In the robostix/i2c-io/i2c-io.c, I added this to the case statement: > > //***************************************************************************** > > case I2C_IO_SerialPWM_4: > { I2C_IO_SerialPWM_t *req = (I2C_IO_SerialPWM_t > *)&packet->m_data[ 2 ]; // +1 for cmd, +1 for len > //volatile uint8_t *regPtr = (volatile uint8_t > *)(int)(req->reg); > uint8_t val1 = req->val1; > uint8_t val2 = req->val2; > uint8_t val3 = req->val3; > uint8_t val4 = req->val4; //Some kind of logging This will save the 4 values into 4 variables that you declared on the stack. Presumably you wish to use global variables. -- Dave Hylands Shuswap, BC, Canada http://www.DaveHylands.com/ |
From: VaibhavGhadiok <vai...@gm...> - 2009-10-21 00:06:14
|
The exact error: user@ubuntu8041:/gumstix-buildroot/robostix/i2c-io$ make Creating svn-version.h ... Compiling i2c-io.c ... cc1: warnings being treated as errors i2c-io.c: In function ‘ProcessCommand’: i2c-io.c:454: warning: unused variable ‘val4’ i2c-io.c:453: warning: unused variable ‘val3’ i2c-io.c:452: warning: unused variable ‘val2’ i2c-io.c:451: warning: unused variable ‘val1’ make: *** [i2c-io.o] Error 1 Dave Hylands wrote: > > Hi, > > On Tue, Oct 20, 2009 at 12:11 PM, VaibhavGhadiok > <vai...@gm...> wrote: >> >> The first problem was sorted out. >> I was missing a semi-colon in the function declaration in the header file >> i2c-io-api. >> >> I understand what you said about the second one. >> >> WHEN i COMPILE I2C-IO (ROBOSTIX ONE), the problem is it gives me warnings >> stating that val1, val2, val3, val4 are not being used. >> It also says it is treating these warning as errors. > > It would be better if you could copy and paste the exact error messages. > >> I am not very clear about this: >> I2C_IO_SerialPWM_t *req = (I2C_IO_SerialPWM_t *)&packet->m_data[ 2 ]; >> // >> +1 for cmd, +1 for len >> //volatile uint8_t *regPtr = (volatile uint8_t >> *)(int)(req->reg); > > The data which was received by the robostix is available in the memory > packet->m_data. The first byte of the data is the command, the second > byte is the length and the 3rd and subsequent bytes is the data passed > into I2cWriteBlock on the gumstix side (writeRegs from the > I2C_IO_SerialPWM routine). > > Once you've done that assignment, you can use > > req->val1, req->val2, req->val3 and req->val4 to access those values. > The next few lines should stash those in the volatiles you mentioned > in your other email. > >> In the robostix/i2c-io/i2c-io.c, I added this to the case statement: >> >> //***************************************************************************** >> >> case I2C_IO_SerialPWM_4: >> { I2C_IO_SerialPWM_t *req = (I2C_IO_SerialPWM_t >> *)&packet->m_data[ 2 ]; // +1 for cmd, +1 for len >> //volatile uint8_t *regPtr = (volatile uint8_t >> *)(int)(req->reg); >> uint8_t val1 = req->val1; >> uint8_t val2 = req->val2; >> uint8_t val3 = req->val3; >> uint8_t val4 = req->val4; //Some kind of logging > > This will save the 4 values into 4 variables that you declared on the > stack. Presumably you wish to use global variables. > > -- > Dave Hylands > Shuswap, BC, Canada > http://www.DaveHylands.com/ > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry(R) Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9 - 12, 2009. Register now! > http://p.sf.net/sfu/devconference > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > > -- View this message in context: http://www.nabble.com/Problem-with-trying-to-add-own-command-to-i2c-io-following-instructions-on-the-groups-tp25979174p25984468.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Dave H. <dhy...@gm...> - 2009-10-21 00:47:42
|
Hi, On Tue, Oct 20, 2009 at 5:06 PM, VaibhavGhadiok <vai...@gm...> wrote: > > The exact error: > > user@ubuntu8041:/gumstix-buildroot/robostix/i2c-io$ make > Creating svn-version.h ... > Compiling i2c-io.c ... > cc1: warnings being treated as errors > i2c-io.c: In function ‘ProcessCommand’: > i2c-io.c:454: warning: unused variable ‘val4’ > i2c-io.c:453: warning: unused variable ‘val3’ > i2c-io.c:452: warning: unused variable ‘val2’ > i2c-io.c:451: warning: unused variable ‘val1’ > make: *** [i2c-io.o] Error 1 So, if you did: In the robostix/i2c-io/i2c-io.c, I added this to the case statement: //******************************************************************************************** case I2C_IO_SerialPWM_4: { I2C_IO_SerialPWM_t *req = (I2C_IO_SerialPWM_t *)&packet->m_data[ 2 ]; // +1 for cmd, +1 for len uint8_t val1 = req->val1; uint8_t val2 = req->val2; uint8_t val3 = req->val3; uint8_t val4 = req->val4; //Some kind of logging return 0; } //******************************************************************************************** Then you've created 4 variables which you didn't use, which is what's causing the error. You need to declare val1 through val4 as global variables (or perhaps volatile global variables) and not use stack variables. -- Dave Hylands Shuswap, BC, Canada http://www.DaveHylands.com/ |
From: VaibhavGhadiok <vai...@gm...> - 2009-10-21 19:53:04
|
That solved the problem. I just had one more issue. Hopefully the last one!! I tried to search in the forums but surprisingly found nothing. On executing "i2c-load --reset 0x0b write i2c-io.hex" from my Gumstix, I get an error: ERROR: I2cTransfer: ioctl failed: Remote I/O error (121) ERROR: I2cReadBlock failed ERROR: Unable to retreive boot information from i2c address 0x0b Has this got anything to do with: #define I2C_IO_SerialPWM_4 0x0B Everything used to be just fine. So, it is not hardware thing because things used to work. typedef struct{ uint16_t val1; ///< Value to write uint16_t val2; ///< Value to write uint16_t val3; ///< Value to write uint16_t val4; ///< Value to write} I2C_IO_SerialPWM_t; I have already loaded the bootloader using uisp. On doing ./i2c-test, I get: gumstix: SCL: 1 SDA: 1 and then it just waits. Dave Hylands wrote: > > Hi, > > On Tue, Oct 20, 2009 at 5:06 PM, VaibhavGhadiok > <vai...@gm...> wrote: >> >> The exact error: >> >> user@ubuntu8041:/gumstix-buildroot/robostix/i2c-io$ make >> Creating svn-version.h ... >> Compiling i2c-io.c ... >> cc1: warnings being treated as errors >> i2c-io.c: In function ‘ProcessCommand’: >> i2c-io.c:454: warning: unused variable ‘val4’ >> i2c-io.c:453: warning: unused variable ‘val3’ >> i2c-io.c:452: warning: unused variable ‘val2’ >> i2c-io.c:451: warning: unused variable ‘val1’ >> make: *** [i2c-io.o] Error 1 > > So, if you did: > > In the robostix/i2c-io/i2c-io.c, I added this to the case statement: > > //******************************************************************************************** > > case I2C_IO_SerialPWM_4: > { > I2C_IO_SerialPWM_t *req = (I2C_IO_SerialPWM_t *)&packet->m_data[ 2 > ]; // +1 for cmd, +1 for len > uint8_t val1 = req->val1; > uint8_t val2 = req->val2; > uint8_t val3 = req->val3; > uint8_t val4 = req->val4; //Some kind of logging > return 0; > } > //******************************************************************************************** > > Then you've created 4 variables which you didn't use, which is what's > causing the error. > > You need to declare val1 through val4 as global variables (or perhaps > volatile global variables) and not use stack variables. > > -- > Dave Hylands > Shuswap, BC, Canada > http://www.DaveHylands.com/ > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry(R) Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9 - 12, 2009. Register now! > http://p.sf.net/sfu/devconference > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > > -- View this message in context: http://www.nabble.com/Problem-with-trying-to-add-own-command-to-i2c-io-following-instructions-on-the-groups-tp25979174p25999115.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Dave H. <dhy...@gm...> - 2009-10-21 20:47:10
|
Hi, On Wed, Oct 21, 2009 at 12:52 PM, VaibhavGhadiok <vai...@gm...> wrote: > > That solved the problem. I just had one more issue. Hopefully the last one!! > > I tried to search in the forums but surprisingly found nothing. > > On executing "i2c-load --reset 0x0b write i2c-io.hex" from my Gumstix, I get > an error: > ERROR: I2cTransfer: ioctl failed: Remote I/O error (121) > ERROR: I2cReadBlock failed > ERROR: Unable to retreive boot information from i2c address 0x0b I think that error 121 means that the remote device didn't respond. > Has this got anything to do with: > #define I2C_IO_SerialPWM_4 0x0B No - that's a command 0x0B. The address 0x0b is the i2c address of the device. > Everything used to be just fine. So, it is not hardware thing because things > used to work. Sometimes, the i2c driver gets messed up, and you need to reboot. i2c-load only talks with the bootloader, and you shouldn't need to change the bootloader if you rebuild i2c-io. So it should be talking to the identical same bootloader as before. Are lights blinking on the robostix? i.e. is the robostix running? If the robostix was being held in reset, then it won't respond to i2c commands. > On doing ./i2c-test, I get: > gumstix: SCL: 1 SDA: 1 > and then it just waits. This page describes i2c-test <http://docwiki.gumstix.com/index.php/Robostix_i2c_test> You should see LEDs flashing on the robostix. If not, then the robostix isn't running. i2c-test toggles the blue LED once per second. The i2c bootloader uses the red LED. -- Dave Hylands Shuswap, BC, Canada http://www.DaveHylands.com/ |