Download Cómputo Móvil Python

Document related concepts
no text concepts found
Transcript
Cómputo Móvil
Python - Open C
Dr. Gregorio Toscano Pulido
Centro de Investigación y de Estudios Avanzados del IPN.
Laboratorio de Tecnologı́as de Información
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
Instalando la bilioteca de Python en GnuPoc
Descarga el SDK correcto desde
http://sourceforge.net/projects/pys60
Como nuestros teléfonos implementan la tercera edición de
symbian, entonces debemos descargar
PythonForS60 1 4 3 SDK 3rdEd.zip
Descomprimimos el archivo descargado. Nos
generará sdk files.zip y PythonForS60 SDK 3rdEd/uninstall PythonForS60 SDK 3rdEd.cmd,
copiamos el primer archivo al directorio que contiene el
epoc32 (~/symbian-sdks/s60_31, en mi caso) y
descomprimimos el archivo.
:isto, ya tenemos instaladas las bibliotecas de Python en
GnuPoc.
Dr. Gregorio Toscano Pulido
Cómputo Móvil
logo
Ejemplo simple
Vamos a crear una función en C que recibe como argumento dos
números enteros y regresa la multiplicación de ambos.
Creamos los directorios que necesitaremos (group, python, inc,
sis y src)
Dentro del directorio group creamos los archivos “Makefiles”:
bld.inf multiplicador.mmp y los editamos con los datos
necesarios.
Dentro del directorio inc creamos un archivo de cabecera
(multiplicador .h) donde definiremos el prototipo de nuestra
función la cuál llamaremos multiplicador.
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
Ejemplo simple (cont)
Dentro del directorio src crearemos el archivo multiplicador .c
y wrapper .c cuyo contenido será la función y una interfaz
(python-C) respectivamente.
Dentro del directorio python creamos el archivo que usará la
función.
Crearemos el archivo multiplicador .pkg dentro del directorio
sis. Aquı́ irán las directivas de creación del archivo SIS.
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
Manos a la obra
mkdir multiplicador
cd multiplicador
mkdir group python inc sis
src
touch group/bld.inf group/multiplicador.mmp
touch inc/multiplicador.h
touch src/multiplicador.c src/wrapper.c
touch python/prueba-mul.py
touch sis/multiplicador.pkg
A continuación describiré cada uno de los archivos.
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
group/bld.inf
PRJ_MMPFILES
multiplicador.mmp
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
group/multiplicador.mmp
TARGET
TARGETTYPE
UID
EXPORTUNFROZEN
CAPABILITY
multiplicador.dll
dll
0x00000000 0x0CBDC9B9
LocalServices ReadUserData WriteUserData UserEnviron
NOSTRICTDEF
USERINCLUDE
SYSTEMINCLUDE
SYSTEMINCLUDE
SYSTEMINCLUDE
..\inc
\epoc32\include
\epoc32\include\stdapis
\epoc32\include\python
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
group/multiplicador.mmp (cont)
SOURCEPATH
..\src
SOURCE
SOURCE
multiplicador.c
wrapper.c
LIBRARY
LIBRARY
LIBRARY
libc.lib
euser.lib
python222.lib
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
inc/multiplicador.h
#ifndef MULTIPLICADOR_H
#define MULTIPLICADOR_H
extern int mutiplicador(int a, int b);
#endif
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
src/wrapper.c
Por favor revisen
http://www.python.org/doc/1.5.2p2/ext/intro.html
#include <Python.h>
#include "multiplicador.h"
static PyObject* multiplicador_wrapper(PyObject* self, PyObject* args)
{
int a,b,res;
PyObject* result;
if (!PyArg_ParseTuple(args, "ii", &a, &b))
return NULL;
res=multiplicador(a,b);
result = Py_BuildValue("i", res);
if (!result)
return PyErr_NoMemory();
return result;
}
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
src/wrapper.c (cont)
static const PyMethodDef multiplicadorMethods[] =
{
{"multiplicador", multiplicador_wrapper, METH_VARARGS},
{NULL, NULL}
};
DL_EXPORT(void) initmultiplicador(void)
{
(void)Py_InitModule("multiplicador", multiplicadorMethods);
}
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
src/multiplicador.c
#include <stddef.h>
int multiplicador(int a,int b)
{
return a*b;
}
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
python/prueba-mul.py
import multiplicador
a=3
b=100
c=multiplicador.multiplicador(a,b)
print c
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
sis/multiplicador.pkg
; Installation file for multiplicador application
;
;Language - standard language definitions
&EN
; standard SIS file header
#{"Multiplicador"},(0xEE0D12D6),1,0,0, TYPE=SA
;Localised Vendor name
%{"Vendor-EN"}
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
sis/multiplicador.pkg (cont)
;Unique Vendor name
:"Vendor"
;Supports Series 60 v 3.0
[0x101F7961], 0, 0, 0, {"Series60ProductID"}
;Files to install
;You should change the source paths to match that of your environment
;<source> <destination>
"../../../epoc32/release/gcce/urel/multiplicador.dll" -"C:\sys\bin\multiplicador.pyd"
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
Compilando el código:
export PATH=~/gnupoc:${PATH}
export EPOCROOT=~/symbian-sdks/s60_31/
cd group
echo "##############################################"
echo "Inicia Compilacin"
echo "##############################################"
echo "##################
bldmake bldfiles
echo "##################
abld makefile gcce
echo "##################
abld reallyclean gcce
echo "##################
abld build gcce urel
bldmake bldfiles"
abld makefile gcce"
abld reallyclean gcce"
abld build gcce urel "
Dr. Gregorio Toscano Pulido
logo
Cómputo Móvil
Compilando el código (cont):
Atención: necesitamos tener los archivos mycert.cer y mykey.key en
el directorio sis
echo "##############################################"
echo "Crea .sis y lo firma"
echo "##############################################"
cd ../sis
makesis multiplicador.pkg multiplicador.sis
signsis multiplicador.sis multiplicador.sisx mycert.cer mykey.key
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
Error e32def.h
Hay un error en el código del archivo epoc32/include/e32def .h,
Busca la lı́nea:
static const char* const KSuppressPlatSecDiagnostic = KSuppressPlatSecDiagnosticMagicValue;
y modifı́cala por:
#if defined(__cplusplus)
static const char* const KSuppressPlatSecDiagnostic = KSuppressPlatSecDiagnosticMagicValue;
#endif
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil
Copia los archivos SIS y Python en el teléfono.
Instala el archivo SIS
Ejecuta el archivo Python y voilá.
logo
Dr. Gregorio Toscano Pulido
Cómputo Móvil