Merge remote-tracking branch 'upstream/au_updates' into afsk-au-update
This commit is contained in:
		
						commit
						888cf9d9fd
					
				
							
								
								
									
										314
									
								
								HamShield.cpp
								
								
								
								
							
							
						
						
									
										314
									
								
								HamShield.cpp
								
								
								
								
							| 
						 | 
					@ -144,135 +144,138 @@ void HamShield::initialize() {
 | 
				
			||||||
   // Note: these initial settings are for UHF 12.5kHz channel
 | 
					   // Note: these initial settings are for UHF 12.5kHz channel
 | 
				
			||||||
   // see the A1846S register table and initial settings for more info
 | 
					   // see the A1846S register table and initial settings for more info
 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
   // TODO: update code to make it easier to change from VHF to UHF and 12.5kHz channel to 25kHz channel
 | 
					 | 
				
			||||||
    uint16_t tx_data;
 | 
					    uint16_t tx_data;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
    // reset all registers in A1846S
 | 
					    // reset all registers in A1846S
 | 
				
			||||||
    softReset();
 | 
					    softReset();
 | 
				
			||||||
    // set pdn_reg bit in control register (0 or 1?) (now done in softReset)
 | 
						
 | 
				
			||||||
    //I2Cdev::writeBitW(devAddr, A1846S_CTL_REG, A1846S_PWR_DWN_BIT, 1);
 | 
					 | 
				
			||||||
    tx_data = 0x0698;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x02, tx_data);  // why is this here? See A1846S register init table
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //set up clock to ues 12-14MHz
 | 
					    //set up clock to ues 12-14MHz
 | 
				
			||||||
    setClkMode(1);
 | 
					    setClkMode(1);
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    // set up clock to use 12.8MHz crystal
 | 
					 | 
				
			||||||
    setXtalFreq(12800);
 | 
					 | 
				
			||||||
    // set up ADClk frequency to 6.4MHz
 | 
					 | 
				
			||||||
    setAdcClkFreq(6400);
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    tx_data = 0xE000;
 | 
						
 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x24, tx_data);  // why is this here? See A1846S register init word doc    
 | 
					    tx_data = 0x0031;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x31, tx_data); // included as per AU supplied register table
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //could change GPIO voltage levels with writes to 0x08 and 0x09
 | 
						tx_data = 0x44A5;
 | 
				
			||||||
    // see A1846S register init table 
 | 
					    I2Cdev::writeWord(devAddr, 0x33, tx_data); // agc number - included as per AU supplied register table
 | 
				
			||||||
    tx_data = 0x03AC;
 | 
						
 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x09, tx_data);  // why is this here? See A1846S register init word doc    
 | 
						tx_data = 0x2B87;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x34, tx_data); // Rx digital gain - included as per AU supplied register table
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // set PA_bias voltage to 1.68V (and do something else too? what's the 3 for?)
 | 
						tx_data = 0x470F;
 | 
				
			||||||
    tx_data = 0x0320;
 | 
					    I2Cdev::writeWord(devAddr, 0x41, tx_data); // digital gain for Tx - included as per AU supplied register table
 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x0A, tx_data);
 | 
					 | 
				
			||||||
       
 | 
					 | 
				
			||||||
    tx_data = 0x1A10;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x0B, tx_data);  // why is this here? See A1846S register init table    
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    tx_data = 0x3E37;
 | 
						tx_data = 0x0DFF;
 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x11, tx_data);  // why is this here? See A1846S register init table    
 | 
					    I2Cdev::writeWord(devAddr, A1846S_RX_VOLUME_REG, tx_data); 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Automatic Gain Control stuff
 | 
						tx_data = 0x7FFF;
 | 
				
			||||||
    // AGC when band is UHF,0x32 = 0x627C;when band is VHF,0x32 = 0x62BC//
 | 
					    I2Cdev::writeWord(devAddr, 0x47, tx_data);// soft mute
 | 
				
			||||||
    tx_data = 0x627c; // this is uhf, for vhf set to 0x62bc
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x32, tx_data);  // why is this here? See A1846S register init table
 | 
					 | 
				
			||||||
    tx_data = 0x0AF2;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x33, tx_data);  // why is this here? See A1846S register init table
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // why is this here? See A1846S register init word doc
 | 
						tx_data = 0x2C62;
 | 
				
			||||||
    tx_data = 0x0F28; // this is uhf, for vhf set to 0x62bc
 | 
					    I2Cdev::writeWord(devAddr, 0x4F, tx_data);// included as per AU supplied register table
 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x3C, tx_data);  // why is this here? See A1846S register init table
 | 
						
 | 
				
			||||||
    tx_data = 0x200B;
 | 
						tx_data = 0x0094;
 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x3D, tx_data);  // why is this here? See A1846S register init table
 | 
					    I2Cdev::writeWord(devAddr, 0x53, tx_data);// included as per AU supplied register table	
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						tx_data = 0x0081;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x55, tx_data);// included as per AU supplied register table		
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						tx_data = 0x0B22;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x56, tx_data);// sq detection time
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						tx_data = 0x1C00;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x57, tx_data);// bypass rssi lpfilter
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						tx_data = 0x0EDB;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x5A, tx_data);// SQ detection time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Noise threshold settings
 | 
						tx_data = 0x101E;
 | 
				
			||||||
    tx_data = 0x1C2F; // see email from Iris
 | 
					    I2Cdev::writeWord(devAddr, 0x60, tx_data);// SQ noise threshold
 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x47, tx_data);  // why is this here? See A1846S register init table
 | 
						
 | 
				
			||||||
 | 
						tx_data = 0x16AD;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x63, tx_data);// pre-emphasis bypass threshold
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // SNR LPF settings, sq settings
 | 
						// calibration
 | 
				
			||||||
    tx_data = 0x293A;
 | 
						tx_data = 0x00A4;
 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x4e, tx_data);  // why is this here? See A1846S register init table
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // subaudio decode setting,sq_out_sel,noise threshold value db
 | 
					 | 
				
			||||||
    tx_data = 0x114A; // A1846S_SQ_OUT_SEL_REG is 0x54
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, A1846S_SQ_OUT_SEL_REG, tx_data);  // why is this here? See A1846S register init table
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    // bandwide setting of filter when RSSI is high or low
 | 
					 | 
				
			||||||
    tx_data = 0x0652;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x56, tx_data);  // why is this here? See A1846S register init table
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    tx_data = 0x062d;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x6e, tx_data);  // why is this here? See A1846S register init table
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // note, this is for 12.5kHz channel
 | 
					 | 
				
			||||||
    tx_data = 0x6C1E;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x71, tx_data);  // why is this here? See A1846S register init table
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // see A1846S register init doc for this
 | 
					 | 
				
			||||||
    tx_data = 0x00FF;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x44, tx_data);  // why is this here? See A1846S register init table
 | 
					 | 
				
			||||||
    tx_data = 0x0500;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x1F, tx_data);  // set up GPIO for RX/TX mirroring
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // set RFoutput power (note that the address is 0x85, so do some rigmaroll)
 | 
					 | 
				
			||||||
    tx_data = 0x1;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x7F, tx_data);  // prep to write to a reg > 0x7F
 | 
					 | 
				
			||||||
    // If 0x85 is  0x001F, Rfoutput power is 8dBm , ACP is -63dB in 12.5KHz and -65dB in 25KHz
 | 
					 | 
				
			||||||
    // If 0x85 is  0x0018, Rfoutput power is 6dBm , ACP is -64dB in 12.5KHz and -66dB in 25KHz
 | 
					 | 
				
			||||||
    // If 0x85 is  0x0017, Rfoutput power is -3dBm , ACP is -68dBc in 12.5KHz and -68dBc in 25KHz
 | 
					 | 
				
			||||||
    tx_data = 0x001F;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x5, tx_data);  // set output power, reg 0x85 - 0x80
 | 
					 | 
				
			||||||
    tx_data = 0x0;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x7F, tx_data);  // finish writing to a reg > 0x7F
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    // set control reg for pdn_reg, rx, and mute when rxno
 | 
					 | 
				
			||||||
    tx_data = 0xA4;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, A1846S_CTL_REG, tx_data);  // finish writing to a reg > 0x7F
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    delay(100);
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    // set control reg for chip_cal_en, pdn_reg, rx, and mute when rxno
 | 
					 | 
				
			||||||
    tx_data = 0xA6;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, A1846S_CTL_REG, tx_data);  // finish writing to a reg > 0x7F
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    delay(100);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // set control reg for chip_cal_en, pdn_reg
 | 
					 | 
				
			||||||
    tx_data = 0x6;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, A1846S_CTL_REG, tx_data);  // finish writing to a reg > 0x7F
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    delay(100);
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    // and then I have no idea about this nonsense
 | 
					 | 
				
			||||||
    // some of these settings seem to be for 12.5kHz channels
 | 
					 | 
				
			||||||
    // TODO: get A1846S to give us a full register table
 | 
					 | 
				
			||||||
    tx_data = 0x1d40;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x54, tx_data);
 | 
					 | 
				
			||||||
    tx_data = 0x062d;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x6e, tx_data);
 | 
					 | 
				
			||||||
    tx_data = 0x102a;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x70, tx_data);
 | 
					 | 
				
			||||||
    tx_data = 0x6c1e;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x71, tx_data);
 | 
					 | 
				
			||||||
    tx_data = 0x0006;
 | 
					 | 
				
			||||||
    I2Cdev::writeWord(devAddr, 0x30, tx_data);
 | 
					    I2Cdev::writeWord(devAddr, 0x30, tx_data);
 | 
				
			||||||
    
 | 
						delay(50);
 | 
				
			||||||
 | 
						tx_data = 0x00A6;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x30, tx_data);
 | 
				
			||||||
 | 
						delay(100);
 | 
				
			||||||
 | 
						tx_data = 0x0006;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x30, tx_data);
 | 
				
			||||||
 | 
						delay(10);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// continue default setup in 12.5kHz mode
 | 
				
			||||||
 | 
						tx_data = 0x1100;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x15, tx_data); // tuning bit
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						tx_data = 0x4495;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x32, tx_data); // agc target power	
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						tx_data = 0x40C3;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x3A, tx_data); // modu_det_sel sq setting
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						tx_data = 0x0F1E;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x3C, tx_data); // pk_det_thr sq setting
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						tx_data = 0x28D0;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x3F, tx_data); // pk_det_thr sq setting
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						tx_data = 0x20BE;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x48, tx_data); // pk_det_thr sq setting
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						tx_data = 0x0A50;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x59, tx_data); // Tx FM Deviation
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						tx_data = 0x0A10;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x62, tx_data); // Modu_det_thresh (sq setting)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						tx_data = 0x2494;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x65, tx_data); // setting th_sif for SQ rssi detect
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						tx_data = 0x2494;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x66, tx_data); // setting th_sif for SQ rssi detect
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// AGC gain table settings
 | 
				
			||||||
 | 
						// the rest of these settings are to upper register addresses
 | 
				
			||||||
 | 
						// set 0x7F to 1 to write to them
 | 
				
			||||||
 | 
						tx_data = 0x0001;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x7F, tx_data);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						tx_data = 0x0014;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x06, tx_data);
 | 
				
			||||||
 | 
						tx_data = 0x020C;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x07, tx_data);
 | 
				
			||||||
 | 
						tx_data = 0x0214;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x08, tx_data);
 | 
				
			||||||
 | 
						tx_data = 0x030C;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x09, tx_data);
 | 
				
			||||||
 | 
						tx_data = 0x0314;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x0A, tx_data);
 | 
				
			||||||
 | 
						tx_data = 0x0324;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x0B, tx_data);
 | 
				
			||||||
 | 
						tx_data = 0x0344;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x0C, tx_data);
 | 
				
			||||||
 | 
						tx_data = 0x1344;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x0D, tx_data);
 | 
				
			||||||
 | 
						tx_data = 0x1B44;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x0E, tx_data);
 | 
				
			||||||
 | 
						tx_data = 0x3F44;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x0F, tx_data);
 | 
				
			||||||
 | 
						tx_data = 0xE0EB;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x12, tx_data);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// done writing to upper page addresses, so set 0x7F back
 | 
				
			||||||
 | 
						tx_data = 0x0000;
 | 
				
			||||||
 | 
					    I2Cdev::writeWord(devAddr, 0x7F, tx_data);	
 | 
				
			||||||
 | 
						
 | 
				
			||||||
    delay(100);
 | 
					    delay(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // setup default values
 | 
					    // setup default values
 | 
				
			||||||
 | 
					 | 
				
			||||||
    setFrequency(446000);
 | 
					    setFrequency(446000);
 | 
				
			||||||
    setVolume1(0xF);
 | 
					    //setVolume1(0xF);
 | 
				
			||||||
    setVolume2(0xF);
 | 
					    //setVolume2(0xF);
 | 
				
			||||||
    setModeReceive();
 | 
					    setModeReceive();
 | 
				
			||||||
    setTxSourceMic();
 | 
					    setTxSourceMic();
 | 
				
			||||||
    setSQLoThresh(80);
 | 
					    setSQLoThresh(80);
 | 
				
			||||||
| 
						 | 
					@ -285,10 +288,8 @@ void HamShield::initialize() {
 | 
				
			||||||
 * @return True if connection is valid, false otherwise
 | 
					 * @return True if connection is valid, false otherwise
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
bool HamShield::testConnection() {
 | 
					bool HamShield::testConnection() {
 | 
				
			||||||
    I2Cdev::readWord(devAddr, 0x09, radio_i2c_buf);
 | 
					    I2Cdev::readWord(devAddr, 0x00, radio_i2c_buf);
 | 
				
			||||||
    // TODO: find a device ID reg I can use
 | 
					    return radio_i2c_buf[0] == 0x1846;
 | 
				
			||||||
    // 03ac or 032c
 | 
					 | 
				
			||||||
    return (radio_i2c_buf[0] == 0x03AC || radio_i2c_buf[0] == 0x32C);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -358,6 +359,7 @@ void HamShield::setNoFilters() {
 | 
				
			||||||
  setGpioHi(2); // turn off VHF
 | 
					  setGpioHi(2); // turn off VHF
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
// band
 | 
					// band
 | 
				
			||||||
// 00 - 400-520MHz 
 | 
					// 00 - 400-520MHz 
 | 
				
			||||||
// 10 - 200-260MHz
 | 
					// 10 - 200-260MHz
 | 
				
			||||||
| 
						 | 
					@ -383,7 +385,9 @@ uint16_t HamShield::getBand(){
 | 
				
			||||||
    I2Cdev::readBitsW(devAddr, A1846S_BAND_SEL_REG, A1846S_BAND_SEL_BIT, A1846S_BAND_SEL_LENGTH, radio_i2c_buf);
 | 
					    I2Cdev::readBitsW(devAddr, A1846S_BAND_SEL_REG, A1846S_BAND_SEL_BIT, A1846S_BAND_SEL_LENGTH, radio_i2c_buf);
 | 
				
			||||||
    return radio_i2c_buf[0];
 | 
					    return radio_i2c_buf[0];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
// xtal frequency (kHz)
 | 
					// xtal frequency (kHz)
 | 
				
			||||||
// 12-14MHz crystal: this reg is set to crystal freq_khz
 | 
					// 12-14MHz crystal: this reg is set to crystal freq_khz
 | 
				
			||||||
// 24-28MHz crystal: this reg is set to crystal freq_khz / 2
 | 
					// 24-28MHz crystal: this reg is set to crystal freq_khz / 2
 | 
				
			||||||
| 
						 | 
					@ -391,11 +395,12 @@ void HamShield::setXtalFreq(uint16_t freq_kHz){
 | 
				
			||||||
	I2Cdev::writeWord(devAddr, A1846S_XTAL_FREQ_REG, freq_kHz);	
 | 
						I2Cdev::writeWord(devAddr, A1846S_XTAL_FREQ_REG, freq_kHz);	
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
uint16_t HamShield::getXtalFreq(){
 | 
					uint16_t HamShield::getXtalFreq(){
 | 
				
			||||||
	I2Cdev::readWord(devAddr, A1846S_FREQ_HI_REG, radio_i2c_buf);
 | 
						I2Cdev::readWord(devAddr, A1846S_XTAL_FREQ_REG, radio_i2c_buf);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	return radio_i2c_buf[0];
 | 
						return radio_i2c_buf[0];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// adclk frequency (kHz)
 | 
					// adclk frequency (kHz)
 | 
				
			||||||
// 12-14MHz crystal: this reg is set to crystal freq_khz / 2
 | 
					// 12-14MHz crystal: this reg is set to crystal freq_khz / 2
 | 
				
			||||||
// 24-28MHz crystal: this reg is set to crystal freq_khz / 4
 | 
					// 24-28MHz crystal: this reg is set to crystal freq_khz / 4
 | 
				
			||||||
| 
						 | 
					@ -407,15 +412,16 @@ uint16_t HamShield::getAdcClkFreq(){
 | 
				
			||||||
	I2Cdev::readWord(devAddr, A1846S_ADCLK_FREQ_REG, radio_i2c_buf);
 | 
						I2Cdev::readWord(devAddr, A1846S_ADCLK_FREQ_REG, radio_i2c_buf);
 | 
				
			||||||
	return radio_i2c_buf[0];
 | 
						return radio_i2c_buf[0];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// clk mode
 | 
					// clk mode
 | 
				
			||||||
// 12-14MHz: set to 1
 | 
					// 12-14MHz: set to 1
 | 
				
			||||||
// 24-28MHz: set to 0
 | 
					// 24-28MHz: set to 0
 | 
				
			||||||
void HamShield::setClkMode(bool LFClk){
 | 
					void HamShield::setClkMode(bool LFClk){
 | 
				
			||||||
    // include upper bits as default values
 | 
					    // include upper bits as default values
 | 
				
			||||||
    uint16_t tx_data = 0x0F11; // NOTE: should this be 0fd1 or 0f11? Programming guide and setup guide disagree
 | 
					    uint16_t tx_data = 0x0FD1;
 | 
				
			||||||
    if (!LFClk) {
 | 
					    if (!LFClk) {
 | 
				
			||||||
      tx_data = 0x0F10;  
 | 
					      tx_data = 0x0FD0;  
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
    I2Cdev::writeWord(devAddr, A1846S_CLK_MODE_REG, tx_data);
 | 
					    I2Cdev::writeWord(devAddr, A1846S_CLK_MODE_REG, tx_data);
 | 
				
			||||||
| 
						 | 
					@ -433,6 +439,8 @@ bool HamShield::getClkMode(){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TX/RX control
 | 
					// TX/RX control
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TODO: create a 25kHz setup option as well as 12.5kHz (as is implemented now)
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
// channel mode
 | 
					// channel mode
 | 
				
			||||||
// 11 - 25kHz channel
 | 
					// 11 - 25kHz channel
 | 
				
			||||||
// 00 - 12.5kHz channel
 | 
					// 00 - 12.5kHz channel
 | 
				
			||||||
| 
						 | 
					@ -444,6 +452,7 @@ uint16_t HamShield::getChanMode(){
 | 
				
			||||||
    I2Cdev::readBitsW(devAddr, A1846S_CTL_REG, A1846S_CHAN_MODE_BIT, A1846S_CHAN_MODE_LENGTH, radio_i2c_buf);
 | 
					    I2Cdev::readBitsW(devAddr, A1846S_CTL_REG, A1846S_CHAN_MODE_BIT, A1846S_CHAN_MODE_LENGTH, radio_i2c_buf);
 | 
				
			||||||
    return radio_i2c_buf[0];
 | 
					    return radio_i2c_buf[0];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// choose tx or rx
 | 
					// choose tx or rx
 | 
				
			||||||
void HamShield::setTX(bool on_noff){
 | 
					void HamShield::setTX(bool on_noff){
 | 
				
			||||||
| 
						 | 
					@ -453,19 +462,16 @@ void HamShield::setTX(bool on_noff){
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      // For RF6886:
 | 
					      // For RF6886:
 | 
				
			||||||
      // first turn on power
 | 
					      // first turn on power
 | 
				
			||||||
        // set RX output on
 | 
					        // set RX output off
 | 
				
			||||||
      setGpioHi(4); // remember that RX and TX are active low
 | 
					      setGpioHi(4); // remember that RX and TX are active low
 | 
				
			||||||
        // set TX output off
 | 
					        // set TX output on
 | 
				
			||||||
      setGpioLow(5); // remember that RX and TX are active low
 | 
					      setGpioLow(5); // remember that RX and TX are active low
 | 
				
			||||||
      // then turn on VREG (PWM output)
 | 
					      // then turn on VREG (PWM output)
 | 
				
			||||||
      // then apply RF signal
 | 
					      // then apply RF signal
 | 
				
			||||||
      setRfPower(9); // figure out a good default number (or don't set a default)
 | 
					      setRfPower(9); // figure out a good default number (TODO: or don't set a default)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // todo: make sure gpio are set correctly after this
 | 
					 | 
				
			||||||
    I2Cdev::writeBitW(devAddr, A1846S_CTL_REG, A1846S_TX_MODE_BIT, on_noff);
 | 
					    I2Cdev::writeBitW(devAddr, A1846S_CTL_REG, A1846S_TX_MODE_BIT, on_noff);
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
bool HamShield::getTX(){
 | 
					bool HamShield::getTX(){
 | 
				
			||||||
    I2Cdev::readBitW(devAddr, A1846S_CTL_REG, A1846S_TX_MODE_BIT, radio_i2c_buf);
 | 
					    I2Cdev::readBitW(devAddr, A1846S_CTL_REG, A1846S_TX_MODE_BIT, radio_i2c_buf);
 | 
				
			||||||
| 
						 | 
					@ -478,7 +484,7 @@ void HamShield::setRX(bool on_noff){
 | 
				
			||||||
     setTX(false);
 | 
					     setTX(false);
 | 
				
			||||||
     
 | 
					     
 | 
				
			||||||
    // set TX output off
 | 
					    // set TX output off
 | 
				
			||||||
    setGpioHi(5); // remember that RX and TX are active low
 | 
					    setGpioHiZ(5); // remember that RX and TX are active low
 | 
				
			||||||
    // set RX output on
 | 
					    // set RX output on
 | 
				
			||||||
    setGpioLow(4); // remember that RX and TX are active low
 | 
					    setGpioLow(4); // remember that RX and TX are active low
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
| 
						 | 
					@ -491,15 +497,16 @@ bool HamShield::getRX(){
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void HamShield::setModeTransmit(){
 | 
					void HamShield::setModeTransmit(){
 | 
				
			||||||
        // check to see if we should allow them to do this
 | 
					    // check to see if we should allow them to do this
 | 
				
			||||||
        if(restrictions == true) { 
 | 
					    if(restrictions == true) { 
 | 
				
			||||||
           if((radio_frequency > 139999) & (radio_frequency < 148001)) { setRX(false); setTX(true); } 
 | 
					       if((radio_frequency > 139999) & (radio_frequency < 148001)) { setRX(false); setTX(true); } 
 | 
				
			||||||
           if((radio_frequency > 218999) & (radio_frequency < 225001)) { setRX(false); setTX(true); } 
 | 
					       if((radio_frequency > 218999) & (radio_frequency < 225001)) { setRX(false); setTX(true); } 
 | 
				
			||||||
           if((radio_frequency > 419999) & (radio_frequency < 450001)) { setRX(false); setTX(true); }                     
 | 
					       if((radio_frequency > 419999) & (radio_frequency < 450001)) { setRX(false); setTX(true); }                     
 | 
				
			||||||
        } else { 
 | 
					    } else { 
 | 
				
			||||||
	// turn off rx, turn on tx
 | 
							// turn off rx, turn on tx
 | 
				
			||||||
	setRX(false); // break before make
 | 
							setRX(false); // break before make
 | 
				
			||||||
	setTX(true); }
 | 
							setTX(true);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
} 
 | 
					} 
 | 
				
			||||||
void HamShield::setModeReceive(){
 | 
					void HamShield::setModeReceive(){
 | 
				
			||||||
	// turn on rx, turn off tx
 | 
						// turn on rx, turn off tx
 | 
				
			||||||
| 
						 | 
					@ -513,33 +520,35 @@ void HamShield::setModeOff(){
 | 
				
			||||||
} 
 | 
					} 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// set tx source
 | 
					// set tx source
 | 
				
			||||||
// 00 - Mic source
 | 
					// 000 - Nothing
 | 
				
			||||||
// 01 - sine source from tone2
 | 
					// 001 - sine source from tone1
 | 
				
			||||||
// 10 - tx code from GPIO1 code_in (gpio1<1:0> must be set to 01)
 | 
					// 010 - sine source from tone2
 | 
				
			||||||
// 11 - no tx source
 | 
					// 011 - sine source from tone1 and tone2
 | 
				
			||||||
 | 
					// 100 - mic
 | 
				
			||||||
void HamShield::setTxSource(uint16_t tx_source){
 | 
					void HamShield::setTxSource(uint16_t tx_source){
 | 
				
			||||||
    I2Cdev::writeBitsW(devAddr, A1846S_TX_VOICE_REG, A1846S_VOICE_SEL_BIT, A1846S_VOICE_SEL_LENGTH, tx_source);
 | 
					    I2Cdev::writeBitsW(devAddr, A1846S_TX_VOICE_REG, A1846S_VOICE_SEL_BIT, A1846S_VOICE_SEL_LENGTH, tx_source);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
void HamShield::setTxSourceMic(){
 | 
					void HamShield::setTxSourceMic(){
 | 
				
			||||||
	setTxSource(0);
 | 
						setTxSource(4);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
void HamShield::setTxSourceSine(){
 | 
					void HamShield::setTxSourceTone1(){
 | 
				
			||||||
	setTxSource(1);
 | 
						setTxSource(1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
void HamShield::setTxSourceCode(){
 | 
					void HamShield::setTxSourceTone2(){
 | 
				
			||||||
	// note, also set GPIO1 to 01
 | 
					 | 
				
			||||||
	setGpioMode(1, 1);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	setTxSource(2);
 | 
						setTxSource(2);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
void HamShield::setTxSourceNone(){
 | 
					void HamShield::setTxSourceTones(){
 | 
				
			||||||
	setTxSource(3);
 | 
						setTxSource(3);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					void HamShield::setTxSourceNone(){
 | 
				
			||||||
 | 
						setTxSource(0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
uint16_t HamShield::getTxSource(){
 | 
					uint16_t HamShield::getTxSource(){
 | 
				
			||||||
    I2Cdev::readBitsW(devAddr, A1846S_TX_VOICE_REG, A1846S_VOICE_SEL_BIT, A1846S_VOICE_SEL_LENGTH, radio_i2c_buf);
 | 
					    I2Cdev::readBitsW(devAddr, A1846S_TX_VOICE_REG, A1846S_VOICE_SEL_BIT, A1846S_VOICE_SEL_LENGTH, radio_i2c_buf);
 | 
				
			||||||
    return radio_i2c_buf[0];
 | 
					    return radio_i2c_buf[0];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
// set PA_bias voltage
 | 
					// set PA_bias voltage
 | 
				
			||||||
//    000000: 1.01V
 | 
					//    000000: 1.01V
 | 
				
			||||||
//    000001:1.05V
 | 
					//    000001:1.05V
 | 
				
			||||||
| 
						 | 
					@ -556,7 +565,7 @@ uint16_t HamShield::getPABiasVoltage(){
 | 
				
			||||||
    I2Cdev::readBitsW(devAddr, A1846S_PABIAS_REG, A1846S_PABIAS_BIT, A1846S_PABIAS_LENGTH, radio_i2c_buf);
 | 
					    I2Cdev::readBitsW(devAddr, A1846S_PABIAS_REG, A1846S_PABIAS_BIT, A1846S_PABIAS_LENGTH, radio_i2c_buf);
 | 
				
			||||||
    return radio_i2c_buf[0];
 | 
					    return radio_i2c_buf[0];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
// Subaudio settings
 | 
					// Subaudio settings
 | 
				
			||||||
// TX and RX code
 | 
					// TX and RX code
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -988,10 +997,10 @@ bool HamShield::getPreDeEmphEnabled(){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Read Only Status Registers
 | 
					// Read Only Status Registers
 | 
				
			||||||
int16_t HamShield::readRSSI(){
 | 
					int16_t HamShield::readRSSI(){
 | 
				
			||||||
	I2Cdev::readWord(devAddr, A1846S_RSSI_REG, radio_i2c_buf);
 | 
						I2Cdev::readBitsW(devAddr, A1846S_RSSI_REG, A1846S_RSSI_BIT, A1846S_RSSI_LENGTH, radio_i2c_buf);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
        int16_t rssi = (radio_i2c_buf[0] & 0x3FF) / 8 - 135;
 | 
					    int16_t rssi = (radio_i2c_buf[0] & 0x3FF) - 137;
 | 
				
			||||||
	return rssi; // only need lowest 10 bits
 | 
						return rssi;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
uint16_t HamShield::readVSSI(){
 | 
					uint16_t HamShield::readVSSI(){
 | 
				
			||||||
	I2Cdev::readWord(devAddr, A1846S_VSSI_REG, radio_i2c_buf);
 | 
						I2Cdev::readWord(devAddr, A1846S_VSSI_REG, radio_i2c_buf);
 | 
				
			||||||
| 
						 | 
					@ -1012,6 +1021,7 @@ uint16_t HamShield::readDTMFCode(){
 | 
				
			||||||
    return radio_i2c_buf[0];
 | 
					    return radio_i2c_buf[0];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void HamShield::setRfPower(uint8_t pwr) {
 | 
					void HamShield::setRfPower(uint8_t pwr) {
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
   // using loop reference voltage input to op-amp
 | 
					   // using loop reference voltage input to op-amp
 | 
				
			||||||
| 
						 | 
					@ -1027,24 +1037,26 @@ void HamShield::setRfPower(uint8_t pwr) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool HamShield::frequency(uint32_t freq_khz) {  
 | 
					bool HamShield::frequency(uint32_t freq_khz) {  
 | 
				
			||||||
 | 
					  //TODO: there are several "special" frequencies that require extra setup of the AU1846
 | 
				
			||||||
  if((freq_khz >= 137000) && (freq_khz <= 174000)) { 
 | 
					  if((freq_khz >= 137000) && (freq_khz <= 174000)) { 
 | 
				
			||||||
      setVHF();
 | 
					      setVHF();
 | 
				
			||||||
      setBand(3); // 0b11 is 134-174MHz
 | 
					      //setBand(3); // 0b11 is 134-174MHz
 | 
				
			||||||
      setFrequency(freq_khz);
 | 
					      setFrequency(freq_khz);
 | 
				
			||||||
      return true;
 | 
					      return true;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  if((freq_khz >= 200000) && (freq_khz <= 260000)) { 
 | 
					  if((freq_khz >= 200000) && (freq_khz <= 260000)) { 
 | 
				
			||||||
      setVHF();
 | 
					      setVHF();
 | 
				
			||||||
      setBand(2); // 10 is 200-260MHz
 | 
					      //setBand(2); // 10 is 200-260MHz
 | 
				
			||||||
      setFrequency(freq_khz);
 | 
					      setFrequency(freq_khz);
 | 
				
			||||||
      return true;
 | 
					      return true;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  if((freq_khz >= 400000) && (freq_khz <= 520000)) { 
 | 
					  if((freq_khz >= 400000) && (freq_khz <= 520000)) { 
 | 
				
			||||||
      setUHF();
 | 
					      setUHF();
 | 
				
			||||||
      setBand(00); // 00 is 400-520MHz
 | 
					      //setBand(00); // 00 is 400-520MHz
 | 
				
			||||||
      setFrequency(freq_khz); 
 | 
					      setFrequency(freq_khz); 
 | 
				
			||||||
      return true;
 | 
					      return true;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										29
									
								
								HamShield.h
								
								
								
								
							
							
						
						
									
										29
									
								
								HamShield.h
								
								
								
								
							| 
						 | 
					@ -37,14 +37,14 @@
 | 
				
			||||||
#define A1846S_CTL_REG              0x30    // control register
 | 
					#define A1846S_CTL_REG              0x30    // control register
 | 
				
			||||||
#define A1846S_CLK_MODE_REG         0x04    // clk_mode
 | 
					#define A1846S_CLK_MODE_REG         0x04    // clk_mode
 | 
				
			||||||
#define A1846S_PABIAS_REG           0x0A    // control register for bias voltage
 | 
					#define A1846S_PABIAS_REG           0x0A    // control register for bias voltage
 | 
				
			||||||
#define A1846S_BAND_SEL_REG         0x0F    // band_sel register <1:0>
 | 
					//#define A1846S_BAND_SEL_REG         0x0F    // band_sel register <1:0>
 | 
				
			||||||
#define A1846S_GPIO_MODE_REG        0x1F    // GPIO mode select register
 | 
					#define A1846S_GPIO_MODE_REG        0x1F    // GPIO mode select register
 | 
				
			||||||
#define A1846S_FREQ_HI_REG          0x29    // freq<29:16>
 | 
					#define A1846S_FREQ_HI_REG          0x29    // freq<29:16>
 | 
				
			||||||
#define A1846S_FREQ_LO_REG          0x2A    // freq<15:0>
 | 
					#define A1846S_FREQ_LO_REG          0x2A    // freq<15:0>
 | 
				
			||||||
#define A1846S_XTAL_FREQ_REG        0x2B    // xtal_freq<15:0>
 | 
					//#define A1846S_XTAL_FREQ_REG        0x2B    // xtal_freq<15:0>
 | 
				
			||||||
#define A1846S_ADCLK_FREQ_REG       0x2C    // adclk_freq<15:0>
 | 
					//#define A1846S_ADCLK_FREQ_REG       0x2C    // adclk_freq<15:0>
 | 
				
			||||||
#define A1846S_INT_MODE_REG         0x2D    // interrupt enables
 | 
					#define A1846S_INT_MODE_REG         0x2D    // interrupt enables
 | 
				
			||||||
#define A1846S_TX_VOICE_REG         0x3C    // tx voice control reg
 | 
					#define A1846S_TX_VOICE_REG         0x3A    // tx voice control reg
 | 
				
			||||||
#define A1846S_TH_H_VOX_REG         0x41    // register holds vox high (open) threshold bits
 | 
					#define A1846S_TH_H_VOX_REG         0x41    // register holds vox high (open) threshold bits
 | 
				
			||||||
#define A1846S_TH_L_VOX_REG         0x42    // register holds vox low (shut) threshold bits
 | 
					#define A1846S_TH_L_VOX_REG         0x42    // register holds vox low (shut) threshold bits
 | 
				
			||||||
#define A1846S_FM_DEV_REG           0x43    // register holds fm deviation settings
 | 
					#define A1846S_FM_DEV_REG           0x43    // register holds fm deviation settings
 | 
				
			||||||
| 
						 | 
					@ -58,8 +58,8 @@
 | 
				
			||||||
#define A1846S_SQ_OUT_SEL_REG       0x54    // see sq
 | 
					#define A1846S_SQ_OUT_SEL_REG       0x54    // see sq
 | 
				
			||||||
#define A1846S_EMPH_FILTER_REG      0x58
 | 
					#define A1846S_EMPH_FILTER_REG      0x58
 | 
				
			||||||
#define A1846S_FLAG_REG             0x5C    // holds flags for different statuses
 | 
					#define A1846S_FLAG_REG             0x5C    // holds flags for different statuses
 | 
				
			||||||
#define A1846S_RSSI_REG             0x5F    // holds RSSI (unit 1/8dB)
 | 
					#define A1846S_RSSI_REG             0x1B    // holds RSSI (unit 1dB)
 | 
				
			||||||
#define A1846S_VSSI_REG             0x60    // holds VSSI (unit mV)
 | 
					#define A1846S_VSSI_REG             0x1A    // holds VSSI (unit mV)
 | 
				
			||||||
#define A1846S_DTMF_CTL_REG         0x63    // see dtmf
 | 
					#define A1846S_DTMF_CTL_REG         0x63    // see dtmf
 | 
				
			||||||
#define A1846S_DTMF_C01_REG         0x66    // holds frequency value for c0 and c1
 | 
					#define A1846S_DTMF_C01_REG         0x66    // holds frequency value for c0 and c1
 | 
				
			||||||
#define A1846S_DTMF_C23_REG         0x67    // holds frequency value for c2 and c3
 | 
					#define A1846S_DTMF_C23_REG         0x67    // holds frequency value for c2 and c3
 | 
				
			||||||
| 
						 | 
					@ -98,8 +98,8 @@
 | 
				
			||||||
#define A1846S_PADRV_LENGTH       4
 | 
					#define A1846S_PADRV_LENGTH       4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Bitfields for A1846S_BAND_SEL_REG
 | 
					// Bitfields for A1846S_BAND_SEL_REG
 | 
				
			||||||
#define A1846S_BAND_SEL_BIT        7  // band_sel<1:0>
 | 
					//#define A1846S_BAND_SEL_BIT        7  // band_sel<1:0>
 | 
				
			||||||
#define A1846S_BAND_SEL_LENGTH     2
 | 
					//#define A1846S_BAND_SEL_LENGTH     2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Bitfields for RDA1864_GPIO_MODE_REG
 | 
					// Bitfields for RDA1864_GPIO_MODE_REG
 | 
				
			||||||
#define RDA1864_GPIO7_MODE_BIT     15  // <1:0> 00=hi-z,01=vox,10=low,11=hi
 | 
					#define RDA1864_GPIO7_MODE_BIT     15  // <1:0> 00=hi-z,01=vox,10=low,11=hi
 | 
				
			||||||
| 
						 | 
					@ -132,8 +132,8 @@
 | 
				
			||||||
#define A1846S_VOX_INT_BIT              0  // vox uint16_t enable
 | 
					#define A1846S_VOX_INT_BIT              0  // vox uint16_t enable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Bitfields for A1846S_TX_VOICE_REG
 | 
					// Bitfields for A1846S_TX_VOICE_REG
 | 
				
			||||||
#define A1846S_VOICE_SEL_BIT      15  //voice_sel<1:0>
 | 
					#define A1846S_VOICE_SEL_BIT      14  //voice_sel<1:0>
 | 
				
			||||||
#define A1846S_VOICE_SEL_LENGTH    2
 | 
					#define A1846S_VOICE_SEL_LENGTH    3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Bitfields for A1846S_TH_H_VOX_REG
 | 
					// Bitfields for A1846S_TH_H_VOX_REG
 | 
				
			||||||
#define A1846S_TH_H_VOX_BIT       14  // th_h_vox<14:0>
 | 
					#define A1846S_TH_H_VOX_BIT       14  // th_h_vox<14:0>
 | 
				
			||||||
| 
						 | 
					@ -186,8 +186,8 @@
 | 
				
			||||||
#define A1846S_VOX_FLAG_BIT        0  // vox out from dsp
 | 
					#define A1846S_VOX_FLAG_BIT        0  // vox out from dsp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Bitfields for A1846S_RSSI_REG
 | 
					// Bitfields for A1846S_RSSI_REG
 | 
				
			||||||
#define A1846S_RSSI_BIT            9  // RSSI readings <9:0>
 | 
					#define A1846S_RSSI_BIT            15  // RSSI readings <9:0>
 | 
				
			||||||
#define A1846S_RSSI_LENGTH        10
 | 
					#define A1846S_RSSI_LENGTH         8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Bitfields for A1846S_VSSI_REG
 | 
					// Bitfields for A1846S_VSSI_REG
 | 
				
			||||||
#define A1846S_VSSI_BIT           14  // voice signal strength indicator <14:0> (unit mV)
 | 
					#define A1846S_VSSI_BIT           14  // voice signal strength indicator <14:0> (unit mV)
 | 
				
			||||||
| 
						 | 
					@ -334,8 +334,9 @@ class HamShield {
 | 
				
			||||||
	// 11 - no tx source
 | 
						// 11 - no tx source
 | 
				
			||||||
	void setTxSource(uint16_t tx_source);
 | 
						void setTxSource(uint16_t tx_source);
 | 
				
			||||||
	void setTxSourceMic();
 | 
						void setTxSourceMic();
 | 
				
			||||||
	void setTxSourceSine();
 | 
						void setTxSourceTone1();
 | 
				
			||||||
	void setTxSourceCode();
 | 
						void setTxSourceTone2();
 | 
				
			||||||
 | 
						void setTxSourceTones();
 | 
				
			||||||
	void setTxSourceNone();
 | 
						void setTxSourceNone();
 | 
				
			||||||
	uint16_t getTxSource();
 | 
						uint16_t getTxSource();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,6 +28,7 @@ void setup() {
 | 
				
			||||||
  Serial.println(result,DEC); 
 | 
					  Serial.println(result,DEC); 
 | 
				
			||||||
  radio.initialize();
 | 
					  radio.initialize();
 | 
				
			||||||
  radio.setFrequency(446000);
 | 
					  radio.setFrequency(446000);
 | 
				
			||||||
 | 
					  radio.setModeReceive();
 | 
				
			||||||
  Serial.println("Entering gauges...");
 | 
					  Serial.println("Entering gauges...");
 | 
				
			||||||
  tone(9,1000);
 | 
					  tone(9,1000);
 | 
				
			||||||
  delay(2000);
 | 
					  delay(2000);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue