Initialization Alpha
							parent
							
								
									5556a09554
								
							
						
					
					
						commit
						84d1886469
					
				@ -0,0 +1,164 @@
 | 
				
			||||
/*
 | 
				
			||||
HamHead CI-V Alpha Module - Initialization
 | 
				
			||||
 | 
				
			||||
This is a test of multiple things, an initialization routine
 | 
				
			||||
as well as working with pointers. Pointers was easy; getting
 | 
				
			||||
communication working boiled down to catching all my forgotten
 | 
				
			||||
variables and such. Pointers are used so that we can just work
 | 
				
			||||
on one VFO variable that's mapped to whatever the current one
 | 
				
			||||
is. 
 | 
				
			||||
 | 
				
			||||
Echo and ACK data are simply dropped right now. I have some
 | 
				
			||||
plans of maybe using echos to keep VFO in sync. But I will
 | 
				
			||||
determine this as I actually build functions. 
 | 
				
			||||
 | 
				
			||||
We now automatically drop the Echo and ACK ($FB), but you
 | 
				
			||||
MUST call getdata() to do so. 
 | 
				
			||||
 | 
				
			||||
*/
 | 
				
			||||
#define DEBUG 0
 | 
				
			||||
#if DEBUG == 1
 | 
				
			||||
#define debug(x) Serial.print(x)
 | 
				
			||||
#define debug2(x,y) Serial.print(x,y)
 | 
				
			||||
#define debugln(x) Serial.println(x)
 | 
				
			||||
#else
 | 
				
			||||
#define debug(x)
 | 
				
			||||
#define debug2(x,y)
 | 
				
			||||
#define debugln(x)
 | 
				
			||||
#endif
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
//#define MODE731 1 // Uncoment for 731/735 mode.
 | 
				
			||||
 | 
				
			||||
const byte numBytes = 32;
 | 
				
			||||
long dec[6];
 | 
				
			||||
byte rxbytes[numBytes];
 | 
				
			||||
unsigned long vfoa;
 | 
				
			||||
unsigned long vfob;
 | 
				
			||||
unsigned long vfos;
 | 
				
			||||
//byte civ[9];
 | 
				
			||||
byte civ[9] = {0xFE, 0xFE, 0x88, 0xE0, 0xFF, 0xFF};
 | 
				
			||||
byte endbyte = 0xFD;
 | 
				
			||||
unsigned long *v;
 | 
				
			||||
boolean newdata = false;
 | 
				
			||||
int bc;
 | 
				
			||||
long bcd[6];
 | 
				
			||||
 | 
				
			||||
void setup() {
 | 
				
			||||
Serial1.begin(19200);
 | 
				
			||||
Serial.begin(9600);
 | 
				
			||||
Serial.println("Initalizing VFO Variables.");
 | 
				
			||||
debugln();
 | 
				
			||||
debugln("Getting Starting VFO...");
 | 
				
			||||
v = &vfos;
 | 
				
			||||
getvfo();
 | 
				
			||||
v = &vfoa;
 | 
				
			||||
setvfo(0x00);
 | 
				
			||||
getvfo();
 | 
				
			||||
//debugln();
 | 
				
			||||
v = &vfob;
 | 
				
			||||
setvfo(0x01);
 | 
				
			||||
getvfo();
 | 
				
			||||
Serial.print("VFO A: ");
 | 
				
			||||
Serial.print(vfoa, DEC);
 | 
				
			||||
Serial.println();
 | 
				
			||||
Serial.print("VFO B: ");
 | 
				
			||||
Serial.print(vfob, DEC);
 | 
				
			||||
debugln();
 | 
				
			||||
debugln("Reverting to initial VFO.");
 | 
				
			||||
setstartvfo();
 | 
				
			||||
debugln("Done.");
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
void loop() {
 | 
				
			||||
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
void getdata() {
 | 
				
			||||
  byte rb;
 | 
				
			||||
    debug("RX Bytes: ");
 | 
				
			||||
  while (Serial1.available() > 0 && newdata == false) {
 | 
				
			||||
    rb = Serial1.read();
 | 
				
			||||
    if (rb == 0xFE) {  // if it's a start byte we don't need it. 
 | 
				
			||||
      newdata = false; // make sure we keep looping
 | 
				
			||||
      bc = 0; // i don't trust myself
 | 
				
			||||
    } else if (rb == 0xFD) { // end of the frame
 | 
				
			||||
      rxbytes[bc] = '\0'; // terminate the string
 | 
				
			||||
      if (rxbytes[0]==0x88 || rxbytes[2] == 0xFB) {
 | 
				
			||||
        newdata = false;  // auto-echo ditch&ack
 | 
				
			||||
        bc = 0;
 | 
				
			||||
      }
 | 
				
			||||
      else newdata = true;} // indicate there's new data}
 | 
				
			||||
      else {
 | 
				
			||||
    rxbytes[bc] = rb; // write the byte to the array
 | 
				
			||||
    bc++; // increment byte counter
 | 
				
			||||
    debug2(rb, HEX);
 | 
				
			||||
    debug(" "); }
 | 
				
			||||
  }
 | 
				
			||||
  debugln();
 | 
				
			||||
  }
 | 
				
			||||
 | 
				
			||||
long gogovfo() {
 | 
				
			||||
    int i = 0;
 | 
				
			||||
    long ggv;
 | 
				
			||||
    #ifdef MODE731
 | 
				
			||||
      bc--;
 | 
				
			||||
    #else
 | 
				
			||||
    bc -=2;
 | 
				
			||||
    #endif
 | 
				
			||||
    for (int x = bc; x > 2; x--) {
 | 
				
			||||
      bcd[i] = (((rxbytes[x] >> 4) *10) + (rxbytes[x]&0xF));
 | 
				
			||||
      i++; }
 | 
				
			||||
    ggv = ((bcd[0]*1000000)+(bcd[1]*10000)+(bcd[2]*100)+(bcd[3]));
 | 
				
			||||
    newdata = false;
 | 
				
			||||
    return ggv;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
void setvfo(byte vfo) {
 | 
				
			||||
  //byte zz;
 | 
				
			||||
  if (vfo == 0x00) debugln ("Setting VFO A");
 | 
				
			||||
  else debugln("Setting VFO B");
 | 
				
			||||
  send7(0x07, vfo);
 | 
				
			||||
  Serial1.flush();
 | 
				
			||||
  delay(50);
 | 
				
			||||
  getdata(); // drop the echo
 | 
				
			||||
 // newdata=false;
 | 
				
			||||
//  getdata(); // drop the ack
 | 
				
			||||
//  newdata=false; 
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
void send6(byte cmd) {
 | 
				
			||||
  civ[4]=cmd;
 | 
				
			||||
  Serial1.write(civ,5);
 | 
				
			||||
  Serial1.write(endbyte);
 | 
				
			||||
  Serial1.flush();
 | 
				
			||||
  delay(50);
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
void send7(byte cmd, byte data) {
 | 
				
			||||
  civ[4] = cmd;
 | 
				
			||||
  civ[5] = data;
 | 
				
			||||
  Serial1.write(civ,6);
 | 
				
			||||
  Serial1.write(endbyte);
 | 
				
			||||
  Serial1.flush();
 | 
				
			||||
  delay(50);
 | 
				
			||||
  }
 | 
				
			||||
  
 | 
				
			||||
void getvfo() {
 | 
				
			||||
  debugln("Sending VFO Read");
 | 
				
			||||
  send6(0x03);
 | 
				
			||||
  Serial1.flush();
 | 
				
			||||
  delay(50);
 | 
				
			||||
 // getdata(); // drop the echo
 | 
				
			||||
 // newdata=false;
 | 
				
			||||
  getdata(); // preload the vfo
 | 
				
			||||
  *v = gogovfo(); // process and update
 | 
				
			||||
 }
 | 
				
			||||
 | 
				
			||||
void setstartvfo() {
 | 
				
			||||
    Serial.println();
 | 
				
			||||
  if (vfos == vfoa) {
 | 
				
			||||
    Serial.println("Started on A");
 | 
				
			||||
    setvfo(0x00);}
 | 
				
			||||
  else Serial.println("Staying on B");
 | 
				
			||||
}
 | 
				
			||||
					Loading…
					
					
				
		Reference in New Issue