|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 19, 2004 17:09:56 Asterix Спасибо за отклик, но мы тут с многоуважаемым Quantum-умом уже пришли к тому, что(точнее он дал понять что смысла нету на данном этапе) этот листинг транслировать. Сейчас глобально стоит один вопрос - как узнать какой чип стоит в девайсе и держит ли он BREW. Вот такие задачки для детей "дошкольного" возраста :о) |
|
|
Дата: Апр 19, 2004 19:43:28 Stenton А в меню у меня полно всякого хлама (половина на корейском) Так вот оно что! К сожалению, в стране, где я сейчас проживаю, нет в продаже телефонов этой марки. Поэтому, я не могу установить факт поддержки Brew через местные каналы. Единственное, что могу посоветовать, так это обратиться к оператору сотовой связи с конкретным вопросом: "Как скачивать/устанавливать Brew-приложения на данный телефон?". Они должны знать, т.к. это их бизнес, так сказать. |
|
|
Дата: Апр 20, 2004 17:50:30 · Поправил: Stenton Многоуважаемый Quantum! Если бы все было так просто... На самом деле в москве стандарт CDMA охвачен двумя компаниями, одна из них СОНЕТ, к которой я и подключен... И на вопрос, поддерживает ли аппарат, который я у них купил, систему BREW, мне в ответ сказали (внимание!)- "А что это???" Я смеялся сквозь слезы... Отсюда вывод, делать и искать информацию самому... Благо что люди добрые на свете есть... кто чем помогают. В итоге как нибудь, но все же сделаю я нормальный менеджер данных для этого аппарата. К стати, мне тут подсказали, что в Скаях используют msm5500 (по непроверенным данным) |
|
|
Дата: Апр 20, 2004 20:55:01 Stenton И на вопрос, поддерживает ли аппарат, который я у них купил, систему BREW, мне в ответ сказали (внимание!)- "А что это???" Это для меня новость! Пару недель назад я имел возможность беседовать с представителем Qualcomm (приезжал к нам читать конференции, продвигать Brew и т.д.) и сразу спросил у него о ситуации на рынке СНГ. Так вот, он заверил, что Brew активно поддерживается операторами сотовой связи в России. Я веду к тому, что в конечном счёте для установки Вашей программы на телефон Вам всё равно необходимо будет содействие со стороны Сонета. Устанавливать программы через драйвер можно только на test-enabled телефонах, а Ваш телефон к таковым вряд ли относится. Кстати, чипсеты Qualcomm имеют аппаратную защиту от "несанкционированной" установки программ. Так что не теряйте зря время пытаясь проникнуть в систему через ИК порт. В такой ситуации о Brew можно забыть. Кстати, может этот телефон поддерживает другие платформы программирования: Java, (Sony имеет какой-то свой язык), ... Вы не спросили в Сонете? |
|
|
Дата: Апр 21, 2004 13:44:14 Quantum А я не хочу устанавливать софт в телефон.... Мы ж люди скромные... Мне бы добраться до записной книги, фотографий, музыки и видео. Получить возможность енто дело синхронизировать, закачивать в тело МП3 и на ентом можно успокоиться. вот. п.с. Ну может быть еще к настройкам (елементарным) телефона получить доступ (как в ихнем-корейском менеджере) |
|
|
Дата: Апр 23, 2004 12:17:45 · Поправил: Stenton Я придумал, точнее меня навели на идею, спасибо добрым людям (обогрели, обобрали...)! По порядку надо просто делать следующие вещи: 1.сбор информации о портах (сом, ирда) в системе) 2.поиск устройства (интересно, как можно определить что устройство с инфракрасником находится в зоне приема?) 3.опрос устройства (тут сложнее, но у меня ж есть старая корейская прога, которая это делала... может ее попробовать "разобрать"???) Кто мне подсобит по такому раскладу? (С меня пивас!) п.с. Поздравил бы хоть кто... я стал Воином Дзена |
|
|
Дата: Апр 23, 2004 19:38:15 Stenton Не уверен, что такой подход к чему-то приведёт, но попробовать стоит. 1.сбор информации о портах (сом, ирда) в системе) Эти порты именуются "COMn", где n = 1,2,3,4,... Можно просто открывать их все по порядку через CreateFile и, если порт открывается (т.е. не возвращает INVALID_HANDLE_VALUE), то данный порт можно использовать. Пример: .DATA
szCOM1 db "COM1",0
.CODE
; . . .
invoke CreateFile,OFFSET szCOM1,\
GENERIC_READ or GENERIC_WRITE,\
0,0,OPEN_EXISTING,0,0
test eax,eax
js @error ; eax == INVALID_HANDLE_VALUE
invoke CloseHandle,eax
Если Вы хотите установить, что найденный порт является именно контроллером IrDA, а не мышью, модемом и т.д., то можно попробовать (сначала через HyperTerminal, а потом уже в своей программе) посылать в открытый порт AT-команду для идентификации устройства. IMHO, проще показать пользователю листинг со всеми доступными портами и пусть он сам ищет свой IrDA. 2.поиск устройства (интересно, как можно определить что устройство с инфракрасником находится в зоне приема?) Элементарно :-) Отправить ему какое-то сообщение (вроде AT0) и, если устройство не ответит, то его нет в зоне приёма. 3.опрос устройства (тут сложнее, но у меня ж есть старая корейская прога, которая это делала... может ее попробовать "разобрать"???) Перед тем как разобрать, стоит попробовать воспользоваться прогой PortMon. Данная утилита следит за комуникационными портами и помогает понять протокол. Работает, вроде, только на NT. ЗЫ: Прошу прощения за длительное отсутствие. |
|
|
Дата: Апр 26, 2004 13:59:45 · Поправил: Stenton Quantum Очень рад слышать Вас!!! Спасибо за код, сейчас попробую сделать список портов и отпишу как у меня это вышло (и вышло ли... :о) ). А этот код, если я правильно понял позволяет опросить один 1ый порт. а дальше мне нужно поменять "n"+1 ? И как мне считать, точнее откуда, название порта и его номер, для того чтобы добавить их в список? И еще, это же циклическая операция, т.е. когда я обращаюсь к этой строке "invoke CreateFile,OFFSET szCOM1..." то код начинает перебирать порты до тех пор, пока не выскочит первая ошибка? правильно я мыслю? "воспользоваться прогой PortMon" - это чудо Виндовское? т.е. с ХР идет? или просто сервисная программка кем-то написанная? просто что-то я ее не нашел у себя... "Отправить ему какое-то сообщение (вроде AT0)" - так это придется постоянно делать, пока работает программа? Я таким макаром систему не буду нагружать? п.с. Quantum, я очень извиняюсь за возможно глупые вопросы и (или) ответы, но все это может быть только в силу того, что язык Ассемблера я знаю очень слабо (когда то ковырялся, будучи в школе). Но другие языки мне не интересны, потому и решился "вернуться к первоистоку". Еще раз спасибо за понимание! по состоянию на 18-27 - Portmon найден в архиве и порты просканены! Лог выложить? у меня уже есть некоторые догадки относительно того, как попасть в ту или иную папку в телефоне. Ночью сегодня проверю, отпишу. |
|
|
Дата: Апр 27, 2004 02:19:45 Stenton а дальше мне нужно поменять "n"+1 ? Можно так: .DATA
szPortN db "COM"
nPortN db '1'
db 0Сначала будет COM1. Потом можно сделать inc nPortN и получится COM2 и т.д. Можно "менее оптимально" захардкодить:
szCOM1 db "COM1",0 szCOM2 db "COM2",0 szCOM3 db "COM3",0 szCOM4 db "COM4",0И опрашивать их по очереди. Кол-во com-портов в системе ограничено четырьмя. так это придется постоянно делать, пока работает программа? Я таким макаром систему не буду нагружать? Мышиный драйвер постоянно работает с портом и ничего :-) А зачем, кстати, постоянно следить за устройством? Если оно вдруг отсоединится, то API об этом само оповестит. |
|
|
Дата: Апр 27, 2004 20:16:52 · Поправил: Stenton Quantum Я видимо туп не по годам :о(, но что то ничего у меня не вышло... Вот что пишу:
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
include shell32.inc
include comctl32.inc
include comdlg32.inc
includelib user32.lib
includelib kernel32.lib
includelib shell32.lib
includelib comctl32.lib
includelib comdlg32.lib
;WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
;MainDlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
MainDlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM
AboutProc PROTO :HWND,:UINT,:WPARAM,:LPARAM
;PushButton PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
;StatusBar PROTO :DWORD
;DoToolBar PROTO :DWORD
ComListProc PROTO :DWORD
.const
IDI_MAINICON equ 100
MainDialog equ 10
IDC_REB1 equ 1001
IDC_SBR1 equ 1002
IDC_LST1 equ 1003
IDC_BTN_SCAN equ 1004
IDC_TBR1 equ 1005
IDC_PGB1 equ 1006
IDC_BTN_ABOUT equ 1007
IDC_CBO1 equ 1008
AboutDialog equ 20
IDC_STC1 equ 2001
IDC_IMG1 equ 2002
IDC_OK equ 2003
ToolBar equ 500
IDC_TBB_CONNECT equ 510
IDC_TBB_DISCONNECT equ 520
IDC_TBB_EXIT equ 530
IDC_TBB_DEVPROP equ 540
IDC_TBB_PROGPROP equ 550
tbrbtns TBBUTTON <0,IDC_TBB_CONNECT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0>
TBBUTTON <1,IDC_TBB_DISCONNECT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0>
TBBUTTON <0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0>
TBBUTTON <2,IDC_TBB_EXIT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0>
TBBUTTON <3,IDC_TBB_DEVPROP,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0>
TBBUTTON <4,IDC_TBB_PROGPROP,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0>
ntbrbtns equ 6
MainMenu equ 10000
IDM_FILE_EXIT equ 10001
IDM_VIEWSBR equ 10003
IDM_DEVPROP equ 10004
IDM_HELP_ABOUT equ 10101
.data
szPortN db "COM"
NextPortN db '1'
db 0
szToolBarClass db 'ToolbarWindow32',0
;szClassName db 'DLGCLASS',0
;hMenu db 'MainMenu',0
;DlgName db 'MainDialog',0
;DlgAbout db 'IDD_DLGABOUT',0
AppName db 'SMM',0
AboutMsg db 'SMM',13,10,'Please No Cry © Stenton, 2004',0
;hStatus dd 0
hIcon dd 100
lpfnWndProc dd 0
.data?
;hToolBar dd ?
hWnd dd ?
hInstance HINSTANCE ?
CommandLine LPSTR ?
hMenu dd ?
icex INITCOMMONCONTROLSEX <?>
szText MACRO Name, Text:VARARG
LOCAL lbl
jmp lbl
Name db Text,0
lbl:
ENDM
m2m MACRO M1, M2
push M2
pop M1
ENDM
return MACRO arg
mov eax, arg
ret
ENDM
CheckMenu MACRO hMenu, Chek_Unchek, IDMenu
IRP ID, <IDMenu>
invoke CheckMenuItem, hMenu, ID,Chek_Unchek or MF_BYCOMMAND
ENDM
ENDM
;-------------------------------------------------
.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke InitCommonControls
mov icex.dwSize,sizeof INITCOMMONCONTROLSEX ;prepare common control structure
mov icex.dwICC,ICC_COOL_CLASSES
invoke InitCommonControlsEx,addr icex
invoke DialogBoxParam,hInstance,MainDialog,NULL,addr MainDlgProc,NULL
invoke ExitProcess,0
DoToolBar proc hToolBar:HWND
LOCAL tbab:TBADDBITMAP
;Set toolbar struct size
invoke SendMessage,hToolBar,TB_BUTTONSTRUCTSIZE,sizeof TBBUTTON,0
;Set toolbar bitmap
push HINST_COMMCTRL
pop tbab.hInst
mov tbab.nID,IDB_STD_SMALL_COLOR
invoke SendMessage,hToolBar,TB_ADDBITMAP,15,addr tbab
;Set toolbar buttons
invoke SendMessage,hToolBar,TB_ADDBUTTONS,ntbrbtns,addr tbrbtns
mov eax,hToolBar
ret
DoToolBar endp
MainDlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL rbbi:REBARBANDINFO
LOCAL hReb:HWND
LOCAL rect:RECT
LOCAL rect1:RECT
mov eax,uMsg
.if eax==WM_INITDIALOG
push hWin
pop hWnd
invoke ShowWindow,hWin,SW_MINIMIZE ; pop up effect
invoke LoadIcon,hInstance,IDI_MAINICON ; set application icon
mov hIcon,eax ; and store it's handle
invoke SendMessage,hWin,WM_SETICON,1,hIcon ; show the icon
invoke ShowWindow,hWin,SW_SHOWNORMAL ; show the final dialog
;çàïèñûâàåì äîñòóïíûå ïîðòû â ñïèñîê
invoke GetDlgItem,hWin,IDC_LST1
invoke SendDlgItemMessage,hWin,IDC_LST1,LB_ADDSTRING,0,addr szPortN
invoke SendDlgItemMessage,hWin,IDC_LST1,LB_ADDSTRING,0,addr ComListProc
;invoke SendDlgItemMessage,hWin,IDC_LST1,WM_SETREDRAW,0,0
invoke GetDlgItem,hWin,IDC_TBR1
invoke DoToolBar,eax
invoke GetDlgItem,hWin,IDC_REB1
mov hReb,eax
mov rbbi.cbSize,sizeof REBARBANDINFO
mov rbbi.fMask,RBBIM_STYLE or RBBIM_CHILD or RBBIM_SIZE or RBBIM_CHILDSIZE
mov rbbi.fStyle,RBBS_GRIPPERALWAYS or RBBS_CHILDEDGE
mov rbbi.hwndChild,eax
invoke GetDlgItem,hWin,IDC_TBR1
mov rbbi.hwndChild,eax
mov rbbi.lx,290
mov rbbi.cxMinChild,290
mov rbbi.cyMinChild,22
invoke SendMessage,hReb,RB_INSERTBAND,0,addr rbbi
invoke GetDlgItem,hWin,IDC_CBO1
mov rbbi.hwndChild,eax
mov rbbi.lx,80
mov rbbi.cxMinChild,80
mov rbbi.cyMinChild,22
invoke SendMessage,hReb,RB_INSERTBAND,1,addr rbbi
.elseif eax==WM_COMMAND
mov eax,wParam
mov edx,eax
shr edx,16
;movzx eax,ax
and eax,0FFFFh
.if eax==IDM_FILE_EXIT
invoke SendMessage,hWin,WM_CLOSE,NULL,NULL
.elseif eax==IDM_DEVPROP
.elseif eax==IDM_VIEWSBR
;CheckMenu hMenu, MF_UNCHECKED, <10003>
;CheckMenu hMenu, MF_CHECKED, <wParam>
.elseif eax==IDM_HELP_ABOUT
invoke ShellAbout,hWin,addr AppName,addr AboutMsg,NULL
.endif
.if edx==BN_CLICKED
.if eax==IDC_TBB_CONNECT
invoke SendMessage,hWin,WM_CLOSE,NULL,NULL
.elseif eax==IDC_BTN_SCAN
invoke SendMessage,hWin,WM_CLOSE,NULL,NULL
.elseif eax==IDC_BTN_ABOUT
szText abouttext,"About"
invoke SendDlgItemMessage,hWin,IDC_SBR1,SB_SETTEXT,0,offset abouttext
invoke CreateDialogParam,hInstance,AboutDialog,0,addr AboutProc,0
.endif
.endif
;.elseif eax==WM_NOTIFY
; mov eax,lParam
; .if [eax].NMHDR.code==RBN_HEIGHTCHANGE
; invoke SendMessage,hWin,WM_SIZE,0,0
; .endif
.elseif eax==WM_SIZE
invoke GetClientRect,hWin,addr rect1
;Size rebar
invoke GetDlgItem,hWin,IDC_TBR1
mov hReb,eax
invoke GetClientRect,hReb,addr rect
invoke MoveWindow,hReb,0,2,rect1.right,rect.bottom,TRUE
;Size button
invoke GetDlgItem,hWin,4
mov ecx,rect1.right
sub ecx,88+4
mov edx,rect1.bottom
sub edx,22+4
invoke MoveWindow,eax,ecx,edx,88,22,TRUE
;Size statusbar
invoke GetDlgItem,hWin,IDC_SBR1
mov hReb,eax
invoke GetClientRect,hReb,addr rect1
invoke MoveWindow,hReb,0,2,rect1.right,rect.bottom,TRUE
;.elseif eax==IDM_VIEWSBR
;CheckMenu hMenu, MF_UNCHECKED, <10003>
;CheckMenu hMenu, MF_CHECKED, <wParam>
; .endif
; .elseif eax==WM_SIZE
; invoke GetClientRect,hWin,addr rect1
;Size rebar
; invoke GetDlgItem,hWin,IDC_REB1
; mov hReb,eax
; invoke GetClientRect,hReb,addr rect
; invoke MoveWindow,hReb,0,2,rect1.right,rect.bottom,TRUE
;invoke GetClientRect,hWin,addr rect1
;
.elseif eax==WM_CLOSE
;invoke ShowWindow,hWin,SW_MINIMIZE
invoke EndDialog,hWin,0
ret
.endif
xor eax,eax
ret
MainDlgProc endp
AboutProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.if uMsg==WM_INITDIALOG
.elseif eax==WM_COMMAND
.if wParam==IDC_OK
invoke EndDialog,hWin,0
jmp dlg_end
.endif
.elseif eax==WM_CLOSE
dlg_end:
invoke EndDialog,hWin,0
.endif
xor eax,eax
ret
AboutProc endp
ComListProc proc hWin:HWND
More:
invoke CreateFile,offset szPortN,GENERIC_READ or GENERIC_WRITE,0,0,OPEN_EXISTING,0,0
test eax,eax
js Error ; eax == INVALID_HANDLE_VALUE
inc NextPortN
jmp More
Error:
invoke CloseHandle,eax
ret
ComListProc endp
end start
И появляется у меня в поле IDC_LST1 только Ком1 и какие то иероглифы и ффффсе! :о( Что я не так сделал? Пойду до дома, расстроился малость...может с пивом получится... |
|
|
Дата: Апр 27, 2004 21:20:23 · Поправил: Quantum И появляется у меня в поле IDC_LST1 только Ком1 и какие то иероглифы и ффффсе! А что следовало ожидать от такого кода? invoke SendDlgItemMessage,hWin,IDC_LST1,LB_ADDSTRING,0,addr szPortN invoke SendDlgItemMessage,hWin,IDC_LST1,LB_ADDSTRING,0,addr ComListProc Сначала в список добавляется szPortN, т.е. строка "COM1". Потом... передаётся указатель на функцию ComListProc вместо указателя на строку. Теперь основное: ComListProc proc hWin:HWND More: invoke CreateFile,offset szPortN,GENERIC_READ or GENERIC_WRITE,0,0,OPEN_EXISTING,0,0 test eax,eax js Error ; eax == INVALID_HANDLE_VALUE inc NextPortN jmp More Error: invoke CloseHandle,eax ret ComListProc endp Факт того, что нельзя открыть COM1 вовсе не значит, что нельзя будет открыть и COM2. Тут не "while" нужен, а "for". Т.е. нужно индивидуально проверить COM1,2,3 и 4. Можно так: ComListProc proc hWin:HWND
@more:
invoke CreateFile,offset szPortN,\
GENERIC_READ or GENERIC_WRITE,0,0,OPEN_EXISTING,0,0
test eax,eax
js skip
invoke CloseHandle,eax
SendDlgItemMessage,hWin,IDC_LST1,LB_ADDSTRING,\
0,OFFSET szPortN
@skip:
inc NextPortN
cmp NextPortN,4
jle @more
ret
ComListProc endp |
|
|
Дата: Апр 30, 2004 13:30:22 Quantum Мне даже стыдно сказать, но не работает у меня этот лист-виев с портами. К стати, когда я подключаю телефон к компу, то портов у меня становится больше... там же модем. Поэтому я сделал 10ть сом-портов. Еще вопрос у меня, а если взять информацию о портах в системе из реестра? Это неверное решение? |
|
|
Дата: Апр 30, 2004 16:24:18 Quantum У меня проблемка в том, что порты не выскакивают все сразу... а приходится опрашивать каждый порт (у меня по нажатию кнопки) и еще, у меня в системе есть 1ый и второй сом-порты, но ко второму подключен Инфракрасный приемник (Текрам какой то там...) и в списке портов у меня 2ой порт не показывается :о(((. Вот листинг того, что работает, но кривенько: это прикручено под нажатие кнопки - invoke ComListProc,hWin,offset szPortN,0,0 сама процеДура - ComListProc proc hWin:HWND,uMsg:DWORD,wParam:WPARAM,lParam:LPARAM .if uMsg==WM_INITDIALOG More: invoke CreateFile,offset szPortN,GENERIC_READ or GENERIC_WRITE,0,0,OPEN_EXISTING,0,0 test eax,eax js Skip invoke CloseHandle,eax invoke SendDlgItemMessage,hWin,IDC_LST1,LB_ADDSTRING,0,addr szPortN Skip: inc NextPortN cmp NextPortN,10 jle More .endif xor eax,eax ret ComListProc endp Да, на всякий случай скажу, это я, Стентон, просто пароль не помню... найду, залогинюсь. И еще, С НАСТУПАЮЩИМИ!!! |
|
|
Дата: Апр 30, 2004 16:38:23 Quantum вопрос решился (не без помощи пива)... я повторил строку: invoke ComListProc,hWin,offset szPortN,0,010ть раз и все порты засияли в списке :о)) |
|
|
Дата: Апр 30, 2004 17:43:50 Понял! Там вместо 10 нужно задать '10', т.е. так: cmp NextPortN,'10' Это моя ошибка :-( |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.169 |