/* Copyright (C) 2006 Marcin Slonicki . This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ----------------------------------------------------------------------- this file is a part of the TOYOTA Corolla MP3 Player Project ----------------------------------------------------------------------- http://www.softservice.com.pl/corolla/avc May 28 / 2009 - version 2 */ #include #include #include #include "GlobalDef.h" #include "com232.h" #include "avclandrv.h" // ------------------------------------------------------------------------------------- void Setup(); byte rcv_command[5]; byte rcv_pos = 0; byte rcv_time_clr = 0; // ------------------------------------------------------------------------------------- // ------------------------------------------------------------------------------------- // MAIN PROGRAM // int main() { // byte h; byte readSeq = 0; byte s_len = 0; byte s_dig = 0; byte s_c[2]; byte i; byte data_tmp[32]; Setup(); TCNT0 = 0; while( TCNT0 < 250 ); TCNT0 = 0; while( TCNT0 < 250 ); TCNT0 = 0; while( TCNT0 < 250 ); RS232_Print("AVCLan reader 1.00\nReady\n\n"); LED_OFF(); RS232_Print_P(PSTR("D - device id\nH - HU id\nS - read sequence\nW - send command\nQ - send broadcast\nL/l - log on/off\nK/k - seq. echo on/off\nR/r - register device\nB - Beep\nT - Measure interval\n")); while (1) { if (INPUT_IS_SET) { // if message from some device on AVCLan begin LED_ON(); AVCLan_Read_Message(); // show message } else { LED_OFF(); // check command from HU if (answerReq != 0) AVCLan_SendAnswer(); } // HandleEvent switch (Event) { case EV_STATUS: Event &= ~EV_STATUS; AVCLan_Send_Status(); break; } // Key handler if (RS232_RxCharEnd) { cbi(UCSR0B, RXCIE0); // disable RX complete interrupt readkey = RS232_RxCharBuffer[RS232_RxCharBegin];// read begin of received Buffer RS232_RxCharBegin++; if (RS232_RxCharBegin == RS232_RxCharEnd) // if Buffer is empty RS232_RxCharBegin = RS232_RxCharEnd = 0; // do reset Buffer sbi(UCSR0B, RXCIE0); // enable RX complete interrupt switch (readkey) { case 'D': if (readSeq) { CD_ID_1 = data_tmp[0]; CD_ID_2 = data_tmp[1]; RS232_Print_P(PSTR("DEV ID SET: 0x")); RS232_PrintHex8(CD_ID_1); RS232_PrintHex8(CD_ID_2); RS232_Print_P(PSTR("\n")); showLog = 1; readSeq=0; } else { showLog = 0; RS232_Print_P(PSTR("DEV ID > \n")); readSeq = 1; s_len=0; s_dig=0; s_c[0]=s_c[1]=0; } break; case 'H': if (readSeq) { HU_ID_1 = data_tmp[0]; HU_ID_2 = data_tmp[1]; RS232_Print_P(PSTR("HU ID SET: 0x")); RS232_PrintHex8(HU_ID_1); RS232_PrintHex8(HU_ID_2); RS232_Print_P(PSTR("\n")); showLog = 1; readSeq=0; } else { showLog = 0; RS232_Print_P(PSTR("HU ID > \n")); readSeq = 1; s_len=0; s_dig=0; s_c[0]=s_c[1]=0; } break; case 'S': showLog = 0; RS232_Print_P(PSTR("READ SEQUENCE > \n")); readSeq = 1; s_len=0; s_dig=0; s_c[0]=s_c[1]=0; break; case 'W' : showLog = 1; readSeq=0; AVCLan_SendMyData(data_tmp, s_len); break; case 'Q' : showLog = 1; readSeq=0; AVCLan_SendMyDataBroadcast(data_tmp, s_len); break; case 'R': RS232_Print_P(PSTR("REGIST:\n")); AVCLan_Command( cmRegister ); TCNT0 = 0; while( TCNT0 < 135 ); CHECK_AVC_LINE; break; case 'r': AVCLan_Register(); break; case 'l': RS232_Print_P(PSTR("Log OFF\n")); showLog = 0; break; case 'L': RS232_Print_P(PSTR("Log ON\n")); showLog = 1; break; case 'k': RS232_Print_P(PSTR("str OFF\n")); showLog2 = 0; break; case 'K': RS232_Print_P(PSTR("str ON\n")); showLog2 = 1; break; case 'B': data_tmp[0] = 0x00; data_tmp[0] = 0x5E; data_tmp[0] = 0x29; data_tmp[0] = 0x60; data_tmp[0] = 0x01; s_len = 5; AVCLan_SendMyData(data_tmp, s_len); break; case 'T': AVCLan_Measure(); break; default : if (readSeq==1) { s_c[s_dig]=readkey; s_dig++; if (s_dig==2) { if (s_c[0]<':') s_c[0] -= 48; else s_c[0] -= 55; data_tmp[s_len] = 16 * s_c[0]; if (s_c[1]<':') s_c[1] -= 48; else s_c[1] -= 55; data_tmp[s_len] += s_c[1]; s_len++; s_dig=0; s_c[0]=s_c[1]=0; } if (showLog2) { RS232_Print_P(PSTR("CURRENT SEQUENCE > ")); for (i=0; i