|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 13, 2004 09:51:44 Люди! Помогите глупцу! Вопрос скорее всего тупой, но все же... Есть мобильный телефон стандарта CDMA с ИК-портом и есть комп, с девайсом типа Текрам210В (тот, что на Com-порт вешается). Винда видит телефон. Так вот как бы мне так извратиться и получить данные из этого телефона???? Я точно знаю какие файлы и какая информация (пользовательская) в сабже есть, но я не знаю как до нее добраться :о(( Может кто имеет опыт "сканирования" аналогичных девайсов на наличие данных, кто-то может дровишки писал, может еще что... Или где можно почитать по теме....??? Спасибо заранее всем! |
|
|
Дата: Апр 14, 2004 00:18:43 Stenton кто-то может дровишки писал Если идея с дровишками вообще реализуема, то эти дровишки должны существовать на сайте производителя или на CD с toolkit (или как его там?), поставляемым вместе с телефоном. Я бы советовал написать программу для этого телефона (какие языки поддерживаются?) чтоб брала нужные файлы и посылала их через ИК. ЗЫ: CDMA тут не причём. |
|
|
Дата: Апр 14, 2004 08:46:19 Quantum Огромной спасибо, что хоть кто-то откликнулся!!! Теперь к сабжу... Телефон корейский - Sky IM-7200 (Вот их сайт: и там есть менеджер для этого телефона, но! Первое - он корейский, второе - кривой до зопы. Третье - он сам по себе не работает с телефоном а только через дровишки одного немецкого парня...Jan Kiszka) Вот сайт с дровишками: [url=]http://www.ircomm2k.de/ (по сути это виртуальный СОМ-порт, точнее создает мост СОМ-IrDa). "Я бы советовал написать программу для этого телефона (какие языки поддерживаются?) чтоб брала нужные файлы и посылала их через ИК." - Вот в том то и дело, что пишу.... По крайней мере пытаюсь... и пока безуспешно :о( Если бы я знал по как добраться до данных в ентом аппарате - все было бы хоть немного проще. Да, еще одно - вчера я одной програмкой посмотрел что идет через IrComm в момент подключения тел. к менеджеру, и вот что увидел (лог прилагаю). При этом обмена данными не произошло... он просто не законнектился :о( Может есть шансы как то соединить сабж с компом? _576412965__sky.LOG |
|
|
Дата: Апр 14, 2004 08:49:05 Извиняюсь за мусор... Вот нормальные ссылки: это сайт производителя тел.: http://www.skteletech.co.kr/customersupport/datamanager/data01.asp а это сайт кодера дровишек: http://www.ircomm2k.de/ |
|
|
Дата: Апр 14, 2004 09:11:21 Stenton А что делает тот корейский драйвер? Это для использования телефона в качестве беспроводного модема? Если бы я знал по как добраться до данных в ентом аппарате - все было бы хоть немного проще. Данные через порт просто так не увидишь, эти данные должен кто-то послать "из телефона". Поэтому я и советовал узнать на какой платформе программируется девайс (Brew, J2ME) и написать прогу для последующей прошивки телефона. |
|
|
Дата: Апр 14, 2004 17:35:27 Quantum А корейский драйвер - это не драйвер, это прога такая, для синхронизации данных в компе и тел. Да, к стати, у меня был аналогичный телефон, только моделька постарее (IM-6100), так вот к нему была прога, BREW. Я ее дето в сети нарыл. А еще есть прога, GAGIN называется. Так вот через нее я даже видел некоторые папки в старом телефоне, но ничего с ними сделать не мог. Может это и есть ответ на все мои вопросы? :о) Могу сделать лог попытки соединения через этот BREW-Loader. Сделать? |
|
|
Дата: Апр 14, 2004 21:44:34 Stenton Brew - это не прога, а платформа на базе ARM, поддерживаемая многими телефонами на чипсетах от Qualcomm. Если предыдущая модель телефона была Brew-enabled (об этом написано на сайте производителя), то и новая модель теоретически должна поддерживать Brew, хотя... Вышеупомянутая вами прога скорее всего является частью Brew SDK (название самой проги не помню и SDK у меня установлен на другой машине) и предназначена для установки/удаления программ/обоев/ringtones на телефоне. Данная утилита вполне может Вам помочь, но не обольщайтесь! :-) AFAIK, она не даёт скачать контент с телефонов, которые не являются "test-enabled", а к таковым относятся практически ВСЕ телефоны доступные в розничной продаже. Так вот через нее я даже видел некоторые папки в старом телефоне, но ничего с ними сделать не мог. Ага, у меня тоже такое было с одним T720i, который не был "test-enabled". Сделать? Если телефон вообще поддерживает Brew, то стоит попробовать и в случае успеха сходить на форум по Brew (url не помню) - там много экспертов по данной теме. |
|
|
Дата: Апр 15, 2004 18:59:38 Quantum я сегодня бегал по сети в поисках хоть какого нибудь подтверждения того, что у меня аппарат построен на базе чита от Qualcomm, но так и не нашел :о( Потом пытался "урвать" Brew SDK с оффсайта, тоже не вышло... Пароль себе получил, но так и не проинсталлировал. Видать слишком много "стен" по дороге ко мне админы поставили или голова уже совсем не варила. По большому счету я могу выслать на мыльце эту прогу (о которой я говорил - GAGIN), только вот не коннектится у меня через нее тел. к компу :о(( Даже и не знаю что делать... |
|
|
Дата: Апр 15, 2004 19:15:52 Quantum у меня еще один вопросик родился, вот листинг: unit WIrCOMMSocket;
interface
uses
Windows,
WinSock,
WSocket,
Classes;
const
{ Imports from AF_IRDA.H }
//: IrDA protocol number
AF_IRDA = 26;
PF_IRDA = AF_IRDA;
SOL_IRLMP = $00FF;
IRLMP_ENUMDEVICES = $00000010;
IRLMP_IAS_SET = $00000011;
IRLMP_IAS_QUERY = $00000012;
IRLMP_SEND_PDU_LEN = $00000013;
IRLMP_EXCLUSIVE_MODE = $00000014;
IRLMP_IRLPT_MODE = $00000015;
IRLMP_9WIRE_MODE = $00000016;
IRLMP_TINYTP_MODE = $00000017;
IRLMP_PARAMETERS = $00000018;
IRLMP_DISCOVERY_MODE = $00000019;
IAS_ATTRIB_NO_CLASS = $00000010;
IAS_ATTRIB_NO_ATTRIB = $00000000;
IAS_ATTRIB_INT = $00000001;
IAS_ATTRIB_OCTETSEQ = $00000002;
IAS_ATTRIB_STR = $00000003;
IAS_MAX_USER_STRING = 256;
IAS_MAX_OCTET_STRING = 1024;
IAS_MAX_CLASSNAME = 64;
IAS_MAX_ATTRIBNAME = 256;
type
//:IrDA device ID. Should be treated as four characters, not as PChar.
TIrdaDeviceID = array [1..4] of char;
//:Socket-level IrDA device 'address' descriptor.
TIrdaSockAddr = packed record
irdaAddressFamily: u_short;
irdaDeviceID : TIrdaDeviceID;
irdaServiceName : array [0..24] of char;
end; { TIrdaSockAddr }
//:Information on one IrDA device.
TIrdaDeviceInfo = packed record
irdaDeviceID : TIrdaDeviceID;
irdaDeviceName : array [0..21] of char;
irdaDeviceHints1: byte;
irdaDeviceHints2: byte;
irdaCharSet : byte;
end; { TIrdaDeviceInfo }
PIrdaDeviceInfo = ^TIrdaDeviceInfo;
TIrdaAttribOctetSeq = packed record
len : longint;
octetSeq: array [0..IAS_MAX_OCTET_STRING-1] of byte;
end; { TIrdaAttribOctetSeq }
TIrdaAttribUsrStr = packed record
len : longint;
charSet: longint;
usrStr : array [0..IAS_MAX_USER_STRING] of char;
end; { TIrdaAttribUsrStr }
//:IAS query
TIrdaIASQuery = packed record
irdaDeviceID : TIrdaDeviceID;
irdaClassName : array [0..IAS_MAX_CLASSNAME-1] of char;
irdaAttribName: array [0..IAS_MAX_ATTRIBNAME-1] of char;
irdaAttribType: longint;
case integer of // irdaAttribute
0: (irdaAttribInt: longint);
1: (irdaAttribOctetSeq: TIrdaAttribOctetSeq);
2: (irdaAttribUsrStr: TIrdaAttribUsrStr);
end; { TIrdaIASQuery }
PIrdaIASQuery = ^TIrdaIASQuery;
{ WIrCOMMSocket classes }
{:Information on all connected IrDA devices, returned from
TWIrCOMMSocket.GetConnectedDevices.
}
TIrdaDevicesInfo = class
private
idiDeviceList: TList;
protected
procedure AddDeviceInfo(di: TIrdaDeviceInfo); virtual;
function GetDeviceInfo(index: integer): TIrdaDeviceInfo; virtual;
public
constructor Create;
destructor Destroy; override;
function Count: integer;
property Items[index: integer]: TIrdaDeviceInfo read GetDeviceInfo; default;
end; { TIrdaDevicesInfo }
{:IrCOMM over WinSock - currently only supports client side in 9 Wire mode
(because Windows 2000 supports 9 Wire mode only).
}
TWIrCOMMSocket = class(TCustomSyncWSocket)
protected
procedure AssignDefaultValue; override;
function InitializeSocket: boolean; virtual;
function Set9WireMode: boolean; virtual;
public
irDeviceID: TIrdaDeviceID;
procedure Connect; override;
function GetConnectedDevices: TIrdaDevicesInfo;
property Handle;
property HSocket;
property BufSize;
property Text;
property AllSent;
property OnDisplay;
property DeviceID: TIrdaDeviceID read irDeviceID write irDeviceID;
published
property State;
property ReadCount;
property RcvdCount;
property LastError;
property MultiThreaded;
property ComponentOptions;
property OnDataAvailable;
property OnDataSent;
property OnSendData;
property OnSessionClosed;
property OnSessionAvailable;
property OnSessionConnected;
property OnChangeState;
property OnLineTooLong;
property OnError;
property OnBgException;
property FlushTimeout;
property SendFlags;
property LingerOnOff;
property LingerTimeout;
end; { TWIrCOMMSocket }
{IrDA helper functions}
function IrdaIDToString(id: TIrdaDeviceID): string;
function StringToIrDAID(id: string): TIrdaDeviceID;
{Component registration}
procedure Register;
implementation
uses
SysUtils;
{:Component registration.
}
procedure Register;
begin
RegisterComponents('FPiette', [TWIrCOMMSocket]);
end; { Register }
{:Converts IrDA ID to textual representation.
}
function IrdaIDToString(id: TIrdaDeviceID): string;
function GetLastNonzero: integer;
var
iCh: integer;
begin
Result := Low(id)-1;
for iCh := High(id) downto Low(id) do begin
if id[iCh] <> #0 then begin
Result := iCh;
break;
end;
end; //for
end; { GetLastNonzero }
var
hiCh: integer;
iCh : integer;
begin { IrdaIDToString }
Result := '';
hiCh := GetLastNonzero;
for iCh := Low(id) to hiCh do begin
if id[iCh] in ([#33..#126]-['#']) then
Result := Result + id[iCh]
else
Result := Result + '#' + Format('%.3d',[Ord(id[iCh])]);
end; //for
end; { IrdaIDToString }
{:Converts textual representation of IrDA ID back to TIrdaDeviceID.
}
function StringToIrDAID(id: string): TIrdaDeviceID;
function ExtractChar: char;
begin
if id = '' then
Result := #0
else if id[1] <> '#' then begin
Result := id[1];
Delete(id,1,1);
end
else begin
Result := Chr(StrToIntDef(Copy(id,2,3),0));
Delete(id,1,4);
end;
end; { ExtractChar }
var
iCh: integer;
begin { StringToIrDAID }
for iCh := Low(TIrdaDeviceID) to High(TIrdaDeviceID) do
Result[iCh] := ExtractChar;
end; { StringToIrDAID }
{ TIrdaDevicesInfo }
type
//:Wrapper for IrDA device info record.
TIrdaDeviceWrapper = class
idwInfo: TIrdaDeviceInfo;
end; { TIrdaDeviceWrapper }
{:Adds device info to the list.
}
procedure TIrdaDevicesInfo.AddDeviceInfo(di: TIrdaDeviceInfo);
begin
idiDeviceList.Add(TIrdaDeviceWrapper.Create);
TIrdaDeviceWrapper(idiDeviceList[idiDeviceList.Count-1]).idwInfo := di;
end; { TIrdaDevicesInfo.AddDeviceInfo }
{:Returns number of devices in list.
}
function TIrdaDevicesInfo.Count: integer;
begin
Result := idiDeviceList.Count;
end; { TIrdaDevicesInfo.Count }
{:TIrdaDeviceInfo constructor. Creates internal storage.
}
constructor TIrdaDevicesInfo.Create;
begin
inherited Create;
idiDeviceList := TList.Create;
end; { TIrdaDevicesInfo.Create }
{:TIrdaDeviceInfo destructor. Cleanup.
}
destructor TIrdaDevicesInfo.Destroy;
var
iDev: integer;
begin
for iDev := 0 to idiDeviceList.Count-1 do begin
TIrdaDeviceWrapper(idiDeviceList[iDev]).Free;
idiDeviceList[iDev] := nil;
end;
idiDeviceList.Free;
inherited Destroy;
end; { TIrdaDevicesInfo.Destroy }
{:Returns index-th device info.
}
function TIrdaDevicesInfo.GetDeviceInfo(index: integer): TIrdaDeviceInfo;
begin
Result := TIrdaDeviceWrapper(idiDeviceList[index]).idwInfo;
end; { TIrdaDevicesInfo.GetDeviceInfo }
{ TWIrCOMMSocket }
{:Assigns default socket values for IrDA communication.
}
procedure TWIrCOMMSocket.AssignDefaultValue;
begin
inherited AssignDefaultValue;
FAddrFormat := PF_IRDA;
end; { TWIrCOMMSocket.AssignDefaultValue }
{:Connects to IrCOMM device.
}
procedure TWIrCommSocket.Connect;
var
iStatus: integer;
sin : TIrdaSockAddr;
begin
if (FHSocket <> INVALID_SOCKET) and (FState <> wsClosed) then begin
RaiseException('Connect: Socket already in use');
Exit;
end;
if not InitializeSocket then
Exit;
sin.irdaAddressFamily := AF_IRDA;
sin.irdaDeviceID := DeviceID;
sin.irdaServiceName := 'IrDA:IrCOMM';
iStatus := WSocket_connect(FHSocket, TSockAddr((@sin)^), sizeof(sin));
if iStatus = 0 then
ChangeState(wsConnected)
else begin
iStatus := WSocket_WSAGetLastError;
if iStatus = WSAEWOULDBLOCK then
ChangeState(wsConnecting)
else begin
SocketError('Connect');
Exit;
end;
end;
end; { TWIrCommSocket.Connect }
{:Returns list of connected IrDA devices. List is created inside this routine
and must be destroyed by the caller.
Mostly copied from MSDN (IrDA: Background and Overview;
http://msdn.microsoft.com/library/backgrnd/html/irdawp.htm).
}
function TWIrCOMMSocket.GetConnectedDevices: TIrdaDevicesInfo;
// TODO 2 -oPrimoz Gabrijelcic: Implement lazy discovery (http://www.cswl.com/cswl/whiteppr/white/infrared.html)
const
IAS_QUERY_ATTRIB_MAX_LEN = 32;
var
IASQueryBuf: PIrdaIASQuery;
IASQueryLen: integer;
{:Checks if device supports 9 Wire protocol.
@param dev IrDA device.
@returns True if device supports 9 Wire protocol.
}
function Supports9Wire(dev: PIrdaDeviceInfo): boolean;
var
PI, PL, PV: integer;
begin
Result := false;
IASQueryBuf^.irdaDeviceID := dev^.irdaDeviceID;
IASQueryBuf^.irdaClassName := 'IrDA:IrCOMM';
IASQueryBuf^.irdaAttribName := 'Parameters';
if WSocket_getsockopt(FHSocket, SOL_IRLMP, IRLMP_IAS_QUERY,
PChar(IASQueryBuf), IASQueryLen) = SOCKET_ERROR then
begin
SocketError('Supports9Wire');
Exit;
end;
if IASQueryBuf^.irdaAttribType <> IAS_ATTRIB_OCTETSEQ then
Exit; // Peer's IAS database entry for IrCOMM is bad.
if IASQueryBuf^.irdaAttribOctetSeq.len < 3 then
Exit; // Peer's IAS database entry for IrCOMM is bad.
// Search for the PI value 0x00 and check 9 Wire, see IrCOMM spec.
PI := 0;
PL := PI + 1;
PV := PL + 1;
repeat
if (IASQueryBuf^.irdaAttribOctetSeq.OctetSeq[PI] = 0) and
((IASQueryBuf^.irdaAttribOctetSeq.OctetSeq[PV] AND $04) <> 0) then begin
Result := true;
break; //repeat
end;
if (PL + IASQueryBuf^.irdaAttribOctetSeq.OctetSeq[PL]) >=
IASQueryBuf.irdaAttribOctetSeq.Len then
break; //repeat
PI := PL + IASQueryBuf.irdaAttribOctetSeq.OctetSeq[PL];
PL := PI + 1;
PV := PL + 1;
until false;
end; { Supports9Wire }
var
deviceListBuf : pointer;
deviceListLen : integer;
iDevice : integer;
maxDevices : integer;
mustCloseSocket: boolean;
pDevice : PIrdaDeviceInfo;
begin { TWIrCOMMSocket.GetConnectedDevices }
Result := nil;
if FHSocket = INVALID_SOCKET then begin
if not InitializeSocket then
Exit
else
mustCloseSocket := true;
end
else
mustCloseSocket := false;
try
deviceListBuf := nil;
maxDevices := 5; // more than 10 irda devices on the same irda receiver? unlikely! but we'll adapt in repeat..until if this happens anyway
try
repeat
maxDevices := 2*maxDevices;
if assigned(deviceListBuf) then
FreeMem(deviceListBuf);
//deviceListBuf^ = record
// numDevices: longint
// deviceData: array [] of TIrdaDeviceInfo
deviceListLen := SizeOf(longint)+maxDevices*SizeOf(TIrdaDeviceInfo);
GetMem(deviceListBuf,deviceListLen);
longint(deviceListBuf^) := 0;
if WSocket_getsockopt(FHSocket, SOL_IRLMP, IRLMP_ENUMDEVICES,
deviceListBuf, deviceListLen) = SOCKET_ERROR then
begin
SocketError('Device enumeration failed');
Exit;
end;
until longint(deviceListBuf^) < maxDevices;
Result := TIrdaDevicesInfo.Create;
pDevice := PIrdaDeviceInfo(integer(deviceListBuf)+SizeOf(longint));
//IASQueryBuf is used in all calls to Supports9Wire
IASQueryLen := SizeOf(TIrdaIASQuery) - 3 + IAS_QUERY_ATTRIB_MAX_LEN;
IASQueryBuf := AllocMem(IASQueryLen);
try
for iDevice := 1 to longint(deviceListBuf^) do begin
if Supports9Wire(pDevice) then // Report only devices supporting 9 wire mode
Result.AddDeviceInfo(pDevice^);
Inc(pDevice);
end; //for
finally FreeMem(IASQueryBuf); end;
finally FreeMem(deviceListBuf); end;
finally
if mustCloseSocket then
Close;
end;
end; { TWIrCOMMSocket.GetConnectedDevices }
{:Initializes IrDA socket and puts it into 9 Wire mode.
}
function TWIrCOMMSocket.InitializeSocket: boolean;
var
iStatus: integer;
begin
Result := false;
FProto := 0;
FType := SOCK_STREAM;
FProtoResolved := true;
{ Remove any data from the internal output buffer }
{ (should already be empty !) }
DeleteBufferedData;
FHSocket := WSocket_socket(FAddrFormat, FType, FProto);
if FHSocket = INVALID_SOCKET then begin
SocketError('Connect (socket)');
Exit;
end;
ChangeState(wsOpened);
if not Set9WireMode then
Exit;
SetLingerOption;
FSelectEvent := FD_READ or FD_WRITE or FD_CLOSE or FD_ACCEPT or FD_CONNECT;
iStatus := WSocket_WSAASyncSelect(FHSocket, Handle, WM_ASYNCSELECT, FSelectEvent);
if iStatus <> 0 then begin
SocketError('WSAAsyncSelect');
Exit;
end;
Result := true;
end; { TWIrCOMMSocket.InitializeSocket }
{:Sets 9 Wire mode for DeviceID device.
@return False on error.
}
function TWIrCOMMSocket.Set9WireMode: boolean;
var
Enable9WireMode: integer;
begin
Result := false;
Enable9WireMode := 1;
if WSocket_setsockopt(FHSocket, SOL_IRLMP, IRLMP_9WIRE_MODE,
@Enable9WireMode, SizeOf(integer)) = SOCKET_ERROR then
begin
SocketError('Set9WireMode');
Exit;
end;
Result := true;
end; { TWIrCOMMSocket.Set9WireMode }
end.
а как он должен и может ли вообще выглядеть на МASMе?? И еще, там подключен ресурс - Imports from AF_IRDA.H Если его нет, то и работать соответственно ничего не будет? |
|
|
Дата: Апр 15, 2004 20:58:12 Stenton я сегодня бегал по сети в поисках хоть какого нибудь подтверждения того, что у меня аппарат построен на базе чита от Qualcomm, но так и не нашел :о( Подавляющее большинство аппаратов построено именно на чипах Qualcomm, но это ещё не значит что все они поддерживают Brew. Потом пытался "урвать" Brew SDK с оффсайта, тоже не вышло... Старые версии SDK можно скачать для офф-лайн инсталляции. а как он должен и может ли вообще выглядеть на МASMе?? Прям сразу и на MASM переделать хотите, даже не проверив, что это вообще будет работать?! Сначала скомпилируйте в вижуале под отладку, а потом уже... Если его нет, то и работать соответственно ничего не будет? Он есть в Platform SDK. |
|
|
Дата: Апр 15, 2004 21:21:28 я сегодня бегал по сети в поисках хоть какого нибудь подтверждения того, что у меня аппарат построен на базе чита от Qualcomm, но так и не нашел Поищите в меню/настройках телефона упоминания Brew, Java и т.д. |
|
|
Дата: Апр 16, 2004 11:59:06 Quantum Да, точно! я уже после того как запостил ответ вчерась, сунулся еще раз на оффсайт и таки качнул архивчик Brew SDK. На счет чипа от Qualcomm - тут дело такое, накопал я прошивку от старенького телефона Скай (5600 вроде). И хотел спросить - можно по прошивке понять какой чип в девайсе и держит ли этот девайс Brew ??? По листингу пока тему опустим... Потому как если будет работать Brew то этот листинг не нужен (мне думается). |
|
|
Дата: Апр 16, 2004 19:41:22 Stenton Проще не в прошивке смотреть, а в самом девайсе, т.к. все Brew-enabled телефоны имеют опцию в меню для скачивания Brew-программ через carrier, т.е. оператора сотовой связи. Или у Вас нет "на руках" самого телефона? |
|
|
Дата: Апр 19, 2004 12:09:05 Quantum Девайс лежит на столе рядом, только вот чем бы его глянуть, "вид из нутри" ??? Вот в чем вопрос. А в меню у меня полно всякого хлама (половина на корейском) и определить по ироглифам функцию скачивания Brew -приложения возможности нету, а в английской части меню такой функции не видно. Опять же, учить корейский мне что то лень :о) |
|
|
Дата: Апр 19, 2004 12:30:57 Stenton Указанный выше листинг на Delphi перевести на masm32 задача практически не выполнимая, проще написать с нуля ;-) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.147 |