00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <QtCore/QCoreApplication>
00010 #include <stdio.h>
00011 #include <qextserialport.h>
00012
00013 #include <cdm_Link.h>
00014
00015
00016 #include <string.h>
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 static bool serial_ready = false;
00031 static QextSerialPort *port = 0;
00032
00033
00034
00035
00036
00037 void cdm_LinkInit(const char *params) {
00038
00039
00040 if (port == 0) {
00041 port = new QextSerialPort();
00042 port->setQueryMode(QextSerialPort::Polling);
00043 serial_ready = false;
00044 }
00045
00046
00047 if (serial_ready) {
00048 port->close();
00049 serial_ready = false;
00050 }
00051
00052
00053 port->setPortName(params);
00054 port->setBaudRate (BAUD9600);
00055 port->setDataBits(DATA_8);
00056 port->setStopBits(STOP_1);
00057 port->setParity(PAR_NONE);
00058 port->setFlowControl(FLOW_OFF);
00059
00060 if (!port->open(QextSerialPort::ReadWrite)) {
00061 return (CDM_Error_UnableToOpenLink);
00062 }
00063
00064 serial_ready = true;
00065 return(CDM_Error_NoError);
00066 }
00067
00068
00069
00070
00071 cdm_Error cdm_LinkReceive(char *receive_buffer, int max_bytes, int *received_bytes) {
00072
00073 if (!serial_ready) {
00074 return(CDM_Error_LinkNotReady);
00075 }
00076
00077 if (rx_cnt >= RX_BUFF_SIZE) {
00078 rx_cnt = 0;
00079 rx_msg_start = RX_START_MSG_NOT_RECEIVED;
00080 }
00081
00082 if (chr == MSG_START_CHAR) {
00083 rx_msg_start = rx_cnt;
00084 } else if (chr == MSG_END_CHAR) {
00085
00086 rx_msg_end = rx_cnt;
00087 rx_buffer[rx_cnt] = '\0';
00088
00089
00090 if (rx_msg_start != RX_START_MSG_NOT_RECEIVED) {
00091 CD_ParseMsg(&rx_buffer[rx_msg_start], rx_msg_end - rx_msg_start);
00092 }
00093
00094
00095 rx_cnt = 0;
00096 rx_msg_start = RX_START_MSG_NOT_RECEIVED;
00097
00098 } else {
00099 rx_buffer[rx_cnt++] = chr;
00100 }
00101 }
00102
00103
00104
00105
00106 void CD_LinkTXChar(unsigned char chr) {
00107
00108 while(!RXReady){};
00109 COMPutByte(chr);
00110 }
00111
00112
00113
00114 void CD_LinkTXStr(unsigned char *str) {
00115
00116 while(*str != '\0') {
00117 CD_LinkTXChar(*str);
00118 str++;
00119 }
00120 }
00121
00122
00123
00124 void CD_LinkMsgError(unsigned char cod) {
00125
00126 unsigned char msg[3];
00127
00128 CD_u8_ToHexaStr(cod, 2, msg);
00129
00130 CD_LinkTXStr("#?");
00131 CD_LinkTXStr(msg);
00132 CD_LinkTXChar('\x0D');
00133 }
00134
00135
00136
00137 void CD_LinkMsgOK(void) {
00138 CD_LinkTXStr("#!\x0D");
00139 }