00001
00012 #include <cdm_link.h>
00013
00014 #include <cdm_daq.h>
00015
00016 #include <stdio.h>
00017 #include <string.h>
00018
00019 #define MSG_BUF_SIZE 100 // size of the temporal buufer for message creation and reception
00020
00021
00045 cdm_Error cdm_DAQWriteDigitalLine(uint8_t subdevice, uint8_t line, uint8_t value) {
00046
00047 char buff[MSG_BUF_SIZE];
00048 cdm_Error cdm_result;
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 if (line > 32) {
00060 return(CD_Error_DAQBadLine);
00061 }
00062 if ((value !=0) && (value != 1)) {
00063 return(CD_Error_BadValue);
00064 }
00065
00066
00067 cdm_LinkRXClearBuffer();
00068
00069
00070 sprintf(buff,"#DOL%02x%02x%d\x0D",(int)subdevice,(int)line,(int)value);
00071
00072
00073 cdm_result = cdm_LinkTXStr(buff);
00074 if (cdm_result != CD_Error_NoError) {
00075 return(cdm_result);
00076 }
00077
00078
00079 cdm_result = cdm_LinkRXMessage(buff);
00080 if (cdm_result != CD_Error_NoError) {
00081 return(cdm_result);
00082 }
00083
00084
00085
00086
00087 return(CD_Error_NoError);
00088 }
00089
00090
00091 cd_Error cdm_DAQReadDigitalLine(uint8_t subdevice, uint8_t line, uint8_t *value) {
00092
00093 char buff[MSG_BUF_SIZE];
00094 cd_Error cdm_result;
00095
00096
00097
00098 if (line > 32) {
00099 return(CD_Error_DAQBadLine);
00100 }
00101
00102
00103 cdm_LinkRXClearBuffer();
00104
00105
00106 sprintf(buff,"#DIL%02x%02x\x0D",(int)subdevice,(int)line);
00107
00108
00109 cdm_result = cdm_LinkTXStr(buff);
00110 if (cdm_result != CD_Error_NoError) {
00111 return(cdm_result);
00112 }
00113
00114
00115 cdm_result = cdm_LinkRXMessage(buff);
00116
00117
00118
00119 if (cdm_result != CD_Error_NoError) {
00120 return(cdm_result);
00121 } else {
00122
00123 if ((strlen(buff) == 2) && (buff[0]='!')) {
00124 switch (buff[1]) {
00125 case '1':
00126 *value = 1;
00127 break;
00128 case '0':
00129 *value = 0;
00130 break;
00131 default:
00132 return(CD_Error_UnimplementedError);
00133 break;
00134 }
00135 } else {
00136 return(CD_Error_UnimplementedError);
00137 }
00138 }
00139
00140
00141
00142
00143 return(CD_Error_NoError);
00144
00145
00146 }
00147
00148
00149
00150
00151 cdm_Error cdm_DAQReadDigitalFrecuency(int subdevice, double *value) {
00152
00153 char buff[MSG_BUF_SIZE];
00154 cdm_Error cdm_result;
00155
00156
00157
00158
00159 if ((subdevice < 0) || (subdevice > 255)) {
00160 return(CD_Error_DAQBadSubdevice);
00161 }
00162
00163
00164 cdm_LinkRXClearBuffer();
00165
00166
00167 sprintf(buff,"#DIF%02d\x0D",subdevice);
00168
00169
00170 cdm_result = cdm_LinkTXStr(buff);
00171 if (cdm_result != CD_Error_NoError) {
00172 return(cdm_result);
00173 }
00174
00175
00176 cdm_result = cdm_LinkRXMessage(buff);
00177
00178 if (cdm_result != CD_Error_NoError) {
00179 return(cdm_result);
00180 }
00181
00182
00183 if (strlen(buff) == 11) {
00184 int i;
00185 sscanf(buff+1,"%d",&i);
00186 *value = i;
00187 } else {
00188 return(CD_Error_UnimplementedError);
00189 }
00190
00191 return(CD_Error_NoError);
00192
00193
00194 }
00195
00196
00197 cdm_Error cdm_DAQWritePWM(int subdevice, double dutty_cycle) {
00198
00199 char buff[MSG_BUF_SIZE];
00200 cdm_Error cdm_result;
00201 int dummy;
00202
00203
00204
00205
00206 if ((subdevice < 0) || (subdevice > 255)) {
00207 return(CD_Error_DAQBadSubdevice);
00208 }
00209
00210
00211 cdm_LinkRXClearBuffer();
00212
00213
00214 dummy = dutty_cycle * 10.0;
00215 sprintf(buff,"#PWM%02d%04d\x0D",subdevice,dummy);
00216
00217
00218
00219
00220 cdm_result = cdm_LinkTXStr(buff);
00221 if (cdm_result != CD_Error_NoError) {
00222 return(cdm_result);
00223 }
00224
00225
00226 cdm_result = cdm_LinkRXMessage(buff);
00227
00228 return(cdm_result);
00229 }