Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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");
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement