
Introdução
Para aproveitar ao máximo todos os recursos que cada PDA oferece, precisamos detectar, via programação, em que tipo de PDA nossa aplicação está sendo executada. Se estiver sendo executada em um Treo 650, por exemplo, poderemos utilizar os recursos de telefone, as teclas especiais, e a comunicação via Bluetooth. Já se estiver em um LifeDrive, sabemos que temos espaço de sobra para armazenar nossos dados, e assim por diante. Dessa forma, podemos fazer com que nossa aplicação tenha comportamentos diferentes, dependendo do tipo de PDA em que é executada.
Conceito
Todo PDA da plataforma Palm OS possui um ID único, que identifica seu tipo de dispositivo. Alguns IDs estão definidos no arquivo palmOneResources.h do SDK v5.4 para Palm OS, e a cada novo PDA lançado no mercado, esse arquivo é atualizado e disponibilizado pela Palm. São eles:
Cubs- Device ID do PalmOne Zire;Zi21- Device ID do PalmOne Zire 21;Zi22- Device ID do PalmOne Zire 31;Zpth- Device ID do PalmOne Zire 71;Zi72- Device ID do PalmOne Zire 72;Frg1- Device ID do PalmOne Tungsten T;Frg2- Device ID do PalmOne Tungsten T2;Arz1- Device ID do PalmOne Tungsten T3;TnT5- Device ID do PalmOne Tungsten T5;Cct1- Device ID do PalmOne Tungsten E;Zir4- Device ID do PalmOne Tungsten E2;atlc- Device ID do PalmOne Tungsten W;MT64- Device ID do PalmOne Tungsten C;H101- Device ID do PalmOne Treo 600;H201- Device ID do PalmOne Treo 600 Simulator;H102- Device ID do PalmOne Treo 650;H202- Device ID do PalmOne Treo 650 Simulator;D050- Device ID do PalmOne Palm T|X;D051- Device ID do PalmOne Palm Z22;TunX- Device ID do PalmOne LifeDrive.D060- Device ID do PalmOne Treo 755p.
Conhecendo estes IDs, precisamos apenas executar a função API FtrGet, informando o parâmetro sysFtrNumOEMDeviceID, para obtermos o ID do PDA.
Programação
O primeiro passo, é criar um módulo para declararmos a função API que queremos executar, e as constantes que iremos utilizar:
'API FtrGet utilizada para obter características do PDA
Public Declare function FtrGet (ByVal creator As Long, ByVal featureNum As Integer, ByRef valueP As Long) As Integer Trap &HA27B
'Constante utilizada para armazenar o Device ID do PDA
Public Const sysFtrNumOEMDeviceID As Integer = 21
'Constante utilizada para armazenar o Creator ID do sistema
Public Const sysFtrCreator As Long = CreatorToLong("psys")
'Constantes utilizadas para armazenar os IDs de cada dispositivo
Public Const kPalmOneDeviceIDZire As Long = CreatorToLong("Cubs") 'Device ID do Zire
Public Const kPalmOneDeviceIDZire21 As Long = CreatorToLong("Zi21") 'Device ID do Zire 21
Public Const kPalmOneDeviceIDZire31 As Long = CreatorToLong("Zi22") 'Device ID do Zire 31
Public Const kPalmOneDeviceIDZire71 As Long = CreatorToLong("Zpth") 'Device ID do Zire 71
Public Const kPalmOneDeviceIDZire72 As Long = CreatorToLong("Zi72") 'Device ID do Zire 72
Public Const kPalmOneDeviceIDTungstenT As Long = CreatorToLong("Frg1") 'Device ID do Tungsten T
Public Const kPalmOneDeviceIDTungstenT2 As Long = CreatorToLong("Frg2") 'Device ID do Tungsten T2
Public Const kPalmOneDeviceIDTungstenT3 As Long = CreatorToLong("Arz1") 'Device ID do Tungsten T3
Public Const kPalmOneDeviceIDTungstenT5 As Long = CreatorToLong("TnT5") 'Device ID do Tungsten T5
Public Const kPalmOneDeviceIDTungstenTE As Long = CreatorToLong("Cct1") 'Device ID do Tungsten E
Public Const kPalmOneDeviceIDTungstenE2 As Long = CreatorToLong("Zir4") 'Device ID do Tungsten E2
Public Const kPalmOneDeviceIDTungstenW As Long = CreatorToLong("atlc") 'Device ID do Tungsten W
Public Const kPalmOneDeviceIDTungstenC As Long = CreatorToLong("MT64") 'Device ID do Tungsten C
Public Const kPalmOneDeviceIDTreo600 As Long = CreatorToLong("H101") 'Device ID do Treo 600
Public Const kPalmOneDeviceIDTreo600Sim As Long = CreatorToLong("H201") 'Device ID do Treo 600 Simulator
Public Const kPalmOneDeviceIDTreo650 As Long = CreatorToLong("H102") 'Device ID do Treo 650
Public Const kPalmOneDeviceIDTreo650Sim As Long = CreatorToLong("H202") 'Device ID do Treo 650 Simulator
Public Const kPalmDeviceIDTX As Long = CreatorToLong("D050") 'Device ID do Palm T|X
Public Const kPalmDeviceIDZ22 As Long = CreatorToLong("D051") 'Device ID do Palm Z22
Public Const kPalmOneDeviceIDTungstenX As Long = CreatorToLong("TunX") 'Device ID do LifeDrive
Declarada a função e as constantes, só precisamos executar a função e comparar o ID retornado com as constantes que temos para descobrir o tipo do PDA:
Private Sub btnDetectar_Click()
Dim iResult As Integer
Dim lDeviceId As Long
'Executa a função FtrGet, e recebe o ID na variável lDeviceId (passada por referência/ByRef)
iResult = FtrGet(sysFtrCreator, sysFtrNumOEMDeviceID, lDeviceId)
'Conseguiu chamar a API?
If (iResult = 0) Then
Select Case lDeviceId
Case kPalmOneDeviceIDZire
Msgbox "Seu PDA é o Zire"
Case kPalmOneDeviceIDZire21
Msgbox "Seu PDA é o Zire 21"
Case kPalmOneDeviceIDZire31
Msgbox "Seu PDA é o Zire 31"
Case kPalmOneDeviceIDZire71
Msgbox "Seu PDA é o Zire 71"
Case kPalmOneDeviceIDZire72
Msgbox "Seu PDA é o Zire 72"
Case kPalmOneDeviceIDTungstenT
Msgbox "Seu PDA é o Tungsten T"
Case kPalmOneDeviceIDTungstenT2
Msgbox "Seu PDA é o Tungsten T2"
Case kPalmOneDeviceIDTungstenT3
Msgbox "Seu PDA é o Tungsten T3"
Case kPalmOneDeviceIDTungstenT5
Msgbox "Seu PDA é o Tungsten T5"
Case kPalmOneDeviceIDTungstenTE
Msgbox "Seu PDA é o Tungsten E"
Case kPalmOneDeviceIDTungstenE2
Msgbox "Seu PDA é o Tungsten E2"
Case kPalmOneDeviceIDTungstenW
Msgbox "Seu PDA é o Tungsten W"
Case kPalmOneDeviceIDTungstenC
Msgbox "Seu PDA é o Tungsten C"
Case kPalmOneDeviceIDTreo600
Msgbox "Seu PDA é o Treo 600"
Case kPalmOneDeviceIDTreo600Sim
Msgbox "Seu PDA é o Treo 600 Simulator"
Case kPalmOneDeviceIDTreo650
Msgbox "Seu PDA é o Treo 650"
Case kPalmOneDeviceIDTreo650Sim
Msgbox "Seu PDA é o Treo 650 Simulator"
Case kPalmDeviceIDTX
Msgbox "Seu PDA é o T|X"
Case kPalmDeviceIDZ22
Msgbox "Seu PDA é o Z22"
Case kPalmOneDeviceIDTungstenX
Msgbox "Seu PDA é o LifeDrive"
Case Else
MsgBox "PDA desconhecido (" & lDeviceId & ")", hbMsgBoxDoneOnly + hbMsgBoxWarning, "Atenção"
End Select
Else
MsgBox "Erro (" & CStr(iResult) & " ) ao executar API FtrGet.", hbMsgBoxDoneOnly + hbMsgBoxError, "Erro"
End If
End Sub
Detectando outros tipos de PDA
O SDK v5.3 para Palm OS contém apenas os IDs dos PDAs mais recentes da PalmOne. Os IDs de PDAs mais antigos da Palm e de outros fabricantes, como por exemplo da HandSpring, Sony, Samsung, entre outros, podem ser encontrados nos respectivos SDKs de cada fabricante. Para facilitar, disponibilizo abaixo a lista dos principais IDs/PDAs:
Acer
momo- Device ID do Acer s10;coco- Device ID do Acer s50/s60.
Garmin
3200- Device ID do Garmin 3200;3600- Device ID do Garmin 3600;3700- Device ID do Garmin 3600a.
HandSpring/PalmOne
&H0000008C- Device ID do Treo 90;&H0000000B- Device ID do Treo 180;&H0000000B- Device ID do Treo 180g;&H0000000D- Device ID do Treo 270;&H0000000E- Device ID do Treo 300;&H0000008B- Device ID do Visor Pro;&H0000008A- Device ID do Visor Neo;&H00000009- Device ID do Visor Edge;&H0000000A- Device ID do Visor Prism;&H00000008- Device ID do Visor Platinum.
Nota: Para utilizar estes IDs, não é necessário utilizar a função CreatorToLong, pois os valores já estão convertidos para Long.
PalmOne/IBM
stuj- Device ID do Palm m125;hbbs- Device ID do Palm m130;trnd- Device ID do Palm m500/IBM WorkPad c500;ecty- Device ID do Palm m505, IBM WorkPad c505;lith- Device ID do Palm m515;sky1- Device ID do Palm i705;D053- Device ID do Treo 680.D060- Device ID do Treo 755p.
Qualcomm/Kyocera
qc20- Device ID do Kyocera QCP6035;7135- Device ID do Kyocera QCP7135;
Samsung
Phx2- Device ID do Samsung SPH-i330;blch- Device ID do Samsung SPH-i500;glxy- Device ID do Samsung SPH-i550;BLFM- Device ID do Samsung SGH-i530;
Sony
&H00010001- Device ID do PEG-S300;nsca- Device ID do PEG-S320;nsc2- Device ID do PEG-S360;vnce- Device ID do PEG-T400/T415/T425;&H00010002- Device ID do PEG-S500C;ystn- Device ID do PEG-N600C/N610C;mdna- Device ID do PEG-T600C/T615C/T625C;npls- Device ID do PEG-T650C/T665C/T675C;ysmt- Device ID do PEG-N700C/N710C;ysm2- Device ID do PEG-N750C/N760C/N770C;frta- Device ID do PEG-SL10;cocs- Device ID do PEG-SJ20;glps- Device ID do PEG-SJ22;goha- Device ID do PEG-TJ25;leia- Device ID do PEG-TJ27;hwai- Device ID do PEG-SJ30;mcnd- Device ID do PEG-SJ33;goku- Device ID do PEG-TJ35;luke- Device ID do PEG-TJ37;vrna- Device ID do PEG-TG50;atom- Device ID do PEG-TH55/TH55DK;amno- Device ID do PEG-UX40;prmr- Device ID do PEG-UX50;rdwd- Device ID do PEG-NR70/NR70V;crdb- Device ID do PEG-NX60/NX70V;tldo- Device ID do PEG-NX73V;mdrd- Device ID do PEG-NX80V;grnd- Device ID do PEG-NZ90;ancy- Device ID do PEG-VZ90;aris- Device ID do Clié Handheld Palm OS 5 Simulator (Retrato);mone- Device ID do Clié Handheld Palm OS 5 Simulator (Paisagem).
Nota: Para utilizar os IDs do PEG-S300 e PEG-S500C, não é necessário utilizar a função CreatorToLong, pois os valores já estão convertidos para Long.
TRG Pro/HandEra
trg1- Device ID do TRG Pro;trg2- Device ID do HandEra 330.
Histórico
- 07/04/2007 - Primeira versão deste artigo.
- 17/05/2007 - Atualização: Inclusão do Device ID do Treo 755p.
Sobre o Autor
Caio Proiete é Arquiteto de Soluções, especialista em desenvolvimento de softwares para PDAs e telefones celulares, principalmente nas plataformas Palm OS, Windows Mobile e Symbian OS.
Atualmente suas principais ferramentas/tecnologias de trabalho incluem CodeWarrior C++, Handheld Basic, eMbedded Visual C++, .NET Compact Framework, C# .NET, e Carbide.c++.
Possui extensa experiência em arquitetura e desenvolvimento de sistemas baseados em web e smart-clients, gerenciamento de projetos e treinamento, e atua também como instrutor oficial Microsoft em centros de treinamentos (CLPS), e é detentor das seguintes certificações:
- MCT - Microsoft Certified Trainer;
- MCSD - Microsoft Certified Solution Developer;
- MCDBA - Microsoft Certified Database Administrator;
- MCAD .NET - Microsoft Certified Application Developer;
- MCSD .NET - Microsoft Certified Solution Developer for .NET;
- MCTS - Microsoft Certified Technology Specialist for Windows Mobile.
Veja o todos os artigos publicados por Caio Proiete no PDAExpert.
Artigos Relacionados
- Não existem artigos relacionados
2 Comentários »
Comentários via RSS TrackBack URI
-
Joaquim da Cruz Domingos em 08/05/2007 10:05
Apesar de os seus textos serem extremamente técnicos para o meu nível, atrevo-me a fazer-lhe uma pergunta super primária. Em termos técnicos qual é o sistema operativo de um Palm T/X?
Obrigado pela resposta.
Joaquim
-
Caio Proiete em 08/05/2007 10:37
Joaquim, realmente alguns dos artigos são bastante técnicos, pois o PDAExpert é um site voltado à desenvolvedores.
O Palm T|X utiliza o sistema operacional Palm OS Garnet versão 5.4.9.
Abraços,
Caio Proiete


Envie seu comentário
ATENÇÃO: A área de comentários deve ser utilizada apenas para dúvidas sobre este artigo. Para dúvidas não relacionadas a este artigo, utilize o Fórum PDAExpert.net.