00001
00002
00003
00004
00005
00006
00007 #include "USB_Type.h"
00008 #include "USB_CDC_UART.h"
00009 #include <stdio.h>
00010 #include <string.h>
00011
00012 #include <C8051F340.h>
00013
00014
00015
00016
00017 #include "CD_Main.h"
00018
00019 sbit Led1 = P2^2;
00020
00021 #define RX_BUFF_SIZE 250
00022 #define RX_START_MSG_NOT_RECEIVED RX_BUFF_SIZE
00023
00024 static unsigned char xdata rx_buffer[RX_BUFF_SIZE+1];
00025 static unsigned char rx_cnt;
00026 static unsigned char rx_msg_start;
00027 static unsigned char rx_msg_end;
00028
00029
00030
00031
00032 void CD_LinkInit(void) {
00033
00034
00035 rx_buffer[0] = '\0';
00036 rx_cnt = 0;
00037
00038
00039 rx_msg_start = RX_START_MSG_NOT_RECEIVED;
00040 }
00041
00042
00043
00044 void CD_LinkRXChar(unsigned char chr) {
00045
00046
00047 if (rx_cnt >= RX_BUFF_SIZE) {
00048 rx_cnt = 0;
00049 rx_msg_start = RX_START_MSG_NOT_RECEIVED;
00050 }
00051
00052 if (chr == MSG_START_CHAR) {
00053 rx_msg_start = rx_cnt;
00054 } else if (chr == MSG_END_CHAR) {
00055
00056 rx_msg_end = rx_cnt;
00057 rx_buffer[rx_cnt] = '\0';
00058
00059
00060 if (rx_msg_start != RX_START_MSG_NOT_RECEIVED) {
00061 CD_ParseMsg(&rx_buffer[rx_msg_start], rx_msg_end - rx_msg_start);
00062 }
00063
00064
00065 rx_cnt = 0;
00066 rx_msg_start = RX_START_MSG_NOT_RECEIVED;
00067
00068 } else {
00069 rx_buffer[rx_cnt++] = chr;
00070 }
00071 }
00072
00073
00074
00075
00076 void CD_LinkTXChar(unsigned char chr) {
00077
00078 while(!RXReady){};
00079 COMPutByte(chr);
00080 }
00081
00082
00083
00084 void CD_LinkTXStr(unsigned char *str) {
00085
00086 while(*str != '\0') {
00087 CD_LinkTXChar(*str);
00088 str++;
00089 }
00090 }
00091
00092
00093
00094 void CD_LinkMsgError(unsigned char cod) {
00095
00096 unsigned char msg[3];
00097
00098 if (cod == CD_Error_NoError) {
00099 CD_LinkTXStr("#!\x0D");
00100 } else {
00101
00102 CD_u8_ToHexaStr(cod, 2, msg);
00103
00104 CD_LinkTXStr("#?");
00105 CD_LinkTXStr(msg);
00106 CD_LinkTXChar('\x0D');
00107 }
00108 }
00109
00110
00111
00112 void CD_LinkMsgOK(void) {
00113 CD_LinkTXStr("#!\x0D");
00114 }