Controlando os LEDs do celular Motorola W220 rodando Osmocom

Este final de semana resolvi mexer com o osmocombb. Eu tenho dois celulares que utilizam o processador calypso suportado pelo osmocombb: o C115 e o W220. O celular C115 possui suporte completo incluindo a parte dos transceptores RF, ja’ o W220 ainda nao possui a parte de RF, mas consegue rodar os exemplos basicos na highram:

$ ./osmocon -p /dev/ttyUSB0 -m romload ../../target/firmware/board/chimei_w220/hello_world.highram.bin

O W220 utiliza o transceptor RF Si4210 da Silicon Labs que ainda não possui driver, portanto terei que criar um driver para que o W220 possa funcionar com o osmocombb.

Entao, para esquentar as turbinas, resolvi fazer um teste basico e teoricamente simples: acender os LEDs do W220. Apos analisar o esquematico, a primeira coisa que descobri foi que os LEDs nao sao controlados diretamente pelo processador calypso, mas sim atraves de um expandor de I/O PCA9537 ligado ao processador via barramento I2C.

Apos varias tentativas sem sucesso resolvi soldar dois fios (no SCL e SDA) do PCA9537 para analisar o que estava errado. Para minha surpresa o bit mais significativo do endereco do expansor de I/O (0x49) nao aparecia no barramento. Nao demorou muito para que eu encontrasse a causa do problema, o autor do driver I2C para o Calypso (Harald Welte) se confundiu na hora de mascarar os bits de endereco. Então submeti um patch para resolver o problema.

Assim finalmente tudo funcionou como o esperado:

w220_led

Este foi o codigo usado para acender todos os LEDs:

#define PCA9537_ADDR       0x49

int rc = 0;
const uint8_t data1[1] = {0x00};
const uint8_t data2[1] = {0x00};

        rc = i2c_write(PCA9537_ADDR, 3, 1, data1, 1);

        if(rc)
                puts("i2c 1 fail\n");

        rc = i2c_write(PCA9537_ADDR, 1, 1, data2, 1);

        if(rc)
                puts("i2c 2 fail\n");
Advertisements

5 thoughts on “Controlando os LEDs do celular Motorola W220 rodando Osmocom

  1. Boa noite Alan. Com o Osmocom é possivel bootar um Linux nos dispositivos,ou só ‘brincar’ com o processador e seus periféricos no sistema original da motorola? Abraços!

  2. Oi Angelo,

    Por enquanto o único smartphone que tem suporte a Linux e OsmocomBB é o Sciphone G2, porém a parte do baseband dele não está funcional ainda.
    Para os celulares mais simples (feature phone) existe o porte o RTOS NuttX. Abraços!

  3. Agradeço muito a resposta. Só abusando mais um pouquinho (hehe),como você descobre os valores hexagonais dos endereços dos periféricos? eles estão no datasheet do processador ou do periférico em si? Grato mais uma vez!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s