Conexión USB con celular!
Hola soy nuevo en este foro, estoy comenzando a utilizar este lenguaje, necesito hacer una aplicacion que me conecte con el celular y encontre una libreria (creo que se le llama asi), pero nose como utilizarla en mi code, alguien me podria ayudar a utilizarla??? Probe guardandola como "usb.pas" pero cuando trato de compilar me dice que falta "usb.dcu" y nose porque sucede esto... La libreria es la siguiente y su autor es oOXTCOo... Espero alguien me pueda ayudar.... Gracias!
Código:
unit USB; |
Hola Alan_B.
Como a todos los que se inician te invitamos a que leas nuestra guía de estilo. No tuve inconvenientes en compilar la unidad. En un nuevo proyecto : File-> New-> Unit -> Borrar el contenido que predefine Delphi-> Pegar el código que adjuntaste-> File-> SaveAs: USB.PAS -> compilar. Por si tenes problemas te adjunto el .pas y el .dcu, te aclaro que no probé si el código funciona. Saludos. :) |
Gracias Genio!!! Me estoy iniciando y no sabia esto... Y para agregarlo en mo proyecto como tengo que hacer, para que las funciones lo hagan correctamente???
PD: Gracias por tu respuesta, yo soy de Argentina y la verdad que no logro encontrar cursos de Delphi!! Espero progresar gracias a este foro ;-) Vos me darias tips??? EDITADO! Add to project... Shift + F11 :D |
Hola Alan_B.
Hay muchos tips en la sección trucos, además muchos te aparecerán en las mismas búsquedas. Quizá conozcas alguno de los enlaces que te voy a poner, pero si no, espero que te sean útiles:
Un saludo. :) |
Porque al querer compilar este code:
Código:
procedure TForm1.Button1Click(Sender: TObject); [Error] Unit1.pas(31): Too many actual parameters [Fatal Error] iDEN.dpr(6): Could not compile used unit 'Unit1.pas' Intente de todo y no logro dar con la posible solucion!!! Ggracias desde ya! |
El error te indica que estas pasando muchos argumentos a la función.
Si te fijas en la declaración de la función:
Esta no recibe argumentos, y tu le estas enviando:
Como es una función que evalúa si pudo abrir el puerto USB, debería ser:
Saludos |
Ahhhhhhh! Es verdad!!! Una función de tipo boolean, devuelve un True o en su defecto un False, verdad? Ahora estoy en mi trabajo pero esta noche pruebo y confirmo por si le sirve a alguien más el dato!
Gracias por tu respuesta! Alan_B ! |
Perdón por el doble post, no pude editar el anterior... Intenté con la siguiente forma
Arrojandome los mismos errores antes mencionados... Probe de la siguiente y compila, pero sin resultados exitosos a la hora de lograr conexion...
Copie el device path reemplazando "USB1", pero sin exito como mencioné!!! Sigo probando, si alguien me sigue ayudando soy feliz!!! Alan_B! |
Yo creo que aprenderías mas fácilmente iniciando con cosas sencillas. Hay muchísimos recursos para ello. Ya cuando domines el lenguaje y entiendas bien sus alcances ya podrás meterte en cosas mas complejas. Sobre todo si lo que deseas lograr no lo dominas, como en el caso de tu ejemplo que es una conexión por código a un celular vía USB. Te aseguro que muchos del club no sabemos como hacerlo a pesar de que tenemos ya buen tiempo en esto. Si no lo haces así te vas a encontrar con mil cosas que no entenderás.
Programar no es tan fácil como se piensa y no es cuestión de descargar algo ya hecho, cambiarle 2 o 3 cosas y ya tienes algo funcional. Es como querer ser mecánico sin saber la diferencia entre llaves milimétricas y llaves inglesas. A final de cuentas a todos se nos ocurrió en algún momento lograr que la computadora hiciera algo (abrir una puerta, mandar un mensaje, etc.) y siempre nos decían "haz un programa" y así muchos terminanos enamorados de la programación, sobre todo en Delphi. Saludos |
Gracias por el consejo de todas formas! Te cuento que estoy aprendiendo Delphi7, conozco C# pero me estan pidiendo un code en este lenguaje y vi que este foro tenia muchos años, motivos por los cales me registre, por la experiencia que sin dudas hay en este... Solo pedi una ayuda ya que vi que en otros foros utilizan este "unit" para sus aplicaciones y yo no logro entender como lo hacen, no me comparten la forma en que lo configuran/utilizan... Si cause molestias disculpas, repito solo queria una mano, el code esta escrito solo que no entiendo como utilizarlo...
Saludos y Gracias! |
Hola Alan_B.
Primero analicemos la funcion USBOpenDriver:
Particularmente y sin conocer sobre celulares, la hubiera escrito así:
La llamada correcta a la función es el que te sugirió cloayza, por ejemplo: Supongo que si la función te muestra el error, será debido a que no encuentra la ruta, pero hasta allí llegan mis conocimientos sobre rutas a celulares... :( También podés reescribir la función USBOpenDriver para que admita diferentes rutas y luego recompilar la unidad... Saludos. :) |
amigo eficas e estado viendo este hilo y analizando el codigo y el ejemplo que hiciste puso la cosa mas claras pero quisiera saber que tipo de direccion hay que poner en este cambio que le hiciste a la funcion si es de tipo C:\,G:\, H:\ etc... o de este tipo USB\VID_0930&PID_6545\001D0F0C73C8B92053110130
y una cosa mas esta libreria funciona solo para dipositivos moviles o para cualquier dipositivo usb como camara,memoria flash,microchip pci etc... |
No te apures. Si ya conoces C te va a ser sencillo adaptarte. Me parece que eficsa ya puso algo que te puede servir sin duda. Creo que el path que utiliza la unit para conectarse al teléfono es la que le sirvió a quien la desarrollo y supongo que cambia de acuerdo al teléfono que se vaya a usar, deduzco eso dado la línea comentada en el código original.
Yo creo que tendrías que llamar primero a Opendriver tal como está en la interface, sin parámetros...y evaluar si te devuelve TRUE ya posteriormente usar las funciones para leer o escribir. Se parecen mucho a las funciones de bajo nivel que tiene delphi para leer y escribir ficheros. |
Hola.
La verdad es que es la primera vez que intento acceder a un celular. Pero pensando en que era un dispositivo extraible, este código que uso al efecto, me detecta correctamente si está conectado o no: Ahora convengamos, sé que es la unidad 'F' por que previamente me fije cuál era. Si agrego un pen drive, situado en la unidad 'E' y uso la función OpenUSB con el argumento 'E' funciona igualmente. Por otro lado estoy accediendo a la memoria del celular no al celular mismo.... La cosa debe pasar por la cadena '\\?\USB#Vid_058b&Pid_0015#5&25ea51ff&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed'... Creo, como AzidRain, que es propia de cada teléfono y realmente no sé como obtenerla. Como dato adicional, en mi caso, cambiando el '?' por la letra 'F' se queda pensando un poco y luego lanza el error INVALID_HANDLE_VALUE. Saludos. :) |
yo tambien probe y igual a ti eficas se queda pensando un poco y luego tira el error de invalido ahora para obtener el codigo \\?\USB#Vid_058b&Pid_0015#5&25ea51ff&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed se obtiene en las propiedades de administracion de dipositivo de los puerto usb en la paleta detalle ahi se encuentra eso es obtenido manualmente por codigo ni idea
por lo visto creo que este codigo es para conectarse a dipositivos moviles entonces consiguire un celular para tener algun resultado |
Hola kurono.
No dejes de avisar los resultados, es feo esto de quedar con la intriga :( Si no habrá que esperar que los entendidos en el tema (que los hay en el Club) nos vengan a arrojar un poco de luz... Saludos :) |
Hola.
Es importante saber que es lo que se pretende obtener del teléfono conectado y peligrosa la escritura. El acceso a los dispositivos físicos, sean discos o USB, Flash... se realiza igual, con la API CreateFile En caso de desear abrir un dispositivo físico, el nombre debe ser "\\.\PhysicalDriveX" siendo X un número de unidad física que comienza por 0. Si deseamos abrir una unidad lógica, el nombre será "\\.\L:" siendo L la letra de unidad. En cambio \\.\\L:\ abre el directorio raíz. Cita:
Cuando abrimos una unidad física lo primero que se lee es el MBR (Master Boot Record). En una unidad lógica obtendremos el BPB (BIOS Parameter Block ó BootSector de una partición). Alterar esos datos puede ser fatal si no sabemos lo que hacemos. Desde el MBR podemos obtener el BMP y de éste acceder a los archivos manejando el sistema de archivos correspondiente, tal y como lo hace el S.O. pero no es fácil. Estos enlaces pueden dar algo de luz al tema: 1. Trabajar con la FAT32 (o como vacunar un disco extraible) 2. Trabajando con FAT16 y FAT32 En el segundo enlace encontrareis una aplicación escrita en C que gestiona los archivos de una unidad FAT16 ó FAT32 leyendo directamente del dispositivo extraíble el MBR el BPB la tabla de la FAT - Directorio raíz - directorios y archivos leidos cluster a cluster en bruto desde la unidad. Dicha aplicación es experimental y entre otras cosas sirva para extraer imágenes en bruto de dispositivos o restaurarlas. No es la última versión y se debe manejar con cuidado. En definitiva ¿Que es lo que se quiere obtener de la conexión USB? Espero haber aportado algo de luz al tema. Saludos. |
La cadena de cada telefono es el GUID que figura en Administrador de dispositivos/Seguramente en Modems/El equipo en si.... Propiedades/Detalles/ y ahi toda la info del aparatito... Yo tengo entendido que es necesario el GUID!!! Igual esta noche hago las pruebas para ver si funciona de la forma que me lo explico el amigo "ecfisa"!!! Cualquier avance o cambios en los errores seran posteados!
|
amigos les cuento que tuve un resultado positivo en la prueba que hise con la pequena modificacion que nos mensiono el amigo escafandra \\.\PhysicalDriveX y el cambio a la funcion que hiso eficas aqui mi ejemplo
esta prueba fue realizada con una memoria usb aun no e hecho la prueba con el celular pero es un avance este proyecto que nos interesa a todos creo que una ves conectado el dipositivo las demas funciones de la libreria USB no deberian dar problemas |
Hola
Muchas gracias kurono y escafandra (que si iluminó más el tema). Luego haré algunas pruebas, pero como pensaba del mismo modo que escafandra, nada que implique escritura hasta que no sepa bién lo que estoy haciendo. No está entre mis planes hacer detonar el celular :D. Saludos. :) |
Cita:
Cita:
Cita:
Se debe tener en cuenta que el S.O. del teléfono puede poner sus "peros" al acceso por el puerto USB y, por supuesto, al acceder como \\.\PhysicalDriveX accedemos a la "unidad de almacenamiento masivo"... En este sentido quisiera añadir que los dispositivos android se comunican con el PC a través de un driver por socket y el programa puente es el conocido adb.exe. Saludos. |
amigo escafandra entonces acediendo como \\.\PhysicalDriveX estariamos conectandonos a la memoria interna del dipositivo , en el caso de un celular sacando las sd si tiene y usando el codigo \\.\PhysicalDriveX me imagino que acederia a la Rom del celular que creo que es la idea principal de nustro amigo Alan_B el cual quiere flashear un celular con delphi
si es asi entonces con la libreria usb creo que se puede escribir en la rom del celular en este caso hay que tomar en cuenta lo que has dicho ante de saber que lo que se quiere escribir y donde o me equivoco |
Bueno gente les comento que aun sigo sin resultados positivos (USB - Celular), utilizando \\.\PhysicalDriveX funciona perfectamente, sera que el error esta en que no tipeamos bien el identificador del celular??? Yo probe ya con varios entre ellos "Id. de Hardware", "GUID", etc... Todos sumandolos de esta forma "USB#VID_0C44&PID_0020#{4d36e96d-e325-11ce-bfc1-08002be10318}"... Donde Id. de hardware: VID_0C44&PID_0020, GUID: {4d36e96d-e325-11ce-bfc1-08002be10318} y bueno concatenados con #, como lo vi en el ejemplo del creador del unit!!!
|
Aun sin respuesta positiva del celular, no puedo creer que sea tan dificil esto jaja, alguien logro conectar con un celular??? kurono, pegaste en la tecla, la idea es hacer una aplicacion capaz de lograr conexion con un celular y cargarle su firmware (flashear)!
Si alguien logro encontrar algun dato que aporte bienvenido sea, GRACIAS a TODOS!!! |
amigo Alan_B para que no pierda las esperanzas te cuento que una ves flashe un celular sony erizon en el cual el programa estaba hecho en delphi pero lamentablemente el autor del programa no ofrecia el codigo fuente esto te lo digo en delphi se puede hacer solo hay que saber como
|
Mira a ver si esto te sirve de ayuda:
Su Uso:
Saludos. |
Aclaraciones sobre mi mensaje anterior:
1- El código que he escrito para explorar el registro en busca del nombre de dispositivo está basado en un análisis del registro de tres PCs con Windows XP y un Teléfono Samsung Galaxy SII conectado al puerto USB. 2- Sólo funciona con un dispositivo conectado. 3- Devuelve un Nombre de dispositivo que se puede abrir con la API CreateFile. 4- No he escrito nada en mi teléfono. 5- Ignoro si el sistema es válido para otro dispositivo telefónico. Saludos. |
Cita:
// Saludos |
amigos alguien logro alguna conexion con el codigo hecho por Ooxtocco,yo tbm tengo el mismo problema no logro conectar me tira el mismo error de Alan :(
|
creo que es cuestion de drivers
los moviles necesitan sus drivers y si se puede conectar
|
Se conectan casi siempre por puerto com virtual
segun he mirado los moviles al menos nokia se conecta por un com virtual que se crea al conectarlo con sus drivers.asi lo he conectado yo:
procedure TForm1.Button5Click(Sender: TObject); begin IF Marcar('COM2',edit3.Text) then begin showmessage('llamando'); end else begin showmessage('no llama'); end; end; function Marcar(Puerto: String; Telefono: String): Boolean; var hPort: THandle; DCB: TDCB; Comando: String; Escritos: Cardinal; begin Result:= FALSE; Puerto:= Uppercase(Puerto); // Cambiar esto si es necesario un puerto diferente if (Puerto<>'COM1') and (Puerto<>'COM2') then begin showmessage('puerto no valido comprobar panel de control'); exit; end; hPort:= CreateFile(PChar('\\.\'+Puerto), GENERIC_READ or GENERIC_WRITE,0, nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); if hPort<>INVALID_HANDLE_VALUE then begin DCB.DCBlength:= sizeof(DCB); if GetCommState(hPort,DCB) then begin // Cambiar esto para una configuracion del puerto diferente with DCB do begin BaudRate := CBR_9600; ByteSize := 8; Parity := NOPARITY; StopBits := ONESTOPBIT; Flags := $01; end; if SetCommState(hPort, DCB) then begin PurgeComm(hPort, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR); Comando:= 'ATD'+Telefono+#13; Result := WriteFile(hPort, PChar(Comando)^, Length(Comando), Escritos, nil); end; end; CloseHandle(hPort); end else begin showmessage('no conetado'); end; end; en text3 va el numero de telefono amarcar lo que si me faltan son mas comandos at |
Recuerda poner los tags al código fuente, ejemplo:
Gracias :) |
mil perdones
lo siento no me di cuenta
|
La franja horaria es GMT +2. Ahora son las 15:57:11. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi