PCConsolasDescargasForosGameShopCompra y Venta
Google
 

Volver 3DG > Tecnologia > Dispositivos Moviles y Telefonia Celular > Tutoriales > [Tutorial] Código del Camdriver en un SE
Registrarse FAQ Listar Miembros

Tutoriales Guías y tutoriales sobre celulares Motorola, Sony-Ericsson, Samsung, Nokia y más. How to y Cómo Hacer para desbloquear, configurar y modificar tu celular.


Responder
 
Herramientas Modo de visualizacion
Old 6 Oct 2007, 01:30 AM   #1
vapor
 
Hamburguejas al's Avatar
 
Registración: Apr 2003
Ubicación: la aurora boreal
Mensajes: 9,577
[Tutorial] Código del Camdriver en un SE
Enviar Mensaje a GoogleEnviar Mensaje a FaceBookEnviar Mensaje a Meneame Enviar Mensaje a TechnoratiEnviar Mensaje a Yahoo!Enviar Mensaje a Delicious

Me estoy armando un tuto con todo lo que voy descubriendo del código. Habia subido algo a topsony y me falto postearlo aca. Cualquier cosa extra que puedan aportar es bienvenida, todavia hay sentencias que no logro descubrir que son (porque corno no programan en php o java )



En primer lugar tenemos que tener en cuenta que todos los valores numéricos son escritos en hexadecimal, por lo que un dígito puede ir de 0 a F (de 0 a 15).


Variables

En el código vamos a encontrar variables, las cuales pueden guardar valores o conjuntos de valores.
Quote:
nombre_variable = 00;

variable2 = 0A;

variable3 = 0[AA], 1[BB], 2[DD], 3[FF];
Sentencias

Por lo que podemos ver, todas las sentencias deben terminar un con punto y coma. Entedemos por sentencia a una serie de instrucciones que son ejecutadas en forma secuencial.

Cuando dentro de una sentencia observamos un código de la forma $X (siendo X una letra), estamos en presencia de una instrucción propia o nativa del celuar.

La instrucción S se utiliza para copiar un valor a un registro. En el ejemplo estamos guardando el número decimal 16 en el registro 0.
Quote:
$s0 0F
La instrucción C se utiliza como condición, produce una bifurcación preguntando sobre el valor de un registro. Si se cumple la condición se ejecutará todo el código encerrado por el $cN y $cx. La instrucción cx nos aviso que ese bloque de código finalizó. Si en medio del $c y $cx colocamos un $cl, estamos diviendo la ejecución entre "Si pasa tal cosa has esto, sino has lo otro".

El siguiente ejemplo se traduciria como, "Si el registro 0 posee el valor 16 decimal, asignale el valor cero. Si no posee el valor 16 decimal, asignale el 16 decimal."
Quote:
$c0 0F
$s0 00
$cl
$s0 0F
$cx;
La instrucción +, -, * y / realizan operaciones aritmeticas sobre un registro determiando. Los siguientes ejemplos significan que al registro 2 le sumo 1, luego al registro 2 le resto 3, al registro 3 lo multiplico por 4 y al registro 1 lo divido por 5.
Quote:
$+2 01
$-2 03
$*3 04
$/1 05
Macros

Existen otro tipo de "variables" que vamos a llamar MACROS o tambien conocidos por el nombre de Procedimientos.

Un MACRO es una variable a la que le podemos asignar instrucciones (a diferencia de las vistas anteriormente que solo se le asignaban valores).
Quote:
MI_MACRO = $s0 0F
$c1 0F $s1 09 $cx;
Luego lo podemos usar llamandolo de la siguiente forma
Quote:
#MI_MACRO
Tambien podremos agregar parámetros a un Macro, lo que significa que al llamar al macro vamos a poder pasarle valores para que los use en sus sentencias. Dentro del macro, estos parámetros se identifican con el signo de exclamasión seguido del número de parámetro (comenzando por el 0).
Quote:
MI_MACRO_CON_DOS_PARAMETROS = $+0 !0
$+0 !1;
Y luego lo podemos usar llamandolo de la siguiente forma
#MI_MACRO_CON_DOS_PARAMETROS(01,0F)


Macros Especiales

Existen algunos macros que utiliza el celular internamente, los cuales vamos a poder modificar y de esta forma ejecutar nuestro codigo ante determinados eventos.

seq_init: se ejecuta cuando encendemos la camara

seq_ss_start: se ejecuta cuando vamos a sacar la foto

seq_ss_take: se ejecuta al estar sacando la foto

seq_ss_verify: se ejecuta luego de sacarla

seq_ss_stop: se ejecuta al finalizar el proceso


Encabezado de las propiedades

Voy a tomar de ejemplo el código de las propiedades de mi k550i.

Quote:
sup_properties = 0[3,f,9], 1[0,6,0], 2[0,3,0], 3[0,3,0], 4[0,3,0],
5[0,9,0], 6[a,28,a], 7[0,1,0], 8[0,4,0], 9[0,4,1],
a[0,2,0], b[0,0,0], c[0,0,0], d[0,1,0], e[0,4,0],
f[0,1,0],10[0,6,0], 11[0,9,0], 12[0,ff,0],13[0,15,7],
14[0,11,8],15[0,11,8],16[0,1,0],1c[0,1,0], 1d[0,3,0],
1e[0,1,0], 1f[0,0,0],20[0,7,0];
Lo que podemos observar, es que sup_properties es una variable que guarda un grupo de valores. Cada [A,B,C] se encuentra destinado a cada una de las propiedades del celular, y el significado de cada valor es:

A: Valor mínimo que puede tomar la propiedad
B: Valor máximo que puede tomar la propiedad
C: Valor por default que tomará la propiedad


En las resoluciones soportadas ocurre algo parecido

Quote:
sup_sizes = 1[64,3C,0], 2[A0,780,0], 3[140,F0,0],
4[280,1E0,0], 5[500,3C0,0], 6[640,4B0,0],
7[660,440,0], 8[660,4C8,0], 9[280,1E0,0],
11[DC,A5,5DC], // 5DC => 15 fps
12[DC,A5,5DC], // 5DC => 15 fps
13[64,3C,5DC], 14[80,60,5DC],15[A0,78,5DC],
21[80,60,3E8], 22[80,60,2EE],
23[B0,90,3E8], 24[B0,90,2EE],
30[4E,90,0];
Donde en cada elemento [A,B,C], el AxB es la resolución, mientras que el C son los fps de filmación (notense que los primeros 9 [] son para fotos, por eso el C=0).
.
----- Siguiente Post ------
.
Propiedades

Luego de un subtitulo que generalmente dice "OTHER SEQ" vamos a encontrar un montón de macros con un código de la forma
Quote:
seq_set_prop_0 = ......

seq_set_prop_1 = ......
y en algunos casos
Quote:
seq_set_prop_2_0 = .....

seq_set_prop_2_1 = .....

seq_set_prop_2_2 = .....
Bueno... ambos códigos quieren decir casi lo mismo. Cada propiedad tiene un significado (por ej, la 6 generalmente es para el zoom) y en el segundo ejemplo, el número que figura luego del número de propiedad es nada mas ni nada menos que un valor que puede tomar la misma.

Que significa esto? que si tenemos un código que dice
Quote:
seq_set_prop_2_4 = .....
Significa que ese macro es ejecutado por el celular cuando la propiedad 2 cambia al valor 4.

Ahora, en el primer ejemplo que di, no tengo ese número para identificar el valor de la propiedad. Por lo tanto la macro es invocada para todos los valores.

Cual es el chiste de que sea invocada siempre? justamente que dentro de la macro vamos a encontrar en algun sitio un "%0", dicho número va cambiando y hace referencia siempre al nuevo valor de la propiedad.

Por lo tanto los siguientes dos códigos hacen exactamente lo mismo.
Quote:
seq_set_prop_0 = $s5 %0
$-5 09
#COM_EVENT(06,$w5);
Quote:
seq_set_prop_0_3 = $s5 03 $-5 09 #COM_EVENT(06,$w5);
seq_set_prop_0_4 = $s5 04 $-5 09 #COM_EVENT(06,$w5);
seq_set_prop_0_5 = $s5 05 $-5 09 #COM_EVENT(06,$w5);
seq_set_prop_0_6 = $s5 06 $-5 09 #COM_EVENT(06,$w5);
seq_set_prop_0_7 = $s5 07 $-5 09 #COM_EVENT(06,$w5);
seq_set_prop_0_8 = $s5 08 $-5 09 #COM_EVENT(06,$w5);
seq_set_prop_0_9 = $s5 09 $-5 09 #COM_EVENT(06,$w5);
seq_set_prop_0_a = $s5 0a $-5 09 #COM_EVENT(06,$w5);
seq_set_prop_0_b = $s5 0b $-5 09 #COM_EVENT(06,$w5);
seq_set_prop_0_c = $s5 0c $-5 09 #COM_EVENT(06,$w5);
seq_set_prop_0_d = $s5 0d $-5 09 #COM_EVENT(06,$w5);
seq_set_prop_0_e = $s5 0e $-5 09 #COM_EVENT(06,$w5);
seq_set_prop_0_f = $s5 0f $-5 09 #COM_EVENT(06,$w5);
Hice una prueba media loca que resulto un tanto divertida y didáctica. Elimine el código de la propiedad 0 de mi k550 (el EV) y adapte el código del zoom para que tomara los valores del EV y seteara el zoom del celular.
Quote:
seq_set_prop_0 = #SET_REG(24,01)
$s4 %0 // Place value in reg 4
$+4 07 // Como el valor comienza en 3 y el del zoom en 10 le sumo 7
$s5 40 // Place value 128 in reg 5
$*5 0a // Multiply reg 5 by a
$/5 r4 // Divide reg 5 with reg 4
$"Cam_mag_value_%5"
#COM_EVENT(61,$w5);
El resultado fue que el EV dejo de andar pero al bajarlo o subirlo, el zoom se acercaba o alejaba (lastima que al sacar la foto todavia no logro que respete el zoom que se observa por pantalla).

Lo que no logro aún es extender los valores permitidos para una propiedad, si recibe valores entre 3 y 16 no logro cambiarlo... actualizo la variable "sup_properties" con los nuevos valores pero no hace efecto.

NOTA: los macros seq_set_prop aparentemente son llamadas al momento de setear una propiedad, mientras que los seq_get_prop son llamados al consultarla.
__________________
Quote:
Originally Posted by Dr.D
Este gobierno vive solo el día a día, es como un villero con plata.

Hablando del fracaso del Vosta
Quote:
Originally Posted by Satoshi4ever Ver Mensaje
Y el fracaso se debe a tecnicos incopetentes de las empresas que no se toman ni media hora en estudiarlo para poder optimizarlo y dejarlo de forma decente.
:rolleyes: x 1000

Ultima edicion por Hamburguejas al : 7 Oct 2007 el 01:37 AM. Razon: Mezclado automatico de Posts
Hamburguejas al is offline   Citar mensaje
Old 6 Oct 2007, 05:01 AM   #2
Forista
 
a1maan0nima's Avatar
 
Registración: Oct 2005
Ubicación: Ciber Espacio
Mensajes: 2,355
Interesante... Aunque No Entienda Un Pomo...

Saludos,


AA
__________________
.

K800i + HBH-DS970 + M2 1Gb + Cap Mod by MaxH2
a1maan0nima is offline   Citar mensaje
Old 6 Oct 2007, 01:49 PM   #3
Totalmente fumado
 
luchos297's Avatar
 
Registración: Jun 2005
Ubicación: Mendoza
Mensajes: 2,982
Flor de laburo.

Quote:
En primer lugar tenemos que tener en cuenta que todos los valores numéricos son escritos en hexadecimal, por lo que un dígito puede ir de 0 a F (de 0 a 16).
No leí todo, pero va de "0 a 15". Son 16 dígitos, no 17.
__________________
Sony Ericsson W810i
luchos297 is offline   Citar mensaje
Old 6 Oct 2007, 04:30 PM   #4
Homero Thompson
 
sebasj's Avatar
 
Registración: Apr 2007
Mensajes: 1,106
Muy buen laburo que te mandaste...

Le podés agregar como acceder al source, y manejarlo de forma segura como si estuvieses en una sandbox o algo por el estilo?

Saludos!

PD: los hexas van de 0 a 9, y de A (que sería 10) a F(15), totalizando 16 símbolos.
sebasj is offline   Citar mensaje
Old 7 Oct 2007, 02:13 AM   #5
vapor
 
Hamburguejas al's Avatar
 
Registración: Apr 2003
Ubicación: la aurora boreal
Mensajes: 9,577
Cierto cierto, se me escapo lo del 16, ahí lo arregle, subo un par de datos extra que descubrí, después que algún mod los agregue al primer post así queda todo ordenado ahí. Se esta poniendo heavy la cosa pero de a poco voy decifrando el lenguaje que usan para programarlo

Otras sentencias

Luego de un arduo trabajo de investigación logre decifrar dos nuevas sentencias (de la segunda muuuy seguro no estoy), me refiero a $p y $m.

La sentencia $p es utilizada para copiar a un registro el valor de alguna propiedad, si hacemos
Quote:
$p0 06
Lo que estamos haciendo es guardando el valor de la propiedad 6 (el zoom) en el registro 0. En mi k550 el zoom va de 3 a F, el valor por default es 9. Si enciendo la cámara y ejecuto la anterior sentencia, lo que voy a estar haciendo es guardando un 9 en el registro 0.

Por otro lado la sentencia $m sospecho, y necesitaría hacer mas pruebas, que lo que hace es mover el valor de un registro a otro registro (distinto de $s que movía un valor a un registro).

El siguiente código copia el valor del registro 4 al registro 0.
Quote:
$m0 4

Como ejecutar Funciones del Celular

Internamente el celular posee una serie de comando/funciones para todas las opciones que brinda la cámara, estas funciones son invocadas en todo momento (especialmente en el seteo de propiedades).

En algunos teléfonos más nuevos van a encontrar unas macros creadas que sirven para esto (COMMAND o COM_EVENT) pero de todas formas el código en hexadecimal que usa para invocar a la función propiamente dicha es el siguiente
Quote:
06 02 00 01 XX YY
Los primeros 6 números hacen referencia al llamado en si, los siguientes 2 números teóricamente significan 00=disable / 01=enable, pero no logre entender que diferencia hay entre ambos.

Lo más importante son los últimos 4 números, en las XX vamos a colocar el valor que le pasamos a la función, mientras que en las YY va el número de función. ¿De donde sacamos ese número? lamentablemente no encontré ninguna tabla o algo que las especifique.

Si revisamos el código del camdriver podemos encontrar que la función de zoom es la 61, la opción de foco es la 46, etc.

Todavía no lo tengo muy en claro, pero luego de escribir esos número es necesario que llamemos a la sentencia $f (significara function?) y seguida de la misma siempre encuentro otra serie de números que terminan siempre con un $d0005.

Por ejemplo
Quote:
SET_JPEG_MAX=06 02 00 0D !1 !0 $f $d0005;
Quote:
COMMAND = 06 02 00 01 !1 !0 $f $r3 012 $d0005;
__________________
Quote:
Originally Posted by Dr.D
Este gobierno vive solo el día a día, es como un villero con plata.

Hablando del fracaso del Vosta
Quote:
Originally Posted by Satoshi4ever Ver Mensaje
Y el fracaso se debe a tecnicos incopetentes de las empresas que no se toman ni media hora en estudiarlo para poder optimizarlo y dejarlo de forma decente.
:rolleyes: x 1000
Hamburguejas al is offline   Citar mensaje
Old 17 Oct 2007, 08:29 AM   #6
==============
 
Tribal Culture's Avatar
 
Registración: Apr 2005
Ubicación: Ramos
Mensajes: 5,042
muy buen laburito, se nota que tas limadisimo por mejorar el k550 :P , sarpada info, le voy a dar uso, yo entendia la mitad del codigo :P
__________________
E2160 ¨M0¨ @ 3.200 Mhz / MSI P6N SLI Nforce 650i

ASUS EAX1950PRO :D
Samsung 206NW ¨S¨
2GB ST 800@1000Mhz
Tribal Culture is offline   Citar mensaje

Responder


Herramientas
Modo de visualizacion


Similar Threads
Tema Iniciado Por Foro Respuestas Ultimo Mensaje
Tutorial EUO ? f3! Ultima Online : Adagio 5 16 Feb 2008 11:00 AM
tutorial zylom Guias 0 26 Dec 2007 09:47 PM
tutorial zylom Day of Defeat 1 3 May 2007 02:43 PM
¿Se puede flashear un Z550 con el camdriver de un K510? juansete Sony-Ericsson 1 22 Jan 2007 04:05 PM
3d tutorial plz _[GX2]_JoHn Counter-Strike 2 4 May 2005 05:50 PM




Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
Copyright 1999-2008 3DGames Argentina - Todos los derechos reservados.
Free Ringtones | Loans | Submit articles | Loans | Loans
Diseño por Estudio Maya  |  Copyright 1999-2008 3DGames Argentina - Todos los derechos reservados  |  Términos y condiciones