Results 1 to 20 of 30

Thread: How to transfer file through serial communication

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default How to transfer file through serial communication

    hii friends,

    i am using Qt3 which comes bydefault with FC-6 installation.
    i want to transfer files like zip, pdf, jpeg etc through serial communication (i.e. using com port)

    can anyone please tell me how can i achieve this?!?
    if possible please provide me with a sample code.
    There are 10 kinds of people in this world. Those who understand binary, and those who dont.

    regards
    shamik

  2. #2
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,359
    Thanks
    3
    Thanked 5,015 Times in 4,792 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: How to transfer file through serial communication

    Please start by searching the forum.

  3. #3
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: How to transfer file through serial communication

    i've downloaded the QExtSerialPort1.1 from the net

    in this when i go to the /example/ folder and type "make" to compile everything
    it gives following error :

    make
    make: Warning: File `Makefile' has modification time 2.3e+08 s in the
    future
    g++ -c -pipe -Wall -W -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2
    -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32
    -march=i386 -mtune=generic -fasynchronous-unwind-tables -D_REENTRANT
    -D_TTY_POSIX_ -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED
    -I/usr/lib/qt-3.3/mkspecs/default -I. -I../.. -I/usr/lib/qt-3.3/include
    -Iuic/ -Imoc/ -o obj/main.o main.cpp
    main.cpp:8:28: error: qextserialport.h: No such file or directory
    In file included from main.cpp:12:
    MessageWindow.h:12:25: error: qdockwidget.h: No such file or directory
    MessageWindow.h:20: error: expected class-name before ‘{’ token
    MessageWindow.h:20: warning: ‘class MessageWindow’ has virtual functions
    but non-virtual destructor
    make: *** [obj/main.o] Error 1

    can anybody please help me with this ?
    There are 10 kinds of people in this world. Those who understand binary, and those who dont.

    regards
    shamik

  4. #4
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,359
    Thanks
    3
    Thanked 5,015 Times in 4,792 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: How to transfer file through serial communication

    main.cpp:8:28: error: qextserialport.h: No such file or directory
    This seems obvious - the file is missing.

    MessageWindow.h:12:25: error: qdockwidget.h: No such file or directory
    This suggest you've downloaded the wrong release as QDockWidget is part of Qt4 and not Qt3.

  5. #5
    freeskydiver Guest

    Default Re: How to transfer file through serial communication

    Quote Originally Posted by shamik View Post
    ...
    MessageWindow.h:12:25: error: qdockwidget.h: No such file or directory
    can anybody please help me with this ?
    Look to the file. If it exists? Then look for QTDIR.

  6. #6
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: How to transfer file through serial communication

    u're right......i had downloaded a wrong package

    now i have downloaded a correct one which works with Qt3. The make command has generated the libraries well.

    but i dont know how to use this class and its functions.

    all the function i found deals with byte transfer i.e. getch(), putch() etc.

    but i want to transfer and recieve files like zip, pdf etc.

    i cant find any such functions directly sending and recieving files...

    can any1 plz suggest
    There are 10 kinds of people in this world. Those who understand binary, and those who dont.

    regards
    shamik

  7. #7
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,359
    Thanks
    3
    Thanked 5,015 Times in 4,792 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: How to transfer file through serial communication

    Use getch or putch in a loop.

  8. #8
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: How to transfer file through serial communication

    suppose its a zip file stored somewhere like /root/xp.zip

    then how to use that getch() and putch() ??
    There are 10 kinds of people in this world. Those who understand binary, and those who dont.

    regards
    shamik

  9. #9
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,359
    Thanks
    3
    Thanked 5,015 Times in 4,792 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: How to transfer file through serial communication

    Oh come on.... What kind of a question is that?
    Open the file, read characters and transmit them over the serial line. You'll probably need some protocol of communication to transfer the file length and file name. You can probably use QDataStream to ease your task.

  10. #10
    Join Date
    Jan 2006
    Location
    Munich, Germany
    Posts
    4,714
    Thanks
    21
    Thanked 418 Times in 411 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows

    Default Re: How to transfer file through serial communication

    no need to use getch().
    Just use readBytes() and you don't need a loop.
    But the rest is the same as wysota said.
    ==========================signature=============== ==================
    S.O.L.I.D principles (use them!):
    https://en.wikipedia.org/wiki/SOLID_...iented_design)

    Do you write clean code? - if you are TDD'ing then maybe, if not, your not writing clean code.

  11. #11
    Join Date
    May 2007
    Posts
    301
    Thanks
    46
    Thanked 3 Times in 3 Posts
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: How to transfer file through serial communication

    Hi,

    Plenty of serial comms classes on the web...

    Personally, I use my own I wrote which is for windows, if it is for windows you want to use serial comms, just use api calls such as ::CreateFile, ::WriteFile etc...

    Here is some code from my serial class, may help ( this is for Windows )?

    Qt Code:
    1. template<class T=char, int nSize=100> class CSerialComms
    2. {
    3. public:
    4. T& operator[]( int nIndex ) { return m_buf[nIndex]; }
    5.  
    6. CSerialComms& operator=( const CSerialComms& r )
    7. {
    8. memcpy( m_buf, r.m_buf, nSize );
    9. m_cto = r.m_cto;
    10. m_dcb = r.m_dcb;
    11. m_hFile = r.m_hFile;
    12. return *this;
    13. }
    14.  
    15.  
    16. inline int SetTimeouts( DWORD dwReadInterval = 1, DWORD dwReadTotalTimeout = 100, DWORD dwReadTotalTimeoutConstant = 1000, DWORD dwWriteTotalTimeout = 0, DWORD dwWriteTotalTimeoutConstant = 0 )
    17. {
    18. int nError = SUCCESS;
    19. m_cto.ReadIntervalTimeout = dwReadInterval;
    20. m_cto.ReadTotalTimeoutMultiplier = dwReadTotalTimeout;
    21. m_cto.ReadTotalTimeoutConstant = dwReadTotalTimeoutConstant;
    22. m_cto.WriteTotalTimeoutMultiplier = dwWriteTotalTimeout;
    23. m_cto.WriteTotalTimeoutConstant = dwWriteTotalTimeoutConstant;
    24. if( !::SetCommTimeouts( m_hFile, &m_cto) )
    25. {
    26. nError = GetLastError();
    27. }
    28. return nError;
    29. }
    30.  
    31. inline int OpenPort( LPCTSTR szPort = "COM1" )
    32. {
    33. int nError = SUCCESS;
    34. m_hFile = ::CreateFile( szPort, GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
    35. if( m_hFile == INVALID_HANDLE_VALUE )
    36. {
    37. nError = GetLastError();
    38. }
    39. return nError;
    40. }
    41.  
    42. inline int SetCommsDevice( DWORD dwBaud = 57600, BYTE iParity = NOPARITY, BYTE iStopBits = ONESTOPBIT, BYTE iByteSize = 8 )
    43. {
    44. int nError = SUCCESS;
    45. memset( &m_dcb, 0, sizeof( m_dcb ) );
    46. m_dcb.DCBlength = sizeof( m_dcb );
    47. m_dcb.BaudRate = dwBaud;
    48. m_dcb.Parity = iParity;
    49. m_dcb.StopBits = iStopBits;
    50. m_dcb.ByteSize = iByteSize;
    51.  
    52. if( !::SetCommState( m_hFile, &m_dcb ) )
    53. {
    54. nError = GetLastError();
    55. }
    56. return nError;
    57. }
    58.  
    59. DWORD TxData( T* szBuf )
    60. {
    61. DWORD nowrote = 0;
    62. memset( m_buf, 0, sizeof( m_buf ) );
    63. if( sizeof( m_buf ) >= strlen( szBuf ) ) // check to see if buffer allocated is big enough
    64. {
    65. memcpy( &m_buf[1], szBuf, strlen( szBuf ) );
    66. m_buf[0] = 0x2;
    67. m_buf[ strlen(szBuf) + 1 ] = 0x3;
    68. return TxData();
    69. }
    70. return BUFFEROVERFLOW;
    71. }
    72.  
    73. DWORD TxData()
    74. {
    75. DWORD nowrote = 0;
    76. ::WriteFile( m_hFile, m_buf, strlen(m_buf), &nowrote, NULL );
    77. return nowrote;
    78. }
    79.  
    80. CSerialComms( void ){ memset( m_buf, 0, nSize ); };
    81. ~CSerialComms(){};
    82.  
    83.  
    84. private:
    85. T m_buf[nSize];
    86. COMMTIMEOUTS m_cto;
    87. DCB m_dcb;
    88. HANDLE m_hFile;
    89.  
    90. enum { FAILED = 0, SUCCESS = 1, BUFFEROVERFLOW = 2 };
    91. };
    92.  
    93. #endif // !defined(AFX_SERIALCOMMS_H__BA76EBFF_6F02_4E79_BC65_DD4C2655354B__INCLUDED_)
    To copy to clipboard, switch view to plain text mode 


    Regards,
    Steve

  12. #12
    Join Date
    Jan 2006
    Location
    Munich, Germany
    Posts
    4,714
    Thanks
    21
    Thanked 418 Times in 411 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows

    Default Re: How to transfer file through serial communication

    Plenty of serial comms classes on the web...
    True, but QextSerialPort is based on QIODevice and therefore integrates well withe Qt Stream classes, and you can sublass it and add signals and slots to it (if you need such a thing, I didn't so far)
    And ofcourse, QextSerialPort is cross platform!
    Last edited by high_flyer; 22nd May 2007 at 15:46.
    ==========================signature=============== ==================
    S.O.L.I.D principles (use them!):
    https://en.wikipedia.org/wiki/SOLID_...iented_design)

    Do you write clean code? - if you are TDD'ing then maybe, if not, your not writing clean code.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.