?
Solved

Modem Communication ! Urgent

Posted on 1998-07-07
8
Medium Priority
?
245 Views
Last Modified: 2013-11-19
I have to develop an application using MFC & VC++ & Windows APIs  for communicating with the modem .If anybody has an
idea about this , please reply back with a detailed  explanation .
                   Thank you ,
                        sankar
0
Comment
Question by:sankar012898
  • 4
  • 3
8 Comments
 

Author Comment

by:sankar012898
ID: 1318822
Edited text of question
0
 

Author Comment

by:sankar012898
ID: 1318823
Edited text of question
0
 
LVL 4

Expert Comment

by:piano_boxer
ID: 1318824
For Win32?
0
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 4

Expert Comment

by:piano_boxer
ID: 1318825
Here is some code for opening any comport and setup parameters.
nPort: 0=COM1, 1=COM2....

*************

HANDLE OpenCommPort(int nPort, int nBaudrateIdx)
{

    HANDLE hPort;
    CString strPort;
    if(nPort<10)
        strPort.Format(_T("COM%d"), nPort);
    else
        strPort.Format(_T("\\\\.\\COM%d"), nPort);

    // Open COM1.....COMx
    hPort = CreateFile(strPort,GENERIC_READ|GENERIC_WRITE,
        0,    /* comm devices must be opened w/exclusive-access */
        NULL, /* no security attrs */
        OPEN_EXISTING, /* comm devices must use OPEN_EXISTING */
        0,
        NULL  /* hTemplate must be NULL for comm devices */
        );
    if(hOPSPort == INVALID_HANDLE_VALUE)
        return NULL;

    // Setup timeout values for reading and writing to the port
    COMMTIMEOUTS ctmo;
    ctmo.ReadIntervalTimeout = 100;
    ctmo.ReadTotalTimeoutMultiplier = 1;
    ctmo.ReadTotalTimeoutConstant = 2000;
    ctmo.WriteTotalTimeoutMultiplier = 1;
    ctmo.WriteTotalTimeoutConstant = 1000;
    SetCommTimeouts(hPort, &ctmo);

    const int br[] = { 300, 1200, 2400, 4800, 9600, 14400, 19200 };

    // Setup port to use CTS/RTS hardware flow control with 8 databits
    // 1 stopbit and no parity.

    DCB dcb;
    ZeroMemory(&dcb, sizeof(dcb));
    dcb.DCBlength = sizeof(DCB);
    dcb.BaudRate = br[nBaudrateIdx];
    dcb.fBinary = TRUE;
    dcb.fParity = 0;
    dcb.fOutxCtsFlow = 1;
    dcb.ByteSize = 8;
    dcb.Parity = NOPARITY;
    dcb.StopBits = 0;
    dcb.fDtrControl = DTR_CONTROL_ENABLE;
    dcb.fRtsControl = RTS_CONTROL_ENABLE;
    dcb.fAbortOnError = FALSE;
    if(!SetCommState(hPort, &dcb))
    {
        CloseHandle(hPort);
        hPort = INVALID_HANDLE_VALUE;
        return NULL;
    }

    return hPort;
}

********

To read and write to the port, just use the normal ReadFile()/WriteFile() functions

Here is an example of how to reset the modem:

BOOL ResetModem(HANDLE hPort)
{
    CString sCmd = _T("Z\n");

    DWORD dwIOLen;
    if(WriteFile(hPort, sCmd, sCmd.GetLength(), &dwIoSize, NULL))
    {
        return TRUE;
    }

    return FALSE;
}

Off-cause you would want to check the responses from the modem when sending
commands or dialing but that is just basic Win32 IO.
0
 
LVL 8

Expert Comment

by:trestan
ID: 1318826
Please refer to online manual about the following functions.
GetCommState
SetCommState
SetupComm
CreateFile

There is an example on the VC5 CD: \Devstudio\Vc\Samples\Sdk\Win32\Comm
Theses sites can also give you some help.

http://www.qfax.com/
http://www.goodnet.com/~esnible/winsock.html 
 
0
 

Author Comment

by:sankar012898
ID: 1318827
hi piano_boxer & trestan,
              Thanks for your reply . I understood your  code .
 Infact I have  programmed the COM port myself in a similar way  for communicating  with Barcode readers and printers but I  wanted  to  know  how to  dial a  telephone number by a
program  when the modem is connected to a com port and
 also how to send  data over telephone wires .
0
 
LVL 4

Accepted Solution

by:
piano_boxer earned 400 total points
ID: 1318828
All commands is sent to the modem using the AT prefix:

1. Initialize moden (
    SEND: ATZ\n    (Or whatever appropriate)
    WAIT: OK, ERROR, (Timeout)

2. Dial phone number
    SEND: ATDT12345678\n (12345678 is the number to call)
    WAIT: CONNECT  (Modem connected OK. Can be followed by connect speed)
          ERROR\r\n    (Error in command)
          NO CARRIER\r\n, NO ANSWER\r\n (No reply from other modem)
          BUSY\r\n     (Line is busy)



2a.  Is CONNECT is the response from dialog then the modem will switch to datamode and you can send/receive data.

3. Disconnect (There are two methods):

    Method 1:   Lower the DTR hardware line
                (EscapeCommFunction(hPort, CLRDTR));

    Method 2:   Send + (plus character) three times with a small
                delay in between. The modem will the switch to
                command mode. Send ATH0\n to hang up.

0
 

Author Comment

by:sankar012898
ID: 1318829
Hi piano_boxer,
         Thanks  for your  answer .
0

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: The undo support, implementing a stack. Continuing from the eigth article about sudoku.   We need a mechanism to keep track of the digits entered so as to implement an undo mechanism.  This should be a ‘Last In First Out’ collec…
If you use Adobe Reader X it is possible you can't open OLE PDF documents in the standard. The reason is the 'save box mode' in adobe reader X. Many people think the protected Mode of adobe reader x is only to stop the write access. But this fe…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
Watch the video to learn how one can deal with PST file corruption issue with an outstanding Kernel for Outlook PST Repair Tool easily. Using this tool, non-technical users can swiftly perform the repair process to restore their essential data witho…

600 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question