Ejemplo n.º 1
0
//------------------------------------------------------------------------------
u08 AVCLan_Read_ACK()
{
 u08 time = 0;

 AVC_SET_1();
 delay1(19);

 AVC_SET_0();
 delay1(1);


 AVC_OUT_DIS(); // switch to read mode
 timer0_source(CK64);
 timer0_start();
 while(1) {
	time = TCNT0;
	if (INPUT_IS_SET && (time > 1)) break;
	if (time > 20) return 1;
 }
	
 while(INPUT_IS_SET);
 AVC_OUT_EN();// back to write mode
 return 0;

}
Ejemplo n.º 2
0
//------------------------------------------------------------------------------
u08 AVCLan_SendDataBroadcast()
{
 u08 i;

 STOPEvent;

 // wait for free line
 u08 T=0;
 u08 line_busy = 1;

 timer0_source(CK64);
 timer0_start();
 do {
 	while (INPUT_IS_CLEAR) {
		T = TCNT0;
		if (T >= 25) break;
 	}
 	if (T > 24) line_busy=0;
 } while (line_busy);


 AVC_OUT_EN();

 AVCLan_Send_StartBit();
 AVCLan_Send_Byte(0x0,  1);		// broadcast

 parity_bit = 0;
 AVCLan_Send_Byte(CD_ID_1, 4);	// CD Changer ID as master
 AVCLan_Send_Byte(CD_ID_2, 8);
 AVCLan_Send_ParityBit();

 AVCLan_Send_Byte(0x1, 4);		// all audio devices
 AVCLan_Send_Byte(0xFF, 8);
 AVCLan_Send_ParityBit();
 AVCLan_Send_Bit1();

 AVCLan_Send_Byte(0xF, 4);		// 0xf - control -> COMMAND WRITE
 AVCLan_Send_ParityBit();
 AVCLan_Send_Bit1();
 
 AVCLan_Send_Byte(data_len,  8);	// data lenght
 AVCLan_Send_ParityBit();
 AVCLan_Send_Bit1();

 for (i=0;i<data_len;i++) {
	AVCLan_Send_Byte(data[i], 8); // data byte
 	AVCLan_Send_ParityBit();
	AVCLan_Send_Bit1();
 }

 AVC_OUT_DIS();
 STARTEvent;
 if (showLog) ShowOutMessage();
 return 0;
}
Ejemplo n.º 3
0
void Wait1msForAVCLan()
{
 timer0_source(CK64);
 u08 T;

 // check start bit
 timer0_start();
 while (!INPUT_IS_SET) { 
 	T=inp(TCNT0);
	if (T>100) {
		return;
	}
 }

};
Ejemplo n.º 4
0
//------------------------------------------------------------------------------
u08 AVCLan_Send_ACK()
{	
 timer0_source(CK64);						//update every 1us
 timer0_start();	
 while (INPUT_IS_CLEAR)	{
 	if (TCNT0 >= 25) return 0;			// max wait time
 }

 AVC_OUT_EN();

 AVC_SET_1();
 delay1(32);								//28-37

 AVC_SET_0();
 delay1(4);									//00-09

 AVC_OUT_DIS();

 return 1;		
}
Ejemplo n.º 5
0
//------------------------------------------------------------------------------
void AVC_HoldLine()
{
 STOPEvent;

 // wait for free line
 u08 T=0;
 u08 line_busy = 1;

 timer0_source(CK64);
 timer0_start();
 do {
 	while (INPUT_IS_CLEAR) {
		T = TCNT0;
		if (T >= 25) break;
 	}
 	if (T > 24) line_busy=0;
 } while (line_busy);

 // switch to out mode
 AVC_OUT_EN();
 AVC_SET_1();

 STARTEvent;
}
Ejemplo n.º 6
0
//------------------------------------------------------------------------------
u08 AVCLan_SendData()
{
 u08 i;

 STOPEvent;

 // wait for free line
 u08 T=0;
 u08 line_busy = 1;

 timer0_source(CK64);
 timer0_start();
 do {
 	while (INPUT_IS_CLEAR) {
		T = TCNT0;
		if (T >= 25) break;
 	}
 	if (T > 24) line_busy=0;
 } while (line_busy);


 // switch to output mode
 AVC_OUT_EN();

 AVCLan_Send_StartBit();
 AVCLan_Send_Byte(0x1,  1);		// regular communication


 parity_bit = 0;
 AVCLan_Send_Byte(CD_ID_1, 4);	// CD Changer ID as master
 AVCLan_Send_Byte(CD_ID_2, 8);
 AVCLan_Send_ParityBit();

 AVCLan_Send_Byte(HU_ID_1, 4);	// HeadUnit ID as slave
 AVCLan_Send_Byte(HU_ID_2, 8);

 AVCLan_Send_ParityBit();

 if (AVCLan_Read_ACK()) {
 	 AVC_OUT_DIS();
	 STARTEvent;
	 RS232_Print("E1\n");
	 return 1;
 }


 AVCLan_Send_Byte(0xF, 4);		// 0xf - control -> COMMAND WRITE
 AVCLan_Send_ParityBit();
 if (AVCLan_Read_ACK()) {
 	 AVC_OUT_DIS();
	 STARTEvent;
	 RS232_Print("E2\n");
	 return 2;
 }

 AVCLan_Send_Byte(data_len,  8);// data lenght
 AVCLan_Send_ParityBit();
 if (AVCLan_Read_ACK()) {
 	 AVC_OUT_DIS();
	 STARTEvent;
	 RS232_Print("E3\n");
	 return 3;
 }

 for (i=0;i<data_len;i++) {
	AVCLan_Send_Byte(data[i], 8);// data byte
 	AVCLan_Send_ParityBit();
 	if (AVCLan_Read_ACK()) {
	 	 AVC_OUT_DIS();
		 STARTEvent;
 		 RS232_Print("E4(");
		 RS232_PrintDec(i);
		 RS232_Print(")\n");
		 return 4;
 	}
 }

 // back to read mode
 AVC_OUT_DIS();

 STARTEvent;
 if (showLog) ShowOutMessage();
 return 0;
}
Ejemplo n.º 7
0
//------------------------------------------------------------------------------
u08 AVCLan_Read_Message()
{
 STOPEvent;						// disable timer1 interrupt

 u08 T = 0;

 u08 i;
 u08 for_me = 0;

 //RS232_Print("$ ");
 timer0_source(CK64);

 // check start bit
 timer0_start();
 while (INPUT_IS_SET) { 
 	T=TCNT0;
	if (T>254) {
		STARTEvent;
		RS232_Print("LAN>T1\n");
		return 0;
	}
 }


 if (T<10) {		// !!!!!!! 20 !!!!!!!!!!!
 	STARTEvent;
	RS232_Print("LAN>T2\n");
	return 0;
 }



 broadcast = AVCLan_Read_Byte(1);

 parity_bit = 0;
 master1 = AVCLan_Read_Byte(4);
 master2 = AVCLan_Read_Byte(8);
 if ((parity_bit&1)!=AVCLan_Read_Byte(1)) {
	STARTEvent;
	return 0;
 }

 parity_bit = 0;
 slave1 = AVCLan_Read_Byte(4);
 slave2 = AVCLan_Read_Byte(8);
 if ((parity_bit&1)!=AVCLan_Read_Byte(1)) {
	STARTEvent;
	return 0;
 }
 // is this command for me ?
 if ((slave1==CD_ID_1)&&(slave2==CD_ID_2)) {
 	for_me=1;
 }

 if (for_me) AVCLan_Send_ACK();
 		else AVCLan_Read_Byte(1);

 parity_bit = 0;
 AVCLan_Read_Byte(4);	// control - always 0xF
 if ((parity_bit&1)!=AVCLan_Read_Byte(1)) {
	STARTEvent;
	return 0;
 }
 if (for_me) AVCLan_Send_ACK();
 		else AVCLan_Read_Byte(1);

 parity_bit = 0;
 message_len = AVCLan_Read_Byte(8);
 if ((parity_bit&1)!=AVCLan_Read_Byte(1)) {
	STARTEvent;
	return 0;
 }
 if (for_me) AVCLan_Send_ACK();
 		else AVCLan_Read_Byte(1);

 if (message_len > MAXMSGLEN) {
//	RS232_Print("LAN> Command error");
	STARTEvent;
	return 0;
 }

 for (i=0; i<message_len; i++) {
	parity_bit = 0;
 	message[i] = AVCLan_Read_Byte(8);
	if ((parity_bit&1)!=AVCLan_Read_Byte(1)) {
		STARTEvent;
		return 0;
 	}
	if (for_me) {
		AVCLan_Send_ACK();
 	} else {
		AVCLan_Read_Byte(1);
	}
 }


 STARTEvent;

 if (showLog) ShowInMessage();

 if (for_me) {
 	
	if (CheckCmd((u08*)stat1)) { answerReq = cmStatus1; return 1; }
	if (CheckCmd((u08*)stat2)) { answerReq = cmStatus2; return 1; }
	if (CheckCmd((u08*)stat3)) { answerReq = cmStatus3; return 1; }
	if (CheckCmd((u08*)stat4)) { answerReq = cmStatus4; return 1; }
//	if (CheckCmd((u08*)stat5)) { answerReq = cmStatus5; return 1; }

	if (CheckCmd((u08*)play_req1)) { answerReq = cmPlayReq1; return 1; }
	if (CheckCmd((u08*)play_req2)) { answerReq = cmPlayReq2; return 1; }
	if (CheckCmd((u08*)play_req3)) { answerReq = cmPlayReq3; return 1; }
	if (CheckCmd((u08*)stop_req))  { answerReq = cmStopReq;  return 1; }
	if (CheckCmd((u08*)stop_req2)) { answerReq = cmStopReq2; return 1; }

 } else { // broadcast check

	if (CheckCmd((u08*)lan_playit))	{ answerReq = cmPlayIt;	return 1; }
	if (CheckCmd((u08*)lan_check))	{ 
			answerReq = cmCheck;
			CMD_CHECK[6]=message[3];
			return 1; 
	}
	if (CheckCmd((u08*)lan_reg))	{ answerReq = cmRegister;	return 1; }
	if (CheckCmd((u08*)lan_init))	{ answerReq = cmInit;		return 1; }
	if (CheckCmd((u08*)lan_stat1))	{ answerReq = cmStatus1;	return 1; }


 }
 answerReq = cmNull;
 return 1;
}