Created
April 19, 2015 07:08
-
-
Save AdenoBluesky/926bf03ce349862beb90 to your computer and use it in GitHub Desktop.
チェックサムの追加
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include "rcv_lib.h" | |
#include "lcd_lib.h" | |
volatile unsigned char rcv_state = 0; | |
volatile unsigned char rcv_poi = 0; | |
volatile unsigned char rcv_cmd = ' '; | |
volatile unsigned char rcv_buf[RCV_SIZE]; | |
volatile unsigned char rcv_timeoutflg = 0; | |
volatile unsigned char rcv_timeout = 0; | |
volatile unsigned char rcv_full = 0; | |
volatile unsigned char rcv_chksum = 0; | |
volatile unsigned char rcv_chksum_base = 0; | |
volatile unsigned char rcv_drv_state = 0; | |
void rcv_init(){ | |
//受信バッファの準備 | |
for(rcv_poi = 0; rcv_poi < RCV_SIZE; rcv_poi++){ | |
rcv_buf[rcv_poi] = ' '; | |
} | |
//drv | |
rcv_drv_state = RCV_DRV_STATE_S0_STXWAIT; | |
rcv_chksum = 0; | |
rcv_chksum_base = 0; | |
//app | |
rcv_full = 0; | |
rcv_state = RCV_STATE_S1_CMDWAIT; | |
rcv_cmd = ' '; | |
} | |
char read_byte(int i){ return rcv_buf[i]; } | |
void clearRCVflg(){ rcv_full = 0; } | |
char getRCVflg(){ return rcv_full; } | |
unsigned char getRCVcmd(){ return rcv_cmd; } | |
void rcv_byte(unsigned char c){ | |
if(rcv_full == 1){ | |
printf("BufFull>%c\r\n",c); | |
}else if(rcv_drv_state == RCV_DRV_STATE_S0_STXWAIT){ | |
if(c == rSTX){ | |
rcv_cmd = ' '; | |
rcv_state = RCV_STATE_S1_CMDWAIT; | |
rcv_drv_state = RCV_DRV_STATE_S1_CHKSUMWAIT; | |
} | |
}else if(rcv_drv_state == RCV_DRV_STATE_S1_CHKSUMWAIT){ | |
rcv_chksum = 0; | |
rcv_chksum_base = c & 0x0f; | |
rcv_drv_state = RCV_DRV_STATE_S2_ETXWAIT; | |
}else if(rcv_drv_state == RCV_DRV_STATE_S2_ETXWAIT){ | |
if(c == rETX){ | |
rcv_chksum = rcv_chksum & 0xf; | |
if(rcv_chksum_base == rcv_chksum){ | |
rcv_buf[rcv_poi] = '\n'; | |
printf("ChkSumOK:%d\r\n",rcv_chksum); | |
rcv_full = 1; | |
}else{ | |
rcv_state = RCV_STATE_S1_CMDWAIT; | |
printf("ChkSumNG:%d:%d\r\n",rcv_chksum_base,rcv_chksum); | |
rcv_full = 2; | |
} | |
rcv_drv_state = RCV_DRV_STATE_S0_STXWAIT; | |
}else{ | |
rcv_chksum+= c; | |
if(rcv_state == RCV_STATE_S1_CMDWAIT){ | |
if(c == 'C'){ | |
rcv_state = RCV_STATE_S2_CMDWAIT2; | |
}else if(c == 'N'){ | |
rcv_poi = 0; | |
rcv_state = RCV_STATE_S3_DATAWAIT; | |
} | |
}else if(rcv_state == RCV_STATE_S2_CMDWAIT2){ | |
//コマンドを一時保存 | |
rcv_cmd = c; | |
rcv_state = RCV_STATE_S1_CMDWAIT; | |
}else if(rcv_state == RCV_STATE_S3_DATAWAIT){ | |
if(c == '\r'){ | |
}else{ | |
rcv_buf[rcv_poi] = c; | |
rcv_poi++; | |
//終了条件2:バッファがいっぱい | |
if(rcv_poi >= RCV_SIZE){ | |
rcv_poi = 0; | |
rcv_state = RCV_STATE_S1_CMDWAIT; | |
printf("End2\r\n"); | |
} | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment