TFC

Aplicació per gestionar codis de barres bidimensionals del tipus QR Code utilitzant un telèfon mòbil

- MEMÒRIA -

Nom: Carles Cruz Camprubí Titulació: E. T. Industrial Especialitat: Electrònica Nº Registre: 1974 Convocatòria: Juny del 2010 INDEX

1. Definició i Objectius del Projecte ...... 6

2. Breu evolució històrica dels codis de barres ...... 7

3. Que és un codi de barres ...... 9

3.1 Codis de barres unidimensionals (1D) ...... 9 3.2 Codis de barres bidimensionals (2D) ...... 10 3.2.1 Simbologia tipus “stacked” ...... 11 3.2.2 Simbologia tipus Matriu ...... 12 3.3 Taula comparativa de codis 2D que es fan servir més ...... 13 3.4 Un mal exemple a seguir: el codi BIDI ...... 13

4. Eines per programar un mòbil amb sistema operatiu propietari ...... 14

4.1 Java 2 Platform, Micro Edition (J2ME) ...... 14 4.2 Entorn d’execució de Java 2 Micro Edition ...... 15 4.2.1 KVM (Màquina Virtual) ...... 15 4.2.2 Configuracions ...... 16 4.2.3 Perfils ...... 16

5. Funcionamentd’una aplicació (MIDlet) en J2ME ...... 18

5.1 Software encarregat d’executar les aplicacions (MIDlets) ...... 18 5.1.1 Cicle de vida d’un MIDlet ...... 18 5.2 Estats d’un MIDlet en fase d’Execució ...... 19 5.3 Descarregar i Instal∙lar un MIDlet ...... 20 5.3.1 Requeriments Funcionals ...... 20 5.3.2 Localització de l’aplicació ...... 20 5.3.3 Instal∙lació de l’aplicació ...... 21 5.3.4 Actualització de MIDlets ...... 21 5.3.5 Execució de MIDlets ...... 21 5.3.6 Eliminació de MIDlets ...... 21

2

6. Sistema operatiu dels telèfons Nokia de gama baixa() ...... 22

6.1.1 Arquitectura del sistema operatiu Series 40 ...... 22 6.1.2 Elements de programació que suporta el sistema operatiu ...... 23 6.1.3 Llista de mòbils que tenen aquest sistema operatiu ...... 24

7. Característiques del mòbil utilitzat en el projecte ...... 26

8. Aplicacions utilitzades per programar el mòbil ...... 28

8.1 Sun Java Wireless Toolkit for CLDC ...... 28 8.2 Series 40 6th Edition SDK...... 29 8.3 Mobile Processing...... 30

9. QRCode ...... 31

9.1 Característiques ...... 31 9.1.1 Disposició de la informació ...... 31 9.1.2 Gran capacitat de codificar dades ...... 32 9.1.3 És resistent a la pols i a danys parcials (té detector d’errors) ...... 32 9.1.4 Es pot escanejar des de qualsevol posició (360°) ...... 33 9.1.5 Descomposició amb símbols més petits ...... 33 9.1.6 Versió del símbol ...... 33 9.1.7 Correcció d’errors ...... 34 9.1.8 Característiques de la correcció d’errors ...... 34 9.2 Utilitats del QR‐Code ...... 35

10. Aplicació realitzada ...... 38

10.1 Explicació de l’aplicació ...... 38 10.2 Esquema de l’aplicació ...... 38 10.3 Programa principal que captura la imatge i la descodifica ...... 39 10.3.1 Explicació de les funcions i el Codi ...... 42 10.4 Codi del QR‐Code ...... 43

3

11. Procediment per descodificar un QR‐Code ...... 46

11.1 Descodificar la informació del Format ...... 46 11.2 Descodificar la informació de la versió del QR‐Code ...... 47 11.3 Patró de la màscara ...... 48 11.3.1 Generació del patró de la màscara ...... 48

12. Algorisme per descodificar el QR‐Code ...... 50

12.1 Passos a seguir per la descodificació ...... 50 12.1.1 Indicador de Mode ...... 52 12.1.2 Número de bits en el Character Count Indicator ...... 53 12.1.3 Codificació en mode alfanumèric (Mode 2) ...... 53 12.2 Diagrama de la descodificació ...... 54 12.3 Funcionament de la Classe QRCode ( ) ...... 55

13. Programa per enviar un SMS a través del mòbil ...... 66

14. Possibles ampliacions del Projecte ...... 68

15. Conclusions ...... 68

16. Bibliografia ...... 69

17. Annex ...... 70

17.1 Capacitat d’emmagatzemar dades de les diferents versions ...... 70 17.2 Capacitat de correcció d’errors de les diferentes versions ...... 74 17.3 Polinomis correctors d’errors ...... 83

4

www.epsem.upc.edu

5

1. Definició i Objectius del Projecte

L’objectiu d’aquest treball es crear una aplicació per a telèfons mòbils que ens permeti llegir un codi de barres de dues dimensions del tipus QR‐Code, l’escanejat serà simplement fer una foto amb la càmera del mòbil, i en el moment en que es processi la informació podrem saber el contingut del text, ja que aquests codis poden emmagatzemar texts sencers en el mateix símbol.

Un cop tenim la informació al mòbil, podem tractar‐la de diferents maneres segons la especificació que tingui o del tipus que sigui, per exemple pot ser un text amb una direcció de correu o numero de telèfon i el podrem enviar via WAP(1), SMS(2)o Bluetooth(3) través del mòbil. Com també el codi pot contenir una direcció web a on hi podrem anar‐hi directament, o simplement contenir un numero de telèfon per trucar‐ hi.

(1) WAP(Wireless Application Protocol, protocol d’aplicació sense fils), internet pel mòbil. (2) SMS (Short Message System, sistemes curts de missatges), són els missatges de text. (3) Bluetooth, aquest sistema ens permet la creació de xarxes amb un ample de banda molt gran, per distàncies de fins a 100 metres.

Una altra utilitat és queel QR‐Code formi part d’una targeta de visita o presentació, en que prenent una foto d’aquest podem obtenir les dades complertes de la persona dins del mòbil, sense tenir que entrar manualment la informació.

La següent memòria s’estructura en diferents parts, primer s’explica com funciona un codi de barres de 2 dimensions QR‐Code i els avantatges d’aquest respecte els altres codis 2D, com també els avantatges sobre els codis convencionals de 1 dimensió, també s’explica el procés que es segueix per descodificar un codi d’aquest tipus.

La següent part és com capturar la imatge amb la càmera del telèfon,aquí ha d’interactuar el software amb el hardware d’aquest,i s’utilitzen criteris estandarditzats com la configuració CLDC i el perfil MIDP.

Un cop capturada la imatge del codi aquest serà descodificat, abans d’això s’explicaran les característiques d’aquests codis i quin és el procediment que s’ha de seguir per poder‐los descodificar, aquest procediment s’implementarà amb un programa per poder‐lo utilitzar amb el mòbil.

Un cop tenim el missatge descodificat al mòbil depenent del tipus que sigui podrem realitzar diferents tasques, com anar a una pàgina web si el missatge és una direcció Url, com també enviar un SMS si el missatge té aquesta característica, o també emmagatzemar informació d’una targeta de presentació entre d’altres coses.

Les utilitats d’aquests codis fent servir un telèfon mòbil són moltes, i no és difícil trobar‐hi aplicacions per qualsevol àmbit com en la publicitat o com ajuda per a persones amb alguna discapacitat visual.

6

2. Breu evolució històrica dels codis de barres

El primer codi de barres va aparèixer a l’any 1949 i els seus creadors van ser Norman J. Woodland i Bernard Silver aquest estava fet a base de cercles concèntrics i era llegit per un fotodetector, el fet d’estar format per cercles concèntrics permetia llegir‐lo des de qualsevol direcció. Aquests dos inventors van presenntar la patent a l’any 1949i els hi van concedir al 7 de octubre de 1952 amb el número 2612994.

A l’any 1961 va aparèixer el primerescàner fixe de codis de barres instal∙lat per Silvana General Telephone als Estats Units i va ser utilitzat per identificar els vagons de tren. Aquest aparell llegia codis de barres codificats amb color vermell,, blau i blanc. Set anys després de la seva creació, l’Associació de Ferrocarrils va voler utilitzar aquest sistema per controlar el transit viari, però el projecte va fracasssar per falta de manteniment de les etiquetes dels codis.

Primera Patent de Codi de Barres (US patent 2,612,994). "Código Ojo de Toro"

A l’any 1969 es troba la primera aplicació industrial del làser, que es fa servir per les soldadures a les fàbriques d’automòbils, a partir d’aquí també comencen a sortir aplicacionsindustrials que són capaces d’utilitzar els codis de barres. En aquest mateix any Rust‐Oleum aconsegueix crear un sistema que interactua amb un lector de codis de barra i realitza la primera aplicació preparada per gestionar el manteniment d’inventaris.

7

A l’any 1970 apareix el primer terminal portàtil que utilitza un llapiis de contacte. A l’any següent apareix el codi Plessey dissenyat per Norand i es fa servir pel control d’arxius en organismes militars, aqueest mateix codi també es va immplementar a les biblioteques Europees. També en aquest any apareix el codi Codabar i la seva aplicació més important és als bancs de sang, a on la identificació i verificació automàtica eren indispensables

A l’any 1973 s’aprova el codi UPC (Universal Product Code) per la venta de productes, aquest codi estava basat amb una proposta d’IBM i es va convertir amb l’estàndard d’identificacióde productes. A l’any 1978 la Creu Roja aproova l’ús del codi de barres per a bancs de sang. A l’any 1979 s’aprova el símbol EAN (European Article Number) que es la versió Europea del codi UPC i és un sistema estàndard global, únic a Europa i comú a tot el comerç internacional.

Com a curiositat podeu veure una captura de pantalla de Google del dia del 7 d’octubre de 2009, fent homenatge al 57 aniversari de la primera patent del codi de barres, el codi és del tipus “Código 128”

Detall de passar el cursor per sobre

A l’any 1980 apareix el PostNet, codificació utilitzada pel servei de correu d’Estats Units i al 1981 apareix el codi alfanumèric 128. En aquest punt la utilittzació dels codis de barres s’havia convertit en el mètode més utilitzat per la identificacció de productes, localitzacions i serveis per qualsevol tiipus de comerç.

8

Al 1987 es desenvolupa el primer codi bidimensional, el Codi 49. Els codis 2D estan formats per barres molt denses que s’assemblen a un panell de mots encreuats i contenen una gran quantitat d’informació i permeten ser una gran font de dades portàtil en lloc de ser un simple identificador a una base de dades externa.

3. Que és un codi de barres

Un codi de barres és una sèrie de línies paral∙leles i espais entre elles de diferent gruix, l’ample de les línies i els espais en blanc determinen les dades codificades en el codi.

Com em vist en el punt anterior el codi de barres va néixer com identificadors del producte i (que com tot identificador) no contenia informació addicional, aquests són els codis unidimensionals, és a dir, els primers que van sortir. No obstant, a finals dels anys 80 van començar a sortir les especificacions dels codis bidimensionals, aquests eren capaços d’emmagatzemar gran quantitat d’informació que podia ser llegida de forma ràpida i segura, sense la necessitat d’accedir a una base de dades a on es guardava tota la informació, com passa amb els codis 1D.

Aquesta és la gran diferència entre els dos tipus de codis, els de 1D porten un codi d’identificació que serveix per accedir a la base de dades i els codis de 2D porten tota la informació dins del propi codi.

3.1 Codis de barres unidimensionals (1D)

Al fer la lectura d’aquests codis només es té en compte l’ample de les barres i els espais entre elles, a on l’alçada d’aquestes no aporta cap dada. Aquests codis només contenen la clau per accedir al registre d’una base de dades que és a on realment hi ha la informació.

Existeixen moltes simbologies i versions de codis de barres que s’escullen segons els tipus de necessitats d’identificació interna, o també venen impostos per les normatives del mercat.

Plessey CodaBar ITF UPC Codi 39 EAN PostNet Codi 128 (1970) (1971) (1972) (1973) (1974) (1979) (1980) (1981)

Alguns tipus de codis de barres més rellevants i la seva data de creació

9

Per posar un exemple de codi de bbarres 1D, comentem breument que a l’actualitat s’ha estàndaritzat el codi americà UPC i l’europeu EAN, entre d’altres,, tot i que abans d’això ja eren compatibles però diferien d’un dígit (el UPC tenia 12 dígits i el EAN 13), també l’última versió del codi de llibres ISBN (International Standard Book Numbering) és compatible amb aquest estàndard, aquest estandard s’anomena GTTIN (Global Trade Item Number) i és el codi de barres mundial d’un article comercial.

De tots els codis de 1 dimensió que hem vist fins ara, només n’hi ha un que sigui alfanumèric (tots els altres només poden codificar números), per tant requereix una atenció especial ja que per si sol pot portar paraules i compleeix una de les característiques dels codis de 2 dimensions, és el Codi 128 i utilitza 4 grossors diferents per les barres i té una densitat molt alta (ocupa menys espai que codis similars).

No obstant al ser de 1 dimensió depenent de la mida del text ocupa una allargada considerable.

3.2 Codis de barres bidimensionals (2D)

En aquests codis les dades estan codificades en longitud i alçada del símbol, i en aquests la informació no es redueix només al codi del producte, sino que poden arribar a emmagatzemar més de mil caràcters alfanumèrics.

El principal avantatge dels codis de 2 dimensions és que poden portar una gran quantitat d’informació que pot ser llegida de manera rapida i segura, sense la necessitat d’accedir a una base de dades com passava amb els codis de 1 dimensió.

Els escàners que es fan servir per llegir codis 2D són diferents dels utilitzats per captar els símbols tradicionals de una dimensió. Hi ha 2 mètodes de lectura:

1. El mètode que es fa servir més és un làser que es mou de esquuerra a dreta i de d’alt a baix, això es coneix com a patró de mostreig 2. El segon mètode fa servir la tecnologia CCD(Charge-Coupled Device). Els lectors CCD tenen un vector bidimenssional de fotosensors que escaneggen totalment la imatge.

10

La seguretat que son capaços d’incorporar aquests codis els fa gairebé invulnerables a qualsevol manipulació no desitjada del codi. Tot al contrari que els codis unidimensionals, ja que per manipular aquests només fa falta afegir una línia a l’inici o al final del símbol, o també dibuixar una línia paral∙lela a les barres a qualsevol lloc a dins del codi.

Els codis 2D es poden construir amb molts graus de redundància, duplicant així la totalitat de la informació o només les dades importants. La redundància augmenta les dimensions del símbol, però la seguretat augmenta considerablement.

S’han fet proves de resistència amb codis bidimensionals, com per exemple forats, dibuiixar a sobre, arrugant‐los i tot i així els símbols són llegibles. Els ccodis 2D han de ser considerats com un complement a la tecnologia tradicional de codiis de 1D, no com el seu reemplaçament, i les seves avantatges s’han de comparar amb el seu increment de cost.

Tipus més utilitzats de codis de barres 2D

Dins de la simbologia dels codis de barres 2D, n’hi han de dos tipus: els apilables (stacked) i els de matriu (matrix).

3.2.1 Simbologia tipus “stacked”

La simbologia del tipus stacked és una evolució dels codis de una dimensió. El que s’aconsegueix amb aquest tipus de simbologia és augmentar la capacitat d’emmagatzament, millorant la densitat de les dades i incorporar tècniques de detecció i correcció d’errors. Uns exemples d’aquest tipus de simbologia són el codi Codablock‐F o el PDF417.

http://www.epsem.upc.edu/ http://www.epsem.upc.edu/ Simbologia PDF417 Simbologia Codablock‐F

11

3.2.2 Simbologia tipus Matriu

Les simbologies tipus matriu en la majoria de casos tenen una densitat més gran de dades que els del tipus anterior i una total independència sobre la orientació dels símbol a la hora de ser escanejat, un codi matriu es compoosa d’un vector bidimensional de cel∙les que poden ser quadrades, hexagonals o circulars.

Les dades es codifiquen segons les posicions relatives dels blancs i negres de les cel∙les, els esquemes de codificació fan servir tècniques de detecció i correcció d’errors, permetent la possibilitat de llegir el símbol encara que estiigui danyat. Uns exemples d’aquest tipus de simbologia són: Datamatrix, Maxicode i QRR‐Code.

Simbologia QR‐Code Simmbologia Datamatrix Simbologia MaxiCode

http://www.epsem.upc.edu/

Podem comprovar que la densitaat de dades es més gran amb els de tipus “stack” que pels de tipus matriu, ja que tots estan codificats amb la mateixa informació.

12

3.3 Taula comparativa de codis 2D que es fan servir més

3.4 Un mal exemple a seguir: el codi BIDI

Es important no confondre el terme bidimensional,(que s’aplica a aquests codis) amb el nom comercial BIDI amb que Movistar va denominar a la seva versió de codi 2D que va desenvolupar per ús exclusiu dels seus productes.

Quan Movistar va voler incloure els codis 2D als seus mòbils, va crear un codi propietari derivat del QR‐Code, que només podia ser llegit amb mòbils de Movistar. És a dir, van agafar un estàndard obert que tothom podia utilitzar lliurement, i van crear un subproducte amb codi tancat i que només podien utilitzar la gent que contractés els seus serveis, no cal dir que va fracassar i només a quedat el nom comercial que li van posar.

13

4. Eines per programar un mòbil amb sistema operatiu propietari 4.1 Java 2 Platform, Micro Edition (J2ME)

Aquesta versió de Java estaenfocada per dispositius electrònics amb capacitats computacionals i gràfiques molt reduïdes, com són els telèfons mòbils que ens ocupen en aquest treball, també útil per programar PDAs o electrodomèstics intel∙ligents per posar algun exemple.

Aquesta edició de Java és diferenncia de les altres dues (la Standard i la Enterprise) per que té un mínim de components, com també per que utilitza una maquina virtual molt més reduïda per que pugui funcionar en dispositius de pocs recursos, aquesta s’anomena KVM (Kilo Virtual Machinee), el nom es degut a que només necessita pocs Kilobytes de memòria per funcionar, també disposa d’un petit i ràpid recollidor de d’escombraries entre d’altres característiques.

Podrïem dir que la edició de J2ME és una versió simplificada de J2SE (Java 2 Standard Edition). Veiem ara els components d’aquesta versió:

‐ Tenim màquines virtuals diferents depenent del tipus de dispositius poden ser la KVM anomenada anteriorment i també hi ha la CVM (Compact Virtual Machine), aquesta i aquesta suporta les mateixes característiques que la màquina virtual normal (JVM).

14

‐ Configuracions, que són un conjunt de classes bàsiques orientades per a dispositius de característiques especifiques. Les dues configuracions definides en J2ME son la CLDC enfocada a dispositius amb restriccions de processament i memòria i la CDC que està enfocada per a dispositius amb més recursos. ‐ Perfils, son unes biblioteques Java de classes especifiques orientades a implementar funcionalitats de més alt nivell per a famílies específiques de dispositius. 4.2 Entorn d’execució de Java 2 Micro Edition

Perfils Configuració Màquina Virtual Java Sistema operatiu

4.2.1 KVM (Màquina Virtual)

Es correspon a la Màquina Virtual més petita de Java, el seu nom prové de kilobyte i fa referència a la seva baixa ocupació de memòria que és entre 40Kb i 80 Kb, és una implementació de Màquina Virtual molt reduïda i orientada especialment per a dispositius de baixes capacitats computacionals i de memòria.

La KVM està programada amb C i ocupa unes 24000 línies de codi, va ser dissenyada per cobrir les següents característiques:

‐ Petita, té una memòria entre els 40Kb i els 80Kb depenent de la plataforma i les opcions de compilació. ‐ Alta portabilitat ‐ Modulable ‐ Ser la més completa possible sense renunciar a les característiques bàsiques

Limitacions de la màquina virtual:

‐ No suporta la decimals amb coma flotant ‐ No existeix suport per JNI (Java Native Interfaces) ‐ No es permeten els grups de fils o fils daemon ‐ No existeixen la finalització d’instàncies de classes ‐ No hi ha referències dèbils ‐ Limitada capacitat per les excepcions, ja que aquestes depenen en gran part de les APIs de cada dispositiu i per tant son aquests els que controlen les excepcions.

15

4.2.2 Configuracions

Una configuració és un conjunt mínim d’APIs Java que permeten desenvolupar aplicacions per un grup de dispositius aquestes APIs descriuen les característiques bàsiques que són comuns a tots els dispositius:

‐ Característiques suportades del llenguatge Java ‐ Característiques suportades per la màquina virtual ‐ Biblioteques bàsiques de Java i APIs suportades

Com hem vist anteriorment hi ha dos tipus de configuracions, però nosaltres ens interessa la Configuració de dispositius limitades amb connexió (CLDC), les característiques funcionals d’aquesta configuració són les següents:

‐ Aporta un subconjunt del llenguatge Java i totes les restriccions de la KVM ‐ Un subconjunt de les biblioteques Java ‐ Suport per E/S bàsica ‐ Suport per accedir a la xarxa ‐ Seguretat

Els requisits que han de complir els dispositius són els següents:

‐ Han de disposar d’entre 160 Kb i 12 kb de memòria total. Com a mínim han de disposar de 128 Kb de memòria ROM per la Màquina Virtual i les biblioteques CLDC, i 32 Kb RAM de memòria volàtil per la Màquina Virtual en temps d’execució. ‐ Processador de 16 o 32 bits amb una velocitat mínima de 25 Mhz ‐ Que tinguin un baix consum, ja que aquests dispositius treballen amb bateries ‐ Tenir connexió a algun tipus de xarxa, normalment sense cable, la connexió pot ser intermitent i amb ampla de banda limitat.

Llibreries incloses en la CLDC:

Nom del paquet CLDC Descripció Java.io Classes i paquets estàndard de E/S. Subconjunt de J2SE Java.lang Classes i interficies de la Màquina Virtual Java.util Classes, interficies i utilitats estàndard Javax.microedition.io Classes i interficies de connexió generica de CLDC

4.2.3 Perfils

El perfil estableix unes APIs que defineixen les característiques d’un dispositiu, mentre que la Configuració que hem vist anteriorment fa el mateix però amb una família d’ells. S’ha de tenir en compte que un perfil sempre es construeix a sobre d’una configuració determinada.

16

Per la configuració CLDC tenim 2 perfils:

‐ PDA Profile ‐ Mobile Information Device Profile (MIDP)

Un perfil pot ser construït sobre qualsevol altra, però una plataforma J2ME nomes pot tenir una sola configuració. A nosaltres ens interessa la configuració MIDP.

4.2.3.1 Mobile Information Device Profile (MIDP)

Els tipus de dispositius que s’adapten a aquest perfil són telèfons mòbils o PDAs de gama baixa amb connectivitat.

El perfil MIDP estableix les capacitats del dispositiu i s’encarrega de les següents APIs:

‐ L’aplicació (control de l’aplicació MIPD) ‐ Interfície d’usuari ‐ Emmagatzematge persistent ‐ Treball de xarxa ‐ Temporitzadors

Els paquets que estan inclosos en el perfil MIDP són els següents:

Paquets del MIDP Descripcióó javax.microedition.lcdui Classes i Interfícies per GUIs javax.microedition.rms Record Management Storage javax.microedition.midlet Classes de definició de l’aplicació javax.microedition.io Classes i Interfícies de conneexió genèrica java.io Classes i Interfícies de E/S bàsica java.lang Classes i Interfícies de la Màquina Virtual java.util Classes i Interfícies d’utilitats estàndard

17

Les aplicacions que realitzem utilitzant MIDP reben el nom de MIDlets , que podrïem dir que es el mateix que els APPlets de J2SE.

Per tant, un MIDlet és una aplicació Java realitzada amb el perfil MIDP sobre la configuració CLDC.

5. Funcionamentd’una aplicació (MIDlet) en J2ME

Com hem pogut comprovar abans, les aplicacions per a la plataforma Java Micro Edition reben el nom de MIDlets i tenen unes caracteristiques particulars respecte a les altres plataformes.

Com hem comentat a l’apartat anterior un MIDlet és una aplicació que ha estat creada fent servir la especificació (perfil) MIDP. Aquests estan dissenyats per ser executats en dispositius amb pocs recursos, com és el cas del telèfon en que volem programar el MIDlet. Aquests dispositius no disposen de línia de comandaments a on puguem executar les aplicacions que vulguem (com és el cas del PC). Sino que es fa a traves d’un software que és l’encarregat d’executar els MIDlets i gestionar els recursos d’aquests. Aquest software com el sistema operatiu del dispositiu

5.1 Software encarregat d’executar les aplicacions (MIDlets)

S’anomena el gestor d’aplicacions que en angles és AMS (application Management System). Aquest software funciona en el dispositiu i és el que ens permet executar, pausar o destruir les nostres aplicacions.

Aquest software té dues funcions:

‐ Gestiona el cicle de vida dels MIDlets ‐ S’encarrega de controlar els estats d’un MIDlet, mentre aquest s’està executant a la memòria del dispositiu.

5.1.1 Cicle de vida d’un MIDlet

El cicle de vida passa per 5 fases diferents: la localització, la instal∙lació, l’execució i l’actualització

18

Actualització

Borrat

Execució

Localitzacció

Instal∙lació

5.2 Estats d’un MIDlet en fase d’Execució

Quan un MIDlet està en fase d’eexecució està en el estat actiu, però al tractar‐se d’un dispositiu mòbil podem rebre esdeveniments externs com una trucada o un missatge, en aquest cas el software de gestió d’aplicacions a de ser capaç de canviar l’estat de l’aplicació en funció dels esdeveniments externs que es vagin produint, i que no estan dins de l’àmbit d’execució de l’aplicació

En el cas de la trucada o el missatge el gestor d’aplicacions interroompria l’execució del MIDlet i el passaria al estat de “Pausa” per atendre la trucada o llegir el missatge. Quan sortim de l’aplicació del MIDlet, aquest passaria a l’estat “Destruit” a on sera eliminat de la memòria del dispositiu.. Quan es diu que el MIDlet passa al estat destruït i es eliminat de la memòria, aquesta és la memòria RAM que és la que es fa servir per executar les aplicacions.

Un cop finalitzada l’execució del MIDlet el podem tornar a cridar tans cops com vulguem ja que aquest s’està a la zona de memòria ROM fins al moment que el vulguem desinstal∙lar.

A l’exemple anterior hem pogut veure els 3 estats en que passa un MIDlet en execució.

19

5.3 Descarregar i Instal·lar un MIDlet

Les aplicacions realitzades amb J2ME estan pensades perque puguin ser descarregades a traves d’una connexió a internet. El mitja que es fa servir per garantir aquesta descarrega rep el nom de OTA (Over the Air).

Una aplicació J2ME està formada per un arxiu JAR que és el que conté l’aplicació, però també pot tenir un arxiu JAD (Java Archive Descriptor) que conté informació sobre l’aplicació, la finalitat d’aquest document és descriure com es poden descarregar els MIDlets i estableix quins són els requisits imposats als dispositius que realitzen aquestes descàrregues,

5.3.1 Requeriments Funcionals

Els dispositius ens han de proporcionar mecanismes mitjançant puguem descarregar els MIDlets que ens interessin. Pot ser a traves d’un navegador WAP o també mitjançant una aplicació especifica per identificar MIDlets. També hi ha d’altres mecanismes com poden ser el Bluetooth, cable USB o l’antic cable sèrie per posar alguns exemples de mecanismes que poden ser suportats pel dispositiu.

Un dispositiu que tingui la especificació MIDP ha de poder fer el següent:

‐ Localitzar arxius JAD vinculats a un MIDlet a la xarxa ‐ Descarregar el MIDlet i el arxiu JAD al dispositiu des d’un servidor fent servir el protocol HTTP 1.1 o algun altre amb les mateixes característiques. ‐ Enviar el nom d’usuari i la contrasenya quan es produeixi les respostes següents per part del servidor: 401 (Unauthorized) o 407 (Proxy Authentication Required) ‐ Instal∙lar el MIDlet al dispositiu ‐ Executar MIDlets ‐ Permetre al usuari esborrar el MIDlets instal∙lats

5.3.2 Localització de l’aplicació

L’usuari ha de ser capaç de veure la descripció del MIDlet a través d’un enllaç, que al seleccionar‐lo inicialitza la instal∙lació del MIDlet. Si aquest enllaç es refereix a un arxiu JAR, l’arxiu i la direcció d’internet són enviats al Gestor d’Aplicacions del telèfon mòbil per començar el procés de instal∙lació.

Si l’enllaç es refereix a un arxiu JAD (que com hem comentat abans és el descriptor de l’aplicació), aquest i la seva direcció d’internet són transferits al Gestor d’Aplicacions i aquest fa servir el arxiu JAD per determinar si el MIDlet associat pot ser instal∙lat i executat satisfactòriament.

20

Aquest arxiu JAD abans de fer‐lo servir s’ha de convertir al format unicode. Els atributs del JAD han de respectar la sintaxis de la especificació MIDP i hi han d’estar tots presents.

Per últim l’usuari ha de tenir l’oportunitat de confirmar si desitja instal∙lar el MIDlet o no. També ha d’estar informat si s’intenta instal∙lar una versió anterior com també si la aplicació ja està instal∙lada.

5.3.3 Instal·lació de l’aplicació

La instal∙lació és el procés en que el MIDlet es descarregat al dispositiu i ja pot ser utilitzat per l’usuari. Quan existeixin varis MIDlets de l’aplicació que volem descarregar, l’usuari ha de ser avisat que n’hi ha més d’un.

Durant el transcurs de la instal∙lació, l’usuari ha d’estar informat de la seva progressió i sempre se li ha de donar l’oportunitat de cancel∙lar‐la. La interrupció de la instal∙lació ha de deixar el dispositiu amb el mateix estat que al principi.

5.3.4 Actualització de MIDlets

L’actualització es realitza quan instal∙lem un MIDlet sobre un dispositiu que ja contenia una versió anterior d’aquest. El dispositiu ha de poder informar a l’usuari quina és la versió de l’aplicació que té instal∙lada.

Quan comença l’actualització, el dispositiu ha d’informar si la versió que es vol instal∙lar és més nova, més vella o igual a la que ja hi ha instal∙lada i ha d’obtenir el permís de l’usuari abans de continuar amb el procés. Un MIDlet que no tingui firma mai pot substituir a un que si en té.

5.3.5 Execució de MIDlets Quan un usuari comença a executar un MIDlet, el dispositiu ha d’invocar les classes CLDC i MIDP que són requerides per la especificació MIDP. Si existeixen varis MIDlets presents, la interfície d’usuari a de permetre poder escullir quin volem executar.

5.3.6 Eliminació de MIDlets Els dispositius han de permetre a l’usuari eliminar MIDlets. Abans d’eliminar una aplicació l’usuari ha de donar la seva confirmació. El dispositiu hauria d’avisar a l’usuari si passes alguna circumstància especial durant la eliminació del MIDlet. Un exemple seria si el MIDlet que volem esborrar contingues d’altres MIDlets i l’usuari s’hauria d’alertar que tots ells quedarien eliminats.

21

6. Sistema operatiu dels telèfons Nokia de gama baixa(Series 40)

El sistema operatiu que utilitzen s’anomena Series 40, que és el que porten tots els Nokia de la sèrie S40, tot i ser un sistema operatiu propietari és un dels més utilitzats en el mercat ja que Nokia és el que més mòbils ven arreu del mon, sobretot de la gama de baix preu, al ser un sistema propietari no tenim el codi font, i per tant no podem maniipular el sistema operatiu en si mateix, però el fabricant et dona totes les pautes per poder‐hi desenvolupar aplicacions i jocs.

No s’ha de confondre la sèrie S40 amb la sèrie de gama més alta S60, en que aquests porten el sistema operatiu Symbian, es creu que els S40 porten també Symbian però no es així, encara que si poden trobar certes similitudds, no obstant el sistema operatiu Symbian és més potent i ampli.

6.1.1 Arquitectura del sistema operatiu Series 40

Totes les plataformes dels disposittius comparteixen la mateixa arquitectura

22

6.1.2 Elements de programació que suporta el sistema operatiu Series 40

23

6.1.3 Llista de mòbils que tenen aquest sistema operatiu

Es mostra una llista de tots els mòbils que soporten el sistema operatiu Series 40, amb la seva verisó del software que porten originariament.

Marca Model Versió Soft. Marca Model Versió Soft. 5th edition Nokia 6131 3rd edition Nokia 2220 Slide 5th edition FP1 Nokia 6133 3rd edition Nokia 2320 Classic 5th edition Nokia 6136 3rd edition Nokia 2323 Classic 5th edition FP1 Nokia 6151 3rd edition Nokia 2330 Classic 5th edition FP1 Nokia 6152 Nokia 2355 1st edition Nokia 6155 5th edition Nokia 6155i Nokia 2610 2nd edition Nokia 6165 3rd edition Nokia 2626 2nd edition Nokia 6170 Nokia 2630 5th edition Nokia 6200 Nokia 2650 Nokia 6208 Classic 5th edition Nokia 2660 5th edition Nokia 6212 Classic 5th edition Nokia 2680 slide 5th edition FP1 Nokia 6216 Classic 5th edition Nokia 2690 5th edition FP1 Nokia 6220 Nokia 2700 Classic 5th edition FP1 Nokia 6225 Nokia 2720 Fold 5th edition FP1 Nokia 6230 2nd edition Nokia 2730 Classic 5th edition FP1 Nokia 6230i Nokia 2760 5th edition Nokia 6233 3rd edition Nokia 2855 2nd edition Nokia 6234 3rd edition Nokia 2865 3rd edition Nokia 6235 Nokia 2865i 3rd edition Nokia 6235i Nokia 3100 Nokia 6255 Nokia 3105 Nokia 6260 slide 6th edition Nokia 3108 Nokia 6263 5th edition Nokia 3109 Classic 3rd edition FP2 Nokia 6265 3rd edition Nokia 3110 Classic 3rd edition FP2 Nokia 6265i 3rd edition Nokia 3110 evolve 3rd edition Nokia 6267 5th edition Nokia 3120 Nokia 6270 3rd edition Nokia 3120 classic 5th edition FP1 Nokia 6275 3rd edition Nokia 3125 Nokia 6275i 3rd edition Nokia 3152 Nokia 6280 3rd edition Nokia 3155 Nokia 6282 3rd edition Nokia 3155i Nokia 6288 3rd edition Nokia 3200 Nokia 6300 3rd edition Nokia 3205 Nokia 6300i 5th edition Nokia 3220 Nokia 6301 5th edition Nokia 3280 Classic 5th edition Nokia 6303 Classic 6th edition Nokia 3300 5th edition Nokia 3300 Americas Nokia 6500 Slide 5th edition

24

Nokia 3500 Classic 3rd edition Nokia 6555 5th edition Nokia 3510i Nokia 6585 Nokia 3530 Nokia 6600 fold 5th edition Nokia 3555 5th edition Nokia 6600 slide 5th edition Nokia 3585i Nokia 6600i Slide 5th edition Nokia 3586 Nokia 6610 Nokia 3586i Nokia 6610i Nokia 3587 Nokia 6650 Nokia 3587i Nokia 6651 Nokia 3595 Nokia 6700 Classic 6th edition Nokia 3600 slide 5th edition Nokia 6750 Mural 6th edition Nokia 3610 fold 5th edition Nokia 6800 Nokia 3710 Fold 6th edition Nokia 6800 Nokia 3720 Classic 6th edition Nokia 6810 Nokia 5000 5th edition Nokia 6820 Nokia 5070 2nd edition Nokia 6822 Nokia 5100 Nokia 7020 6th edition Nokia 5130 Xpress Music 5th edition Nokia 7070 prism 5th edition Nokia 5140 Nokia 7100 supernova 5th edition Nokia 5140i 2nd edition Nokia 7200 Nokia 5200 3rd edition Nokia 7210 Nokia 5220 Xpress Music 5th edition Nokia 7210 supernova 5th edition Nokia 5300 Xpress Music 3rd edition Nokia 7230 Xpress Music 5th edition Nokia 7250 Nokia 5330 6th edition Nokia 7250i Nokia 5610 Xpress Music 5th edition Nokia 7260 Nokia 6010 Nokia 7270 Nokia 6012 Nokia 7310 supernova 5th edition Nokia 6015 Nokia 7360 2nd edition Nokia 6015i Nokia 7370 3rd edition Nokia 6020 Nokia 7373 3rd edition Nokia 6030 2nd edition Nokia 7390 3rd edition Nokia 6060 Nokia 7500 Prism 5th edition Nokia 6070 2nd edition Nokia 7510 supernova 6th edition Nokia 6080 2nd edition Nokia 7600 Nokia 6085 3rd edition Nokia 7610 supernova 5th edition Nokia 6086 3rd edition Nokia 7900 Prism 5th edition Nokia 6100 Nokia 8600 Luna 3rd edition Nokia 6101 2nd edition Nokia 8800 Nokia 6102 2nd edition Nokia 8800 Arte 5th edition Nokia 6102i 3rd edition Nokia 8800 Crabon arte 5th edition Nokia 6103 2nd edition Nokia 8800 Glod arte 5th edition Nokia 6108 Nokia 8800 Sirocco 3rd edition Nokia 6111 3rd edition Nokia 8801 2nd edition Nokia 6125 3rd edition Nokia 8910i Nokia 6126 3rd edition Nokia X3 6th edition Nokia 6131 NFC 3rd edition

25

7. Característiques del mòbil utilitzat en el projecte

Els mòbil és de la marca Nokia i el model 3710 Fold (amb la denominació Fold Nokia indica que és del tipus plegable). Aquí es mostren les característtiques principals del mòbil per la realització del projecte. El mòbil originalment venia amb el amb la versió del sistema operatiu 5 però ha estat actualitzat a la versió 6

Característiques importants pel proojjecte

Xarxa de dades GPRS multirranura clase 32 EGPRS multirranura clase 32 WCDMA hasta 384 kbit/s carga/descarga, clase 3 Compatible ccon TCP/IP Capaz de actuar como módem de datos Connexions locals Bluetooth versión 2.1 con Velocidad de datos mejorada Compatible ccon MTP (Protocolo de transmisión móvil) Missatgeria SMS Mensajería EMS de imágenes (solo recepción) MMS 1.3, mensajes de hasta 600 kb Mensajes de audio Mensajería instantánea con Presence Correu electrònic Admite los protocolos: IMAP, POP, SMTP Admite archivos adjuntos en el correo electrónico Admite IMAP IDLE Notificacionees por correo electrónico OMA Internet Lenguajes de marcado compatibles: HTML, XHTML, WML Admite los protocolos: WAP, HTTP, HTTPS Compatible ccon TCP/IP A‐GPS Navegador OSS (Webkit 413) JavaScript 1.1, DOM nivel 2, Ajax Compatible ccon ECMAScript Compatible ccon CSS Compatible ccon Smart Rendering Imatge i So Càmera de 3,2 megapixels Formatos de imagen: JPEG, Exif Zoom digital 4x Full focus Flash LED Modos de balance de blancos: autoomático, diurno, incandescente, fluorescente

26

Modos de captura: imagen estática, temporizzador automático, vídeo Modos de escena: retrato, paisaje Modos de tonos del color: normal, sepia, negativo, falsos colores, escala de grises, solarizar Visor en pantalla completa Video Cámara principal Zoom digital de vídeo de hasta 4x Cámara frontal Formatos de grabación de vídeo: .3gp Formatos de grabación de audio: AMR Modos de balance de blancos automático en víídeo: automático, diurno, incandescente, fluorescente Modos de tonos del color: normal, falsos colores, escala de grises, sepia, negativo, solarizar Formatos de reproducción de vídeo: MP4, 3GPP, AVI, ASF; Códecs: H.263, H.264, MPEG‐4 SP, VC‐1 (WMV9) SP, VC‐1 (WMV9) MP Vídeo en tiempo real: formatos .3gp y .mp4 compatibles, .rm es compatible y puede añadirse

27

8. Aplicacions utilitzades per programar el mòbil

Per realitzar la tasca de programació hem utilitzat diferents eines de programació de mòbils:

8.1 Sun Java Wireless Toolkiit for CLDC

Es descarrega gratuïtament de la pàgina de Sun Microsystems i és l’entorn visual per programar aplicacions de J2ME fet pels creadors d’aquest llenguatge. Aquesta versió per poder funcionar necessita també tenir instal∙lada la versió estàndard de Java (J2SE).

Hem fet servir la versió 2.5.2, i a part de l’entorn de programació disposa de varis emuladors de dispositius mòbils representant les diferents característiques d’aquests.

Per emular el nostre telèfon em triat el següent emulador, ja que les característiques principals, com dimensions de la pantalla, son iguals al nostre telèfon.

És l’opció: DefaultCldcMsaPhone.

28

8.2 Series 40 6th Edition SDK

Aquest és l’emulador que ens faciilita Nokia, el podem descarregar gratuïtament de la seva pagina web dedicada a desenvolupadors de software:

http://www.forum.nokia.com

Aquest emulador és complementari a l’anterior ja que sobretot amb dispositius de diferents marques hi ha variacions sobretot de hardware i amb aquest emulador, com que és exactament de la nostra marca podem veure millor si funcionarà en el dispositiu real. L’emulador de referènccia és el Nokia 6260s.

29

8.3 Mobile Processing

Mobile Processing es un ambientt de desenvolupament per dispositius mòbils que permet desenvolupar de forma ràpida aplicacions i prototips. Prové del projecte de codi obert Processing que originalment es va desenvolupar per crear aplicacions d’escriptori o web.

Aquest software de desenvolupament implementa un subconjunt de llibreries optimitzades per la seva utilització en dispositius mòbils i també té unna API d’alt nivell per utilitzar gràfics, sons i característiques específiques dels dispositius mòbils com connexions sense fils.

Aquest software es pot descarregaar de la seva pàgina web:

http://mobile.processing.org/download

Aquest entorn de desenvolupament és de codi obert i requereix tennir instal∙lat el Sun Wireless Toolkit que hem comentat anteriorment.

30

9. QRCode

Com hem vist a la introducció el codi QRCode és un codi de dues dimensions (2D) de tipus matriu. Va ser creat per l’empresa japonesa Denso (Denso‐Wave) i el van publiicar a l’any 1994.

La seva aplicació original va ser identificar les peces dels cotxes en una cadena de munttatge, les sigles QR volen dir Quick Response, que vol dir resposta ràpida, i sorgeix davant la necessitat de crear codis amb capacitat de portar molta informació i es puguin llegir de forma rapida i fàcilment.

Degut a aquesta facilitat de lectura es poden llegir amb la càmera d’un telèfon mòbil això els ha fet molt famosos al Japó i ara a la resta del món.

Gairebé tota la informació que es troba a internet d’aquest codi està extreta de la pagina web oficial del codi QR, que Denso‐Wave posa a la nostra disposició:

http://www.qrcode.com/index‐e.html

Farem un resum breu d’aquesta pagina ressaltant les parts que ens interessen pel nostre projecte.

Primer comentar que Denso‐Wave té la patent d’aquest codi però no l’exerceix, i la s’ha convertit amb un estàndard obert, en que tothom el pot fer servir sense pagar cap llicència.

Té JIS (Japanese Industrial Standards), estàndard de la industria Jaaponesa. I també té la ISO, que és la que ens interessa per Europa.

ISO / IEC 18004 : 2006 9.1 Característiques

9.1.1 Disposició de la informació

La informació del QR Code es disposa amb les dues dimensions, comparat amb el codi de barres en que es disposa en una dimensió:

31

9.1.2 Gran capacitat de codificar dades

Aquí hi ha els caràcters màxims de dades que pot emmagatzemar el codi QR, en el projecte es farà servir el alfanumèric.

QR Code Només Numèric 7.089 númeroos Alfanumèric 4.296 caràcters Codificació amb Bytes (8 bits) 2.953 Bytes Kanji (Japonès) 1.817 caràcters

Si el comparem amb un codi de barres convencional, es veu moltt bé la diferència per la mateixa informació:

9.1.3 És resistent a la pols i a danys parcials (té detector d’errors)

Si el símbol està parcialment danyat, les dades poden ser reconstruïdes, com a màxim un 30% amb el nivell de correcció més alt.

32

9.1.4 Es pot escanejar des de qualsevol posició (360°)

Es pot llegir des de qualsevol posició, això ho fan possible els 3 quadres que marquen el patró de posició, que garanteixen la velocitat de lectura

9.1.5 Descomposició amb símbols més petits

Aquesta característica permet descompondre un símbol, amb símbols més petits amb la mateixa informació. És a dir, el QRCode és capaç de reconstruirr el símbol gran a través dels petits.

9.1.6 Versió del símbol

En el QR Code hi ha 40 símbols diferents, que van de la Version 1 a la Version 40, cada versió té un nombre diferent de mòduls (que són cada un delss píxels petits de que es compon cada QR‐Code), cada versió té un número diferent de mòduls i aquests també tenen una configuració diferennt.

La versió determina el nombre mààxim de dades que hi poden cabra, que també va en funció del tipus de dades que siguin i el nivell de correcció.

33

9.1.7 Correcció d’errors

El QR‐Code té 4 nivells de detecció d’errors, que l’usuari pot triaar depenent del tipus de medi en que s’hagi d’exposar el QR‐Code. El nivell d’errror augmenta la capacitat correctora del codi però també augmenta la seva mida, per tant s’ha de buscar l’equilibri just.

Els nivells Q o H podrien ser seleccionats per un ambient de fàbbrica a on el QR‐ Code pot embrutar‐se. El nivell L seria recomanat seleccionar‐lo amb un ambient net i que hagi de contenir moltes dades. No obstant, el nivell que normalment es selecciona és el M.

Capacitat correctora d’errors del QR‐Code Nivell L (baix) 7 % Nivell M (mittjà) 15 % Nivell Q (mitjà‐alt) 25 % Nivell H (alt) 30 %

9.1.8 Característiques de la correcció d’errors

El QR‐Code implementa l’algorisme matemàtic corrector d’errors Reed‐Solomon. La capacitat correctora depèn de la quantitat de dades que s’han de coorregir.

Per exemple si hi ha 100 píxels (quadrats petits mínims) dels quals 50 s’han de corregir es necessiten 100 píxels de codi corrector Reed‐Solomon, sempre es el doble dels píxels que s’han de corregir.

34

9.2 Utilitats del QR‐Code

 Fàbriques i logística

 Botigues

35

 Publicitat i Oci

36

 Ús personal

 Targetes de visita

 Localització

37

10. Aplicació realitzada

10.1 Explicació de l’aplicació

L’aplicació consisteix en crear un lector de QR‐Code per a un telèfon mòbil, conccretament es desenvoluparà sobre el telèfon mòbil Nokia 3710 Fold, l’aplicació consistirà en primer fer la captura del codi a través de la càmera incorporada del telèfon i després es descodificarà mitjançant un procés algorítmic, aquest serà implementat mitjançant una funció. Tot això representaria una primera fase del projecte.

Després d’aquesta primera fase obtindrem al telèfon mòbil un text alfanumèric que també pot incloure els següents símbols: $ % * + ‐ . /

Un cop tinguem el missatge descodificat podem disposarem de varies alternatives depenent del tipus de missatge, la primera seria llegir el missatge pròpiament dit, i les altres alternatives seria fer servir el missatge o una part per comuniicar‐nos amb un ordinador per via sense fils, que seria la segona fase i tindrem les següents alternatives segons les característiques del missatge i les tractarem de la següent manera:

1. Afegir el QR‐Code a una targetta de presentació i amb només una foto d’aquest codi tindries totes les dades de la persona entrades al mòbil. 2. Una pagina web i anar‐hi a traavés del internet del telèfon mòbill 3. Escriure un missatge amb una adreça i enviar‐lo a un ordinador mitjançant diferents vies, com poden ser SMS, WAP o Bluetoth

10.2 Esquema de l’aplicació

38

10.3 Programa principal que captura la imatge i la descodifica

39

40

41

10.3.1 Explicació de les funcions i el Codi

El codi s’estructura amb funcions, anem a comentar les funcions per separat i una descripció dels que realitzen.

Primer de tot comentar que han sorgit alguns problemes a l’hora de capturar la foto de la pantalla amb el telèfon Nokia.

Quan construïm la instància a partir de la classe, en el constructor al simulador hem de posar això:

cap = new Capture (this);

Però amb els telèfons Nokia s’ha de canviar aquesta instrucció per una altra especificant el lloc a on té el hardwar de la màquina que seria aixó:

cap = new Capture (this,"capture://image");

L’explicació és que per accedir al hardware d’un telèfon la llibreria ha d’especificar una direcció, que en aquest cas és de captura, i és un string que diu el que vol que s’accedeixi, amb quasi tots els telèfons mòbils una captura de pantalla amb el video activat es fa de la següent manera: "capture://video".

Però Nokia ha canviat aquesta convenció i hem d’afegir la direcció de captura per actualitzar la llibreria.

Comencem amb els tipus de classes i funcions pròpies de Mobile Processing

‐ PImage

És un tipus de dades que permet gravar imatges. Els dos camps que hem fet servir són: width i height que són les mides de la imatge.

El constructor que hem utilitzat és :PImage(width, height)

‐ loadImage()

Funció que ens permet que ens permet carregar una imatge dins una variable del tipus PImage.

‐ MQRCode

Classe que ens permetra descodificar la imatge QR‐Code, l’explicarem a l’apartat següent.

42

10.4 Codi del QR‐Code

Aquí es crea la classe MQRCode que hem fet servir (degudament coomentada), amb els seus respectius comentaris.

43

44

45

11. Procediment per descodificar un QR‐Code

Per descodificar el QR‐Code hi ha uns pasos a seguir que es mostren a continuació, i són el que farà el software de descodificació. 11.1 Descodificar la informació del Format

El format de la informació és una seqüència de 15 bits que conté 5 bits de dades, amb 10 bits de correcció d’errors que es calculen fent servir el codi BCH (15,5). Els 2 primers bits de dades contenen el nivell de correcció del símbol.

Capacitat correctora d’errors del QR‐Code Indicador Binari Nivell L (baix) 01 Nivell M (mitjà) 00 Nivell Q (mitjà‐alt) 11 Nivell H (alt) 10

Del tercer al cinquè bit conté la informació amb referència binaria del patró de la màscara.

46

11.2 Descodificar la informació de la versió del QR‐Code

Com hem vist en les característiques dels QR‐Code n’hi ha de 40 versions diferents, anem a veure com es detecta la versió d’aquests codis.

La informació de la versió és una seqüència de 18 bits que conté 6 bits de dades i els 12 restants per corregir errors fent servir el codi BCH (18,6)

A la figura de d’alt veiem les zones reservades per els bits de la versió d’informació. Podem observar que la informació apareix dupplicada, aquesta redundància es deguda a la importància que té aquesta informació per descodificar el símbol.

Dins d’aquestes zones el bit menys significant és representat amb al 0 i el més significant pel 17, els podem veure en els dibuixos de sota.

47

11.3 Patró de la màscara

Al primer apartat hem vist que els 3 últims bits de dades de la informació del format són els que porten la informació del patró de la màscara de referència.

Per descodificar una símbol és útil saber com es generà aquest, ja que la descodificació és el procés invers. Anem a veure primer com generaríem la mascara patró.

11.3.1 Generació del patró de la màscara

La taula següent ens mostra la referència binària de la mascarà patró, que es la que es fa servir en la informació del Format.

El patró de la màscara és generat per una condició (que és una formula numèrica), els quadradets que compleixin la condició seran de color negre, exceptuant les zones reservades per la informació de Format i de Versió.

En la condició el la i són les files i la j les columnes, fixant el punt (0,0) a d’alt i a la banda esquerra del símbol.

El camps referència de la taula és la referència en binari del patró de la mascara (els 3 últims bits de la informació de format).

Referència Condició 000 (i + j) mod 2 = 0 001 imod 2 = 0 010 jmod 3 = 0 011 (i + j) mod 3 = 0 100 ((i div 2) + (j div 3)) mod 2 = 0 101 (i j) mod 2 + (i j) mod 3 = 0

110 ((i j) mod 2 + (i j) mod 3) mod 2 = 0 111 ((i j) mod 3 + (i+j) mod 2) mod 2 = 0

A la figura següent es mostren tots els patrons de màscares del símbol Versió 1.

48

A la següent figura es mostra com s’apliquen les màscares patró:

49

12. Algorisme per descodificar el QR‐Code 12.1 Passos a seguir per la descodificació

Expliquem l’algorisme de referència, aquest algorisme troba el símbol en una imatgge i el descodifica.

1. S’ha de determinar un llindarr entre el blanc i el negre, això es fa prenent un valor de reflectància mitja entre el màxim i el mínim de laa imatge, llavors convertir aquesta amb píxels blancs i negres fen servir el llindar calculat anteriorment 2. Localitzar els 3 quadrats de localització, que són 3 quadrats idèntics que marquen la posició del codi i són els característics d’aquesta mena de codis.

3. Determinar la orientació del símbol mijançant la detecció dels 3 patrons de posició es pot determinar el centre del símbol i també la seva rotació. 4. Determinar la distància D a través del centres dels patrons de posició i també la distancia WUL i WUR.

50

5. Calcular la dimensió del símbol X=(WUL + WUR) / 14 6. Determinar la versió provisionaal del símbol V=[(D/X) – 10] / 14 7. Si la versió provisional del símbol és 6 o menys, ja s’especificca com a versió definitiva, en el cas que sigui 7 o més s’hauria de seguir calculant, però pel mòbil no llegirem aquestes versions. 8. Detectar la posició dels patrons d’alineació. Per la versió del símbol 1 és diferent ja que aquest no té patrons d’alineació.

CPUL = W UL / 7

51

CPx=Lx/AP

CPy=Ly/AP

CPx’=Lx’ / (P1‐P2)

CPy’=Ly’ / (P2‐PUL)

9. Mostrejar la imatge per determinar si cada píxel és blanc o negre i llavors construir una matriu de bits a on els píxels blancs seran 0 i els neegres 1. 10. Descodificar la informació de Format que esta al costat del Patró de Detecció de Posició a la banda esquerra i llegir el camp de correcció d’erros i el de patró de la màscara. Si els errors excedeixen de la capacitat correctora llavors es llegeix el segon camp d’informmació que està a d’alt a la dreta deel codi. 11. Aplicar una XOR amb la mascara patró a les dades codificades per invertir el procés de la mascara (desenmascarar) els caràcters del símbol les dades i els codis correctors. Això reverteix el procés d’emmascarar les dades aplicat duran el procés de codificació 12. Determinar els símbols correctors 13. Reordenar la seqüència dels dades correctores pel tipus de versió i nivell de correcció 14. Aplicar l’algorisme detector d’errors 15. Restaurar el missatge original de la trama de bits 16. Subdividir les trames de bits en segments a on cada un ha de començar amb el Indicador de Mode i la longitud de cada un és determinat peer el “Character Count Indicador” seguit de el Mode Indicador. 17. Descodificar cada segment segons les regles del Mode actual.

12.1.1 Indicador de Mode

Mode Indicador Mode # ECI 0111 7 Numeric 0001 1 Alphanumeric 0010 2 8‐bit Byte 0100 4 Kanji 1000 8 Structured Append 0011 3 0101 (First position) 5 FNC1 1001 (Second position) 9 Terminator (End of Message) 0000 0

52

12.1.2 Número de bits en el Character Count Indicator

Versió Mode Numèric Mode Alfanumèric Mode 8‐bit (byte) Kanji Mode de 1 a 9 10 9 8 8 De 10 a 26 12 11 16 10 De 27 a 40 14 13 16 12

Nosaltres farem servir sempre el Mode 2

12.1.3 Codificació en mode alfanumèric (Mode 2)

A cada entrada de caràcter se li assigna un caràcter valor V de 0 a 44 d’acord amb la taula següents:

Caràcter Valor Caràcter Valor Caràcter Valor Caràcter Valor 0 0 C 12 O 24 SP 36 1 1 D 13 P 25 $ 37 2 2 E 14 Q 26 % 38 3 3 F 15 R 27 * 39 4 4 G 16 S 28 + 40 5 5 H 17 T 29 ‐ 41 6 6 I 18 U 30 . 42 7 7 J 19 V 31 / 43 8 8 K 20 W 32 : 44 9 9 L 21 X 33 A 10 M 22 Y 34 B 11 N 23 Z 35

53

12.2 Diagrama de la descodiffiicació

54

12.3 Funcionament de la Classe QRCode ( )

Els passos del software per descodificar un codi QR‐Code són els següents:

 Aplicació

L’usuari obre l’aplicació i prem el botó executar

o Obtenció del símbol getQRCodeSymbol() Es posa en marxa la lectura de la imatge . Llegeix la imatge ImageReader()  Processa la imatge processImage()  Troba el patró de referència findFinderPattern()  Fa la alineació findAlingnmentPattern()  Amb els dos paràmetres anteriors troba els 0 i 1 mostrejant getSamplingGrid(FinderPattern, AlingnmentPattern)  Llavors amb aquests crea la matriu getQRCodeMatrix(samplingGrid) o Símbol obtingut o Descodifica el símbol i obté les dades d’aquest getDataByte(qRcodeSymbol) o Aplica la correcció d’errors correctDataBlocks() o Desfà la matriu amb trames getDecodeByteArray  Llegeix les trames i obté el missatge decodeBytes

55

56

57

58

59

60

61

62

63

64

65

13. Programa per enviar un SMS a través del mòbil

Primer generem el codi, podem fer servir qualsevol pagina web que en pugui crear, com per exemple aquesta:

http://www.codigos‐qr.com/generador‐de‐codigos‐qr/

Podem veure que podem generar un codi que pugui realitzar difereents funcions en el mòbil, hi ha les opcions: Direcció Url, SMS, Text, Número de telèfon, i VCard. Totes aquestes funcions simplement el que fa la web és afegir‐hi alguns caràcters addicionals per quan el telèfon tingui el text pugui interpretar aquests paràmetres per fer la opció triada.

Nosaltres escollim poder generar un codi QR‐Code que ens permeti enviar un missatge, i tenim que posar el missatge i el numero de mòbil.

De la mateixa manera, per exemple podríem generar una targeta de visita amb les nostres dades que seria la següent captura de pantalla:

66

Tornant a l’exemple del SMS podem fer un programa del mòbil que una vegada hagi descodificat el QRCode, detecti el número i el text i enviï el missatge.

Un exemple d’enviar el missatge seria aquest:

67

14. Possibles ampliacions del Projecte

Aquest projecte es centre en la part de descodificació del codi, però queda la part de codificació.

El projecte està fet per un dispositiu mòbil que es poc potent, també es pot realitzar amb un ordinador en que la potència superior d’aquest permet generar aplicacions més complexes com llegir codis QR‐Code molt més grans i amb més capacitat de corregir errors.

També centrar‐se més en la part de comunicació del mòbil un cop tenim el missatge descodificat.

15. Conclusions

Programar mòbils amb J2ME és una tasca divertida, ja que les poques instruccions bàsiques i una complexitat d’aquestes bastant més reduïda que el seu germà gran (J2SE), fa que vegis totes les instruccions ràpidament; no obstant, es tracta d’un llenguatge de programació amb tot el que això comporta.

A més aquest software està orientat a aplicacions d’entreteniment i jocs, a on hi ha instruccions especifiques per poder‐ho realitzar. La bibliografia per programar aquests dispositius es escassa i estar tota amb angles, per programar un dispositiu amb sistema propietari només tens la informació que et proporciona el fabricant i a aquesta no és massa complerta.

Ha resultat interessant poder entendre com es codifiquen els codis QR‐Code i la facilitat d’aquest per poder ser descodificat per un mòbil. També s’han pogut tractar temes relacionat amb alguna assignatura com per exemple codis correctors d’errors. En aquest projecte també s’ha vist tractament d’imatges.

També com passa amb la programació de dispositius mòbils hi ha poca bibliografia especifica sobre codis QR, a part de la informació que ens proporcionen els seus desenvolupadors.

68

16. Bibliografia

Autor Froufe Quintas, Agustín Títol J2ME : Java 2 Micro Edition : manual de usuario y tutorial / Agustín Froufe Quintas, Patricia Jorge Cárdenes Publicació México, D.F. : Alfaomega, cop. 2004

Autor Li, Sing Títol Beginning J2ME : from novice to professional / Sing Li and Jonathan Knudsen Publicació [S.l.] : Apress, cop. 2005 Edició 3rd ed.

Autor Yuan, Michael Juntao Títol Enterprise J2ME : developing mobile Java applications / Michael Juntao Yuan ; [foreword by Jim Colson] Publicació Upper Saddle River, NJ : Prentice Hall, cop. 2004

69

17. Annex

17.1 Capacitat d’emmagatzemar dades de les diferents versions

70

71

72

73

17.2 Capacitat de correcció d’errors de les diferentes versions

74

75

76

77

78

79

80

81

82

17.3 Polinomis correctors d’errors

83

84

85

86

87

88

89