Voy a tratar de subir lo que he aprendido viendo o intentando modificar el camdriver de mi k550 o lo que he observado en otros de los distintos modelos. Si alguien tiene más información al respecto es biervenida.
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).
Variables
En el código vamos a encontrar variables, las cuales pueden guardar valores o conjuntos de valores.
Sentenciasnombre_variable = 00;
variable2 = 0A;
variable3 = 0[AA], 1[BB], 2[DD], 3[FF];
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.
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".$s0 0F
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."
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.$c0 0F
$s0 00
$cl
$s0 0F
$cx;
Macros$+2 01
$-2 03
$*3 04
$/1 05
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).
Luego lo podemos usar llamandolo de la siguiente formaMI_MACRO = $s0 0F
$c1 0F $s1 09 $cx;
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).#MI_MACRO
Y luego lo podemos usar llamandolo de la siguiente formaMI_MACRO_CON_DOS_PARAMETROS = $+0 !0
$+0 !1;
#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.
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: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];
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
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).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];
Esto es todo lo que he aprendido hasta ahora. No estoy seguro de que es el comando $f, o varias cosas mas... pero con el tiempo veremos que se aprende. Si alguien quiere aportar algo que se me escapo o corregirlo es bievenido![]()
Marcadores