[技術] CVS相關指令

Written on 11:55 上午 by Yu Lai

距離上次使用CVS已經是大學時代了,
後來都是改用subversion來處理Version Control。
現在工作上又需要用到CVS,整理一下當成備忘吧。

1. 設定 CVSROOT
$ export CVSROOT=:pserver:id@cvs.server:/var/cvsroot

2. 下載原始碼 (checkout)
$ cvs login
CVS password: (在這裡輸入密碼)

$ cvs -z5 co

3. 更新原始碼 (update)
$ cvs update -dP

4. 提交修改 (commit)
$ cvs commit

5. 新增目錄 (add)
$ mkdir foo
$ cvs add foo

6. 新增檔案 (add)
$ cvs add myfile.c

7. 遞迴新增目錄
由於cvs在這方面不像svn一樣,直接對主目錄做add就好。
它要先將目錄先add後才能對檔案做add。
$ find -type d -print | grep -v CVS | xargs cvs add
$ find -type f -print | grep -v CVS | xargs cvs add

8. 移除檔案 (remove)
$ rm myoldfile.c
$ cvs remove myoldfile.c

9. 移除目錄 (remove)
$ rm *.c
$ cvs remove
$ cvs commit
$ cd ..
$ cvs remove mydir
$ rm -rf mydir

10. .cvsrc 檔案
設定一系列 cvs 命令有用的參數,建議如下:
cvs -q
diff -u -b -B
checkout -P
update -d -P

[閒聊] 我退伍啦

Written on 8:48 下午 by Yu Lai

就在今天2011/01/21,我退伍啦。
下禮拜就是新的挑戰的開始了,Hala Lazyf。

[技術] 在Linux上用C撰寫RS-232通訊程式

Written on 12:41 下午 by Yu Lai

最近工作上玩到的,總結一下當Note吧。
主要是Ref: Serial Programming Guide for POSIX Operating Systems
配合pthread把收跟送的部份分開,
以下是收的部份。

struct tty_q {
int len;
unsigned char buff[TTY_Q_SZ]; /* TTY_Q_SZ=1024 */
} tty_q;

int tty_fd;
pthread_mutex_t tty_mutex;

void * rs232com(void *arg) {

int c=0, len;
struct termios oldtio, newtio;
char buf[256];

pthread_detach(pthread_self());
pthread_mutex_init(&tty_mutex, NULL);

/* Open the rs232 port */
tty_fd = open(TTYDEVICE, O_RDWR|O_NOCTTY);
if (tty_fd < 0) {
perror(TTYDEVICE);
exit(1);
}

/* Get the current options */
tcgetattr(tty_fd, &oldtio);

/* Set new options */
bzero(&newtio, sizeof(newtio));
newtio.c_cflag = BAUDRATE|CS8|CLOCAL|CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = ICANON;

/* Set the options */
tcflush(tty_fd, TCIFLUSH);
tcsetattr(tty_fd, TCSANOW, &newtio);

while(1) {
len = read(tty_fd, buf, 255);
buf[len]=0;

MCP_LOG("RS-232 recv, len=%03d, buf=%s\n", len, buf);

pthread_mutex_lock(&tty_mutex);

if(tty_q.len + len > TTY_Q_SZ) {
memset(tty_q.buff, 0, TTY_Q_SZ);
tty_q.len = 0;
}

memcpy(&tty_q.buff[tty_q.len], buf, len);
tty_q.len += len;

pthread_mutex_unlock(&tty_mutex);
}
}

而送的部份在這裡。
int rs232send(U8 * buf) {

pthread_mutex_lock(&tty_mutex);

memset(tty_q.buff, 0, TTY_Q_SZ);
tty_q.len = 0;

pthread_mutex_unlock(&tty_mutex);

return write(tty_fd, buf, strlen(buf));

}