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:
- 26:c8655e0ec73a
- Parent:
- 23:c65456ec5e61
--- a/BCN.cpp Sat Jul 02 14:06:10 2016 +0000
+++ b/BCN.cpp Sun Jul 03 19:25:48 2016 +0000
@@ -29,6 +29,11 @@
//This Flag when exceeds a threshold, uC should reset.
uint16_t BCN_TX_MAIN_COUNTER = 0;
+extern uint8_t BCN_LONG_MSG_TYPE = 1;
+extern uint8_t LONG_HK_data[2][134];
+
+extern DigitalOut BCN_SW(PIN14);
+
void FCTN_BCN_INIT()
{
pc_bcn.printf("FCTN_BCN_INIT\n");
@@ -66,39 +71,43 @@
if(BCN_FEN == 1)
{
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
- {
- //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);
- BCN_TX_MAIN_STATUS = 0;
- }
- else
- {
- //Set_BCN_TX_STATUS(BCN_TX_FAILURE);
- BCN_FAIL_COUNT++;
- Init_BEACON_HW();
- BCN_TX_MAIN_STATUS = 0;
+ //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);
+ BCN_TX_MAIN_STATUS = 0;
+ }
+ else
+ {
+ Set_BCN_TX_STATUS(BCN_TX_FAILURE);
+ //BCN_FAIL_COUNT++;
+ //Init_BEACON_HW();
+ BCN_TX_MAIN_STATUS = 0;
+
+ }
+ }
+ }
}
else
{
@@ -132,11 +141,14 @@
{
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;
+ }
+ else temperature = 0xFF;
return temperature;
}
@@ -150,7 +162,7 @@
uint32_t timeout_count = 10e5;
//extract values from short_beacon[]
-
+ /*
uint8_t Long_beacon[LONG_TX_DATA];
for(int i = 0;i<LONG_TX_DATA;i++)
{
@@ -169,7 +181,7 @@
//filling hk data
//uint8_t short_beacon[] = { 0xAB, 0x8A, 0xE2, 0xBB, 0xB8, 0xA2, 0x8E,Shortbeacon.Voltage[0],Shortbeacon.AngularSpeed[0], Shortbeacon.AngularSpeed[1],Shortbeacon.SubsystemStatus[0],Shortbeacon.Temp[0],Shortbeacon.Temp[1],Shortbeacon.Temp[2],Shortbeacon.ErrorFlag[0]};
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
@@ -182,7 +194,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]);
@@ -228,12 +240,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)
@@ -244,17 +258,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);
@@ -264,9 +278,9 @@
}
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");
+ //pc_bcn.printf("Waiting for fifo to empty\r\n");
}
//Check for packetsent interrupt
@@ -305,7 +319,7 @@
{
break;
}
- else if(count == 5)
+ else if(count == 2)
{
reset_rfm(1); printf("reg = 0x%X\n",reg);break;
}
@@ -475,4 +489,17 @@
}
*/
+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
