Library for the JRO Radar Controller

Dependents:   JRO_CR2 frdm_test

Committer:
joaquinbvw
Date:
Mon Mar 14 19:38:54 2016 +0000
Revision:
0:e3f3fe2e689b
CR2 first attempt.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joaquinbvw 0:e3f3fe2e689b 1 #include "CR2.h"
joaquinbvw 0:e3f3fe2e689b 2
joaquinbvw 0:e3f3fe2e689b 3 static char controlRegister[4];
joaquinbvw 0:e3f3fe2e689b 4 static char read_spi_data[6];
joaquinbvw 0:e3f3fe2e689b 5
joaquinbvw 0:e3f3fe2e689b 6 static char* KO_MSG = "KO";
joaquinbvw 0:e3f3fe2e689b 7 static char* OK_MSG = "OK";
joaquinbvw 0:e3f3fe2e689b 8 static char* NI_MSG = "NI";
joaquinbvw 0:e3f3fe2e689b 9
joaquinbvw 0:e3f3fe2e689b 10 static char* ZERO_MSG = "\x00";
joaquinbvw 0:e3f3fe2e689b 11 static char* ONE_MSG = "\x01";
joaquinbvw 0:e3f3fe2e689b 12
joaquinbvw 0:e3f3fe2e689b 13 static char *MODULATION[6] = {"None ", "FSK ", "Ramped FSK ", "Chirp ", "BPSK ", "Not Allowed "};
joaquinbvw 0:e3f3fe2e689b 14
joaquinbvw 0:e3f3fe2e689b 15 CR2::CR2(SPI *spi_dev, DigitalOut *mreset, DigitalOut *outramp, DigitalOut *spmode, DigitalOut *cs, DigitalOut *ioreset, DigitalInOut *updclk){
joaquinbvw 0:e3f3fe2e689b 16
joaquinbvw 0:e3f3fe2e689b 17 spi_device = spi_dev;
joaquinbvw 0:e3f3fe2e689b 18
joaquinbvw 0:e3f3fe2e689b 19 cr2_mreset = mreset;
joaquinbvw 0:e3f3fe2e689b 20 cr2_outramp = outramp;
joaquinbvw 0:e3f3fe2e689b 21 cr2_sp_mode = spmode;
joaquinbvw 0:e3f3fe2e689b 22 cr2_cs = cs;
joaquinbvw 0:e3f3fe2e689b 23 cr2_io_reset = ioreset;
joaquinbvw 0:e3f3fe2e689b 24 cr2_updclk = updclk;
joaquinbvw 0:e3f3fe2e689b 25
joaquinbvw 0:e3f3fe2e689b 26 cr2_updclk->input();
joaquinbvw 0:e3f3fe2e689b 27 *cr2_sp_mode = 0;
joaquinbvw 0:e3f3fe2e689b 28 *cr2_cs = 1;
joaquinbvw 0:e3f3fe2e689b 29 *cr2_outramp = 0;
joaquinbvw 0:e3f3fe2e689b 30
joaquinbvw 0:e3f3fe2e689b 31 cmd_answer = NULL;
joaquinbvw 0:e3f3fe2e689b 32 cmd_answer_len = 0;
joaquinbvw 0:e3f3fe2e689b 33
joaquinbvw 0:e3f3fe2e689b 34 spi_device->format(SPI_BITS, SPI_MODE);
joaquinbvw 0:e3f3fe2e689b 35 spi_device->frequency(SPI_FREQ);
joaquinbvw 0:e3f3fe2e689b 36
joaquinbvw 0:e3f3fe2e689b 37 this->isConfig = false;
joaquinbvw 0:e3f3fe2e689b 38
joaquinbvw 0:e3f3fe2e689b 39 }
joaquinbvw 0:e3f3fe2e689b 40
joaquinbvw 0:e3f3fe2e689b 41 int CR2::__writeData(char addr, char data){
joaquinbvw 0:e3f3fe2e689b 42
joaquinbvw 0:e3f3fe2e689b 43 // I/O reset
joaquinbvw 0:e3f3fe2e689b 44 *cr2_updclk = 0;
joaquinbvw 0:e3f3fe2e689b 45 *cr2_io_reset = 1;
joaquinbvw 0:e3f3fe2e689b 46 wait_us(10);
joaquinbvw 0:e3f3fe2e689b 47 *cr2_io_reset = 0;
joaquinbvw 0:e3f3fe2e689b 48 wait_us(10);
joaquinbvw 0:e3f3fe2e689b 49
joaquinbvw 0:e3f3fe2e689b 50 *cr2_cs = 0;
joaquinbvw 0:e3f3fe2e689b 51
joaquinbvw 0:e3f3fe2e689b 52 //Sending serial address
joaquinbvw 0:e3f3fe2e689b 53 //printf("\r\nWriting Addr = %d", addr);
joaquinbvw 0:e3f3fe2e689b 54 spi_device->write(addr | 0x80);
joaquinbvw 0:e3f3fe2e689b 55 wait_us(150);
joaquinbvw 0:e3f3fe2e689b 56 spi_device->write(data);
joaquinbvw 0:e3f3fe2e689b 57
joaquinbvw 0:e3f3fe2e689b 58 *cr2_cs = 1;
joaquinbvw 0:e3f3fe2e689b 59 /*
joaquinbvw 0:e3f3fe2e689b 60 for(char i = 0; i < ndata; i++)
joaquinbvw 0:e3f3fe2e689b 61 {
joaquinbvw 0:e3f3fe2e689b 62 printf("\tData[%d] = 0x%x", i, data[i]);
joaquinbvw 0:e3f3fe2e689b 63 }
joaquinbvw 0:e3f3fe2e689b 64 */
joaquinbvw 0:e3f3fe2e689b 65
joaquinbvw 0:e3f3fe2e689b 66
joaquinbvw 0:e3f3fe2e689b 67 wait_us(10);
joaquinbvw 0:e3f3fe2e689b 68 *cr2_updclk = 1;
joaquinbvw 0:e3f3fe2e689b 69 wait_us(10);
joaquinbvw 0:e3f3fe2e689b 70 *cr2_updclk = 0;
joaquinbvw 0:e3f3fe2e689b 71 wait_us(10);
joaquinbvw 0:e3f3fe2e689b 72
joaquinbvw 0:e3f3fe2e689b 73 return 1;
joaquinbvw 0:e3f3fe2e689b 74 }
joaquinbvw 0:e3f3fe2e689b 75
joaquinbvw 0:e3f3fe2e689b 76 int CR2::writeBlock(char ndata, const char* data){
joaquinbvw 0:e3f3fe2e689b 77
joaquinbvw 0:e3f3fe2e689b 78 // I/O reset
joaquinbvw 0:e3f3fe2e689b 79 *cr2_updclk = 0;
joaquinbvw 0:e3f3fe2e689b 80 *cr2_io_reset = 1;
joaquinbvw 0:e3f3fe2e689b 81 wait_us(10);
joaquinbvw 0:e3f3fe2e689b 82 *cr2_io_reset = 0;
joaquinbvw 0:e3f3fe2e689b 83 wait_us(10);
joaquinbvw 0:e3f3fe2e689b 84
joaquinbvw 0:e3f3fe2e689b 85 *cr2_cs = 0;
joaquinbvw 0:e3f3fe2e689b 86
joaquinbvw 0:e3f3fe2e689b 87 for(char i = 0; i < (ndata/2); i++)
joaquinbvw 0:e3f3fe2e689b 88 {
joaquinbvw 0:e3f3fe2e689b 89 wait_us(150);
joaquinbvw 0:e3f3fe2e689b 90 char addr = data[2*i];
joaquinbvw 0:e3f3fe2e689b 91 char dat = data[2*i+1];
joaquinbvw 0:e3f3fe2e689b 92 this->__writeData(addr,dat);
joaquinbvw 0:e3f3fe2e689b 93 }
joaquinbvw 0:e3f3fe2e689b 94
joaquinbvw 0:e3f3fe2e689b 95 *cr2_cs = 1;
joaquinbvw 0:e3f3fe2e689b 96 /*
joaquinbvw 0:e3f3fe2e689b 97 for(char i = 0; i < ndata; i++)
joaquinbvw 0:e3f3fe2e689b 98 {
joaquinbvw 0:e3f3fe2e689b 99 printf("\tData[%d] = 0x%x", i, data[i]);
joaquinbvw 0:e3f3fe2e689b 100 }
joaquinbvw 0:e3f3fe2e689b 101 */
joaquinbvw 0:e3f3fe2e689b 102
joaquinbvw 0:e3f3fe2e689b 103
joaquinbvw 0:e3f3fe2e689b 104 wait_us(10);
joaquinbvw 0:e3f3fe2e689b 105 *cr2_updclk = 1;
joaquinbvw 0:e3f3fe2e689b 106 wait_us(10);
joaquinbvw 0:e3f3fe2e689b 107 *cr2_updclk = 0;
joaquinbvw 0:e3f3fe2e689b 108 wait_us(10);
joaquinbvw 0:e3f3fe2e689b 109
joaquinbvw 0:e3f3fe2e689b 110 if (ndata%2)
joaquinbvw 0:e3f3fe2e689b 111 {
joaquinbvw 0:e3f3fe2e689b 112 return 0;
joaquinbvw 0:e3f3fe2e689b 113 }
joaquinbvw 0:e3f3fe2e689b 114 else
joaquinbvw 0:e3f3fe2e689b 115 {
joaquinbvw 0:e3f3fe2e689b 116 return 1;
joaquinbvw 0:e3f3fe2e689b 117 }
joaquinbvw 0:e3f3fe2e689b 118 }
joaquinbvw 0:e3f3fe2e689b 119
joaquinbvw 0:e3f3fe2e689b 120 char CR2::__readData(char addr){
joaquinbvw 0:e3f3fe2e689b 121
joaquinbvw 0:e3f3fe2e689b 122 char spi_data = 0;
joaquinbvw 0:e3f3fe2e689b 123 // I/O reset
joaquinbvw 0:e3f3fe2e689b 124 *cr2_io_reset = 1;
joaquinbvw 0:e3f3fe2e689b 125 wait_us(10);
joaquinbvw 0:e3f3fe2e689b 126 *cr2_io_reset = 0;
joaquinbvw 0:e3f3fe2e689b 127 wait_us(10);
joaquinbvw 0:e3f3fe2e689b 128
joaquinbvw 0:e3f3fe2e689b 129 *cr2_cs = 0;
joaquinbvw 0:e3f3fe2e689b 130
joaquinbvw 0:e3f3fe2e689b 131 //Sending serial address
joaquinbvw 0:e3f3fe2e689b 132 //printf("\r\nReading Addr = %d", addr);
joaquinbvw 0:e3f3fe2e689b 133 spi_device->write(addr & 0x7F);
joaquinbvw 0:e3f3fe2e689b 134
joaquinbvw 0:e3f3fe2e689b 135 wait_us(150);
joaquinbvw 0:e3f3fe2e689b 136 spi_data = spi_device->write(0x00);
joaquinbvw 0:e3f3fe2e689b 137
joaquinbvw 0:e3f3fe2e689b 138 *cr2_cs = 1;
joaquinbvw 0:e3f3fe2e689b 139 /*
joaquinbvw 0:e3f3fe2e689b 140 for(char i = 0; i < ndata; i++)
joaquinbvw 0:e3f3fe2e689b 141 {
joaquinbvw 0:e3f3fe2e689b 142 printf("\r\nData[%d] = 0x%x", i, read_spi_data[i]);
joaquinbvw 0:e3f3fe2e689b 143 }
joaquinbvw 0:e3f3fe2e689b 144 */
joaquinbvw 0:e3f3fe2e689b 145
joaquinbvw 0:e3f3fe2e689b 146 wait_us(10);
joaquinbvw 0:e3f3fe2e689b 147
joaquinbvw 0:e3f3fe2e689b 148 return spi_data;
joaquinbvw 0:e3f3fe2e689b 149 }
joaquinbvw 0:e3f3fe2e689b 150
joaquinbvw 0:e3f3fe2e689b 151 int CR2::__writeDataAndVerify(char addr, char wr_spi_data, SerialDriver *screen){
joaquinbvw 0:e3f3fe2e689b 152
joaquinbvw 0:e3f3fe2e689b 153 int success;
joaquinbvw 0:e3f3fe2e689b 154 char rd_spi_data;
joaquinbvw 0:e3f3fe2e689b 155
joaquinbvw 0:e3f3fe2e689b 156 this->__writeData(addr, wr_spi_data);
joaquinbvw 0:e3f3fe2e689b 157 rd_spi_data = this->__readData(addr);
joaquinbvw 0:e3f3fe2e689b 158
joaquinbvw 0:e3f3fe2e689b 159 success = 1;
joaquinbvw 0:e3f3fe2e689b 160
joaquinbvw 0:e3f3fe2e689b 161 screen->putc(wr_spi_data);
joaquinbvw 0:e3f3fe2e689b 162 screen->putc(0x3D);
joaquinbvw 0:e3f3fe2e689b 163 screen->putc(rd_spi_data);
joaquinbvw 0:e3f3fe2e689b 164 if (wr_spi_data != rd_spi_data)
joaquinbvw 0:e3f3fe2e689b 165 {
joaquinbvw 0:e3f3fe2e689b 166 success = 0;
joaquinbvw 0:e3f3fe2e689b 167 }
joaquinbvw 0:e3f3fe2e689b 168
joaquinbvw 0:e3f3fe2e689b 169 //Update Control Register
joaquinbvw 0:e3f3fe2e689b 170 /*
joaquinbvw 0:e3f3fe2e689b 171 if ((success == 1) && (addr==0x07)){
joaquinbvw 0:e3f3fe2e689b 172 cr2_multiplier = rd_spi_data[1] & 0x1F;
joaquinbvw 0:e3f3fe2e689b 173 cr2_mode = (rd_spi_data[2] & 0x0E) >> 1;
joaquinbvw 0:e3f3fe2e689b 174 }
joaquinbvw 0:e3f3fe2e689b 175 */
joaquinbvw 0:e3f3fe2e689b 176 //printf("\r\nSuccessful writting = %d\r\n", success);
joaquinbvw 0:e3f3fe2e689b 177
joaquinbvw 0:e3f3fe2e689b 178 return success;
joaquinbvw 0:e3f3fe2e689b 179 }
joaquinbvw 0:e3f3fe2e689b 180 /*
joaquinbvw 0:e3f3fe2e689b 181 char* CR2::__getControlRegister(){
joaquinbvw 0:e3f3fe2e689b 182
joaquinbvw 0:e3f3fe2e689b 183 bool pll_range = 0;
joaquinbvw 0:e3f3fe2e689b 184 bool pll_bypass = 1;
joaquinbvw 0:e3f3fe2e689b 185
joaquinbvw 0:e3f3fe2e689b 186 if (cr2_multiplier >= 4){
joaquinbvw 0:e3f3fe2e689b 187 pll_bypass = 0;
joaquinbvw 0:e3f3fe2e689b 188 }
joaquinbvw 0:e3f3fe2e689b 189
joaquinbvw 0:e3f3fe2e689b 190 if (clock >= 200){
joaquinbvw 0:e3f3fe2e689b 191 pll_range = 1;
joaquinbvw 0:e3f3fe2e689b 192 }
joaquinbvw 0:e3f3fe2e689b 193
joaquinbvw 0:e3f3fe2e689b 194 controlRegister[0] = 0x10 + cr2_qdac_pwdn*4;
joaquinbvw 0:e3f3fe2e689b 195 controlRegister[1] = pll_range*64 + pll_bypass*32 + (cr2_multiplier & 0x1F);
joaquinbvw 0:e3f3fe2e689b 196 controlRegister[2] = (cr2_mode & 0x07)*2 + cr2_ioupdclk;
joaquinbvw 0:e3f3fe2e689b 197 controlRegister[3] = cr2_inv_sinc*64 + cr2_osk_en*32 + cr2_osk_int*16 + cr2_msb_lsb*2 + cr2_sdo;
joaquinbvw 0:e3f3fe2e689b 198
joaquinbvw 0:e3f3fe2e689b 199 return controlRegister;
joaquinbvw 0:e3f3fe2e689b 200
joaquinbvw 0:e3f3fe2e689b 201 }
joaquinbvw 0:e3f3fe2e689b 202
joaquinbvw 0:e3f3fe2e689b 203 int CR2::__writeControlRegister(){
joaquinbvw 0:e3f3fe2e689b 204
joaquinbvw 0:e3f3fe2e689b 205 bool success;
joaquinbvw 0:e3f3fe2e689b 206 char wr_spi_data;
joaquinbvw 0:e3f3fe2e689b 207 char* rd_spi_data;
joaquinbvw 0:e3f3fe2e689b 208 char addr = 0x07, ndata = 4;
joaquinbvw 0:e3f3fe2e689b 209
joaquinbvw 0:e3f3fe2e689b 210 wr_spi_data = this->__getControlRegister();
joaquinbvw 0:e3f3fe2e689b 211
joaquinbvw 0:e3f3fe2e689b 212 success = this->__writeData(addr, wr_spi_data);
joaquinbvw 0:e3f3fe2e689b 213
joaquinbvw 0:e3f3fe2e689b 214 ////printf("\r\nChanging UPD_CLK as an OUTPUT ...");
joaquinbvw 0:e3f3fe2e689b 215 cr2_updclk->output();
joaquinbvw 0:e3f3fe2e689b 216
joaquinbvw 0:e3f3fe2e689b 217 wait_us(100);
joaquinbvw 0:e3f3fe2e689b 218 *cr2_updclk = 1;
joaquinbvw 0:e3f3fe2e689b 219 wait_us(10);
joaquinbvw 0:e3f3fe2e689b 220 *cr2_updclk = 0;
joaquinbvw 0:e3f3fe2e689b 221 wait_us(10);
joaquinbvw 0:e3f3fe2e689b 222
joaquinbvw 0:e3f3fe2e689b 223 rd_spi_data = this->__readData(addr);
joaquinbvw 0:e3f3fe2e689b 224
joaquinbvw 0:e3f3fe2e689b 225 success = true;
joaquinbvw 0:e3f3fe2e689b 226
joaquinbvw 0:e3f3fe2e689b 227 for(char i = 0; i < ndata; i++)
joaquinbvw 0:e3f3fe2e689b 228 {
joaquinbvw 0:e3f3fe2e689b 229 if (wr_spi_data[i] != rd_spi_data[i])
joaquinbvw 0:e3f3fe2e689b 230 {
joaquinbvw 0:e3f3fe2e689b 231 success = false;
joaquinbvw 0:e3f3fe2e689b 232 break;
joaquinbvw 0:e3f3fe2e689b 233 }
joaquinbvw 0:e3f3fe2e689b 234 }
joaquinbvw 0:e3f3fe2e689b 235
joaquinbvw 0:e3f3fe2e689b 236 return success;
joaquinbvw 0:e3f3fe2e689b 237 }
joaquinbvw 0:e3f3fe2e689b 238 */
joaquinbvw 0:e3f3fe2e689b 239
joaquinbvw 0:e3f3fe2e689b 240 int CR2::reset(){
joaquinbvw 0:e3f3fe2e689b 241
joaquinbvw 0:e3f3fe2e689b 242 // Master reset
joaquinbvw 0:e3f3fe2e689b 243 //Set as a input, temporary
joaquinbvw 0:e3f3fe2e689b 244 //printf("\r\nChange updclk direction as an INPUT ...\r\n");
joaquinbvw 0:e3f3fe2e689b 245 cr2_updclk->input();
joaquinbvw 0:e3f3fe2e689b 246 cr2_updclk->mode(PullDown);
joaquinbvw 0:e3f3fe2e689b 247
joaquinbvw 0:e3f3fe2e689b 248 //printf("\r\nReseting CR2 ...\r\n");
joaquinbvw 0:e3f3fe2e689b 249 *cr2_mreset = 1;
joaquinbvw 0:e3f3fe2e689b 250 wait_ms(1);
joaquinbvw 0:e3f3fe2e689b 251 *cr2_mreset = 0;
joaquinbvw 0:e3f3fe2e689b 252 wait_ms(1);
joaquinbvw 0:e3f3fe2e689b 253
joaquinbvw 0:e3f3fe2e689b 254 this->rf_enabled = false;
joaquinbvw 0:e3f3fe2e689b 255
joaquinbvw 0:e3f3fe2e689b 256 return 0;
joaquinbvw 0:e3f3fe2e689b 257 }
joaquinbvw 0:e3f3fe2e689b 258
joaquinbvw 0:e3f3fe2e689b 259 int CR2::scanIOUpdate(){
joaquinbvw 0:e3f3fe2e689b 260
joaquinbvw 0:e3f3fe2e689b 261 unsigned int cont = 0;
joaquinbvw 0:e3f3fe2e689b 262
joaquinbvw 0:e3f3fe2e689b 263 this->reset();
joaquinbvw 0:e3f3fe2e689b 264
joaquinbvw 0:e3f3fe2e689b 265 //printf("\r\nWaiting a upd_clk ...\r\n");
joaquinbvw 0:e3f3fe2e689b 266 while(true){
joaquinbvw 0:e3f3fe2e689b 267 if (*cr2_updclk == 1)
joaquinbvw 0:e3f3fe2e689b 268 break;
joaquinbvw 0:e3f3fe2e689b 269
joaquinbvw 0:e3f3fe2e689b 270 cont += 1;
joaquinbvw 0:e3f3fe2e689b 271 if (cont > 10000)
joaquinbvw 0:e3f3fe2e689b 272 break;
joaquinbvw 0:e3f3fe2e689b 273
joaquinbvw 0:e3f3fe2e689b 274 wait_us(1);
joaquinbvw 0:e3f3fe2e689b 275 }
joaquinbvw 0:e3f3fe2e689b 276
joaquinbvw 0:e3f3fe2e689b 277 if (cont > 10000){
joaquinbvw 0:e3f3fe2e689b 278 //printf("\r\nA upd_clk was not found\r\n");
joaquinbvw 0:e3f3fe2e689b 279 return 0;
joaquinbvw 0:e3f3fe2e689b 280 }
joaquinbvw 0:e3f3fe2e689b 281
joaquinbvw 0:e3f3fe2e689b 282 //printf("\r\nA upd_clk was found ...\r\n");
joaquinbvw 0:e3f3fe2e689b 283
joaquinbvw 0:e3f3fe2e689b 284 return 1;
joaquinbvw 0:e3f3fe2e689b 285 }
joaquinbvw 0:e3f3fe2e689b 286
joaquinbvw 0:e3f3fe2e689b 287 int CR2::find(){
joaquinbvw 0:e3f3fe2e689b 288 /*
joaquinbvw 0:e3f3fe2e689b 289 char phase[];
joaquinbvw 0:e3f3fe2e689b 290
joaquinbvw 0:e3f3fe2e689b 291 phase[0] = 0x0A;
joaquinbvw 0:e3f3fe2e689b 292 phase[1] = 0x55;
joaquinbvw 0:e3f3fe2e689b 293
joaquinbvw 0:e3f3fe2e689b 294 this->__writeDataAndVerify(0x00, 5, phase);
joaquinbvw 0:e3f3fe2e689b 295 */
joaquinbvw 0:e3f3fe2e689b 296 this->__readData(0x05);
joaquinbvw 0:e3f3fe2e689b 297 this->__readData(0x0A);
joaquinbvw 0:e3f3fe2e689b 298 return 1;
joaquinbvw 0:e3f3fe2e689b 299
joaquinbvw 0:e3f3fe2e689b 300 }
joaquinbvw 0:e3f3fe2e689b 301
joaquinbvw 0:e3f3fe2e689b 302
joaquinbvw 0:e3f3fe2e689b 303 int CR2::init(){
joaquinbvw 0:e3f3fe2e689b 304
joaquinbvw 0:e3f3fe2e689b 305 //printf("\r\nSetting default parameters in CR ...\r\n");
joaquinbvw 0:e3f3fe2e689b 306
joaquinbvw 0:e3f3fe2e689b 307 //Serial mode enabled
joaquinbvw 0:e3f3fe2e689b 308 this->clock = 200.0; // Work clock in MHz
joaquinbvw 0:e3f3fe2e689b 309 this->cr2_multiplier = 4; // Multiplier 4- 20
joaquinbvw 0:e3f3fe2e689b 310 this->cr2_mode = 0; // Single, FSK, Ramped FSK, Chirp, BPSK
joaquinbvw 0:e3f3fe2e689b 311 this->cr2_qdac_pwdn = 0; // QDAC power down enabled: 0 -> disable
joaquinbvw 0:e3f3fe2e689b 312 this->cr2_ioupdclk = 0; // IO Update clock direction: 0 -> input, 1 -> output
joaquinbvw 0:e3f3fe2e689b 313 this->cr2_inv_sinc = 0; // Sinc inverser filter enable: 0 -> enable
joaquinbvw 0:e3f3fe2e689b 314 this->cr2_osk_en = 1; // Enable Amplitude multiplier: 0 -> disabled
joaquinbvw 0:e3f3fe2e689b 315 this->cr2_osk_int = 0; // register/counter output shaped control: 0 -> register, 1 -> counter
joaquinbvw 0:e3f3fe2e689b 316 this->cr2_msb_lsb = 0; // msb/lsb bit first: 0 -> MSB, 1 -> LSB
joaquinbvw 0:e3f3fe2e689b 317 this->cr2_sdo = 1; // SDO pin active: 0 -> inactive
joaquinbvw 0:e3f3fe2e689b 318
joaquinbvw 0:e3f3fe2e689b 319 //printf("\r\nSetting in serial mode ...\r\n");
joaquinbvw 0:e3f3fe2e689b 320 *cr2_sp_mode = 0;
joaquinbvw 0:e3f3fe2e689b 321 *cr2_cs = 1;
joaquinbvw 0:e3f3fe2e689b 322
joaquinbvw 0:e3f3fe2e689b 323 this->reset();
joaquinbvw 0:e3f3fe2e689b 324
joaquinbvw 0:e3f3fe2e689b 325 //printf("\r\nWritting CR ...\r\n");
joaquinbvw 0:e3f3fe2e689b 326 /*
joaquinbvw 0:e3f3fe2e689b 327 if (not this->__writeControlRegister()){
joaquinbvw 0:e3f3fe2e689b 328 //printf("\r\nUnsuccessful CR2 initialization");
joaquinbvw 0:e3f3fe2e689b 329 this->isConfig = false;
joaquinbvw 0:e3f3fe2e689b 330 return false;
joaquinbvw 0:e3f3fe2e689b 331 }
joaquinbvw 0:e3f3fe2e689b 332 */
joaquinbvw 0:e3f3fe2e689b 333 //printf("\r\nSuccessfull CR2 initialization");
joaquinbvw 0:e3f3fe2e689b 334
joaquinbvw 0:e3f3fe2e689b 335 this->isConfig = true;
joaquinbvw 0:e3f3fe2e689b 336
joaquinbvw 0:e3f3fe2e689b 337 return true;
joaquinbvw 0:e3f3fe2e689b 338 }
joaquinbvw 0:e3f3fe2e689b 339 /*
joaquinbvw 0:e3f3fe2e689b 340 char* CR2::rdMode(){
joaquinbvw 0:e3f3fe2e689b 341
joaquinbvw 0:e3f3fe2e689b 342 char* rd_data;
joaquinbvw 0:e3f3fe2e689b 343 char mode;
joaquinbvw 0:e3f3fe2e689b 344
joaquinbvw 0:e3f3fe2e689b 345 rd_data = this->__readData(0x07);
joaquinbvw 0:e3f3fe2e689b 346 mode = (rd_data[2] & 0x0E) >> 1;
joaquinbvw 0:e3f3fe2e689b 347
joaquinbvw 0:e3f3fe2e689b 348 this->cr2_mode = mode;
joaquinbvw 0:e3f3fe2e689b 349
joaquinbvw 0:e3f3fe2e689b 350 rd_data[0] = mode;
joaquinbvw 0:e3f3fe2e689b 351
joaquinbvw 0:e3f3fe2e689b 352 return rd_data;
joaquinbvw 0:e3f3fe2e689b 353 }
joaquinbvw 0:e3f3fe2e689b 354
joaquinbvw 0:e3f3fe2e689b 355 char* CR2::rdMultiplier(){
joaquinbvw 0:e3f3fe2e689b 356
joaquinbvw 0:e3f3fe2e689b 357 char* rd_data;
joaquinbvw 0:e3f3fe2e689b 358 char mult;
joaquinbvw 0:e3f3fe2e689b 359
joaquinbvw 0:e3f3fe2e689b 360 rd_data = this->__readData(0x07);
joaquinbvw 0:e3f3fe2e689b 361 mult = (rd_data[1] & 0x1F);
joaquinbvw 0:e3f3fe2e689b 362 this->cr2_multiplier = mult;
joaquinbvw 0:e3f3fe2e689b 363
joaquinbvw 0:e3f3fe2e689b 364 //Reaconditioning data to return
joaquinbvw 0:e3f3fe2e689b 365 rd_data[0] = mult;
joaquinbvw 0:e3f3fe2e689b 366 rd_data[1] = ((int)clock >> 8) & 0xff;
joaquinbvw 0:e3f3fe2e689b 367 rd_data[2] = (int)clock & 0xff;
joaquinbvw 0:e3f3fe2e689b 368
joaquinbvw 0:e3f3fe2e689b 369 return rd_data;
joaquinbvw 0:e3f3fe2e689b 370 }
joaquinbvw 0:e3f3fe2e689b 371 char* CR2::rdPhase1(){
joaquinbvw 0:e3f3fe2e689b 372
joaquinbvw 0:e3f3fe2e689b 373 char* rd_data;
joaquinbvw 0:e3f3fe2e689b 374
joaquinbvw 0:e3f3fe2e689b 375 rd_data = this->__readData(0x00);
joaquinbvw 0:e3f3fe2e689b 376
joaquinbvw 0:e3f3fe2e689b 377 return rd_data;
joaquinbvw 0:e3f3fe2e689b 378
joaquinbvw 0:e3f3fe2e689b 379 }
joaquinbvw 0:e3f3fe2e689b 380 char* CR2::rdPhase2(){
joaquinbvw 0:e3f3fe2e689b 381
joaquinbvw 0:e3f3fe2e689b 382 char* rd_data;
joaquinbvw 0:e3f3fe2e689b 383
joaquinbvw 0:e3f3fe2e689b 384 rd_data = this->__readData(0x01);
joaquinbvw 0:e3f3fe2e689b 385
joaquinbvw 0:e3f3fe2e689b 386 return rd_data;
joaquinbvw 0:e3f3fe2e689b 387 }
joaquinbvw 0:e3f3fe2e689b 388 char* CR2::rdFrequency1(){
joaquinbvw 0:e3f3fe2e689b 389
joaquinbvw 0:e3f3fe2e689b 390 char* rd_data;
joaquinbvw 0:e3f3fe2e689b 391
joaquinbvw 0:e3f3fe2e689b 392 rd_data = this->__readData(0x02);
joaquinbvw 0:e3f3fe2e689b 393
joaquinbvw 0:e3f3fe2e689b 394 for (int i=0; i<6; i++)
joaquinbvw 0:e3f3fe2e689b 395 frequency1[i] = rd_data[i];
joaquinbvw 0:e3f3fe2e689b 396
joaquinbvw 0:e3f3fe2e689b 397 return rd_data;
joaquinbvw 0:e3f3fe2e689b 398
joaquinbvw 0:e3f3fe2e689b 399 }
joaquinbvw 0:e3f3fe2e689b 400 char* CR2::rdFrequency2(){
joaquinbvw 0:e3f3fe2e689b 401
joaquinbvw 0:e3f3fe2e689b 402 char* rd_data;
joaquinbvw 0:e3f3fe2e689b 403
joaquinbvw 0:e3f3fe2e689b 404 rd_data = this->__readData(0x03);
joaquinbvw 0:e3f3fe2e689b 405
joaquinbvw 0:e3f3fe2e689b 406 for (int i=0; i<6; i++)
joaquinbvw 0:e3f3fe2e689b 407 frequency2[i] = rd_data[i];
joaquinbvw 0:e3f3fe2e689b 408
joaquinbvw 0:e3f3fe2e689b 409 return rd_data;
joaquinbvw 0:e3f3fe2e689b 410 }
joaquinbvw 0:e3f3fe2e689b 411 char* CR2::rdAmplitudeI(){
joaquinbvw 0:e3f3fe2e689b 412
joaquinbvw 0:e3f3fe2e689b 413 char* rd_data;
joaquinbvw 0:e3f3fe2e689b 414
joaquinbvw 0:e3f3fe2e689b 415 rd_data = this->__readData(0x08);
joaquinbvw 0:e3f3fe2e689b 416
joaquinbvw 0:e3f3fe2e689b 417 return rd_data;
joaquinbvw 0:e3f3fe2e689b 418 }
joaquinbvw 0:e3f3fe2e689b 419 char* CR2::rdAmplitudeQ(){
joaquinbvw 0:e3f3fe2e689b 420
joaquinbvw 0:e3f3fe2e689b 421 char* rd_data;
joaquinbvw 0:e3f3fe2e689b 422
joaquinbvw 0:e3f3fe2e689b 423 rd_data = this->__readData(0x09);
joaquinbvw 0:e3f3fe2e689b 424
joaquinbvw 0:e3f3fe2e689b 425 return rd_data;
joaquinbvw 0:e3f3fe2e689b 426 }
joaquinbvw 0:e3f3fe2e689b 427
joaquinbvw 0:e3f3fe2e689b 428 int CR2::isRFEnabled(){
joaquinbvw 0:e3f3fe2e689b 429
joaquinbvw 0:e3f3fe2e689b 430 if (this->rf_enabled)
joaquinbvw 0:e3f3fe2e689b 431 return 1;
joaquinbvw 0:e3f3fe2e689b 432
joaquinbvw 0:e3f3fe2e689b 433 return 0;
joaquinbvw 0:e3f3fe2e689b 434 }
joaquinbvw 0:e3f3fe2e689b 435
joaquinbvw 0:e3f3fe2e689b 436 int CR2::wrMode(char mode){
joaquinbvw 0:e3f3fe2e689b 437
joaquinbvw 0:e3f3fe2e689b 438 this->cr2_mode = mode & 0x07;
joaquinbvw 0:e3f3fe2e689b 439
joaquinbvw 0:e3f3fe2e689b 440 return this->__writeControlRegister();
joaquinbvw 0:e3f3fe2e689b 441 }
joaquinbvw 0:e3f3fe2e689b 442
joaquinbvw 0:e3f3fe2e689b 443 int CR2::wrMultiplier(char multiplier, float clock){
joaquinbvw 0:e3f3fe2e689b 444
joaquinbvw 0:e3f3fe2e689b 445 this->cr2_multiplier = multiplier & 0x1F;
joaquinbvw 0:e3f3fe2e689b 446 this->clock = clock;
joaquinbvw 0:e3f3fe2e689b 447
joaquinbvw 0:e3f3fe2e689b 448 //printf("\r\n mult = %d, clock = %f", multiplier, clock);
joaquinbvw 0:e3f3fe2e689b 449 //printf("\r\n cr2_mult = %d", cr2_multiplier);
joaquinbvw 0:e3f3fe2e689b 450
joaquinbvw 0:e3f3fe2e689b 451 return this->__writeControlRegister();
joaquinbvw 0:e3f3fe2e689b 452 }
joaquinbvw 0:e3f3fe2e689b 453
joaquinbvw 0:e3f3fe2e689b 454 int CR2::wrPhase1(char* phase, SerialDriver *screen){
joaquinbvw 0:e3f3fe2e689b 455
joaquinbvw 0:e3f3fe2e689b 456 return this->__writeDataAndVerify(0x00, phase, screen);
joaquinbvw 0:e3f3fe2e689b 457
joaquinbvw 0:e3f3fe2e689b 458 }
joaquinbvw 0:e3f3fe2e689b 459
joaquinbvw 0:e3f3fe2e689b 460 int CR2::wrPhase2(char* phase, SerialDriver *screen){
joaquinbvw 0:e3f3fe2e689b 461
joaquinbvw 0:e3f3fe2e689b 462 return this->__writeDataAndVerify(0x01, phase, screen);
joaquinbvw 0:e3f3fe2e689b 463
joaquinbvw 0:e3f3fe2e689b 464 }
joaquinbvw 0:e3f3fe2e689b 465
joaquinbvw 0:e3f3fe2e689b 466 int CR2::wrFrequency1(char* freq, SerialDriver *screen){
joaquinbvw 0:e3f3fe2e689b 467 int sts;
joaquinbvw 0:e3f3fe2e689b 468
joaquinbvw 0:e3f3fe2e689b 469 sts = this->__writeDataAndVerify(0x02, freq, screen);
joaquinbvw 0:e3f3fe2e689b 470
joaquinbvw 0:e3f3fe2e689b 471 if (sts){
joaquinbvw 0:e3f3fe2e689b 472 for (int i=0; i<6; i++)
joaquinbvw 0:e3f3fe2e689b 473 frequency1[i] = freq[i];
joaquinbvw 0:e3f3fe2e689b 474 }
joaquinbvw 0:e3f3fe2e689b 475 return sts;
joaquinbvw 0:e3f3fe2e689b 476
joaquinbvw 0:e3f3fe2e689b 477 }
joaquinbvw 0:e3f3fe2e689b 478 int CR2::wrFrequency2(char* freq, SerialDriver *screen){
joaquinbvw 0:e3f3fe2e689b 479 int sts;
joaquinbvw 0:e3f3fe2e689b 480
joaquinbvw 0:e3f3fe2e689b 481 sts = this->__writeDataAndVerify(0x03, freq, screen);
joaquinbvw 0:e3f3fe2e689b 482
joaquinbvw 0:e3f3fe2e689b 483 if (sts){
joaquinbvw 0:e3f3fe2e689b 484 for (int i=0; i<6; i++)
joaquinbvw 0:e3f3fe2e689b 485 frequency2[i] = freq[i];
joaquinbvw 0:e3f3fe2e689b 486 }
joaquinbvw 0:e3f3fe2e689b 487 return sts;
joaquinbvw 0:e3f3fe2e689b 488 }
joaquinbvw 0:e3f3fe2e689b 489
joaquinbvw 0:e3f3fe2e689b 490 int CR2::wrAmplitudeI(char* amplitude, SerialDriver *screen){
joaquinbvw 0:e3f3fe2e689b 491
joaquinbvw 0:e3f3fe2e689b 492 amplitudeI[0] = amplitude[0];
joaquinbvw 0:e3f3fe2e689b 493 amplitudeI[1] = amplitude[1];
joaquinbvw 0:e3f3fe2e689b 494
joaquinbvw 0:e3f3fe2e689b 495 this->rf_enabled = true;
joaquinbvw 0:e3f3fe2e689b 496
joaquinbvw 0:e3f3fe2e689b 497 return this->__writeDataAndVerify(0x08, amplitude, screen);
joaquinbvw 0:e3f3fe2e689b 498
joaquinbvw 0:e3f3fe2e689b 499 }
joaquinbvw 0:e3f3fe2e689b 500
joaquinbvw 0:e3f3fe2e689b 501 int CR2::wrAmplitudeQ(char* amplitude, SerialDriver *screen){
joaquinbvw 0:e3f3fe2e689b 502
joaquinbvw 0:e3f3fe2e689b 503 amplitudeQ[0] = amplitude[0];
joaquinbvw 0:e3f3fe2e689b 504 amplitudeQ[1] = amplitude[1];
joaquinbvw 0:e3f3fe2e689b 505
joaquinbvw 0:e3f3fe2e689b 506 this->rf_enabled = true;
joaquinbvw 0:e3f3fe2e689b 507
joaquinbvw 0:e3f3fe2e689b 508 return this->__writeDataAndVerify(0x09, amplitude, screen);
joaquinbvw 0:e3f3fe2e689b 509
joaquinbvw 0:e3f3fe2e689b 510 }
joaquinbvw 0:e3f3fe2e689b 511
joaquinbvw 0:e3f3fe2e689b 512 int CR2::enableRF(){
joaquinbvw 0:e3f3fe2e689b 513
joaquinbvw 0:e3f3fe2e689b 514 this->rf_enabled = true;
joaquinbvw 0:e3f3fe2e689b 515
joaquinbvw 0:e3f3fe2e689b 516 this->__writeDataAndVerify(0x08, this->amplitudeI);
joaquinbvw 0:e3f3fe2e689b 517 return this->__writeDataAndVerify(0x09, this->amplitudeQ);
joaquinbvw 0:e3f3fe2e689b 518
joaquinbvw 0:e3f3fe2e689b 519 }
joaquinbvw 0:e3f3fe2e689b 520
joaquinbvw 0:e3f3fe2e689b 521 int CR2::disableRF(){
joaquinbvw 0:e3f3fe2e689b 522
joaquinbvw 0:e3f3fe2e689b 523 this->rf_enabled = false;
joaquinbvw 0:e3f3fe2e689b 524
joaquinbvw 0:e3f3fe2e689b 525 this->__writeDataAndVerify(0x08, "\x00\x00");
joaquinbvw 0:e3f3fe2e689b 526 return this->__writeDataAndVerify(0x09, "\x00\x00");
joaquinbvw 0:e3f3fe2e689b 527
joaquinbvw 0:e3f3fe2e689b 528 }
joaquinbvw 0:e3f3fe2e689b 529
joaquinbvw 0:e3f3fe2e689b 530 int CR2::defaultSettings(SerialDriver *screen){
joaquinbvw 0:e3f3fe2e689b 531
joaquinbvw 0:e3f3fe2e689b 532 if (!(screen == NULL)){
joaquinbvw 0:e3f3fe2e689b 533 screen->putc(0x37);
joaquinbvw 0:e3f3fe2e689b 534 screen->putc(0x30);
joaquinbvw 0:e3f3fe2e689b 535 }
joaquinbvw 0:e3f3fe2e689b 536
joaquinbvw 0:e3f3fe2e689b 537 this->wrMultiplier(1, 0.0);
joaquinbvw 0:e3f3fe2e689b 538 this->wrAmplitudeI("\x0F\xC0", screen); //0xFC0 produces best SFDR than 0xFFF
joaquinbvw 0:e3f3fe2e689b 539 this->wrAmplitudeQ("\x0F\xC0"); //0xFC0 produces best SFDR than 0xFFF
joaquinbvw 0:e3f3fe2e689b 540 this->wrFrequency1("\x00\x00\x00\x00\x00\x00"); // 49.92 <> 0x3f 0xe5 0xc9 0x1d 0x14 0xe3 <> 49.92/clock*(2**48) \x3f\xe5\xc9\x1d\x14\xe3
joaquinbvw 0:e3f3fe2e689b 541 this->wrFrequency2("\x00\x00\x00\x00\x00\x00");
joaquinbvw 0:e3f3fe2e689b 542 this->wrPhase1("\x00\x00"); //0 grados
joaquinbvw 0:e3f3fe2e689b 543 this->wrPhase2("\x20\x00"); //180 grados <> 0x20 0x00 <> 180/360*(2**14)
joaquinbvw 0:e3f3fe2e689b 544 this->disableRF();
joaquinbvw 0:e3f3fe2e689b 545
joaquinbvw 0:e3f3fe2e689b 546 if (!(screen == NULL)){
joaquinbvw 0:e3f3fe2e689b 547 screen->putc(0x37);
joaquinbvw 0:e3f3fe2e689b 548 screen->putc(0x31);
joaquinbvw 0:e3f3fe2e689b 549 }
joaquinbvw 0:e3f3fe2e689b 550
joaquinbvw 0:e3f3fe2e689b 551 return this->wrMode(4); //BPSK mode
joaquinbvw 0:e3f3fe2e689b 552
joaquinbvw 0:e3f3fe2e689b 553 }
joaquinbvw 0:e3f3fe2e689b 554 */
joaquinbvw 0:e3f3fe2e689b 555 char* CR2::setCommand(unsigned short cmd, char* payload, unsigned long payload_len){
joaquinbvw 0:e3f3fe2e689b 556
joaquinbvw 0:e3f3fe2e689b 557 bool success = false;
joaquinbvw 0:e3f3fe2e689b 558 char* tx_msg;
joaquinbvw 0:e3f3fe2e689b 559 unsigned long tx_msg_len;
joaquinbvw 0:e3f3fe2e689b 560
joaquinbvw 0:e3f3fe2e689b 561 tx_msg = KO_MSG;
joaquinbvw 0:e3f3fe2e689b 562 tx_msg_len = 2;
joaquinbvw 0:e3f3fe2e689b 563
joaquinbvw 0:e3f3fe2e689b 564 //printf("cmd = %d, payload_len = %d", cmd, payload_len);
joaquinbvw 0:e3f3fe2e689b 565
joaquinbvw 0:e3f3fe2e689b 566 //printf("\r\nPayload = ");
joaquinbvw 0:e3f3fe2e689b 567 //for(unsigned long i=0; i< payload_len; i++)
joaquinbvw 0:e3f3fe2e689b 568 //printf("0x%x ", payload[i]);
joaquinbvw 0:e3f3fe2e689b 569
joaquinbvw 0:e3f3fe2e689b 570 //Si el CR2 no esta inicializado siempre retornar NI_MSG
joaquinbvw 0:e3f3fe2e689b 571 if (not this->isConfig){
joaquinbvw 0:e3f3fe2e689b 572 this->cmd_answer = NI_MSG;
joaquinbvw 0:e3f3fe2e689b 573 this->cmd_answer_len = 2;
joaquinbvw 0:e3f3fe2e689b 574
joaquinbvw 0:e3f3fe2e689b 575 return this->cmd_answer;
joaquinbvw 0:e3f3fe2e689b 576 }
joaquinbvw 0:e3f3fe2e689b 577
joaquinbvw 0:e3f3fe2e689b 578 switch ( cmd )
joaquinbvw 0:e3f3fe2e689b 579 {
joaquinbvw 0:e3f3fe2e689b 580 case CR2_CMD_RESET:
joaquinbvw 0:e3f3fe2e689b 581 success = this->init();
joaquinbvw 0:e3f3fe2e689b 582 break;
joaquinbvw 0:e3f3fe2e689b 583
joaquinbvw 0:e3f3fe2e689b 584 case CR2_CMD_ENABLE_RF:
joaquinbvw 0:e3f3fe2e689b 585 if (payload_len == 1){
joaquinbvw 0:e3f3fe2e689b 586 //if (payload[0] == 0)
joaquinbvw 0:e3f3fe2e689b 587 //success = this->disableRF();
joaquinbvw 0:e3f3fe2e689b 588 //else
joaquinbvw 0:e3f3fe2e689b 589 //success = this->enableRF();
joaquinbvw 0:e3f3fe2e689b 590 }
joaquinbvw 0:e3f3fe2e689b 591 break;
joaquinbvw 0:e3f3fe2e689b 592
joaquinbvw 0:e3f3fe2e689b 593 case CR2_CMD_MULTIPLIER:
joaquinbvw 0:e3f3fe2e689b 594 if (payload_len == 1){
joaquinbvw 0:e3f3fe2e689b 595 //success = this->wrMultiplier(payload[0]);
joaquinbvw 0:e3f3fe2e689b 596 }
joaquinbvw 0:e3f3fe2e689b 597 if (payload_len == 3){
joaquinbvw 0:e3f3fe2e689b 598 unsigned short clock = payload[1]*256 + payload[2];
joaquinbvw 0:e3f3fe2e689b 599 //success = this->wrMultiplier(payload[0], (float)clock);
joaquinbvw 0:e3f3fe2e689b 600 }
joaquinbvw 0:e3f3fe2e689b 601 break;
joaquinbvw 0:e3f3fe2e689b 602
joaquinbvw 0:e3f3fe2e689b 603 case CR2_CMD_MODE:
joaquinbvw 0:e3f3fe2e689b 604 if (payload_len == 1){
joaquinbvw 0:e3f3fe2e689b 605 //success = this->wrMode(payload[0]);
joaquinbvw 0:e3f3fe2e689b 606 }
joaquinbvw 0:e3f3fe2e689b 607 break;
joaquinbvw 0:e3f3fe2e689b 608
joaquinbvw 0:e3f3fe2e689b 609 case CR2_CMD_FREQUENCYA:
joaquinbvw 0:e3f3fe2e689b 610 if (payload_len == 6){
joaquinbvw 0:e3f3fe2e689b 611 //success = this->wrFrequency1(payload);
joaquinbvw 0:e3f3fe2e689b 612 }
joaquinbvw 0:e3f3fe2e689b 613 break;
joaquinbvw 0:e3f3fe2e689b 614
joaquinbvw 0:e3f3fe2e689b 615 case CR2_CMD_FREQUENCYB:
joaquinbvw 0:e3f3fe2e689b 616 if (payload_len == 6){
joaquinbvw 0:e3f3fe2e689b 617 //success = this->wrFrequency2(payload);
joaquinbvw 0:e3f3fe2e689b 618 }
joaquinbvw 0:e3f3fe2e689b 619 break;
joaquinbvw 0:e3f3fe2e689b 620
joaquinbvw 0:e3f3fe2e689b 621 case CR2_CMD_PHASEA:
joaquinbvw 0:e3f3fe2e689b 622 if (payload_len == 2){
joaquinbvw 0:e3f3fe2e689b 623 //success = this->wrPhase1(payload);
joaquinbvw 0:e3f3fe2e689b 624 }
joaquinbvw 0:e3f3fe2e689b 625 break;
joaquinbvw 0:e3f3fe2e689b 626
joaquinbvw 0:e3f3fe2e689b 627 case CR2_CMD_PHASEB:
joaquinbvw 0:e3f3fe2e689b 628 if (payload_len == 2){
joaquinbvw 0:e3f3fe2e689b 629 //success = this->wrPhase2(payload);
joaquinbvw 0:e3f3fe2e689b 630 }
joaquinbvw 0:e3f3fe2e689b 631 break;
joaquinbvw 0:e3f3fe2e689b 632
joaquinbvw 0:e3f3fe2e689b 633 case CR2_CMD_AMPLITUDE1:
joaquinbvw 0:e3f3fe2e689b 634 if (payload_len == 2){
joaquinbvw 0:e3f3fe2e689b 635 //success = this->wrAmplitudeI(payload);
joaquinbvw 0:e3f3fe2e689b 636 }
joaquinbvw 0:e3f3fe2e689b 637 break;
joaquinbvw 0:e3f3fe2e689b 638
joaquinbvw 0:e3f3fe2e689b 639 case CR2_CMD_AMPLITUDE2:
joaquinbvw 0:e3f3fe2e689b 640 if (payload_len == 2){
joaquinbvw 0:e3f3fe2e689b 641 //success = this->wrAmplitudeQ(payload);
joaquinbvw 0:e3f3fe2e689b 642 }
joaquinbvw 0:e3f3fe2e689b 643 break;
joaquinbvw 0:e3f3fe2e689b 644
joaquinbvw 0:e3f3fe2e689b 645 case CR2_CMD_READ | CR2_CMD_ENABLE_RF:
joaquinbvw 0:e3f3fe2e689b 646 //if (this->isRFEnabled() == 1)
joaquinbvw 0:e3f3fe2e689b 647 // tx_msg = ONE_MSG;
joaquinbvw 0:e3f3fe2e689b 648 //else
joaquinbvw 0:e3f3fe2e689b 649 // tx_msg = ZERO_MSG;
joaquinbvw 0:e3f3fe2e689b 650
joaquinbvw 0:e3f3fe2e689b 651 tx_msg_len = 1;
joaquinbvw 0:e3f3fe2e689b 652
joaquinbvw 0:e3f3fe2e689b 653 break;
joaquinbvw 0:e3f3fe2e689b 654
joaquinbvw 0:e3f3fe2e689b 655 case CR2_CMD_READ | CR2_CMD_MULTIPLIER:
joaquinbvw 0:e3f3fe2e689b 656 //tx_msg = this->rdMultiplier();
joaquinbvw 0:e3f3fe2e689b 657 tx_msg_len = 1;
joaquinbvw 0:e3f3fe2e689b 658 break;
joaquinbvw 0:e3f3fe2e689b 659
joaquinbvw 0:e3f3fe2e689b 660 case CR2_CMD_READ | CR2_CMD_MODE:
joaquinbvw 0:e3f3fe2e689b 661 //tx_msg = this->rdMode();
joaquinbvw 0:e3f3fe2e689b 662 tx_msg_len = 1;
joaquinbvw 0:e3f3fe2e689b 663 break;
joaquinbvw 0:e3f3fe2e689b 664
joaquinbvw 0:e3f3fe2e689b 665 case CR2_CMD_READ | CR2_CMD_FREQUENCYA:
joaquinbvw 0:e3f3fe2e689b 666 //tx_msg = this->rdFrequency1();
joaquinbvw 0:e3f3fe2e689b 667 tx_msg_len = 6;
joaquinbvw 0:e3f3fe2e689b 668 break;
joaquinbvw 0:e3f3fe2e689b 669
joaquinbvw 0:e3f3fe2e689b 670 case CR2_CMD_READ | CR2_CMD_FREQUENCYB:
joaquinbvw 0:e3f3fe2e689b 671 //tx_msg = this->rdFrequency2();
joaquinbvw 0:e3f3fe2e689b 672 tx_msg_len = 6;
joaquinbvw 0:e3f3fe2e689b 673 break;
joaquinbvw 0:e3f3fe2e689b 674
joaquinbvw 0:e3f3fe2e689b 675 case CR2_CMD_READ | CR2_CMD_PHASEA:
joaquinbvw 0:e3f3fe2e689b 676 //tx_msg = this->rdPhase1();
joaquinbvw 0:e3f3fe2e689b 677 tx_msg_len = 2;
joaquinbvw 0:e3f3fe2e689b 678 break;
joaquinbvw 0:e3f3fe2e689b 679
joaquinbvw 0:e3f3fe2e689b 680 case CR2_CMD_READ | CR2_CMD_PHASEB:
joaquinbvw 0:e3f3fe2e689b 681 //tx_msg = this->rdPhase2();
joaquinbvw 0:e3f3fe2e689b 682 tx_msg_len = 2;
joaquinbvw 0:e3f3fe2e689b 683 break;
joaquinbvw 0:e3f3fe2e689b 684
joaquinbvw 0:e3f3fe2e689b 685 case CR2_CMD_READ | CR2_CMD_AMPLITUDE1:
joaquinbvw 0:e3f3fe2e689b 686 //tx_msg = this->rdAmplitudeI();
joaquinbvw 0:e3f3fe2e689b 687 tx_msg_len = 2;
joaquinbvw 0:e3f3fe2e689b 688 break;
joaquinbvw 0:e3f3fe2e689b 689
joaquinbvw 0:e3f3fe2e689b 690 case CR2_CMD_READ | CR2_CMD_AMPLITUDE2:
joaquinbvw 0:e3f3fe2e689b 691 //tx_msg = this->rdAmplitudeQ();
joaquinbvw 0:e3f3fe2e689b 692 tx_msg_len = 2;
joaquinbvw 0:e3f3fe2e689b 693 break;
joaquinbvw 0:e3f3fe2e689b 694
joaquinbvw 0:e3f3fe2e689b 695 default:
joaquinbvw 0:e3f3fe2e689b 696 success = false;
joaquinbvw 0:e3f3fe2e689b 697
joaquinbvw 0:e3f3fe2e689b 698 }
joaquinbvw 0:e3f3fe2e689b 699
joaquinbvw 0:e3f3fe2e689b 700 if (success){
joaquinbvw 0:e3f3fe2e689b 701 tx_msg = OK_MSG;
joaquinbvw 0:e3f3fe2e689b 702 tx_msg_len = 2;
joaquinbvw 0:e3f3fe2e689b 703 }
joaquinbvw 0:e3f3fe2e689b 704
joaquinbvw 0:e3f3fe2e689b 705 this->cmd_answer = tx_msg;
joaquinbvw 0:e3f3fe2e689b 706 this->cmd_answer_len = tx_msg_len;
joaquinbvw 0:e3f3fe2e689b 707
joaquinbvw 0:e3f3fe2e689b 708 return tx_msg;
joaquinbvw 0:e3f3fe2e689b 709 }
joaquinbvw 0:e3f3fe2e689b 710
joaquinbvw 0:e3f3fe2e689b 711 char* CR2::getCmdAnswer(){
joaquinbvw 0:e3f3fe2e689b 712
joaquinbvw 0:e3f3fe2e689b 713 return this->cmd_answer;
joaquinbvw 0:e3f3fe2e689b 714
joaquinbvw 0:e3f3fe2e689b 715 }
joaquinbvw 0:e3f3fe2e689b 716
joaquinbvw 0:e3f3fe2e689b 717 unsigned long CR2::getCmdAnswerLen(){
joaquinbvw 0:e3f3fe2e689b 718
joaquinbvw 0:e3f3fe2e689b 719 return this->cmd_answer_len;
joaquinbvw 0:e3f3fe2e689b 720
joaquinbvw 0:e3f3fe2e689b 721 }
joaquinbvw 0:e3f3fe2e689b 722 /*
joaquinbvw 0:e3f3fe2e689b 723 int CR2::setAllDevice(char* payload, SerialDriver *screen){
joaquinbvw 0:e3f3fe2e689b 724
joaquinbvw 0:e3f3fe2e689b 725 int sts;
joaquinbvw 0:e3f3fe2e689b 726 char* phase1, *phase2;
joaquinbvw 0:e3f3fe2e689b 727 char* freq1, *freq2;
joaquinbvw 0:e3f3fe2e689b 728 char* delta_freq, *upd_rate_clk, *ramp_rate_clk;
joaquinbvw 0:e3f3fe2e689b 729 char* control_reg;
joaquinbvw 0:e3f3fe2e689b 730 char* amplitudeI, *amplitudeQ, *ampl_ramp_rate;
joaquinbvw 0:e3f3fe2e689b 731 char* qdac;
joaquinbvw 0:e3f3fe2e689b 732
joaquinbvw 0:e3f3fe2e689b 733 phase1 = &payload[0x00];
joaquinbvw 0:e3f3fe2e689b 734 phase2 = &payload[0x02];
joaquinbvw 0:e3f3fe2e689b 735 freq1 = &payload[0x04];
joaquinbvw 0:e3f3fe2e689b 736 freq2 = &payload[0x0A];
joaquinbvw 0:e3f3fe2e689b 737 delta_freq = &payload[0x10];
joaquinbvw 0:e3f3fe2e689b 738 upd_rate_clk = &payload[0x16];
joaquinbvw 0:e3f3fe2e689b 739 ramp_rate_clk = &payload[0x1A];
joaquinbvw 0:e3f3fe2e689b 740 control_reg = &payload[0x1D];
joaquinbvw 0:e3f3fe2e689b 741 amplitudeI = &payload[0x21];
joaquinbvw 0:e3f3fe2e689b 742 amplitudeQ = &payload[0x23];
joaquinbvw 0:e3f3fe2e689b 743 ampl_ramp_rate = &payload[0x25];
joaquinbvw 0:e3f3fe2e689b 744 qdac = &payload[0x26];
joaquinbvw 0:e3f3fe2e689b 745
joaquinbvw 0:e3f3fe2e689b 746 control_reg[2] = control_reg[2] & 0xFE; //cr2_ioupdclk always as an input = 0
joaquinbvw 0:e3f3fe2e689b 747 control_reg[3] = control_reg[3] & 0xFD; //LSB first = 0, MSB first enabled
joaquinbvw 0:e3f3fe2e689b 748 control_reg[3] = control_reg[3] | 0x01; //cr2_sdo enable = 1
joaquinbvw 0:e3f3fe2e689b 749
joaquinbvw 0:e3f3fe2e689b 750 this->__writeDataAndVerify(0x04, delta_freq);
joaquinbvw 0:e3f3fe2e689b 751 this->__writeDataAndVerify(0x05, upd_rate_clk);
joaquinbvw 0:e3f3fe2e689b 752 this->__writeDataAndVerify(0x06, ramp_rate_clk);
joaquinbvw 0:e3f3fe2e689b 753 this->__writeDataAndVerify(0x07, control_reg);
joaquinbvw 0:e3f3fe2e689b 754
joaquinbvw 0:e3f3fe2e689b 755 this->__writeDataAndVerify(0x0A, ampl_ramp_rate);
joaquinbvw 0:e3f3fe2e689b 756 this->__writeDataAndVerify(0x0B, qdac, screen);
joaquinbvw 0:e3f3fe2e689b 757
joaquinbvw 0:e3f3fe2e689b 758 this->wrPhase1(phase1);
joaquinbvw 0:e3f3fe2e689b 759 this->wrPhase2(phase2);
joaquinbvw 0:e3f3fe2e689b 760 this->wrFrequency1(freq1);
joaquinbvw 0:e3f3fe2e689b 761 this->wrFrequency2(freq2);
joaquinbvw 0:e3f3fe2e689b 762 this->wrAmplitudeI(amplitudeI);
joaquinbvw 0:e3f3fe2e689b 763 this->wrAmplitudeQ(amplitudeQ);
joaquinbvw 0:e3f3fe2e689b 764
joaquinbvw 0:e3f3fe2e689b 765 //Enabling RF
joaquinbvw 0:e3f3fe2e689b 766 sts = this->enableRF();
joaquinbvw 0:e3f3fe2e689b 767
joaquinbvw 0:e3f3fe2e689b 768 return sts;
joaquinbvw 0:e3f3fe2e689b 769
joaquinbvw 0:e3f3fe2e689b 770 }
joaquinbvw 0:e3f3fe2e689b 771 */
joaquinbvw 0:e3f3fe2e689b 772 bool CR2::wasInitialized(){
joaquinbvw 0:e3f3fe2e689b 773
joaquinbvw 0:e3f3fe2e689b 774 return this->isConfig;
joaquinbvw 0:e3f3fe2e689b 775 }
joaquinbvw 0:e3f3fe2e689b 776
joaquinbvw 0:e3f3fe2e689b 777 char CR2::getMultiplier(){
joaquinbvw 0:e3f3fe2e689b 778 return this->cr2_multiplier;
joaquinbvw 0:e3f3fe2e689b 779 }
joaquinbvw 0:e3f3fe2e689b 780
joaquinbvw 0:e3f3fe2e689b 781 double CR2::getFreqFactor1(){
joaquinbvw 0:e3f3fe2e689b 782 factor_freq1 = ((double)frequency1[0])/256.0 + ((double)frequency1[1])/65536.0 + ((double)frequency1[2])/16777216.0 + ((double)frequency1[3])/4294967296.0;
joaquinbvw 0:e3f3fe2e689b 783 factor_freq1 *= ((double)this->cr2_multiplier);
joaquinbvw 0:e3f3fe2e689b 784
joaquinbvw 0:e3f3fe2e689b 785 return factor_freq1;
joaquinbvw 0:e3f3fe2e689b 786 }
joaquinbvw 0:e3f3fe2e689b 787
joaquinbvw 0:e3f3fe2e689b 788 double CR2::getFreqFactor2(){
joaquinbvw 0:e3f3fe2e689b 789 factor_freq2 = ((double)frequency2[0])/256.0 + ((double)frequency2[1])/65536.0 + ((double)frequency2[2])/16777216.0 + ((double)frequency2[3])/4294967296.0;
joaquinbvw 0:e3f3fe2e689b 790 factor_freq2 *= ((double)this->cr2_multiplier);
joaquinbvw 0:e3f3fe2e689b 791
joaquinbvw 0:e3f3fe2e689b 792 return factor_freq2;
joaquinbvw 0:e3f3fe2e689b 793 }
joaquinbvw 0:e3f3fe2e689b 794
joaquinbvw 0:e3f3fe2e689b 795 char CR2::getMode(){
joaquinbvw 0:e3f3fe2e689b 796 return this->cr2_mode;
joaquinbvw 0:e3f3fe2e689b 797 }
joaquinbvw 0:e3f3fe2e689b 798
joaquinbvw 0:e3f3fe2e689b 799 char* CR2::getModeStr(){
joaquinbvw 0:e3f3fe2e689b 800
joaquinbvw 0:e3f3fe2e689b 801 if (this->cr2_mode > 4)
joaquinbvw 0:e3f3fe2e689b 802 return MODULATION[5];
joaquinbvw 0:e3f3fe2e689b 803
joaquinbvw 0:e3f3fe2e689b 804 return MODULATION[this->cr2_mode];
joaquinbvw 0:e3f3fe2e689b 805 }