· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ELECTRONICS —› Мобильный тел CDMA и IrDA (вопрос)

<< . 1 . 2 . 3 . 4 . >>

Посл.отвђт Сообщен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,0
10ть раз и все порты засияли в списке :о))


Дата: Апр 30, 2004 17:43:50

Понял! Там вместо 10 нужно задать '10', т.е. так:
cmp NextPortN,'10'
Это моя ошибка :-(

<< . 1 . 2 . 3 . 4 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.169