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.
Dependencies: FreescaleIAP mbed-rtos mbed
Fork of RAJANGAM_REVIEW_BAE_CODE by
Diff: BCN.cpp
- Revision:
- 33:76f2b8735501
- Parent:
- 27:61c856be467e
- Child:
- 39:670133e7ffd8
--- a/BCN.cpp Sat Jul 02 14:06:34 2016 +0000
+++ b/BCN.cpp Mon Jul 04 04:29:59 2016 +0000
@@ -1,4 +1,5 @@
#include "BCN.h"
+#include "EPS.h"
#include <stdio.h>
#include "pin_config.h"
//Check the pin names
@@ -28,16 +29,60 @@
uint8_t BCN_FAIL_COUNT = 0; //Flag for keeping count of no. of times of BCN failure in init or one transmission in 30 secs (failure in spi communication)
//This Flag when exceeds a threshold, uC should reset.
uint16_t BCN_TX_MAIN_COUNTER = 0;
+uint8_t SHORT_HK_data[15];
+extern uint8_t BCN_LONG_MSG_TYPE;
+extern uint8_t LONG_HK_data[2][134];
+extern DigitalOut BCN_SW;
+extern float EPS_BTRY_TMP_AVG;
+
+extern BAE_HK_quant quant_data;
+extern uint8_t BAE_RESET_COUNTER;
+extern Timer BAE_uptime;
+extern Timer I2C_last;
+extern void RETURN_UPTIME(float,uint8_t*,uint8_t*,uint8_t*);
+extern DigitalOut CDMS_OC_FAULT;
+extern DigitalOut EPS_CHARGER_STATUS;
+extern uint8_t crc8_short();
+
+void SHORT_HK_data_AQ()
+{
+ uint8_t days,hours,mins;//for calculating the timing data in bae i2c uptime
+
+ //1st 0-7 call sign
+ //SHORT_HK_data[0] _ SHORT_HK_data[6]
+
+ SHORT_HK_data[7] = quant_data.voltage_quant[15];
+ SHORT_HK_data[7] = (SHORT_HK_data[7] & 0xF0) | (quant_data.current_quant[1]>>4);
+ //braga SHORT_HK_data[8] = acs first 4 bit
+ SHORT_HK_data[8] = (SHORT_HK_data[8] & 0xF0) | BCN_TMP>>4;
+ //SHORT_HK_data[9] = float_to_uint8(min,max,EPS_BTRY_TMP_AVG); min max diss azad
+ SHORT_HK_data[9] = (SHORT_HK_data[9]&0xF0) | BAE_RESET_COUNTER>>4;
+
+ RETURN_UPTIME(BAE_uptime.read(),&days,&hours,&mins);
+ SHORT_HK_data[10] = CDMS_OC_FAULT;
+ //SHORT_HK_data[10] = (1<<SHORT_HK_data[10]) | receiver_oc_fault//to be diss;
+ SHORT_HK_data[10] = (SHORT_HK_data[10]<<1) | ((quant_data.voltage_quant[12]>>2)&0x3C);
+ SHORT_HK_data[10] = (SHORT_HK_data[10]<<2) | ((days>>3)&0x03);
+ SHORT_HK_data[11] = (days<<5) | (hours&0x1F);
+
+ RETURN_UPTIME(I2C_last.read(),&days,&hours,&mins);
+ SHORT_HK_data[12] = EPS_CHARGER_STATUS;
+ SHORT_HK_data[12] = (SHORT_HK_data[12]<<4) | (quant_data.voltage_quant[13]>>4);
+ SHORT_HK_data[12] = (SHORT_HK_data[12]<<3) | (days>>2);
+ SHORT_HK_data[13] = (days<<6) | (mins&0x3F);
+
+ SHORT_HK_data[14] = crc8_short();
+}
void FCTN_BCN_INIT()
{
pc_bcn.printf("FCTN_BCN_INIT\n");
BCN_INIT_STATUS = 1;
- if( BCN_TX_SW_STATUS == 0b00000001 )
+ if( BCN_TX_SW_STATUS == 0b00000001)
Init_BEACON_HW();
else Set_BCN_TX_STATUS(BCN_TX_DISABLED);
- // if(BCN_FEN == 0)//BCN_FEN is in flash
- // rf_sl_timeout.attach(&FCTN_BCN_FEN, RF_SILENCE_TIME);
+ // if(BCN_FEN == 0)//BCN_FEN is in flash
+ // rf_sl_timeout.attach(&FCTN_BCN_FEN, RF_SILENCE_TIME);
BCN_INIT_STATUS = 0;
}
@@ -67,24 +112,27 @@
{
if(BCN_TX_SW_STATUS == 0b00000001)
{
- //Measure and store BCN temperature in BCN_TS_BUFFER
- BCN_TMP = check_Temperature();
- pc_bcn.printf("temperature = %d\n\r",BCN_TMP);
- //Get BCN_HK data from BCN HW(SPI) //Store BCN_HK data in BCN_HK_BUFFER
- if(BCN_SPND_TX == 1 )
+ Init_BEACON_HW();
+ if( BCN_TX_STATUS == BCN_INIT_SUCCESS )
{
- Set_BCN_TX_STATUS(BCN_TX_STANDBY);
- BCN_TX_MAIN_STATUS = 0;
-
- // break;
- }
- else
- {
+ //Measure and store BCN temperature in BCN_TS_BUFFER
+ uint8_t temp_temp = check_Temperature();
+ if( temp_temp != 0xFF )
+ BCN_TMP = temp_temp;
+ pc_bcn.printf("temperature = %d\n\r",BCN_TMP);
+ //Get BCN_HK data from BCN HW(SPI) //Store BCN_HK data in BCN_HK_BUFFER
+ if(BCN_SPND_TX == 1 )
+ {
+ Set_BCN_TX_STATUS(BCN_TX_SUSPENDED);
+ BCN_TX_MAIN_STATUS = 0;
+ }
+ else
+ {
//transmit short beacon and long beacon
begintx = t_i.read_us();
BCN_TX();
endtx = t_i.read_us();
-
+
if(Check_ACK_RECEIVED() == 1)
{
Set_BCN_TX_STATUS(BCN_TX_SUCCESS);
@@ -92,13 +140,14 @@
}
else
{
- //Set_BCN_TX_STATUS(BCN_TX_FAILURE);
- BCN_FAIL_COUNT++;
- Init_BEACON_HW();
+ Set_BCN_TX_STATUS(BCN_TX_FAILURE);
+ //BCN_FAIL_COUNT++;
+ //Init_BEACON_HW();
BCN_TX_MAIN_STATUS = 0;
-
+
}
- }
+ }
+ }
}
else
{
@@ -132,13 +181,20 @@
{
uint8_t temperature;
writereg(RF22_REG_0F_ADC_CONFIGURATION,0x00);//set ADC to temp measurement
- writereg(RF22_REG_12_Temperature_Sensor_Calibration,0x20);//measure in degree celsius
+ writereg(RF22_REG_12_Temperature_Sensor_Calibration,0x60);//measure in degree celsius
writereg(RF22_REG_0F_ADC_CONFIGURATION,0x80);//start adc
wait(0.1);
- temperature = readreg(RF22_REG_11_ADC_Value);
- temperature = (float)temperature*0.5 - 64;
+ if( readreg(RF22_REG_0F_ADC_CONFIGURATION) & 0x80 == 0x00 )
+ {
+ temperature = readreg(RF22_REG_11_ADC_Value);
+ temperature = (float)temperature - 64; //* 0.5 factor
+ }
+ else temperature = 0xFF;
+ // temperature = (float)temperature*0.5 - 64;
return temperature;
}
+
+uint32_t timeout_count;
void BCN_TX()
{
printf("BCN_TX\n\r");
@@ -147,9 +203,9 @@
wait(0.02);
- uint32_t timeout_count = 10e5;
+ timeout_count = 10e5;
//extract values from short_beacon[]
-
+ /*
uint8_t Long_beacon[LONG_TX_DATA];
for(int i = 0;i<LONG_TX_DATA;i++)
{
@@ -170,9 +226,10 @@
uint8_t short_beacon[] = { 0xF3, 0x02, 0xFA, 0xC6, 0xD4, 0x28, 0x8A,Shortbeacon.Voltage[0],Shortbeacon.AngularSpeed[0], Shortbeacon.AngularSpeed[1],Shortbeacon.SubsystemStatus[0],Shortbeacon.Temp[0],Shortbeacon.Temp[1],Shortbeacon.Temp[2],Shortbeacon.ErrorFlag[0]};
//writereg(RF22_REG_07_OPERATING_MODE1,0x01); //ready mode ??
+ */
clearTxBuf(); //writing data first time
- int byte_count=0, byte_counter;
+ int byte_counter;
uint8_t onebyte[4] = {0x81,0xA6,0xBE,0x4E};
uint8_t zerobyte[4] = {0x7E,0x59,0x41,0xB1};
for (byte_counter = 0; byte_counter <15 ; byte_counter++)
@@ -181,7 +238,7 @@
{
cs = 0;
spi.write(0xFF);
- if((short_beacon[byte_counter] & (uint8_t) pow(2.0,j))!= pow(2.0,j))
+ if((SHORT_HK_data[byte_counter] & (uint8_t) pow(2.0,j))!= pow(2.0,j))
{
//byte=0x00;
spi.write(zerobyte[0]);
@@ -204,17 +261,18 @@
spi.write(byte);
spi.write(byte); //Each bit is written 32 times
*/
- byte_count+=4;
+ // byte_count+=4;
}
if(byte_counter == 1)
- {
- //Set to Tx mode
- writereg(RF22_REG_07_OPERATING_MODE1,0x08); //txon
- wait(0.1);// takes time to set to tx mode hence the delay of 0.1.
-
- }
+ if(BCN_SPND_TX != 1) //Check for flag update by COM
+ {
+ //Set to Tx mode
+ writereg(RF22_REG_07_OPERATING_MODE1,0x08); //txon
+ wait(0.1);// takes time to set to tx mode hence the delay of 0.1.
+ }
+
//testing level
/*if(byte_counter > 0)
while(1)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x40) == 0x00)break;else
@@ -227,12 +285,14 @@
//Check for fifoThresh
if(byte_counter > 0)
- {wait_ms(25);
- while(1)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x20) == 0x20)break;else
{
- //pc_bcn.printf("w_f_empty\n");
- //reset_rfm(1);
- }
+ wait_ms(25);
+ while( timeout_count --)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x20) == 0x20)break;else if(timeout_count == 1) reset_rfm(1);
+ {
+ //pc_bcn.printf("w_f_empty\n");
+ //reset_rfm(1);
+ }
+ timeout_count = 10e5;
}
/* if(byte_counter%2==0 && byte_counter)
@@ -243,17 +303,17 @@
//pc_bcn.printf("W = %d\r\n",byte_counter);
}
- for(byte_counter = 15;byte_counter<142;byte_counter++)
+ for(byte_counter = 15;byte_counter<149;byte_counter++)
{
cs = 0;
spi.write(0xFF);
- spi.write(Long_beacon[byte_counter-15]);
+ spi.write(LONG_HK_data[BCN_LONG_MSG_TYPE][byte_counter-15]);
cs = 1;
if((byte_counter-15)%32==0)
{ //Check for fifoThresh
wait_ms(25);
- while(1)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x20) == 0x20)break;else //if(timeout_count == 1)
+ while(timeout_count--)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x20) == 0x20)break;else if(timeout_count == 1) reset_rfm(1);
{
//pc_bcn.printf("Reset\n");
//reset_rfm(1);
@@ -263,7 +323,7 @@
}
wait_ms(70);
//Check for fifoThresh
- while(1)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x40) == 0x00)break;else
+ while(timeout_count--)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x40) == 0x00)break;else if(timeout_count == 1) reset_rfm(1);
{
pc_bcn.printf("Waiting for fifo to empty\r\n");
}
@@ -367,7 +427,7 @@
{
break;
}
- else if(count == 5)
+ else if(count == 2)
{
reset_rfm(1); printf("reg = 0x%X\n",reg);break;
}
@@ -429,7 +489,7 @@
{
pc_bcn.printf("spi connection valid\r\n");
reset_rfm(0);
- Set_BCN_TX_STATUS(BCN_TX_INITIALIZED);
+ Set_BCN_TX_STATUS(BCN_INIT_SUCCESS);
break;
}
else if (BCN_INIT_COUNTER == 1)
@@ -449,13 +509,13 @@
else
{
pc_bcn.printf("BCN_TX_FAILURE\r\n");
- Set_BCN_TX_STATUS(BCN_TX_FAILURE);
+ Set_BCN_TX_STATUS(BCN_INIT_FAILURE);
break;
}
BCN_INIT_COUNTER++;
}
- if(BCN_TX_STATUS == BCN_TX_INITIALIZED)
+ if(BCN_TX_STATUS == BCN_INIT_SUCCESS)
{
writereg(RF22_REG_07_OPERATING_MODE1,0x80); //sw_reset
wait(0.1); //takes time to reset
@@ -499,11 +559,12 @@
//Set Data rate - same for both long and short beacon
writereg(RF22_REG_6E_TX_DATA_RATE,0x0A);
- writereg(RF22_REG_6F_TX_DATA_RATE,0x7C);//1280bps
+ writereg(RF22_REG_6F_TX_DATA_RATE,0x7C);//1280bps
+ writereg(RF22_REG_70_MODULATION_CONTROL1,0x20);//For data rates below 30kbps
- writereg(RF22_REG_70_MODULATION_CONTROL1,0x20);
- writereg(RF22_REG_71_MODULATION_CONTROL2,0x21);//ook = 0x21
+ writereg(RF22_REG_71_MODULATION_CONTROL2,0x21);//0x21 = FIFO mode with ook demodulation
+
//set tx power
writereg(RF22_REG_6D_TX_POWER,0x07); //20dbm
@@ -536,4 +597,19 @@
while(1);
}
-*/
\ No newline at end of file
+*/
+
+void FCTN_BCN_SPND_TX()
+{
+ BCN_SPND_TX = 1;
+ if( BCN_TX_MAIN_STATUS == 1 && BCN_TX_SW_STATUS == 1 )
+ {
+ writereg(RF22_REG_07_OPERATING_MODE1,0x00); //standby mode
+ if( readreg(RF22_REG_07_OPERATING_MODE1) & 0x08 == 0x08 )
+ {
+ BCN_SW = 0;
+ BCN_TX_SW_STATUS = 3;
+ }
+ }
+}
+
\ No newline at end of file
