|
Title: Yampp и bmw i-bus Post by: Tolin on 18 Aug 2004, 02:02 Вопрос, есть ли готовая прошивка в одном флаконе с эмулятором, чтобы штатно подходила к родной шине BMW,
если нет то помогите разобратся с кодом, последние прошивки написаны на WinAVR-20030312. как сделать так чтоб на выходе max202 получился hex , к примеру [code:1] void pl_disp(u16 index, u08 sel) { YADL_PLAY_LIST_ENTRY *pEntry = get_pl_entry(index); if (index < playlist_qty) { Vlcd_puts(pEntry->name); // print on LCD #ifdef ENABLE_UART if(sel) // if current index uprintf("\rPlaylist: %s ",pEntry->name); // print on terminal и как сюда добавить чтоб он выдовал также на порт hex код #endif } }[/code:1] зарание Сенкс. Title: Yampp и bmw i-bus Post by: Sergey on 18 Aug 2004, 13:48 Тебе нужно чтобы при каждом вызове uprintf() выводился HEX, или просто HEX строки. :?:
Title: Yampp и bmw i-bus Post by: Tolin on 18 Aug 2004, 16:27 Дело в том что это как в твоем листе, IPBUS.c
[code:1] //commands massive static u08 INIT_10_37_MASS[]={18,0x10,0x10,0x06,0x00,0x37,0x01,0x00,0x83,0x41,0x00,0,0x40,0xF6,0x4A,0x03,0x03,0x01}; static u08 INIT_50_MASS[]={8, 0x50,0x10,0x06,0x00,0x00,0x01,0x04}; static u08 COM_10_23_MASS[]={12,0x10,0x10,0x06,0x00,0x23,0x01,0x00,0x83,0x41,0x00}; static u08 COM_10_34_MASS[]={9,0x10,0x10,0x06,0x00,0x34,0,0x40}; static u08 COM_61_19_MASS[]={0x19,0,0x01,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01}; //end [/code:1] там тоже есть строки такиеже строки, какие нужны и мне на выходе, [code:1]/*******************************************************************************/ /* IBUS MESSAGES DEFINITION */ /*******************************************************************************/ /*******************************************************************************/ /* CD PLAYER Messages. DEVICE ID = 18H */ /*******************************************************************************/ // CD Broadcast Messages (FFH)-------------------------------------------------- // Poll Response u08 cd_pollresp_msg[] PROGMEM = { 0x18, 0x04, 0xff, 0x02, 0x00, 0xE1 }; // CD announce u08 cd_announce_msg[] PROGMEM = { 0x18, 0x04, 0xff, 0x02, 0x01, 0xE0 }; // CD Messages to Radio (68H)--------------------------------------------------- // - 7th byte is the disk index (usually between 01,06). // - 8th byte is the track index. // Messages always send CD 01, Track 01. Don't care about CD and track # with a MP3 player. // So the message can be static. // CD and Track Status Not Playing Response u08 cd_statusnotplaying_msg[] PROGMEM = { 0x18, 0x0A, 0x68, 0x39, 0x00, 0x02, 0x00, 0x3F, 0x00, 0x01, 0x01, 0x7E }; // CD and Track Status Playing Response u08 cd_statusplaying_msg[] PROGMEM = { 0x18, 0x0A, 0x68, 0x39, 0x00, 0x09, 0x00, 0x3F, 0x00, 0x01, 0x01, 0x75 }; // Track Start Playing CD 01 00 u08 cd_startplaying01_msg[] PROGMEM = { 0x18, 0x0A, 0x68, 0x39, 0x02, 0x09, 0x00, 0x3F, 0x00, 0x01, 0x00, 0x76 }; // Track Start Playing CD 02 00 u08 cd_startplaying02_msg[] PROGMEM = { 0x18, 0x0A, 0x68, 0x39, 0x02, 0x09, 0x00, 0x3F, 0x00, 0x02, 0x00, 0x75 }; // Track Start Playing CD 03 00 u08 cd_startplaying03_msg[] PROGMEM = { 0x18, 0x0A, 0x68, 0x39, 0x02, 0x09, 0x00, 0x3F, 0x00, 0x03, 0x00, 0x74 }; // Track Start Playing CD 04 00 u08 cd_startplaying04_msg[] PROGMEM = { 0x18, 0x0A, 0x68, 0x39, 0x02, 0x09, 0x00, 0x3F, 0x00, 0x04, 0x00, 0x73 }; // Track Start Playing CD 05 00 u08 cd_startplaying05_msg[] PROGMEM = { 0x18, 0x0A, 0x68, 0x39, 0x02, 0x09, 0x00, 0x3F, 0x00, 0x05, 0x00, 0x72 }; // Track Start Playing CD 06 00 u08 cd_startplaying06_msg[] PROGMEM = { 0x18, 0x0A, 0x68, 0x39, 0x02, 0x09, 0x00, 0x3F, 0x00, 0x06, 0x00, 0x71 }; // Track End Playing 01 01 u08 cd_endplaying_msg[] PROGMEM = { 0x18, 0x0A, 0x68, 0x39, 0x07, 0x09, 0x00, 0x3F, 0x00, 0x01, 0x01, 0x72 }; // CD Seek 01 //u08 cd_seek1_msg[] PROGMEM = //{ 0x18, 0x0A, 0x68, 0x39, 0x08, 0x09, 0x00, 0x3F, 0x00, 0x01, 0x00, 0x7C }; // Scan Forward //u08 cd_scanfwd_msg[] PROGMEM = //{ 0x18, 0x0A, 0x68, 0x39, 0x03, 0x09, 0x00, 0x3F, 0x00, 0x02, 0x03, 0x77}; // Scan Backward //u08 cd_scanback_msg[] PROGMEM = //{ 0x18, 0x0A, 0x68, 0x39, 0x04, 0x09, 0x00, 0x3F, 0x00, 0x02, 0x03, 0x70}; /*******************************************************************************/ /* RADIO Messages. DEVICE ID = 68H */ /*******************************************************************************/ // Poll CD Player u08 rad_cdpoll_msg[] PROGMEM = { 0x68, 0x03, 0x18, 0x01, 0x72 }; // Request Current CD and Track Status u08 rad_cdgetcurrenttk_msg[] PROGMEM = { 0x68, 0x05, 0x18, 0x38, 0x00, 0x00, 0x4D }; // Stop Playing u08 rad_cdstopplaying_msg[] PROGMEM = { 0x68, 0x05, 0x18, 0x38, 0x01, 0x00, 0x4C }; // Request to play u08 rad_cdreqtoplay_msg[] PROGMEM = { 0x68, 0x05, 0x18, 0x38, 0x03, 0x00, 0x4E }; // Request to startup ?? // sent when entering CDC mode and on // system startup u08 rad_cdreqtoplay2_msg[] PROGMEM = { 0x68, 0x05, 0x18, 0x38, 0x02, 0x00, 0x4f }; // Fast Scan Forward u08 rad_cdfastscanf_msg[] PROGMEM = { 0x68, 0x05, 0x18, 0x38, 0x04, 0x01, 0x48 }; // Fast Scan Backward u08 rad_cdfastscanb_msg[] PROGMEM = { 0x68, 0x05, 0x18, 0x38, 0x04, 0x00, 0x49 }; // CD Change 01-06. To stay static, Declaration of 6 messages. //u08 rad_cdchange01_msg[] PROGMEM = //{ 0x68, 0x05, 0x18, 0x38, 0x06, 0x01, 0x4A }; //u08 rad_cdchange02_msg[] PROGMEM = //{ 0x68, 0x05, 0x18, 0x38, 0x06, 0x02, 0x49 }; //u08 rad_cdchange03_msg[] PROGMEM = //{ 0x68, 0x05, 0x18, 0x38, 0x06, 0x03, 0x48 }; //u08 rad_cdchange04_msg[] PROGMEM = //{ 0x68, 0x05, 0x18, 0x38, 0x06, 0x04, 0x4F }; //u08 rad_cdchange05_msg[] PROGMEM = //{ 0x68, 0x05, 0x18, 0x38, 0x06, 0x05, 0x4E }; //u08 rad_cdchange06_msg[] PROGMEM = //{ 0x68, 0x05, 0x18, 0x38, 0x06, 0x06, 0x4D }; // Scan Intro Mode On //u08 rad_cdscanintroon_msg[] PROGMEM = //{ 0x68, 0x05, 0x18, 0x38, 0x07, 0x01, 0x4B }; // Scan Intro Mode Off //u08 rad_cdscanintrooff_msg[] PROGMEM = //{ 0x68, 0x05, 0x18, 0x38, 0x07, 0x00, 0x4A }; // Random Mode On //u08 rad_cdrandomon_msg[] PROGMEM = //{ 0x68, 0x05, 0x18, 0x38, 0x08, 0x01, 0x44 }; // Random Mode Off //u08 rad_cdrandomoff_msg[] PROGMEM = //{ 0x68, 0x05, 0x18, 0x38, 0x08, 0x00, 0x45 }; // Previous Track //u08 rad_cdprevtk_msg[] PROGMEM = //{ 0x68, 0x05, 0x18, 0x38, 0x0A, 0x01, 0x46 }; /*******************************************************************************/ /* BMB Messages. DEVICE ID = F0H */ /*******************************************************************************/ // Hold tape eject //u08 bmb_radholdeject_msg[] PROGMEM = //{ 0xF0, 0x04, 0x68, 0x48, 0x64, 0xB0 }; // Hold tape auto reverse //u08 bmb_radholdautorev_msg[] PROGMEM = //{ 0xF0, 0x04, 0x68, 0x48, 0x54, 0x80 }; // Push 1 u08 bmb_radpush1_msg[] PROGMEM = { 0xF0, 0x04, 0x68, 0x48, 0x11, 0xC5 }; // Push 2 u08 bmb_radpush2_msg[] PROGMEM = { 0xF0, 0x04, 0x68, 0x48, 0x01, 0xD5 }; // Push 3 u08 bmb_radpush3_msg[] PROGMEM = { 0xF0, 0x04, 0x68, 0x48, 0x12, 0xC6 }; // Push 4 u08 bmb_radpush4_msg[] PROGMEM = { 0xF0, 0x04, 0x68, 0x48, 0x02, 0xD6 }; // Push 5 u08 bmb_radpush5_msg[] PROGMEM = { 0xF0, 0x04, 0x68, 0x48, 0x13, 0xC7 }; // Push 6 u08 bmb_radpush6_msg[] PROGMEM = { 0xF0, 0x04, 0x68, 0x48, 0x03, 0xD7 }; // Push Next u08 bmb_radpushnext_msg[] PROGMEM = { 0xF0, 0x04, 0x68, 0x48, 0x00, 0xD4 }; // Push Prev u08 bmb_radpushprev_msg[] PROGMEM = { 0xF0, 0x04, 0x68, 0x48, 0x10, 0xC4 }; // Push Nav turn knob //u08 bmb_navpushtknob_msg[] PROGMEM = //{ 0xF0, 0x04, 0x3B, 0x48, 0x05, 0x82 }; // Push NAV MENU //u08 bmb_navpushmenu_msg[] PROGMEM = //{ 0xF0, 0x04, 0xFF, 0x48, 0x34, 0x77 }; /*******************************************************************************/ /* STEERING WHEEL Messages. DEVICE ID = 50H */ /*******************************************************************************/ // Push Next - Steering Wheel u08 stw_radpushnext_msg[] PROGMEM = { 0x50, 0x04, 0x68, 0x3B, 0x01, 0x06 }; // Push Prev - Steering Wheel u08 stw_radpushprev_msg[] PROGMEM = { 0x50, 0x04, 0x68, 0x3B, 0x08, 0x0F }; /*******************************************************************************/ /* VARIOUS MESSAGE */ /*******************************************************************************/ // CD Activation Detection. // DO NOT SEND THIS string. It is not a valid message. // Simply detect the string containing subfields + "CD" u08 rad_navstringcdno[] PROGMEM = { 0x43,0x44,0x43,0x20 }; u08 rad_navstring2[] PROGMEM = { 0x43,0x44,0x20,0x36 }; // Index area refresh u08 nav_refresh_msg[] PROGMEM = { 0x68, 0x06, 0x3B, 0xA5, 0x60, 0x01, 0x00, 0x91 }; // Other u08 rad_navmenuset_msg[] PROGMEM = { 0x68, 0x04, 0x3B, 0x46, 0x01,0x10 }; u08 rad_navmenutimed_msg[] PROGMEM = { 0x68, 0x04, 0x3B, 0x46, 0x02,0x13 };[/code:1] принцип должен быть наверное один и тотже, Yampp с новым софтом должен слать код присутствия CD, и формировать на ЖКИ магнитофона соответствующую информацию, и также воспринемать передоваемые команды от панели управления вот прикладываю схему всех шин данных в моделях BMW http://www.bmwclub.ru/gallery/showphoto.php?photo=22109&papass=&sort=1&thecat=500 Title: Yampp и bmw i-bus Post by: Sergey on 18 Aug 2004, 17:41 Quote Yampp с новым софтом должен слать код присутствия CD, и формировать на ЖКИ магнитофона соответствующую информацию, и также воспринемать передоваемые команды от панели управления Понятно :) Только заменой массивов команд здесь не обойдешься, надо полностью переписывать link.c, частично ipbus.c и адаптировать остальную прошивку. Еще скорее всего надо менять аппаратную часть (pca82c250 и lm339). кстати этот кусок откуда Quote void pl_disp(u16 index, u08 sel) { YADL_PLAY_LIST_ENTRY *pEntry = get_pl_entry(index); if (index < playlist_qty) { Vlcd_puts(pEntry->name); // print on LCD #ifdef ENABLE_UART if(sel) // if current index uprintf("\rPlaylist: %s ",pEntry->name); // print on terminal и как сюда добавить чтоб он выдовал также на порт hex код #endif } } из YAMPP или BWM :?: если из YAMPP то uprintf()(так же как и max202) используется только для отладки и при нормальной работе не нужен Вообще пришли схему и прошивку для имулятора I-BUS, может чего поконкретнее скажу :) sergey@nayramdal.ru Title: Yampp и bmw i-bus Post by: Tolin on 19 Aug 2004, 02:00 кстате поповоду мах202, с прошивкой 1.30 если запустить терминал то то что видно на ЖКИ, то и видно на терменале, только из терминала можно управлять
L-list m-menu n-next d- звук тише u - звук громче, итд, также он показывает сколько отыграла песьня, название полностью весь тег может быть чтото можно из это использовать для эмуляции, если уже это написано, зарание Сенкс. Title: Yampp и bmw i-bus Post by: Tolin on 19 Aug 2004, 02:55 А вот кстате простенькая схемка сопряжения компа с i-bus
(http://f5.grp.yahoofs.com/v1/YNEjQShuBC997EwKYFaGlAxDyiQIvbqsWngdE8iYZYdlz4VzYO8VaCU4t-wTk6QFr0sPxTnmx3arF66ygPO2ff0cIGuOWw/IBUS%20Interfaces/IBUS.GIF) с помощю проги по мониторингу, можно управлять всем в машине, звуком, окнами, светом, кондишеном, телефонм вот описание в оригенале http://www.openbmw.org/bus/ а вот команды http://www.openbmw.org/bus/buttons/ Title: Yampp и bmw i-bus Post by: Sergey on 19 Aug 2004, 14:49 Посмотрел я файл bwm.c
В принципе достаточно просто переделать любую прошивку YAMPP для эмулятора. Все сообщения на I BUS посылаются через UART,а в YAMPP UART используется для связи с компьютером и отладки, поэтому лучше использовать второй UART(mega161,162), хотя это не принципиально. функция event_e get_bmw_event(void) - получает сообщения от магнитолы, обрабатывает их и выдает код комманды YAMPP-у (EV_PLAY,EV_STOP и т.д.) char lexer(const struct lexcfg PROGMEM *pattern) - вспомогательная функция для get_bmw_event() - распознает сообщения по маскам(масивы комманд магнитолы). void SendCDMsg(PGM_P pData) и void SendCDMsgRAM(u08 *pData) посылают сформированое сообщение в UART. void WriteTArea(u08 index,u08 *str) void WriteIArea(u08 index,u08 *str) void WriteMain(u08 *str) формируют сообщения(добавляют заголовок,длину и т.д) для отображения на экране магнитолы (время, состояние и т.д.) Я как понял там три окна(физических или логических), каждая отвечает за свое. остальные по названию понятны. Если будут более конкретные вопросы - пиши. Title: Yampp и bmw i-bus Post by: Tolin on 19 Aug 2004, 20:18 Ок, если не трудно давай совместно обсудим что и как,
за основы берем рабочую прошивку, 1.30 теперь я так понял в нее надо добавить мосивы команд [code:1]// CD Broadcast Messages (FFH)-------------------------------------------------- // Poll Response u08 cd_pollresp_msg[] PROGMEM = { 0x18, 0x04, 0xff, 0x02, 0x00, 0xE1 }; // CD announce u08 cd_announce_msg[] PROGMEM = { 0x18, 0x04, 0xff, 0x02, 0x01, 0xE0 }; // CD Messages to Radio (68H)--------------------------------------------------- // - 7th byte is the disk index (usually between 01,06). // - 8th byte is the track index. // Messages always send CD 01, Track 01. Don't care about CD and track # with a MP3 player. // So the message can be static. // CD and Track Status Not Playing Response u08 cd_statusnotplaying_msg[] PROGMEM = { 0x18, 0x0A, 0x68, 0x39, 0x00, 0x02, 0x00, 0x3F, 0x00, 0x01, 0x01, 0x7E };[/code:1] итд, до конца из файла BMW.c что теперь ? как базовая система поймет что присутствует к примерй CD-Changer я так понял надо с какойто переодичностью слать какойто код, типо я тут, я ченджер, как это сделать? Title: Yampp и bmw i-bus Post by: Tolin on 20 Aug 2004, 17:49 как правельно сконфигурировать Visual Micro Lab
чтоб он работал с WinAVR, какие настройки должны быть в структуре процессора, |