MES3.0はLinuxの下位互換性であり、MES3.0のユーザープログラムは原則としてLinuxでも同じソースコードで動作します。
以下、MES3.0で動作確認されたLinuxとソースコード互換のシリアルポート通信の例です。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
int serial_setup(int fd){
struct termios term;
term.c_iflag = 0;
term.c_oflag = 0;
term.c_cflag = 0;
term.c_lflag = 0;
term.c_line = 0;
bzero(term.c_cc,sizeof(term.c_cc));
term.c_cflag = B115200 | CS8 | CLOCAL | CREAD ;
term.c_iflag = ICRNL;
term.c_oflag = ONLCR | OCRNL;
term.c_lflag = ICANON | ECHO;
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &term);
return 0;
}
int main() {
FILE *fp;
int i, s;
char *inbuf, *cmdbuf;
cmdbuf = malloc(256);
fp = fopen("com3", "r+");
serial_setup(fileno(fp));
fprintf(fp, "[Command System]\n");
do {
fgets(cmdbuf, 255, fp);
for(i = s = 0;cmdbuf[i] != 0 && cmdbuf[i] != '\n' && cmdbuf[i] != '\r';i++) {
if(isprint(cmdbuf[i])) cmdbuf[s++] = cmdbuf[i];
else if(cmdbuf[i] == 8 && s > 0) s--;
else if(cmdbuf[i] == 9) cmdbuf[s++] = ' ';
else if(cmdbuf[i] == 0x1b) {
if(cmdbuf[i + 1] == 0x5b && cmdbuf[i + 2] == 0x44 && s > 0) s--;
i += 2;
}
}
cmdbuf[s] = 0;
puts(cmdbuf);
} while(strcmp(cmdbuf, "quit") != 0);
fprintf(fp, "[END]\n");
fclose(fp);
free(inbuf);
return 0;
}