00001
00002
00003
00004
00005 #include "CD_Main.h"
00006
00007 #include <stdio.h>
00008 #include <string.h>
00009
00010 #include <C8051F340.h>
00011
00012
00013 struct cmdlst {
00014 char cmd[4];
00015 unsigned char len;
00016 void (*fun)(const unsigned char *str);
00017 char kk;
00018 };
00019
00020 struct cmdlst code cd_commands[] = {
00021 {"DOL",8,cds_DOL,1},
00022 {"DIL",7,cds_DIL,2},
00023 {"DOF",13,CD_DOF,3},
00024 {"DIF",5,CD_DIF,4},
00025 {"AIS",7,CD_AIS,5},
00026 {"PWM",9,CD_PWM,6},
00027
00028 {"DOP",13,cds_DOP,7},
00029 {"DOM",21,cds_DOM,8},
00030 {"DIP",5,cds_DIP,9},
00031
00032 { 0, 0, 0, 0}
00033 };
00034
00035
00036
00037
00038
00039 void CD_ParseMsg(unsigned char *msg, unsigned char len) {
00040
00041 struct cmdlst *p_cmdlst;
00042
00043
00044 if (len<3) {
00045 CD_LinkMsgError(0x00);
00046 return;
00047 }
00048
00049
00050 p_cmdlst = cd_commands;
00051 while (p_cmdlst->cmd[0] != 0) {
00052 if (strncmp(msg,p_cmdlst->cmd,3)) {
00053 p_cmdlst++;
00054 } else {
00055 if (len != p_cmdlst->len) {
00056 CD_LinkMsgError(0x00);
00057 return;
00058 } else {
00059 break;
00060 }
00061 }
00062 }
00063
00064
00065 if (p_cmdlst->cmd[0] == 0) {
00066 CD_LinkMsgError(0x00);
00067 return;
00068 }
00069
00070
00071
00072
00073 switch (p_cmdlst->kk) {
00074 case 1:
00075 cds_DOL(msg+3);
00076 break;
00077 case 2:
00078 cds_DIL(msg+3);
00079 break;
00080 case 3:
00081 CD_DOF(msg+3);
00082 break;
00083 case 4:
00084 CD_DIF(msg+3);
00085 break;
00086 case 5:
00087 CD_AIS(msg+3);
00088 break;
00089 case 6:
00090 CD_PWM(msg+3);
00091 break;
00092 case 7:
00093 cds_DOP(msg+3);
00094 break;
00095 case 8:
00096 cds_DOM(msg+3);
00097 break;
00098 case 9:
00099 cds_DIP(msg+3);
00100 break;
00101 }
00102 }
00103