Vitat's homepage

General => MP3 => Topic started by: Tolin on 18 Aug 2004, 02:02



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,

какие настройки должны быть в структуре процессора,