firmware for the SOLID Slow Control Module for SM1

Dependencies:   S_SCTRL_SMlib adc_ad9249 mbed sscm_comm AD5384 SWSPI T_adt7320

Revision:
5:4177f8012a25
Parent:
4:009703f995c6
Child:
6:3a92f9f93d80
--- a/main.cpp	Tue Oct 14 17:11:31 2014 +0000
+++ b/main.cpp	Thu Oct 23 17:26:31 2014 +0000
@@ -19,9 +19,12 @@
   * v 1.55  removed decode message , messages on the ADC commands 
   * v 1.60  added set cal values fire call , error codes corrected 
   * v 1.61  corrected BIAS channel, introduced DEIMOS32.h 
+  * v 1.65  added heartbeat on / off,  added set cal level
+  * v 1.66  implemented real  temperature readout 
+  * v 1.70  implemented set_volt and get_volt commands
 */ 
 
-#define VERSION "1.63"
+#define VERSION "1.70"
 
 
 #include "SWSPI_BI.h"
@@ -187,23 +190,43 @@
                             dac[cmd.con-1][cmd.devnr-1].set_dac(chc,cmd.datain);cmd.dataout=cmd.datain;cmd.status=0; 
                         }
                         goto DACENDCMD;
-                     }   
+                     }
+                     if (!strcmp( cmd.cmd, "svlt")) {
+                        for (chc= stch ; chc < endch; chc++){ 
+                            float volt= u162float( cmd.dataout , cmd.datain);
+                            dac[cmd.con-1][cmd.devnr-1].set_volt(chc,volt);cmd.status=0; 
+                        }
+                        goto DACENDCMD;
+                     }      
                      // next is not very usefull for multiple channels 
                      if (!strcmp( cmd.cmd, "rdac")) {
                         for (chc= stch ; chc < endch; chc++){ 
                             do16=dac[cmd.con-1][cmd.devnr-1].get_dac(chc);cmd.dataout=do16;cmd.status=0;
                         }
                         goto DACENDCMD;
-                     }     
+                     }
+                     if (!strcmp( cmd.cmd, "gvlt")) {
+                        for (chc= stch ; chc < endch; chc++){ 
+                            float volt=dac[cmd.con-1][cmd.devnr-1].get_volt(chc);
+                            float2_2u16( volt , cmd.dataout , cmd.datain);
+                            cmd.status=0;
+                        }
+                        goto DACENDCMD;
+                     }          
                      DACENDCMD : ;
                 }break; 
                 case TEMP : cmd.status=2;
+                        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;
+                        }
                         if (!strcmp( cmd.cmd, "rtpd")){ do16=temp[cmd.con-1][cmd.devnr-1].get_T();cmd.dataout=do16;cmd.status=0;}
                         if (!strcmp( cmd.cmd, "gtid")){ do8=temp[cmd.con-1][cmd.devnr-1].getId();cmd.dataout=do8;cmd.status=0;}
                         if (!strcmp( cmd.cmd, "rtcr")){ do16=temp[cmd.con-1][cmd.devnr-1].get_TcritSP();cmd.dataout=do16;cmd.status=0;}
                         if (!strcmp( cmd.cmd, "stcr")){ temp[cmd.con-1][cmd.devnr-1].set_TcritSP(cmd.datain);cmd.dataout=cmd.datain;cmd.status=0;}
                         if (!strcmp( cmd.cmd, "ghrv")) {do16=temp[cmd.con-1][cmd.devnr-1].getHdrVersion();cmd.dataout=do16; cmd.status=0;}
                         if (!strcmp( cmd.cmd, "gscv")) {do16=temp[cmd.con-1][cmd.devnr-1].getSrcVersion();cmd.dataout=do16; cmd.status=0;}
+                        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;
@@ -211,8 +234,13 @@
                         cmd.status=2;
                         // generate internal CAL 
                         if (!strcmp( cmd.cmd, "acal")){toggle_cal(hwl,cmd.ch );cmd.status=0;}
+                        // set calline lvl 
+                        if (!strcmp( cmd.cmd, "scll")){set_cal_line(hwl,cmd.ch, cmd.datain );cmd.status=0;}
                         // heartbeat 
-                        if (!strcmp( cmd.cmd, "t_hb")) { heartbeat=!heartbeat;cmd.status=0;}
+                        if (!strcmp( cmd.cmd, "t_hb")) { if ( cmd.datain ==0 ) heartbeat=false;
+                                                         if ( cmd.datain ==1 ) heartbeat=true;
+                                                         if (  cmd.datain ==2)  heartbeat=!heartbeat;cmd.status=0;
+                        }
                         //get main version
                         if (!strcmp( cmd.cmd, "gmpv")) {do16=gv.getHdrVersion();cmd.dataout=do16; cmd.status=0;}
                         // get module serial nr