firmware for the SOLID Slow Control Module for SM1
Dependencies: S_SCTRL_SMlib adc_ad9249 mbed sscm_comm AD5384 SWSPI T_adt7320
Diff: main.cpp
- Revision:
- 10:efd3f490648c
- Parent:
- 9:20fc5a795ec4
- Child:
- 11:b1e6d7c18790
diff -r 20fc5a795ec4 -r efd3f490648c main.cpp --- a/main.cpp Sun Dec 07 23:43:41 2014 +0000 +++ b/main.cpp Tue Jan 20 16:00:27 2015 +0000 @@ -23,11 +23,16 @@ * v 1.66 implemented real temperature readout * v 1.70 implemented set_volt and get_volt commands * v 1.72 implemented setbias , get bias volt dummy - * v 1.73 implemented setbias , get bias volt via Deimos32 class - * v 1.74 added check for empty deimos pointer + * v 1.73 implemented setbias , get bias volt via Deimos32 class + * v 1.74 added check for empty deimos pointer + * v 1.75 added check for devnr < 1 + * v 1.76 added check for devnr per device type , added connector range ( only 1 or 2 are accepted) + * v 1.78 canged the place of cmd read to the end of the mail loop was at the start + * v 1.79 added hv stet /get string to replace bi(ias) old commands are still working + * wait only if cmd is not ready */ -#define VERSION "1.74 +#define VERSION "1.79" #include "SWSPI_BI.h" @@ -113,18 +118,19 @@ cmdready=false; while (1) { - wait(0.5); char cmdoutstr[100]; if (cmdready) { - cmdready=false; + //cmdready=false; int decresult=decode_cmd(cmdin,&cmd); //printf("decode result = %d \n\r" ,decresult); - if( decresult){ - decresult=abs(decresult); + decresult=abs(decresult); + if( cmd.con <1 || cmd.con > 2 ) { decresult= 0x04 +decresult; } + if( decresult){ u8 errcode=(u8)decresult ; errcode = 0xE0 + errcode; cmd.status=errcode; - encode_cmd ( cmdoutstr, &cmd); pc.printf( "%s", cmdoutstr); + encode_cmd ( cmdoutstr, &cmd); pc.printf( "%s", cmdoutstr); + cmdready=false; continue; } @@ -141,6 +147,8 @@ cmd.status=2; //pc.printf("ADC cmd = %s \n\r",cmd.cmd); //pc.printf("check now ranges %d %d \n\r",cmd.con, cmd.devnr); + if( cmd.devnr < 1 || cmd.devnr > 2 ) { cmd.status =3; } + else { if (!strcmp( cmd.cmd, "spa1")) { adc[cmd.con-1][cmd.devnr-1].setPattern1(cmd.datain);cmd.dataout=cmd.datain;cmd.status=0;} if (!strcmp( cmd.cmd, "spa2")) { adc[cmd.con-1][cmd.devnr-1].setPattern2(cmd.datain);cmd.dataout=cmd.datain;cmd.status=0;} if (!strcmp( cmd.cmd, "rpa1")) { adc[cmd.con-1][cmd.devnr-1].readPattern1(do16 ); cmd.dataout=do16; cmd.status=0; } @@ -153,9 +161,11 @@ if (!strcmp( cmd.cmd, "gscv")) {do16=adc[cmd.con-1][cmd.devnr-1].getSrcVersion();cmd.dataout=do16; cmd.status=0;} if (!strcmp( cmd.cmd, "ini1")) { adc[cmd.con-1][cmd.devnr-1].init1();cmd.dataout=cmd.datain;cmd.status=0;} if (!strcmp( cmd.cmd, "ini2")) { adc[cmd.con-1][cmd.devnr-1].init2();cmd.dataout=cmd.datain;cmd.status=0;} + } // end check dev nr. }break; case DAC :{ - cmd.status=2; + cmd.status=2; + if( cmd.devnr != 1 ) { cmd.status =3;goto DACENDCMD; } if (!strcmp( cmd.cmd, "ini1")) { dac[cmd.con-1][cmd.devnr-1].init1();cmd.dataout=cmd.datain;cmd.status=0; goto DACENDCMD;} if (!strcmp( cmd.cmd, "ini2")) { dac[cmd.con-1][cmd.devnr-1].init2();cmd.dataout=cmd.datain;cmd.status=0; goto DACENDCMD;} if (!strcmp( cmd.cmd, "srst")) { dac[cmd.con-1][cmd.devnr-1].soft_rst();cmd.dataout=cmd.datain;cmd.status=0;goto DACENDCMD;} @@ -164,16 +174,19 @@ if (!strcmp( cmd.cmd, "ghrv")) { do16=dac[cmd.con-1][cmd.devnr-1].getHdrVersion();cmd.dataout=do16; cmd.status=0;goto DACENDCMD;} if (!strcmp( cmd.cmd, "gscv")) { do16=dac[cmd.con-1][cmd.devnr-1].getSrcVersion();cmd.dataout=do16; cmd.status=0;goto DACENDCMD;} // set output register bias channel - if (!strcmp( cmd.cmd, "sbid")) { cmd.ch=DACBIASCH;dac[cmd.con-1][cmd.devnr-1].set_dac(cmd.ch-1,cmd.datain);cmd.dataout=cmd.datain;cmd.status=0;goto DACENDCMD;} - if (!strcmp( cmd.cmd, "gbid")) {cmd.ch=DACBIASCH;do16=dac[cmd.con-1][cmd.devnr-1].get_dac(cmd.ch-1);cmd.dataout=do16;cmd.status=0;goto DACENDCMD;} + if ((!strcmp( cmd.cmd, "sbid")) || (!strcmp( cmd.cmd, "shvd")) ) + { cmd.ch=DACBIASCH;dac[cmd.con-1][cmd.devnr-1].set_dac(cmd.ch-1,cmd.datain);cmd.dataout=cmd.datain;cmd.status=0;goto DACENDCMD;} + if ((!strcmp( cmd.cmd, "gbid")) || (!strcmp( cmd.cmd, "ghvd")) ) + {cmd.ch=DACBIASCH;do16=dac[cmd.con-1][cmd.devnr-1].get_dac(cmd.ch-1);cmd.dataout=do16;cmd.status=0;goto DACENDCMD;} if (!strcmp( cmd.cmd, "inhv")) { if(cmd.con== 0) {cmd.status=100;goto DACENDCMD;} // can not be broadcast ;} if(cmd.con > 2) {cmd.status=101;goto DACENDCMD;} + if( deimos[cmd.con-1] ) {cmd.status=102;goto DACENDCMD;} // if already init don't init again. float hvnom=u162float( cmd.dataout , cmd.datain); deimos[cmd.con-1]= new Deimos32(hvnom ,cmd.con-1,&dac[cmd.con-1][cmd.devnr-1]); cmd.status=0;goto DACENDCMD; } - if (!strcmp( cmd.cmd, "sbia")) { + if ((!strcmp( cmd.cmd, "sbia")) || (!strcmp( cmd.cmd, "sthv")) ) { float biasvolt= u162float( cmd.dataout , cmd.datain); u8 strtcnt=0; u8 stpcnt=2; if (cmd.con ==1) stpcnt=1; @@ -185,7 +198,7 @@ } cmd.status=u8(retvalue);goto DACENDCMD; } - if (!strcmp( cmd.cmd, "gbia")) { + if ((!strcmp( cmd.cmd, "gbia")) || (!strcmp( cmd.cmd, "gthv"))) { if ( cmd.con ==0 ) cmd.con=1; if (deimos[cmd.con-1]) { float volt=deimos[cmd.con-1]->getHv(); @@ -247,7 +260,8 @@ } DACENDCMD : ; }break; - case TEMP : cmd.status=2; + case TEMP : {cmd.status=2; + if( cmd.devnr < 1 || cmd.devnr > 3 ) { cmd.status =3; goto TEMPENDCMD; } if (!strcmp( cmd.cmd, "rtmp")){ float temperature=temp[cmd.con-1][cmd.devnr-1].getTemperature(); float2_2u16(temperature,cmd.dataout,cmd.datain);cmd.status=0; @@ -261,7 +275,8 @@ if (!strcmp( cmd.cmd, "gtmp")) {do16=temp[cmd.con-1][cmd.devnr-1].getSrcVersion();cmd.dataout=do16; cmd.status=0;} if (!strcmp( cmd.cmd, "ini1")) { temp[cmd.con-1][cmd.devnr-1].init1();cmd.dataout=cmd.datain;cmd.status=0;} if (!strcmp( cmd.cmd, "ini2")) { temp[cmd.con-1][cmd.devnr-1].init2();cmd.dataout=cmd.datain;cmd.status=0;} - break; + TEMPENDCMD : ; + }break; case SSCM: cmd.status=2; // generate internal CAL @@ -298,9 +313,11 @@ } // end switch encode_cmd ( cmdoutstr, &cmd); pc.printf( "%s", cmdoutstr); + cmdready=false; }//end if cmdready else { if ( heartbeat) printf( "%03d>%s\n\r",(i++ % 1000),cmdin); + wait(0.2); } }// end while