Writing to a Serial Port


 
Thread Tools Search this Thread
Top Forums Web Development Writing to a Serial Port
# 57  
Old 11-02-2014
This is quite bit above my regular tasks, so please excuse if i missed the point.

But reading the title, a thread of another forum came to mind...
Programming challenge: Listen on a socket - FedoraForum.org
There are diffrent examples of how to listen/write to a socket, not quite sure if it can be adapted to ports...
But since its linux, everything is a file, so - i hope so Smilie

Hope this helps
# 58  
Old 11-02-2014
sea -

Thanks.

The first item to tackle is the segmentation fault in the C program. Two things are happening
1] It dies w/ a segmentation fault.
2] It does not write to the port.

Let's deal w/ #1 first. Solving that might solve #2.
# 59  
Old 11-02-2014
It dies with a segmentation fault because open() is not an fopen() substitute. It doesn't even return a pointer the way fopen() does, just a number. Read my example more carefully please.

If you use open(), use write(fd, mem, size).

If you use fopen(), use fwrite(mem, size, 1, fp).

It's okay to use fopen and open in the same program -- as long as you do not write() to a FILE *, or fwrite to a file descriptor, etc. Keep them independent.

If you absolutely insist on using stdio, you could use the setvbuf function I've mentioned several times.
# 60  
Old 11-03-2014
I have tried to make it work w/ read and write and have not scceeded. [My ignorance and no disrespect to those who wish me to use reaad and write], hovwever, I hve to go with something that works for me, and then I will willingly take instruction from the read/write folks...So please excuse me at this point.

I have a C program [scale5.c] that will write to the scale and then read the weight. This runs perfectly from the command line.

Code:
/*
*Scale5  Write data to Serial Port and Read it
*
*/ 
#include <termios.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#define MODEMDEVICE "/dev/ttyS0"


int main(void) 
{
        char buf[64];
        int pos=0, num, num2,num3;
		FILE *fp1, *fp2;   


        int fd, i, n3;

		fp2 = fopen("/var/www/testfile.txt", "w+");

		fp1 = fopen(MODEMDEVICE, "w+");

		if(fp1 == NULL)
		{
			printf("initiation error. \n");
	        return 1;
	    }
	


		fp2 = fopen("/var/www/testfile.txt", "r+");

		fprintf(fp1, "%s","W\r\n");
	

		fread(buf, 1, 7,fp1 );
		n3 =strlen(buf);
		printf("\n%s    %d", "stringn3  ", n3);
		printf("buffer elements\n");

		for(i= 0; i < strlen(buf) ; i++)
		printf("%c", buf[i]);

		printf("You entered the string %s\n",buf);

	
		rewind(fp2);

		fwrite(buf, 1, 7,fp2 );
		fclose(fp2);

}

I then have a PHP script [TestScale.php] that calls scale5.c and reads its output. scale5 as called by the the PHP script delets the data file and rewrites it. Hoever, the file is deleted and never rewritten. a
I cannot figure out why the file is never rewriten.

Here is the PHP script...

PHP Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<html>

    <head>
        <title>Test Scale</title>
    </head>
        <body>
        <strong>
            <div align='center'>
                  <h3>Test Scale</h3>
            </strong>
                    </div>

<?php
            error_reporting
(E_ALL E_NOTICE);
            
ini_set('display_errors','1');

            echo 
'hello';
            
$output = `/var/www/scale5`;
            
$fptr1=  fopen("/var/www/testfile.txt""r");
            
$bla fscanf($fptr1,"%f");
            
$weightfscanf($fptr1,"%f");
            
print_r($weight);
            
var_dump($weight);
            echo 
$weight[0]; 
?>

        </body>
</html>
Pardon me if the explanation above is not clear.
# 61  
Old 11-03-2014
For the fourth time I strongly suggest you at the absolute bare minimum use setvbuf so your program doesn't sometimes hang.

But if you cannot read its manual page, fine.

Code:
/*
*Scale5  Write data to Serial Port and Read it
*
*/ 
#include <termios.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#define MODEMDEVICE "/dev/ttyS0"


int main(void) 
{
        char buf[64];
        int pos=0, num, num2,num3;
	FILE *fp1;   

        int i, n3;
        system("stty -F /dev/ttyS0 1:0:80000dad:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0");

	fp1 = fopen(MODEMDEVICE, "w+");

	if(fp1 == NULL)
	{
		printf("initiation error. \n");
	        return 1;
        }
	
        setvbuf(fp1, NULL, _IONBF, 0);
	fprintf(fp1, "%s","W\r\n");
        memset(buf, 0, sizeof(buf));
	fread(buf, 1, 7,fp1 );
	fputs(buf, stdout);
        fclose(fp1);
}

Code:
<?php
        $v=`/var/www/scale5`; // get the value
?>

# 62  
Old 11-03-2014
Corona688 -

Thanks.

Sorry for being such a poor student. Fear not, I will learn about setvbuf.

Regretablly, same behavior.
The PHP script deletes the contents of testfile.txt.
# 63  
Old 11-03-2014
I invite you to read my code more closely.. There is no testfile.txt in it. It avoids keeping a temporary file by printing to stdout.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Solaris

Cabling and adapters to communicate to service processor serial port from Windows PC with USB port.

Hello, I have an unloaded T5140 machine and want to access the ILOM for the first time and subsequently the network port after that., and then load Solaris 10 the final January 2011 build. The first part is what confuses me -the cabling. I am coming from a Windows machine (w/appropriate... (5 Replies)
Discussion started by: joboy
5 Replies

2. Web Development

Setup Serial Port

I need to set a serial port to 9600 7E1. How do I accomplish this? I've tried every combination, with no luck. (6 Replies)
Discussion started by: Meow613
6 Replies

3. Shell Programming and Scripting

reading from and writing to serial port

hello all, please any one can provide me the shell script to write data to /dev/ttyS1 and read responce from /dev/ttyS1 and compare the responce to some string .. thnxx ---------- Post updated at 03:35 PM ---------- Previous update was at 11:46 AM ---------- any body help me.. how do i... (1 Reply)
Discussion started by: yashwantkumar
1 Replies

4. Solaris

How to enable Serial port on ILOM, when Network Port is enabled in parallel

Hi Everyone, In my environment, I have few T5220. On the iLOM Management Card, I have both Network and Serial port are cabled, I don't have any issues while I try to connect using Network Management port, but when I try to connect the serial port for the same server which is actually connected... (3 Replies)
Discussion started by: bobby320
3 Replies

5. Shell Programming and Scripting

Need help with serial port

Hi, I have a external board connected to my serial port. I need to execute "shutdown -r now" command when system boot up. When system boots up it requires a username ans password. Then I need to run my command. I can use rc script but that is rebooting system before it asks for username and... (0 Replies)
Discussion started by: charlie.arya
0 Replies

6. UNIX for Dummies Questions & Answers

Missing serial port

A neighbour's Ubuntu 10.04 machine has five serial ports, one on the motherboard and four on a PCI card. However, only four cards are showing: # dmesg | grep tty console enabled serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A ... (2 Replies)
Discussion started by: dotancohen
2 Replies

7. AIX

Serial port in AIX

Hi, How can i configure my modem in AIX thru serial port (sa0-->tty0) I have two port serial card configured as sa0 I created tty1 which port is tty0 and which port is tty1 how can i know?? (1 Reply)
Discussion started by: pchangba
1 Replies

8. Programming

How to tell if a string to serial port has been sent

I have a need to determine when a string has been completely sent via a serial port from a standard 'C' application. The code is as follows: SerialPort_Send = open (pPortString, O_WRONLY | O_NOCTTY | O_NONBLOCK); write (SerialPort_Send, pCommandString, strlen (pCommandString)); ... (2 Replies)
Discussion started by: ExDes
2 Replies

9. Solaris

Serial port not found

Hi, I am working with solaris 9,SUN-Blade-100 and I want to communicate with the Serial port.To check whether the port is working or not.I write code and when I execute the file,then I got the output-- According to this,serial port is not found.can anyone please tell me how to configure the... (1 Reply)
Discussion started by: smartgupta
1 Replies

10. Linux

urgent......Serial port

I think my serial port(on board) is not working ...... because when I am running same code on two machines its working good....but when my system comes into picture ....it doesnt show any output comming from serial port.......... can anybody tell me how to configure my serial port.........or to... (16 Replies)
Discussion started by: arunchaudhary19
16 Replies
Login or Register to Ask a Question