Communication for solid slow control.

Fork of sscm_comm by wimbeaumont Project

Committer:
NickRyder
Date:
Tue Oct 07 22:51:01 2014 +0000
Revision:
9:a68c382dea12
Parent:
7:6d3c421026df
I must have tidied the sscm_comm library elsewhere.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wbeaumont 2:1f9887337a1b 1 #if defined (TARGET_KL25Z)
wbeaumont 2:1f9887337a1b 2 // in mbed problems to call strtol
wbeaumont 2:1f9887337a1b 3 #include "mbed.h" // for the strtol
wbeaumont 2:1f9887337a1b 4 #else
wbeaumont 2:1f9887337a1b 5 #include <stlib.h> // for the strtol
wbeaumont 2:1f9887337a1b 6 #endif
wbeaumont 1:288db0531b1f 7
wbeaumont 1:288db0531b1f 8 #include "sscm_comm.h"
wbeaumont 0:2afae79ea9ca 9
wbeaumont 0:2afae79ea9ca 10
wbeaumont 7:6d3c421026df 11 #define SSCM_COMM_LIB_SRC_VERSION "3.31"
wbeaumont 0:2afae79ea9ca 12
wbeaumont 1:288db0531b1f 13 using namespace sscm_comm;
wbeaumont 0:2afae79ea9ca 14
wbeaumont 0:2afae79ea9ca 15 int sscm_comm::decode_cmd(char* input, ssc_cmd * sc){
NickRyder 9:a68c382dea12 16 char part[6];
NickRyder 9:a68c382dea12 17 int rv = 0;
NickRyder 9:a68c382dea12 18 part[0] = input[0];
NickRyder 9:a68c382dea12 19 part[1] = input[1];
NickRyder 9:a68c382dea12 20 part[2] = 0;
NickRyder 9:a68c382dea12 21 sc->module = (u8) strtol(part, NULL, 16);
NickRyder 9:a68c382dea12 22 if(input[3] != SEP) {
NickRyder 9:a68c382dea12 23 rv =-1; // tbd check for module range
NickRyder 9:a68c382dea12 24 } else {
NickRyder 9:a68c382dea12 25 u16 ic;//input counter
NickRyder 9:a68c382dea12 26 part[0] = input[4];
NickRyder 9:a68c382dea12 27 part[1] = input[5];
NickRyder 9:a68c382dea12 28 part[2] = 0;
NickRyder 9:a68c382dea12 29 sc->con = (u8) strtol(part, NULL, 16);
NickRyder 9:a68c382dea12 30 if(input[6] != SEP) {
NickRyder 9:a68c382dea12 31 rv = -2; // tbd check for connector range
NickRyder 9:a68c382dea12 32 } else {
NickRyder 9:a68c382dea12 33 part[0] = input[7];
NickRyder 9:a68c382dea12 34 part[1] = input[8];
NickRyder 9:a68c382dea12 35 part[2] = 0;
NickRyder 9:a68c382dea12 36 sc->dev = (ssc_dev) strtol(part, NULL, 16);
NickRyder 9:a68c382dea12 37 if (input[9] != SEP) {
NickRyder 9:a68c382dea12 38 rv = -3;
NickRyder 9:a68c382dea12 39 } else {
NickRyder 9:a68c382dea12 40 ic = 10;
NickRyder 9:a68c382dea12 41 part[0] = input[ic++];
NickRyder 9:a68c382dea12 42 part[1] = input[ic++];
NickRyder 9:a68c382dea12 43 part[2] = 0;
NickRyder 9:a68c382dea12 44 sc->devnr = (u8) strtol(part, NULL, 16);
NickRyder 9:a68c382dea12 45 if (input[ic++] != SEP) {
NickRyder 9:a68c382dea12 46 rv = -9;
NickRyder 9:a68c382dea12 47 } else {
NickRyder 9:a68c382dea12 48 sc->cmd[0] = input[ic++];
NickRyder 9:a68c382dea12 49 sc->cmd[1] = input[ic++];
NickRyder 9:a68c382dea12 50 sc->cmd[2] = input[ic++];
NickRyder 9:a68c382dea12 51 sc->cmd[3] = input[ic++];
NickRyder 9:a68c382dea12 52 sc->cmd[4] = '\0';
NickRyder 9:a68c382dea12 53 if (input[ic++] != SEP) {
NickRyder 9:a68c382dea12 54 rv = -4;
NickRyder 9:a68c382dea12 55 } else {
NickRyder 9:a68c382dea12 56 part[0] = input[ic++];
NickRyder 9:a68c382dea12 57 part[1] = input[ic++];
NickRyder 9:a68c382dea12 58 part[2] = 0;
NickRyder 9:a68c382dea12 59 sc->ch = (u8) strtol(part, NULL, 16);
NickRyder 9:a68c382dea12 60 if (input[ic++] != SEP) {
NickRyder 9:a68c382dea12 61 rv= -5;
NickRyder 9:a68c382dea12 62 } else {
NickRyder 9:a68c382dea12 63 part[0] = input[ic++];
NickRyder 9:a68c382dea12 64 part[1] = input[ic++];
NickRyder 9:a68c382dea12 65 part[2] = input[ic++];
NickRyder 9:a68c382dea12 66 part[3] = input[ic++];
NickRyder 9:a68c382dea12 67 part[4] = 0;
NickRyder 9:a68c382dea12 68 sc->datain = (u16) strtol(part, NULL, 16);
NickRyder 9:a68c382dea12 69 if(input[ic++] != SEP) {
NickRyder 9:a68c382dea12 70 rv= -6;
NickRyder 9:a68c382dea12 71 } else {
NickRyder 9:a68c382dea12 72 part[0] = input[ic++];
NickRyder 9:a68c382dea12 73 part[1] = input[ic++];
NickRyder 9:a68c382dea12 74 part[2] = input[ic++];
NickRyder 9:a68c382dea12 75 part[3] = input[ic++];
NickRyder 9:a68c382dea12 76 part[4] = 0;
NickRyder 9:a68c382dea12 77 sc->dataout = (u16) strtol(part, NULL, 16);
NickRyder 9:a68c382dea12 78 if (input[ic++] != SEP) {
NickRyder 9:a68c382dea12 79 rv= -7;
NickRyder 9:a68c382dea12 80 } else {
NickRyder 9:a68c382dea12 81 part[0] = input[ic++];
NickRyder 9:a68c382dea12 82 part[1] = input[ic++];
NickRyder 9:a68c382dea12 83 part[4] = 0;
NickRyder 9:a68c382dea12 84 sc->status = (u8) strtol(part, NULL, 16);
NickRyder 9:a68c382dea12 85 if (input[ic++] != SEP) {
NickRyder 9:a68c382dea12 86 rv = -8;
NickRyder 9:a68c382dea12 87 } else {
NickRyder 9:a68c382dea12 88 rv = 0;
NickRyder 9:a68c382dea12 89 }
NickRyder 9:a68c382dea12 90 }
NickRyder 9:a68c382dea12 91 }
NickRyder 9:a68c382dea12 92 }
NickRyder 9:a68c382dea12 93 }
NickRyder 9:a68c382dea12 94 }
NickRyder 9:a68c382dea12 95 }
NickRyder 9:a68c382dea12 96 }
NickRyder 9:a68c382dea12 97 }
NickRyder 9:a68c382dea12 98 int crr = check_ranges(sc);
NickRyder 9:a68c382dea12 99 if (crr < 0) rv = crr;
NickRyder 9:a68c382dea12 100 for (int i = 0; i < 27; i++) {
NickRyder 9:a68c382dea12 101 input[i] = 0;
NickRyder 9:a68c382dea12 102 }
NickRyder 9:a68c382dea12 103 return rv;
wbeaumont 0:2afae79ea9ca 104 }
wbeaumont 0:2afae79ea9ca 105
NickRyder 9:a68c382dea12 106 int sscm_comm::check_ranges(ssc_cmd * sc) {
NickRyder 9:a68c382dea12 107 int rv = 1; // no check done
NickRyder 9:a68c382dea12 108 // devnr check
NickRyder 9:a68c382dea12 109 if (sc->con < 1 || sc->con > 2) {
NickRyder 9:a68c382dea12 110 rv = -43;
NickRyder 9:a68c382dea12 111 goto RVOUT; // goto jail. Do not collect £200.
NickRyder 9:a68c382dea12 112 }
NickRyder 9:a68c382dea12 113 switch (sc->dev) {
NickRyder 9:a68c382dea12 114 case ADC:
NickRyder 9:a68c382dea12 115 if (sc->devnr < 1 || sc->devnr > 2) {
NickRyder 9:a68c382dea12 116 rv = -23;
NickRyder 9:a68c382dea12 117 break;
NickRyder 9:a68c382dea12 118 }
NickRyder 9:a68c382dea12 119 break;
NickRyder 9:a68c382dea12 120 case TEMP:
NickRyder 9:a68c382dea12 121 if (sc->ch < 1 || sc->ch > 2) {
NickRyder 9:a68c382dea12 122 rv = -22;
NickRyder 9:a68c382dea12 123 break;
NickRyder 9:a68c382dea12 124 }
NickRyder 9:a68c382dea12 125 break;
NickRyder 9:a68c382dea12 126 default:
NickRyder 9:a68c382dea12 127 rv = 1;
NickRyder 9:a68c382dea12 128 }
NickRyder 9:a68c382dea12 129 RVOUT:
NickRyder 9:a68c382dea12 130 return rv;
wbeaumont 2:1f9887337a1b 131 }
wbeaumont 2:1f9887337a1b 132
NickRyder 9:a68c382dea12 133 void sscm_comm::encode_cmd(char * output, ssc_cmd * sc) {
NickRyder 9:a68c382dea12 134 sprintf(output,
NickRyder 9:a68c382dea12 135 "%c%02X%c%02X%c%02X%c%02X%c%c%c%c%c%c%02X%c%04X%c%04X%c%02X%c%c\0",
NickRyder 9:a68c382dea12 136 CMDSTART, sc->module, SEP, sc->con, SEP, sc->dev, SEP, sc->devnr,
NickRyder 9:a68c382dea12 137 SEP, sc->cmd[0], sc->cmd[1], sc->cmd[2], sc->cmd[3],
NickRyder 9:a68c382dea12 138 SEP, sc->ch, SEP, sc->datain, SEP, sc->dataout, SEP,
NickRyder 9:a68c382dea12 139 sc->status, SEP, CMDSTOP);
NickRyder 9:a68c382dea12 140 }
wbeaumont 0:2afae79ea9ca 141
NickRyder 9:a68c382dea12 142 void sscm_comm::getmodulecordinate(u8 plane, u8& modulenr, u8& connr, u8& serialnr) {
wbeaumont 1:288db0531b1f 143 // to be implemented
wbeaumont 1:288db0531b1f 144 modulenr=0;
wbeaumont 6:d9a96735d0fb 145 }
wbeaumont 6:d9a96735d0fb 146
wbeaumont 7:6d3c421026df 147 /*
wbeaumont 7:6d3c421026df 148 u16 sscm_comm::getSrcVersion(){
NickRyder 9:a68c382dea12 149 return get_hex_version_nr(SSCM_COMM_LIB_SRC_VERSION);
wbeaumont 7:6d3c421026df 150 }
wbeaumont 6:d9a96735d0fb 151
wbeaumont 7:6d3c421026df 152 u16 sscm_comm::getHdrVersion(){
NickRyder 9:a68c382dea12 153 return get_hex_version_nr(SSCM_COMM_LIB_HDR_VERSION );
wbeaumont 7:6d3c421026df 154 }
wbeaumont 7:6d3c421026df 155 */
NickRyder 9:a68c382dea12 156
NickRyder 9:a68c382dea12 157 void sscm_comm::get_mppc_dac_chnr(u8 plane, u8 x, u8 y, u8& ch, u8& modulenr,
NickRyder 9:a68c382dea12 158 u8& connr, u8& dacch, u8& serialnr) {
NickRyder 9:a68c382dea12 159 }
wbeaumont 7:6d3c421026df 160
NickRyder 9:a68c382dea12 161 void sscm_comm::get_mppc_adc_chnr(u8 plane, u8 x , u8 y, u8& ch, u8& modulenr,
NickRyder 9:a68c382dea12 162 u8& connr, u8& adcdevnr, u8& adcchnr,
NickRyder 9:a68c382dea12 163 u8& serialnr) {
NickRyder 9:a68c382dea12 164 }
wbeaumont 7:6d3c421026df 165
NickRyder 9:a68c382dea12 166 sscm_comm::getsscmVersion::getsscmVersion():
NickRyder 9:a68c382dea12 167 getVersion(SSCM_COMM_LIB_HDR_VERSION, SSCM_COMM_LIB_SRC_VERSION, __TIME__, __DATE__){
NickRyder 9:a68c382dea12 168 }