[ell-i-developers] Re: Robot Framework Testing: Test Cases Design, Scripting and other Issues

  • From: Teemu Hakala <temmi@xxxxxx>
  • To: "ell-i-developers@xxxxxxxxxxxxx" <ell-i-developers@xxxxxxxxxxxxx>
  • Date: Mon, 26 May 2014 19:43:19 +0300

Hi

Splendid work, this is looking pretty elegant.

 - t


On 26.5.2014, at 19:39, Asif Sardar <engr.asif.sardar@xxxxxxxxxxxxxx> wrote:

> Hello all,
> 
> Instead of using python C API to implement C libraries, it is often easier to 
> interact with C code from Python libraries using ctypes module.
> 
> Please have a look at 
> https://github.com/Ell-i/ELL-i-PyBot-Tests/blob/master/test-scripts/DigitalRead.py
> 
> This approach leaves much of the coding stuff to python. We can load the 
> shared library and call the C functionality easily using the ctypes module's 
> primitive C compatible fundamental data types.
> 
> 
> 
> 
> 
> On Mon, Apr 28, 2014 at 2:05 PM, Asif Sardar 
> <engr.asif.sardar@xxxxxxxxxxxxxx> wrote:
> > The first thing is to get the c-python modules in the 
> > arduino-functions/Digital-I-O to include the right subdirectories from the 
> > Runtime.  The following in setup.py seems to work as a first approximation:
> 
> > ---------------
> > from os import path
> 
> > runtime='/my/path/to/Runtime'
> 
> > arduelli   = path.join(runtime, 'cores/arduelli')
> > system_inc = path.join(runtime, 'system/stm32/inc')
> > cmsis      = path.join(runtime, 'system/stm32/CMSIS/Include')
> > variant    = path.join(runtime, 'variants/ellduino')
> 
> > include_dirs=[arduelli, system_inc, cmsis, variant]
> 
> > setup(name='digitalRead', version='1.0',
>    >   ext_modules=[Extension('
> > digitalRead',
> >                          ['Digital-I-O/digitalRead.c'],
> >                        include_dirs=include_dirs)])
> > --------------------
> 
> > The key there is the include_dirs in creating the Extension. See
> 
> >   https://docs.python.org/2.7/distutils/setupscript.html
> 
> > for more information.
> 
> > With that you can include <wiring_digital.h> in digitalRead.c, but note 
> > that it must be included *before* including <Python.h>.  
> > That then allows you to call the actual Runtime functions, and it compiles. 
> >  Python also tries to load the resulting shared library, > but that fails.
> 
> With above paths included into the extension modules, we can compile the 
> c-python modules. But, we also need the libraries or executable code for 
> these functions at runtime. When I run the test cases with c-python modules 
> compiled with above setup.py script, the test suite exits with segmentation 
> fault.
> 
> 
> > The next step would then be to actually add the emulator functions to the 
> > python runtime.  That I don't know yet how to do 
> > exactly, but I imagine that it would be best to compile the emulator into a 
> > shared library, through adding a new make target in 
> > Runtime/stm32/make, and then including the shared library into the 
> > (DY)LD_LIBRARY_PATH.  That might suffice.
> 
> I think the shared library for emulator functions might help eliminating the 
> above weird problems at runtime ... 
> 
> 
> 
> On Sun, Apr 27, 2014 at 4:42 PM, Pekka Nikander <pekka.nikander@xxxxxx> wrote:
> > May I get some help regarding linking the c-python modules against the 
> > emulator? I cannot call the Arduino functions directly from c-python code 
> > files without linking against emulator and stm32 cores.
> 
> I had a brief look at this today.  While I cannot present a full solution, I 
> think I made some progress.
> 
> The first thing is to get the c-python modules in the 
> arduino-functions/Digital-I-O to include the right subdirectories from the 
> Runtime.  The following in setup.py seems to work as a first approximation:
> 
> ---------------
> from os import path
> 
> runtime='/my/path/to/Runtime'
> 
> arduelli   = path.join(runtime, 'cores/arduelli')
> system_inc = path.join(runtime, 'system/stm32/inc')
> cmsis      = path.join(runtime, 'system/stm32/CMSIS/Include')
> variant    = path.join(runtime, 'variants/ellduino')
> 
> include_dirs=[arduelli, system_inc, cmsis, variant]
> 
> setup(name='digitalRead', version='1.0',
>       ext_modules=[Extension('digitalRead',
>                              ['Digital-I-O/digitalRead.c'],
>                              include_dirs=include_dirs)])
> --------------------
> 
> The key there is the include_dirs in creating the Extension. See
> 
>   https://docs.python.org/2.7/distutils/setupscript.html
> 
> for more information.
> 
> With that you can include <wiring_digital.h> in digitalRead.c, but note that 
> it must be included *before* including <Python.h>.  That then allows you to 
> call the actual Runtime functions, and it compiles.  Python also tries to 
> load the resulting shared library, but that fails.
> 
> The next step would then be to actually add the emulator functions to the 
> python runtime.  That I don't know yet how to do exactly, but I imagine that 
> it would be best to compile the emulator into a shared library, through 
> adding a new make target in Runtime/stm32/make, and then including the shared 
> library into the (DY)LD_LIBRARY_PATH.  That might suffice.
> 
> --Pekka
> 
> 
> 
> 
> -- 
> With Best Regards,
> Asif Sardar.
> +358 43 8265795
> 
> 
> 
> -- 
> With Best Regards,
> Asif Sardar.
> +358 43 8265795

Other related posts: