|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
|
Announcements
Chapters
Services
Feature Zones
|
IntroductionThe article provides a step by step tutorial about the method to connect your mobile phone to your PC using serial communication. It describes the methods to execute phone specific commands via your PC. PC and mobile phone communication can be established by three ways:
(Note: I have just worked on serial port and infrared.) ExplanationInitialize and open port:/* portNm =COM1,COM2 etc which ever COM port your phone is connected */ bool OpenPort( char *portNm ) { if( portNm != NULL ) // check to if port exists { /* hComm is handle that makes a buffer file pointin to your COM port for read and write of port data */ hComm = CreateFile( portNm,GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, NULL, 0); if (hComm == INVALID_HANDLE_VALUE) { //error occured alert user about error return false; } else // port opened successfully alert user return true; } else { // specified port missing alert user return false; } } Write To Port:BOOL WriteABuffer(char * lpBuf, DWORD dwToWrite) { OVERLAPPED osWrite = {0}; DWORD dwWritten; BOOL fRes; // Issue write. if (!WriteFile(hComm, lpBuf, dwToWrite, &dwWritten, NULL)) { if (GetLastError() != ERROR_IO_PENDING) { // WriteFile failed, but it isn't delayed. Report error and abort. fRes = FALSE; } else { // Write is pending. if (!GetOverlappedResult(hComm, &osWrite, &dwWritten, TRUE)) { fRes = FALSE;} else { // Write operation completed successfully. fRes = TRUE;} } } else // WriteFile completed immediately. fRes = TRUE; return fRes; } Read Port:void ReadPort() { DWORD dwRead; char chRead[250]; // remember to adjust 250 according to the total data read char *count = NULL; /* flush the old values and fill with some arbitary symbol thats most unlikely to appear in your data to know the end point after reading */ memset(chRead,'\x91',250); Sleep( 5L); ReadFile(hComm, chRead, 250, &dwRead, NULL); /* now chRead contains data . you can manipulate it accoring to your needs now. */ } Special setting:After you call Connection timeouts are used to assign the time for which port must forcibly stop reading data from your mobile phone to prevent abnormality in case of very long data. if(OpenPort("COM4")) // opens COM4 port { DCB dcb dcb.fOutxCtsFlow = false; // Disable CTS monitoring dcb.fOutxDsrFlow = false; // Disable DSR monitoring dcb.fDtrControl = DTR_CONTROL_DISABLE; // Disable DTR monitoring dcb.fOutX = false; // Disable XON/XOFF for transmission dcb.fInX = false; // Disable XON/XOFF for receiving dcb.fRtsControl = RTS_CONTROL_DISABLE; // Disable RTS (Ready To Send) COMMTIMEOUTS timeouts; timeouts.ReadIntervalTimeout = 20; timeouts.ReadTotalTimeoutMultiplier = 10; timeouts.ReadTotalTimeoutConstant = 100; timeouts.WriteTotalTimeoutMultiplier = 10; timeouts.WriteTotalTimeoutConstant = 100; if (!SetCommTimeouts(hComm, &timeouts)) { // error with time outs .alert user and exit } } The above piece of code can be used to establish effective communication between a PC and a mobile phone. You can issue phone specific commands to the phone interpreter which will do the processing and will return data on same port after processing. Hayes AT commands can be used with most of the phones (these are phone specific, so please check for the compatibility of these commands with your phone ). Nokia AT command set is available at Nokia official website. AT commands can be used to perform various functions like sending/receiving SMS to your PC connected to mobile phone, synchronizing the mobile phone book, changing phone settings, and lots more. Hope the article proves to be useful, and for any other query, you can always contact me at nitzbajaj@yahoo.com.
|
||||||||||||||||||||||