Advertisement
Guest User

Untitled

a guest
May 28th, 2015
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include "rcv_lib.h"
  3. #include "lcd_lib.h"
  4.  
  5. volatile unsigned char rcv_state = 0;
  6. volatile unsigned char rcv_poi = 0;
  7. volatile unsigned char rcv_cmd = ' ';
  8. volatile unsigned char rcv_buf[RCV_SIZE];
  9. volatile unsigned char rcv_timeoutflg = 0;
  10. volatile unsigned char rcv_timeout = 0;
  11. volatile unsigned char rcv_full = 0;
  12. volatile unsigned char rcv_chksum = 0;
  13. volatile unsigned char rcv_chksum_base = 0;
  14. volatile unsigned char rcv_drv_state = 0;
  15.  
  16. void rcv_init(){
  17. //受信バッファの準備
  18. for(rcv_poi = 0; rcv_poi < RCV_SIZE; rcv_poi++){
  19. rcv_buf[rcv_poi] = ' ';
  20. }
  21. //drv
  22. rcv_drv_state = RCV_DRV_STATE_S0_STXWAIT;
  23. rcv_chksum = 0;
  24. rcv_chksum_base = 0;
  25.  
  26. //app
  27. rcv_full = 0;
  28. rcv_state = RCV_STATE_S1_CMDWAIT;
  29. rcv_cmd = ' ';
  30. }
  31.  
  32. char read_byte(int i){ return rcv_buf[i]; }
  33. void clearRCVflg(){ rcv_full = 0; }
  34. char getRCVflg(){ return rcv_full; }
  35. unsigned char getRCVcmd(){ return rcv_cmd; }
  36.  
  37. void rcv_byte(unsigned char c){
  38. if(rcv_full == 1){
  39. printf("BufFull>%c\r\n",c);
  40.  
  41. }else if(rcv_drv_state == RCV_DRV_STATE_S0_STXWAIT){
  42. if(c == rSTX){
  43. rcv_cmd = ' ';
  44. rcv_state = RCV_STATE_S1_CMDWAIT;
  45. rcv_drv_state = RCV_DRV_STATE_S1_CHKSUMWAIT;
  46. }
  47. }else if(rcv_drv_state == RCV_DRV_STATE_S1_CHKSUMWAIT){
  48. rcv_chksum = 0;
  49. rcv_chksum_base = c & 0x0f;
  50. rcv_drv_state = RCV_DRV_STATE_S2_ETXWAIT;
  51. }else if(rcv_drv_state == RCV_DRV_STATE_S2_ETXWAIT){
  52. if(c == rETX){
  53. rcv_chksum = rcv_chksum & 0xf;
  54. if(rcv_chksum_base == rcv_chksum){
  55. rcv_buf[rcv_poi] = '\n';
  56. printf("ChkSumOK:%d\r\n",rcv_chksum);
  57. rcv_full = 1;
  58. }else{
  59. rcv_state = RCV_STATE_S1_CMDWAIT;
  60. printf("ChkSumNG:%d:%d\r\n",rcv_chksum_base,rcv_chksum);
  61. rcv_full = 2;
  62. }
  63. rcv_drv_state = RCV_DRV_STATE_S0_STXWAIT;
  64. }else{
  65. rcv_chksum+= c;
  66. if(rcv_state == RCV_STATE_S1_CMDWAIT){
  67. if(c == 'C'){
  68. rcv_state = RCV_STATE_S2_CMDWAIT2;
  69. }else if(c == 'N'){
  70. rcv_poi = 0;
  71. rcv_state = RCV_STATE_S3_DATAWAIT;
  72. }
  73. }else if(rcv_state == RCV_STATE_S2_CMDWAIT2){
  74. //コマンドを一時保存
  75. rcv_cmd = c;
  76. rcv_state = RCV_STATE_S1_CMDWAIT;
  77. }else if(rcv_state == RCV_STATE_S3_DATAWAIT){
  78. if(c == '\r'){
  79. }else{
  80. rcv_buf[rcv_poi] = c;
  81. rcv_poi++;
  82. //終了条件2:バッファがいっぱい
  83. if(rcv_poi >= RCV_SIZE){
  84. rcv_poi = 0;
  85. rcv_state = RCV_STATE_S1_CMDWAIT;
  86. printf("End2\r\n");
  87. }
  88. }
  89. }
  90. }
  91. }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement