Comandos AT (Qualcomm)

407 views
Skip to first unread message

William Lopes

unread,
Apr 28, 2014, 5:53:35 PM4/28/14
to androidb...@googlegroups.com
Oi pessoal, tudo bem?

Estou precisando de uma ajuda para conseguir enviar comandos AT para o Android, não conheço muito bem comandos AT e preciso utilizá-los para comunicar com a API do Qualcomm, o que também não faço ideia de como fazer.

Alguém aqui já teve alguma experiência nisso? Poderia me dar um norte? Se eu tenho que importar alguma coisa, se é só rodar um comando, etc. e etc..

Desde já, fica o obrigado!

Thiago Lopes Rosa

unread,
Apr 29, 2014, 7:37:20 AM4/29/14
to androidbrasil-dev
Você quer enviar comandos AT através de uma aplicação android?
Ou você quer simplemente enviar comandos AT para um dispositivo android?


--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Geovani de Souza

unread,
Apr 29, 2014, 8:31:01 AM4/29/14
to androidb...@googlegroups.com
Willian, qual o cenário em que vc precisa usar comandos AT? Que tipo de aplicação?

Os comandos AT não são um mistério. Basicamente caracteres ASCII que vc pode mandar em qualquer barramento Serial. Um pesquisa por "comando AT arduino" e vc já encontraria o que precisa. No caso do Android existe o ADK, que é um Arduino Mega compatível com Android.

Já trabalhei um pouco com AT e te digo uma coisa: não encontrei API de alto nível e pra fazer qualquer coisa vc precisa de uma meia dúzia de comandos. Bem massante.

William Lopes

unread,
Apr 29, 2014, 10:22:59 AM4/29/14
to androidb...@googlegroups.com
Sim, eu quero enviar comandos de um app e tratar por ele mesmo as informações colhidas. O usuário não deve ter interação nenhuma.

William Lopes

unread,
Apr 29, 2014, 10:25:47 AM4/29/14
to androidb...@googlegroups.com
Eu preciso colher informações sobre o telefone com a API do Qualcomm, mas não posso utilizar um hardware externo, tem que ser tudo entre o app e o SO Android. O Arduino não me ajudaria nesse caso.

Geovani de Souza

unread,
Apr 29, 2014, 10:33:38 AM4/29/14
to androidb...@googlegroups.com
Willian, que tipo de informação vc precisa? As APIs de alto nível do Android não resolvem?

Tem TelephonyManager pra sinal, ConnectivityManager pra conexão de dados, Locator pra localização, outras pra identidade do aparelho...

William Lopes

unread,
Apr 29, 2014, 10:37:37 AM4/29/14
to androidb...@googlegroups.com
Por força contratual eu não posso falar, mas são informações mais "complexas" que essas. Todas essas citadas já são utilizadas atualmente.

Preciso ter acesso a camada RIL.

Rodrigo Dias

unread,
Apr 29, 2014, 10:53:28 AM4/29/14
to androidb...@googlegroups.com
Voce vai ter acesso root nos aparelhos?


--

William Lopes

unread,
Apr 29, 2014, 10:57:02 AM4/29/14
to androidb...@googlegroups.com
Não, mas acredito que utilizando a API do Qualcomm eu consiga mesmo sem ser root.

Rodrigo Dias

unread,
Apr 29, 2014, 11:29:29 AM4/29/14
to androidb...@googlegroups.com
Mas voce disse que precisa de comandos AT justamente para acessar a API da Qualcomm, nao é?

De qualquer maneira, que eu saiba pra voce acessar comandos AT voce tem que ter acesso root. Se voce tiver recomendo primeiro enviar comandos usando o adb shell. Depois que voce conseguir as informações que precisa, ai cria uma app que envia os comandos automaticamente. 

William Lopes

unread,
Apr 29, 2014, 12:17:53 PM4/29/14
to androidb...@googlegroups.com
Sim, mas eu ainda não sei como fazer isso, não sei quais comandos vou utilizar, não sei nem pra onde eu envio.

Você teria algum exemplo disso? Um comando que retorna qualquer coisa, só pra testar mesmo.

Obrigado!

Geovani de Souza

unread,
Apr 29, 2014, 12:21:52 PM4/29/14
to androidb...@googlegroups.com
Concordo com o Rodrigo, vc vai precisar do root.

Acontece que o acesso ao AT é feito por um dispositivo lógico, criado por um módulo do kernel Linux do Android. Traduzindo: ele fica numa rota /dev/smd0, que só o root tem acesso.

Se com RIL, vc quer dizer Radio Interface Layer, a API escrita em C dentro do Android, imagino - e isso é apenas especulação - que você teria que escrever uma lib em C via NDK e linká-la no app via JNI. Boa sorte.

Bom, claro que se pudéssemos saber um pouco mais do escopo do projeto, talvez pudéssemos ajudar mais...

Geovani de Souza

unread,
Apr 29, 2014, 12:22:22 PM4/29/14
to androidb...@googlegroups.com

Geovani de Souza

unread,
Apr 29, 2014, 12:25:44 PM4/29/14
to androidb...@googlegroups.com
Corrigindo o que disse antes...

Talvez não precise criar a lib+JNI.

Como sempre, existem API's não documentadas aqui e aqui.

William Lopes

unread,
Apr 29, 2014, 1:36:05 PM4/29/14
to androidb...@googlegroups.com
Obrigado pessoal, parece que é só como root mesmo, porém tentei aqui no meu celular (como root) enviar um comando AT e só retorna a mesma coisa que eu coloco, por exemplo:

Envio: echo -e "AT\r" > /dev/smd0
Depois: cat /dev/smd0
Retorna: AT

Envio: echo -e "ATI\r" > /dev/smd0
Depois: cat /dev/smd0
Retorna: ATI

Envio: echo -e "I\r" > /dev/smd0
Depois: cat /dev/smd0
Retorna: I

Essas API's citadas não são documentadas e nem acessíveis (sem root), uma das coisas que eu preciso pegar na camada RIL é isso:
1639. getAvailableNetworks(Message response)

Alguém sabe uma outra forma?

E muito obrigado pelas ajudas e explicações, agora já está bem mais claro de entender esses comandos.

Geovani de Souza

unread,
Apr 29, 2014, 1:51:38 PM4/29/14
to androidb...@googlegroups.com
Willian, se eu entendi o que vc quer, deu sorte.


Tente aí e nos conte como foi.

William Lopes

unread,
Apr 29, 2014, 2:30:46 PM4/29/14
to androidb...@googlegroups.com
Geovani, eu já havia visto essa resposta há tempos, veja uma versão dela mais detalhada aqui: http://stackoverflow.com/a/16755122/1974306

Você pode notar que até agora ninguém falou que funciona, nem o cara que respondeu fala que funciona, veja a parte que ele fala "I guess you can do the same as the android settings implementation".

Eu não sei como isso possa dar certo apenas copiando e colando classes internas. Se você entendeu de outra forma, por favor, me explique.

Rodrigo Dias

unread,
Apr 29, 2014, 4:02:11 PM4/29/14
to androidb...@googlegroups.com
Nao li com calma, mas geralmente "faça como o settings" significa que voce deve usar as hidden APIs via reflection. Aqui um exemplo http://stackoverflow.com/a/4304110/1132216.


William Lopes

unread,
Apr 29, 2014, 5:09:56 PM4/29/14
to androidb...@googlegroups.com
Eu acho que entendi o que você quis dizer, acredito que vai ficar um pouco complexa essa implementação. Mas agora está mais bem mais claro o que eu devo fazer.

Amanhã aviso aqui se funcionou.

Obrigado!

William Lopes

unread,
May 6, 2014, 10:56:00 AM5/6/14
to androidb...@googlegroups.com
Pessoal, desculpe demorar para responder, mas acabou que entrou outras prioridades. Enfim, fiz uma implementação toda reflexiva aqui, mas logo de cara já me retorna o erro ao tentar pegar a classe pelo nome:

try {
NetworkQueryService = Class.forName("com.android.phone.NetworkQueryService");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

StackTrace: java.lang.ClassNotFoundException: com.android.phone.NetworkQueryService

Como vou fazer a implementação se a classe não foi encontrada? Eu sei que devemos utilizar um objeto que tem uma instância da classe e tal, mas qual objeto está acessível para terceiros que eu poderia utilizar?

Geovani de Souza

unread,
May 6, 2014, 4:27:44 PM5/6/14
to androidb...@googlegroups.com
Willian, honestamente não pensava que fosse tão simples quanto um Class.forName()...

Esta apresentação tem uma explicação muito interessante sobre como acessar API's ocultas e protegidas, mas como o autor avisa, vc precisar usar isso com muito cuidado, pois pode "quebrar" algo.

Não seriam protegidas se fossem seguras... rs

William Lopes

unread,
May 8, 2014, 10:19:14 AM5/8/14
to androidb...@googlegroups.com
O autor dessa apresentação faz o uso de API's protegidas e ocultas utilizando o uid compartilhado da Sony Ericsson, e com isso ele tem acesso aos métodos do nível de sistema.

Mas procurando na internet encontrei alguns links que ensinam como trocar o android.jar que utilizamos para compilar o apk e colocar um que habilita as classes (e seus métodos) ocultas. Mas aí me veio uma dúvida, a google poderia banir o aplicativo que fizer isso? Eles não detectam isso quando enviamos o apk para a play store? Tem alguma chance do aplicativo sofrer com isso?

Valeu!

Geovani de Souza

unread,
May 8, 2014, 12:08:30 PM5/8/14
to androidb...@googlegroups.com
Nunca pensei a respeito Willian. É um risco que vc vai ter que correr.

Pq não cria um aplicativo dummy que faça uso das APIs que vc precisa e só mostra em alguns TextView's, algo bem simples e tenta publicar?

Pelo menos vc pode descobrir e evitar o transtorno...
Reply all
Reply to author
Forward
0 new messages