Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of jro by
Revision 5:6500be930b36, committed 2015-02-23
- Comitter:
- miguelcordero191
- Date:
- Mon Feb 23 20:36:23 2015 +0000
- Parent:
- 4:de495ce256b8
- Child:
- 6:aa70d2640f18
- Commit message:
- EthUtils module was added. Storing and reading ip address from internal flash.
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/EthUtils.cpp Mon Feb 23 20:36:23 2015 +0000
@@ -0,0 +1,159 @@
+#include "EthUtils.h"
+
+const char* IP = IP_INI; // IP
+const char* MASK = MASK_INI; // MASK
+const char* GATEWAY = GATEWAY_INI; // GATEWAY
+
+static int flash_addr = flash_size() - SECTOR_SIZE; //Write in last sector
+static int flash_addr_ip = flash_addr + 16;
+static int flash_addr_mask = flash_addr + 16 + 32;
+static int flash_addr_gateway = flash_addr + 16 + 2*32;
+
+int numberOfDigits(int x){
+
+ int length = 1;
+ while ( x /= 10 )
+ length++;
+
+ return length;
+}
+
+int isNumber(char *str){
+ int number;
+
+ number = atoi(str);
+
+ if (!(strlen(str) == numberOfDigits(number)))
+ return 0;
+
+ if (number<0)
+ return 0;
+
+ if (number>255)
+ return 0;
+
+ return 1;
+}
+
+int splitstr(char *str, const char *delimiter, char parts[][MAX_IP_LEN]){
+
+ int nparts=0;
+ char *token;
+
+ /* get the first token */
+ token = strtok(str, delimiter);
+
+ /* walk through other tokens */
+ while( token != NULL )
+ {
+ strcpy(parts[nparts],token);
+ nparts++;
+ if (nparts>4) break;
+
+ token = strtok(NULL, delimiter);
+ }
+
+ return nparts;
+}
+
+int validateIp(char *_ip){
+
+ char delimiter[] = ".";
+ char ip_segment[5][MAX_IP_LEN];
+ int nsegments;
+ char str[80];
+
+ strcpy(str, _ip);
+
+ nsegments = splitstr(str, delimiter, ip_segment);
+
+ if (nsegments != 4)
+ return 0;
+
+ for (int i=0; i<4; i++){
+ if (!isNumber(ip_segment[i]))
+ return 0;
+ }
+
+ return 1;
+
+}
+
+int splitIpConf(char* str, char *_ip, char *_mask, char *_gateway){
+
+ char delimiter[] = "/";
+ char parts[5][MAX_IP_LEN];
+ int nparts;
+
+ nparts = splitstr(str, delimiter, parts);
+
+ if (nparts != 3)
+ return 0;
+
+ for (int i=0; i<MAX_IP_LEN; i++){
+ _ip[i] = 0x00;
+ _mask[i] = 0x00;
+ _gateway[i] = 0x00;
+ }
+ strcpy(_ip, parts[0]);
+ strcpy(_mask, parts[1]);
+ strcpy(_gateway, parts[2]);
+
+ if (!validateIp(_ip))
+ return 0;
+
+ if (!validateIp(_mask))
+ return 0;
+
+ if (!validateIp(_gateway))
+ return 0;
+
+ return 1;
+}
+
+int eraseIpConfig(){
+
+ int flash_addr = flash_size() - SECTOR_SIZE; //Write in last sector
+
+ erase_sector(flash_addr);
+
+ return 1;
+
+}
+
+int saveIpConfig(char *ip, char *mask, char *gateway){
+
+ erase_sector(flash_addr);
+
+ int flag[1] = {FLASH_FULL};
+ program_flash(flash_addr, (char*)&flag, 4);
+
+ program_flash(flash_addr_ip, ip, MAX_IP_LEN);
+ program_flash(flash_addr_mask, mask, MAX_IP_LEN);
+ program_flash(flash_addr_gateway, gateway, MAX_IP_LEN);
+
+ return 1;
+}
+
+int readIpConfig(char *_ip, char *_mask, char *_gateway){
+
+ int *flag_flash = (int*)flash_addr;
+ char *ip_flash = (char*)(flash_addr_ip);
+ char *mask_flash = (char*)(flash_addr_mask);
+ char *gateway_flash = (char*)(flash_addr_gateway);
+
+ if (flag_flash[0] == FLASH_FULL){
+ for (int i=0; i< MAX_IP_LEN; i++){
+ _ip[i] = ip_flash[i];
+ _mask[i] = mask_flash[i];
+ _gateway[i] = gateway_flash[i];
+ }
+ }
+ else{
+ strcpy(_ip, IP);
+ strcpy(_mask, MASK);
+ strcpy(_gateway, GATEWAY);
+ }
+ return 1;
+
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EthUtils.h Mon Feb 23 20:36:23 2015 +0000 @@ -0,0 +1,24 @@ +#ifndef UTILS_ETH +#define UTILS_ETH + +#include "FreescaleIAP.h" + +#define MAX_IP_LEN 16 + +#define IP_INI "192.168.7.2"; // IP +#define MASK_INI "255.255.255.0"; // MASK +#define GATEWAY_INI "0.0.0.0"; // GATEWAY +//INTERNAL FLASH +#define FLASH_FULL 0xAA + +int numberOfDigits(int x); +int isNumber(char* str); +int splitstr(char *, const char *, char parts[][MAX_IP_LEN]); +int validateIp(char* str); +int splitIpConf(char* str, char *_ip, char *_mask, char *_gateway); + +int eraseIpConfig(); +int saveIpConfig(char *ip, char *mask, char *gateway); +int readIpConfig(char *_ip, char *_mask, char *_gateway); + +#endif \ No newline at end of file
--- a/JroDDS.cpp Tue Feb 10 14:28:42 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,700 +0,0 @@
-#include "JroDDS.h"
-
-static char controlRegister[4];
-static char read_spi_data[6];
-
-static char* KO_MSG = "KO";
-static char* OK_MSG = "OK";
-static char* NI_MSG = "NI";
-
-DDS::DDS(SPI *spi_dev, DigitalOut *mreset, DigitalOut *outramp, DigitalOut *spmode, DigitalOut *cs, DigitalOut *ioreset, DigitalInOut *updclk){
-
- spi_device = spi_dev;
-
- dds_mreset = mreset;
- dds_outramp = outramp;
- dds_sp_mode = spmode;
- dds_cs = cs;
- dds_io_reset = ioreset;
- dds_updclk = updclk;
-
- dds_updclk->input();
- *dds_sp_mode = 0;
- *dds_cs = 1;
- *dds_outramp = 0;
-
- cmd_answer = NULL;
- cmd_answer_len = 0;
-
- spi_device->format(SPI_BITS, SPI_MODE);
- spi_device->frequency(SPI_FREQ);
-
- this->isConfig = false;
-
-}
-
-int DDS::__writeData(char addr, char ndata, const char* data){
-
- // I/O reset
- *dds_updclk = 0;
- *dds_io_reset = 1;
- wait_us(10);
- *dds_io_reset = 0;
- wait_us(10);
-
- *dds_cs = 0;
-
- //Sending serial address
- //printf("\r\nWriting Addr = %d", addr);
- spi_device->write(addr & 0x0F);
-
- for(char i = 0; i < ndata; i++)
- {
- wait_us(150);
- spi_device->write(data[i]);
- }
-
- *dds_cs = 1;
- /*
- for(char i = 0; i < ndata; i++)
- {
- printf("\tData[%d] = 0x%x", i, data[i]);
- }
- */
-
-
- wait_us(10);
- *dds_updclk = 1;
- wait_us(10);
- *dds_updclk = 0;
- wait_us(10);
-
- return 1;
-}
-
-
-char* DDS::__readData(char addr, char ndata){
-
- // I/O reset
- *dds_io_reset = 1;
- wait_us(10);
- *dds_io_reset = 0;
- wait_us(10);
-
- *dds_cs = 0;
-
- //Sending serial address
- //printf("\r\nReading Addr = %d", addr);
- spi_device->write((addr & 0x0F) | 0x80);
-
- for(char i = 0; i < ndata; i++)
- {
- wait_us(150);
- read_spi_data[i] = spi_device->write(0x00);
- }
-
- *dds_cs = 1;
- /*
- for(char i = 0; i < ndata; i++)
- {
- printf("\r\nData[%d] = 0x%x", i, read_spi_data[i]);
- }
- */
-
- wait_us(10);
-
- return read_spi_data;
- }
-
-int DDS::__writeDataAndVerify(char addr, char ndata, const char* wr_spi_data, SerialDriver *screen){
-
- int success;
- char* rd_spi_data;
-
- this->__writeData(addr, ndata, wr_spi_data);
- rd_spi_data = this->__readData(addr, ndata);
-
- success = 1;
-
- for(char i = 0; i < ndata; i++)
- {
- if (screen != NULL){
- screen->putc(wr_spi_data[i]);
- screen->putc(0x3D);
- screen->putc(rd_spi_data[i]);
- }
-
- if (wr_spi_data[i] != rd_spi_data[i])
- {
- success = 0;
- break;
- }
-
- }
-
- //printf("\r\nSuccessful writting = %d\r\n", success);
-
- return success;
-}
-
-char* DDS::__getControlRegister(){
-
- bool pll_range = 0;
- bool pll_bypass = 1;
-
- if (cr_multiplier >= 4){
- pll_bypass = 0;
- }
-
- if (frequency >= 200){
- pll_range = 1;
- }
-
- controlRegister[0] = 0x10 + cr_qdac_pwdn*4;
- controlRegister[1] = pll_range*64 + pll_bypass*32 + (cr_multiplier & 0x1F);
- controlRegister[2] = (cr_mode & 0x07)*2 + cr_ioupdclk;
- controlRegister[3] = cr_inv_sinc*64 + cr_osk_en*32 + cr_osk_int*16 + cr_msb_lsb*2 + cr_sdo;
-
- return controlRegister;
-
- }
-
-int DDS::__writeControlRegister(){
-
- bool success;
- char* wr_spi_data;
- char* rd_spi_data;
- char addr = 0x07, ndata = 4;
-
- wr_spi_data = this->__getControlRegister();
-
- success = this->__writeData(addr, ndata, wr_spi_data);
-
- ////printf("\r\nChanging UPD_CLK as an OUTPUT ...");
- dds_updclk->output();
-
- wait_us(100);
- *dds_updclk = 1;
- wait_us(10);
- *dds_updclk = 0;
- wait_us(10);
-
- rd_spi_data = this->__readData(addr, ndata);
-
- success = true;
-
- for(char i = 0; i < ndata; i++)
- {
- if (wr_spi_data[i] != rd_spi_data[i])
- {
- success = false;
- break;
- }
- }
-
- return success;
-}
-
-
-int DDS::reset(){
-
- // Master reset
- //Set as a input, temporary
- //printf("\r\nChange updclk direction as an INPUT ...\r\n");
- dds_updclk->input();
- dds_updclk->mode(PullDown);
-
- //printf("\r\nReseting DDS ...\r\n");
- *dds_mreset = 1;
- wait_ms(1);
- *dds_mreset = 0;
- wait_ms(1);
-
- this->rf_enabled = false;
-
- return 0;
- }
-
-int DDS::scanIOUpdate(){
-
- unsigned int cont = 0;
-
- this->reset();
-
- //printf("\r\nWaiting a upd_clk ...\r\n");
- while(true){
- if (*dds_updclk == 1)
- break;
-
- cont += 1;
- if (cont > 10000)
- break;
-
- wait_us(1);
- }
-
- if (cont > 10000){
- //printf("\r\nA upd_clk was not found\r\n");
- return 0;
- }
-
- //printf("\r\nA upd_clk was found ...\r\n");
-
- return 1;
- }
-
-int DDS::find(){
- /*
- char phase[];
-
- phase[0] = 0x0A;
- phase[1] = 0x55;
-
- this->__writeDataAndVerify(0x00, 5, phase);
- */
- this->__readData(0x05, 4);
- this->__readData(0x0A, 1);
- return 1;
-
- }
-
-
-int DDS::init(){
-
- //printf("\r\nSetting default parameters in CR ...\r\n");
-
- //Serial mode enabled
- this->frequency = 200.0; // Work frequency in MHz
- this->cr_multiplier = 4; // Multiplier 4- 20
- this->cr_mode = 0; // Single, FSK, Ramped FSK, Chirp, BPSK
- this->cr_qdac_pwdn = 0; // QDAC power down enabled: 0 -> disable
- this->cr_ioupdclk = 0; // IO Update clock direction: 0 -> input, 1 -> output
- this->cr_inv_sinc = 0; // Sinc inverser filter enable: 0 -> enable
- this->cr_osk_en = 1; // Enable Amplitude multiplier: 0 -> disabled
- this->cr_osk_int = 0; // register/counter output shaped control: 0 -> register, 1 -> counter
- this->cr_msb_lsb = 0; // msb/lsb bit first: 0 -> MSB, 1 -> LSB
- this->cr_sdo = 1; // SDO pin active: 0 -> inactive
-
- //printf("\r\nSetting in serial mode ...\r\n");
- *dds_sp_mode = 0;
- *dds_cs = 1;
-
- this->reset();
-
- //printf("\r\nWritting CR ...\r\n");
-
- if (not this->__writeControlRegister()){
- //printf("\r\nUnsuccessful DDS initialization");
- this->isConfig = false;
- return false;
- }
-
- //printf("\r\nSuccessfull DDS initialization");
-
- this->isConfig = true;
-
- return true;
-}
-
-char* DDS::rdMode(){
-
- char* rd_data;
- char mode;
-
- rd_data = this->__readData(0x07, 4);
- mode = (rd_data[2] & 0x0E) >> 1;
-
- rd_data[0] = mode;
-
- return rd_data;
- }
-
-char* DDS::rdMultiplier(){
-
- char* rd_data;
- char mult;
-
- rd_data = this->__readData(0x07, 4);
- mult = (rd_data[1] & 0x1F);
-
- rd_data[0] = mult;
- rd_data[1] = ((int)clock >> 8) & 0xff;
- rd_data[2] = (int)clock & 0xff;
-
- return rd_data;
- }
-char* DDS::rdPhase1(){
-
- char* rd_data;
-
- rd_data = this->__readData(0x00, 2);
-
- return rd_data;
-
- }
-char* DDS::rdPhase2(){
-
- char* rd_data;
-
- rd_data = this->__readData(0x01, 2);
-
- return rd_data;
- }
-char* DDS::rdFrequency1(){
-
- char* rd_data;
-
- rd_data = this->__readData(0x02, 6);
-
- return rd_data;
-
- }
-char* DDS::rdFrequency2(){
-
- char* rd_data;
-
- rd_data = this->__readData(0x03, 6);
-
- return rd_data;
- }
-char* DDS::rdAmplitudeI(){
-
- char* rd_data;
-
- rd_data = this->__readData(0x08, 2);
-
- return rd_data;
- }
-char* DDS::rdAmplitudeQ(){
-
- char* rd_data;
-
- rd_data = this->__readData(0x09, 2);
-
- return rd_data;
- }
-
-int DDS::isRFEnabled(){
-
- if (this->rf_enabled)
- return 1;
-
- return 0;
- }
-
-int DDS::wrMode(char mode){
-
- this->cr_mode = mode & 0x07;
-
- return this->__writeControlRegister();
- }
-
-int DDS::wrMultiplier(char multiplier, float clock){
-
- this->cr_multiplier = multiplier & 0x1F;
- this->frequency = clock;
-
- //printf("\r\n mult = %d, clock = %f", multiplier, clock);
- //printf("\r\n cr_mult = %d", cr_multiplier);
-
- return this->__writeControlRegister();
- }
-
-int DDS::wrPhase1(char* phase, SerialDriver *screen){
-
- return this->__writeDataAndVerify(0x00, 2, phase, screen);
-
- }
-
-int DDS::wrPhase2(char* phase, SerialDriver *screen){
-
- return this->__writeDataAndVerify(0x01, 2, phase, screen);
-
- }
-
-int DDS::wrFrequency1(char* freq, SerialDriver *screen){
-
- return this->__writeDataAndVerify(0x02, 6, freq, screen);
-
- }
-int DDS::wrFrequency2(char* freq, SerialDriver *screen){
-
- return this->__writeDataAndVerify(0x03, 6, freq, screen);
-
- }
-
-int DDS::wrAmplitudeI(char* amplitude, SerialDriver *screen){
-
- amplitudeI[0] = amplitude[0];
- amplitudeI[1] = amplitude[1];
-
- return this->__writeDataAndVerify(0x08, 2, amplitude, screen);
-
- }
-
-int DDS::wrAmplitudeQ(char* amplitude, SerialDriver *screen){
-
- amplitudeQ[0] = amplitude[0];
- amplitudeQ[1] = amplitude[1];
-
- return this->__writeDataAndVerify(0x09, 2, amplitude, screen);
-
- }
-
-int DDS::enableRF(){
-
- this->rf_enabled = true;
-
- this->__writeDataAndVerify(0x08, 2, this->amplitudeI);
- return this->__writeDataAndVerify(0x09, 2, this->amplitudeQ);
-
- }
-
-int DDS::disableRF(){
-
- this->rf_enabled = false;
-
- this->__writeDataAndVerify(0x08, 2, "\x00\x00");
- return this->__writeDataAndVerify(0x09, 2, "\x00\x00");
-
- }
-
-int DDS::defaultSettings(SerialDriver *screen){
-
- if (!(screen == NULL)){
- screen->putc(0x37);
- screen->putc(0x30);
- }
-
- this->wrMultiplier(1, 0.0);
- this->wrAmplitudeI("\x0F\xC0", screen); //0xFC0 produces best SFDR than 0xFFF
- this->wrAmplitudeQ("\x0F\xC0"); //0xFC0 produces best SFDR than 0xFFF
- 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
- this->wrFrequency2("\x00\x00\x00\x00\x00\x00");
- this->wrPhase1("\x00\x00"); //0 grados
- this->wrPhase2("\x20\x00"); //180 grados <> 0x20 0x00 <> 180/360*(2**14)
- this->disableRF();
-
- if (!(screen == NULL)){
- screen->putc(0x37);
- screen->putc(0x31);
- }
-
- return this->wrMode(4); //BPSK mode
-
- }
-
-char* DDS::setCommand(unsigned short cmd, char* payload, unsigned long payload_len){
-
- bool success = false;
- char* tx_msg;
- unsigned long tx_msg_len;
-
- tx_msg = KO_MSG;
- tx_msg_len = 2;
-
- //printf("cmd = %d, payload_len = %d", cmd, payload_len);
-
- //printf("\r\nPayload = ");
- //for(unsigned long i=0; i< payload_len; i++)
- //printf("0x%x ", payload[i]);
-
- //Si el DDS no esta inicializado siempre retornar NI_MSG
- if (not this->isConfig){
- this->cmd_answer = NI_MSG;
- this->cmd_answer_len = 2;
-
- return this->cmd_answer;
- }
-
- switch ( cmd )
- {
- case DDS_CMD_RESET:
- success = this->init();
- break;
-
- case DDS_CMD_ENABLE_RF:
- if (payload_len == 1){
- if (payload[0] == 0)
- success = this->disableRF();
- else
- success = this->enableRF();
- }
- break;
-
- case DDS_CMD_MULTIPLIER:
- if (payload_len == 3){
- unsigned short clock = payload[1]*256 + payload[2];
- success = this->wrMultiplier(payload[0], (float)clock);
- }
- break;
-
- case DDS_CMD_MODE:
- if (payload_len == 1){
- success = this->wrMode(payload[0]);
- }
- break;
-
- case DDS_CMD_FREQUENCY1:
- if (payload_len == 6){
- success = this->wrFrequency1(payload);
- }
- break;
-
- case DDS_CMD_FREQUENCY2:
- if (payload_len == 6){
- success = this->wrFrequency2(payload);
- }
- break;
-
- case DDS_CMD_PHASE1:
- if (payload_len == 2){
- success = this->wrPhase1(payload);
- }
- break;
-
- case DDS_CMD_PHASE2:
- if (payload_len == 2){
- success = this->wrPhase2(payload);
- }
- break;
-
- case DDS_CMD_AMPLITUDEI:
- if (payload_len == 2){
- success = this->wrAmplitudeI(payload);
- }
- break;
-
- case DDS_CMD_AMPLITUDEQ:
- if (payload_len == 2){
- success = this->wrAmplitudeQ(payload);
- }
- break;
-
- case DDS_CMD_READ | DDS_CMD_ENABLE_RF:
- if (this->isRFEnabled() == 1)
- tx_msg = "\x01";
- else
- tx_msg = "\x00";
-
- tx_msg_len = 1;
-
- break;
-
- case DDS_CMD_READ | DDS_CMD_MULTIPLIER:
- tx_msg = this->rdMultiplier();
- tx_msg_len = 3;
- break;
-
- case DDS_CMD_READ | DDS_CMD_MODE:
- tx_msg = this->rdMode();
- tx_msg_len = 1;
- break;
-
- case DDS_CMD_READ | DDS_CMD_FREQUENCY1:
- tx_msg = this->rdFrequency1();
- tx_msg_len = 6;
- break;
-
- case DDS_CMD_READ | DDS_CMD_FREQUENCY2:
- tx_msg = this->rdFrequency2();
- tx_msg_len = 6;
- break;
-
- case DDS_CMD_READ | DDS_CMD_PHASE1:
- tx_msg = this->rdPhase1();
- tx_msg_len = 2;
- break;
-
- case DDS_CMD_READ | DDS_CMD_PHASE2:
- tx_msg = this->rdPhase2();
- tx_msg_len = 2;
- break;
-
- case DDS_CMD_READ | DDS_CMD_AMPLITUDEI:
- tx_msg = this->rdAmplitudeI();
- tx_msg_len = 2;
- break;
-
- case DDS_CMD_READ | DDS_CMD_AMPLITUDEQ:
- tx_msg = this->rdAmplitudeQ();
- tx_msg_len = 2;
- break;
-
- default:
- success = false;
-
- }
-
- if (success){
- tx_msg = OK_MSG;
- tx_msg_len = 2;
- }
-
- this->cmd_answer = tx_msg;
- this->cmd_answer_len = tx_msg_len;
-
- return tx_msg;
-}
-
-char* DDS::getCmdAnswer(){
-
- return this->cmd_answer;
-
- }
-
-unsigned long DDS::getCmdAnswerLen(){
-
- return this->cmd_answer_len;
-
- }
-
-int DDS::setAllDevice(char* payload, SerialDriver *screen){
-
- int sts;
- char* phase1, *phase2;
- char* freq1, *freq2;
- char* delta_freq, *upd_rate_clk, *ramp_rate_clk;
- char* control_reg;
- char* amplitudeI, *amplitudeQ, *ampl_ramp_rate;
- char* qdac;
-
- phase1 = &payload[0x00];
- phase2 = &payload[0x02];
- freq1 = &payload[0x04];
- freq2 = &payload[0x0A];
- delta_freq = &payload[0x10];
- upd_rate_clk = &payload[0x16];
- ramp_rate_clk = &payload[0x1A];
- control_reg = &payload[0x1D];
- amplitudeI = &payload[0x21];
- amplitudeQ = &payload[0x23];
- ampl_ramp_rate = &payload[0x25];
- qdac = &payload[0x26];
-
- control_reg[2] = control_reg[2] & 0xFE; //cr_ioupdclk always as an input = 0
- control_reg[3] = control_reg[3] | 0x01; //cr_sdo enable = 1
-
- this->wrPhase1(phase1);
- this->wrPhase2(phase2);
- this->wrFrequency1(freq1);
- this->wrFrequency2(freq2);
- this->__writeDataAndVerify(0x10, 6, delta_freq);
- this->__writeDataAndVerify(0x16, 4, upd_rate_clk);
- this->__writeDataAndVerify(0x1A, 3, ramp_rate_clk);
- this->__writeDataAndVerify(0x1D, 4, control_reg);
- this->wrAmplitudeI(amplitudeI);
- this->wrAmplitudeQ(amplitudeQ);
- this->__writeDataAndVerify(0x25, 1, ampl_ramp_rate);
- this->__writeDataAndVerify(0x26, 2, qdac, screen);
-
- sts = this->enableRF();
-
- return sts;
-
- }
-
-bool DDS::wasInitialized(){
-
- return this->isConfig;
-}
\ No newline at end of file
--- a/JroDDS.h Tue Feb 10 14:28:42 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-#ifndef JRO_DDS
-#define JRO_DDS
-
-#include "mbed.h"
-#include "SerialDriver.h"
-
-#define SPI_BITS 8
-#define SPI_MODE 0
-#define SPI_FREQ 10000
-
-#define DDS_CMD_RESET 0X10
-#define DDS_CMD_ENABLE_RF 0x11
-#define DDS_CMD_MULTIPLIER 0X12
-#define DDS_CMD_MODE 0x13
-#define DDS_CMD_FREQUENCY1 0X14
-#define DDS_CMD_FREQUENCY2 0x15
-#define DDS_CMD_PHASE1 0X16
-#define DDS_CMD_PHASE2 0x17
-#define DDS_CMD_AMPLITUDEI 0X18
-#define DDS_CMD_AMPLITUDEQ 0x19
-#define DDS_CMD_READ 0x8000
-
-class DDS{
- private:
- float frequency; // Work frequency in MHz
- char cr_multiplier; // Multiplier 4- 20
- char cr_mode; // Single, FSK, Ramped FSK, Chirp, BPSK
- bool cr_qdac_pwdn; // Q DAC power down enable: 0 -> disable
- bool cr_ioupdclk; // IO Update clock enable: 0 -> input
- bool cr_inv_sinc; // Inverse sinc filter enable: 0 -> enable
- bool cr_osk_en; // Enable AM: 0 -> disabled
- bool cr_osk_int; // ext/int output shaped control: 0 -> external
- bool cr_msb_lsb; // msb/lsb bit first: 0 -> MSB
- bool cr_sdo; // SDO pin active: 0 -> inactive
-
- SPI *spi_device;
- //DDS I/O
- DigitalOut *dds_mreset;
- DigitalOut *dds_outramp;
- DigitalOut *dds_sp_mode;
- DigitalOut *dds_cs;
- DigitalOut *dds_io_reset;
- DigitalInOut *dds_updclk;
-
- char frequency1[6];
- char frequency2[6];
- char phase1[2];
- char phase2[2];
- char amplitudeI[2];
- char amplitudeQ[2];
- bool rf_enabled;
-
- char* cmd_answer;
- unsigned long cmd_answer_len;
-
- int __writeData(char addr, char ndata, const char* data);
- char* __readData(char addr, char ndata);
- int __writeDataAndVerify(char addr, char ndata, const char* wr_spi_data, SerialDriver *screen=NULL);
- char* __getControlRegister();
- int __writeControlRegister();
-
- public:
- bool isConfig;
-
- DDS(SPI *spi_dev, DigitalOut *mreset, DigitalOut *outramp, DigitalOut *spmode, DigitalOut *cs, DigitalOut *ioreset, DigitalInOut *updclk);
- int init();
- int reset();
- int scanIOUpdate();
- int find();
- char* rdMode();
- char* rdMultiplier();
- char* rdPhase1();
- char* rdPhase2();
- char* rdFrequency1();
- char* rdFrequency2();
- char* rdAmplitudeI();
- char* rdAmplitudeQ();
- int isRFEnabled();
- int wrMode(char mode);
- int wrMultiplier(char multiplier, float clock);
- int wrPhase1(char* phase, SerialDriver *screen=NULL);
- int wrPhase2(char* phase, SerialDriver *screen=NULL);
- int wrFrequency1(char* freq, SerialDriver *screen=NULL);
- int wrFrequency2(char* freq, SerialDriver *screen=NULL);
- int wrAmplitudeI(char* amplitude, SerialDriver *screen=NULL);
- int wrAmplitudeQ(char* amplitude, SerialDriver *screen=NULL);
- int enableRF();
- int disableRF();
- int defaultSettings(SerialDriver *screen=NULL);
- char* setCommand(unsigned short cmd, char* payload, unsigned long payload_len);
- char* getCmdAnswer();
- unsigned long getCmdAnswerLen();
- int setAllDevice(char* payload, SerialDriver *screen=NULL);
- bool wasInitialized();
-
-};
-
-#endif
\ No newline at end of file
--- a/JroIpdata.cpp Tue Feb 10 14:28:42 2015 +0000
+++ b/JroIpdata.cpp Mon Feb 23 20:36:23 2015 +0000
@@ -169,6 +169,8 @@
this->len_payload = len_data - 5; //1B id_class, 1B id_dev, 2B cmd y 1B xor
this->xor_rd = ip_data[4+len_data-1];
+ this->payload[this->len_payload] = 0x00; //the last byte should be set to 0x00 (end of payload)
+
//printf("\r\nID_CLASS = 0x%x, ID_DEV = 0x%x, CMD = 0x%x, XOR = 0x%x", id_class, id_dev, cmd, xor_rd);
//printf("\r\nPAYLOAD[0] = 0x%x, PYLD_LEN = 0x%x\r\n", payload[0], len_payload);
@@ -231,7 +233,7 @@
return this->len_tx_buffer;
}
-
+
char* IpData::getNIData(unsigned short cmd){
char tx_data[5];
@@ -244,4 +246,32 @@
unsigned long IpData::getNIDataLen(){
return this->len_tx_buffer;
+}
+
+char* IpData::getOKData(unsigned short cmd){
+
+ char tx_data[5];
+
+ strcpy(tx_data, OK_PAYLOAD);
+
+ return this->encode(cmd, tx_data, OK_LEN);
+}
+
+unsigned long IpData::getOKDataLen(){
+
+ return this->len_tx_buffer;
+}
+
+char* IpData::getKOData(unsigned short cmd){
+
+ char tx_data[5];
+
+ strcpy(tx_data, KO_PAYLOAD);
+
+ return this->encode(cmd, tx_data, KO_LEN);
+}
+
+unsigned long IpData::getKODataLen(){
+
+ return this->len_tx_buffer;
}
\ No newline at end of file
--- a/JroIpdata.h Tue Feb 10 14:28:42 2015 +0000
+++ b/JroIpdata.h Mon Feb 23 20:36:23 2015 +0000
@@ -7,6 +7,12 @@
#define ID_CLASS 2
#define ID_DEV 1
+#define OK_PAYLOAD "OK"
+#define OK_LEN 2
+
+#define KO_PAYLOAD "KO"
+#define KO_LEN 2
+
#define NI_PAYLOAD "NI"
#define NI_LEN 2
@@ -79,6 +85,10 @@
unsigned long getTxDataLen();
char* getNIData(unsigned short cmd=0x0);
unsigned long getNIDataLen();
+ char* getOKData(unsigned short cmd=0x0);
+ unsigned long getOKDataLen();
+ char* getKOData(unsigned short cmd=0x0);
+ unsigned long getKODataLen();
};
#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/JroSIR.h Mon Feb 23 20:36:23 2015 +0000 @@ -0,0 +1,9 @@ +#ifndef JRO_SIR +#define JRO_SIR + +//Device commands +#define CMD_RESET 0X01 +#define CMD_ENABLE 0x02 +#define CMD_CHANGE_IP 0x03 + +#endif \ No newline at end of file
