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

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

<< . 1 . 2 . 3 . 4 .

Посл.отвђт Сообщенiе


Дата: Май 7, 2004 14:59:43

Quantum
Я лучше пойду искать рабочие примеры... и инфу собирать... Как получится послать запрос телефону и получить ответ, сразу отпишу!

А про статус - отсутствие тем оформления решают многие вопросы, посему я тоже снес все темы... поставил старый вид окон и все вопросы относительно оформления у меня иссякли! Спасибо опять же!

До связи и с праздниками!


Дата: Май 14, 2004 13:33:53

Мое почтение ффсем заглянувшим "на огонек", а у меня опять заморочки...

Вот код того, что не работает и никак не могу понять почему?
.486
.model flat,stdcall
option casemap:none

include		\masm32\include\shell32.inc
include		\masm32\include\masm32.inc
include		\masm32\include\kernel32.inc
include		\masm32\include\comctl32.inc
include		\masm32\include\comdlg32.inc
include		\masm32\include\user32.inc
include		\masm32\include\gdi32.inc     
include		\masm32\include\windows.inc

includelib	\masm32\lib\masm32.lib
includelib	\masm32\lib\kernel32.lib
includelib	\masm32\lib\user32.lib
includelib	\masm32\lib\gdi32.lib
includelib	\masm32\lib\comctl32.lib
includelib	\masm32\lib\comdlg32.lib
includelib	\masm32\lib\shell32.lib

WinMain				PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc				PROTO :DWORD,:DWORD,:DWORD,:DWORD

.const

IDM_FILE_EXIT		equ 10001
IDM_HELP_ABOUT		equ 10101

.data

	AppName db "ComX Test",0
	comX db 'COM1';,0
	data db 'atz',0
	values db "baud=11500 parity=N data=8 stop=1",0
	CreateProblem db "Не получается создать Handle",0
	InitProblem db "Ошибка при инициализации порта",0
	WriteProblem db "Не получается записать в порт",0
	ReadProblem db "Не получается прочесть из порта",0
	NoProblemz db "Порядок!",0

ClassName			db 'DLGCLASS',0
MenuName			db 'MyMenu',0
DlgName				db 'MyDialog',0
;AppName				db 'Dialog as main',0
AboutMsg			db 'MASM32 Dialog as main',13,10,'Copyright © MASM32 2001',0

.data?

	m_dcb DCB <?>
	m_CommTimeouts COMMTIMEOUTS <?>
	data2 db ?
	hcomm dd ?
	NrOfByte dd ?
	NrOfBytesRead dd ?
	dataPointer dd ?

hInstance			dd ?
CommandLine			dd ?
hWnd				dd ?

.code

start:

	invoke GetModuleHandle,NULL
	mov    hInstance,eax
	invoke GetCommandLine
	invoke InitCommonControls
	invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
	invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
	LOCAL	wc:WNDCLASSEX
	LOCAL	msg:MSG

	mov		wc.cbSize,SIZEOF WNDCLASSEX
	mov		wc.style,CS_HREDRAW or CS_VREDRAW
	mov		wc.lpfnWndProc,OFFSET WndProc
	mov		wc.cbClsExtra,NULL
	mov		wc.cbWndExtra,DLGWINDOWEXTRA
	push	hInst
	pop		wc.hInstance
	mov		wc.hbrBackground,COLOR_BTNFACE+1
	mov		wc.lpszMenuName,OFFSET MenuName
	mov		wc.lpszClassName,OFFSET ClassName
	invoke LoadIcon,NULL,IDI_APPLICATION
	mov		wc.hIcon,eax
	mov		wc.hIconSm,eax
	invoke LoadCursor,NULL,IDC_ARROW
	mov		wc.hCursor,eax
	invoke RegisterClassEx,addr wc
	invoke CreateDialogParam,hInstance,addr DlgName,NULL,addr WndProc,NULL
	invoke ShowWindow,hWnd,SW_SHOWNORMAL
	invoke UpdateWindow,hWnd
	.while TRUE
		invoke GetMessage,addr msg,NULL,0,0
	  .BREAK .if !eax
		invoke TranslateMessage,addr msg
		invoke DispatchMessage,addr msg
	.endw
	mov		eax,msg.wParam
	ret

WinMain endp

WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

	mov		eax,uMsg
	.if eax==WM_INITDIALOG
		push	hWin
		pop		hWnd
	.elseif eax==WM_COMMAND
		mov		eax,wParam
		and		eax,0FFFFh
		.if eax==IDM_FILE_EXIT
			invoke SendMessage,hWin,WM_CLOSE,0,0
		.elseif eax==IDM_HELP_ABOUT
		
			invoke CreateFile,addr comX,GENERIC_READ or GENERIC_WRITE,0,0,OPEN_EXISTING,0,0
	mov hcomm,eax
	.IF eax==INVALID_HANDLE_VALUE
		invoke MessageBox,NULL, addr CreateProblem,addr AppName,MB_OK
		jmp ENDCONNECT
	.ENDIF

	
	invoke GetCommTimeouts, hcomm,ADDR m_CommTimeouts 
	.IF eax==0
			;invoke MessageBox,NULL, addr InitProblem,addr AppName,MB_OK		
	.ENDIF
	invoke SetCommTimeouts, hcomm,ADDR m_CommTimeouts
	.IF eax==0
			;invoke MessageBox,NULL, addr InitProblem,addr AppName,MB_OK		
	.ENDIF

	
		invoke BuildCommDCBAndTimeouts,ADDR values,ADDR m_dcb,ADDR m_CommTimeouts
	.IF eax==0
		jmp problem1		
	.ENDIF
	
	
invoke WriteFile,hcomm,ADDR data,sizeof data,ADDR NrOfByte,NULL
;invoke WriteFile,hcomm,ADDR data,sizeof data,NrOfByte,NULL
.if eax==0
	jmp problem2
.endif
invoke ReadFile,hcomm,ADDR data2,NrOfByte,ADDR NrOfBytesRead,NULL
;invoke ReadFile,hcomm,ADDR data2,NrOfByte,NULL,NULL
.if eax==0
jmp problem3
.endif

	invoke MessageBox,NULL, addr NoProblemz,addr AppName,MB_OK
	jmp ENDCONNECT

problem1:
	invoke MessageBox,NULL, addr InitProblem,addr AppName,MB_OK
	jmp ENDCONNECT
problem2:		
	invoke MessageBox,NULL, addr WriteProblem,addr AppName,MB_OK
	jmp ENDCONNECT
problem3:		
	invoke MessageBox,NULL, addr ReadProblem,addr AppName,MB_OK
	jmp ENDCONNECT

ENDCONNECT:
invoke CloseHandle, hcomm 
invoke  ExitProcess,0

			;invoke ShellAbout,hWin,addr AppName,addr AboutMsg,NULL
		.endif
;	.elseif eax==WM_SIZE
	.elseif eax==WM_CLOSE
		invoke DestroyWindow,hWin
	.elseif uMsg==WM_DESTROY
		invoke PostQuitMessage,NULL
	.else
		invoke DefWindowProc,hWin,uMsg,wParam,lParam
		ret
	.endif
	xor    eax,eax
	ret

WndProc endp

end start


У меня вылетает "Не получается создать Handle", а почему, не знаю :о((


Дата: Май 14, 2004 13:36:09

Да, чуть не забыл, еще при сборке проги пишет вот что:
Make finished.
 Assembling: commmm.asm
\masm32\include\windows.inc(76) : error A2005: symbol redefinition : CHAR


тут я вообще присел :о((


Дата: Май 14, 2004 18:46:09

Со связью разобрался... просто некому ответить было, девайс не был подключен, подключил, прога стала отправлять в порт данные (в моем случае "abcd"), а вот прочитать из порта не получается... т.е. возврат "0 символов".

И еще у меня вопросик к знающим людям, где прочитать про эти функции:
ReadIntervalTimeout
ReadTotalTimeoutMultiplier
ReadTotalTimeoutConstant
WriteTotalTimeoutMultiplier
WriteTotalTimeoutConstant...
DCBlength...
DCB
???

И как задается MASK-а (IOCTL_SERIAL_WAIT_ON_MASK)???

Вопросов больше, но на другие я постараюсь найти чтонибудь.

Всем заранее спасибо!


Дата: Май 14, 2004 19:02:11 · Поправил: Asterix

Stenton
Строку include \masm32\include\windows.inc лучше помещать первой в списке inc'лудов.


Дата: Май 14, 2004 20:18:38 · Поправил: Stenton

Asterix
Спасиб, сделал, ща проверим!
АГА, РАБОТАЕТ! :о))

Да, с ентим:
ReadIntervalTimeout
ReadTotalTimeoutMultiplier
ReadTotalTimeoutConstant
WriteTotalTimeoutMultiplier
WriteTotalTimeoutConstant...
ужжо разобрался :о))


Дата: Май 18, 2004 13:56:15

Ребята, выручайте!!!

как этот код выглядит на масме:
void CComportDlg::SetModem() //Настраиваем модем
{
	BOOL bResult = TRUE;
	m_sComPort = "Com1";
	m_hCom = CreateFile(m_sComPort, 
		GENERIC_READ | GENERIC_WRITE,
		0, // эксклюзивный доступ
		NULL, // никакой безопасности :-)
		OPEN_EXISTING,
		0,
		NULL);

	m_bPortReady = SetupComm(m_hCom, 128, 128); // установка размера буфера
	m_bPortReady = GetCommState(m_hCom, &m_dcb);
	m_dcb.BaudRate = nBaudRate; //38400
	m_dcb.ByteSize = nByteSize; //8
	m_dcb.Parity = NOPARITY;
	m_dcb.StopBits = ONESTOPBIT;
	m_dcb.fAbortOnError = TRUE;
	m_bPortReady = SetCommState(m_hCom, &m_dcb);
	m_bPortReady = GetCommTimeouts (m_hCom, &m_CommTimeouts);
	m_CommTimeouts.ReadIntervalTimeout = nReadIntervalTimeout; //50
	m_CommTimeouts.ReadTotalTimeoutConstant = nReadTotalTimeoutConstant; //50
	m_CommTimeouts.ReadTotalTimeoutMultiplier = nReadTotalTimeoutMultiplier; //10
	m_CommTimeouts.WriteTotalTimeoutConstant = nWriteTotalTimeoutConstant; //50
	m_CommTimeouts.WriteTotalTimeoutMultiplier = nWriteTotalTimeoutMultiplier; //10
	m_bPortReady = SetCommTimeouts (m_hCom, &m_CommTimeouts);
	sFirstCommand+="\r"; //AT&ATQ0
	sSecondCommand+="\r"; //ATS7=20

	// Первая команда
	bWriteRC = WriteFile(m_hCom, (LPCVOID) sFirstCommand,
		8, &iBytesWritten, NULL);
	ReadPortData(); //Считываем ответ
	if(sPortValue.Find("OK", 0) != -1) //Если вернулось "ОК" или "0"
	{
		//Вторая команда (тоже самое)
		bWriteRC = WriteFile(m_hCom, (LPCVOID)sSecondCommand,
			8, &iBytesWritten, NULL);
		ReadPortData();
		if(sPortValue.Find("OK", 0) == -1) bResult = FALSE;
	}
	else bResult = FALSE;
	//Результат обеих команд
	if(bResult) dlgRep.m_RepString="Modem initialization is OK";
		else dlgRep.m_RepString="Modem initialization error occur";
	
	CloseHandle(m_hCom);
	m_uTimerID = SetTimer(0x451,1000,NULL);
	dlgRep.DoModal(); //Окно с сообщением о результате
}


????


Дата: Май 19, 2004 18:48:35

Quantum
Мне так не хватает Вашей помощи...

Вопрос в том, что яне могу прочесть ответ модема, а именно - не знаю как выудить "ОК" или "ERROR" в ответе... или может модем не умею переводить в режим передачи. Другими словами, запутался окончательно...

<< . 1 . 2 . 3 . 4 .


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