Page 1 of 1

Look cool CAN bus joystick

Posted: Wed May 04, 2022 5:12 pm
by AndreyB
BMW 6582 9286699-02 https://forum.canny.ru/viewtopic.php?id=822

Code: Select all

idrive 6582 9286699-02      500 кбит/сек

старт
отправка сообщений
1.   202 fd 00   - 1 раз подсветка
2.   50e         - каждые 4 сек
3.   273 3d 01 00 00 ff 00 1e 01    -1 раз активация колеса

кнопки

media -     267    E1    FD    0C    00    C0    10          d3 01 нажата, 02 долгое нажатие, d2 счетчик, d5 какая кнопка
radio -    267    E1    FD    6C    00    C0    08              
tel   -        267    E1    FD    A0    00    C0    40           
nav   -       267    E1    FD    B0    00    C0    20           
back  -      267    E1    FD    BD    00    C0    02           
option-      267    E1    FD    EC    00    C0    04           
menu  -     267    E1    FD    F6    00    C0    01           

колесо наклоны

вперед  -      267    E1    FD    1C    00    DD    01        d3 11 нажата, 12 долгое нажатие,d2 счетчик, d5 какая кнопка
назад   -       267    E1    FD    36    00    DD    01             41         42   
влево   -       267    E1    FD    48    00    DD    01             81         82   
вправо  -      267    E1    FD    4B    00    DD    01             21         22
нажатие -     267    E1    FD    16    00    DE    01             01          02

колесо

по часовой      -        264    225    253    12    0    1    30    DEC d3 плюс 1 по часовой, до 255, после d4 плюс 1, d3 с нуля    , d2 счетчик   
против часовой  -       264    225    253    228    0    1    30    DEC d3 минус 1 ,пример 0, 255, 254       
                        264    225    253    220    0    0    158    ошибка    при долгом вращении обновить 273 3d 01 00 00 ff 00 1e 01
does it use АМР 968813-9 BMW8380696 09?

Re: Look cool CAN bus joystick

Posted: Wed May 04, 2022 6:43 pm
by AndreyB
Much cheaper than 3K208-2RN3AG :)

Original post seems to be https://www.bimmerfest.com/threads/k-can2-messages-to-wake-a-cic-idrive-controller.890419/#post-13182279 mentioning 9317695

1 +12v 1 |*|
2 -GND 2 |*|
3 CAN HIGH 3 |*|
4 CAN LOW 4 |* |

Re: Look cool CAN bus joystick

Posted: Sat May 14, 2022 11:17 pm
by AndreyB
My 9286699 is alive
image.png
image.png (76.38 KiB) Viewed 3406 times

Re: Look cool CAN bus joystick

Posted: Thu Jun 30, 2022 2:12 am
by AndreyB

Re: Look cool CAN bus joystick

Posted: Sat Jul 02, 2022 10:03 am
by AndreyB
AndreyB wrote:
Wed May 04, 2022 5:12 pm
does it use АМР 968813-9 BMW8380696 09?
Jimmy, Kirby, any interest to try 968813-9 from aliexpress they seem to have plenty?

Re: Look cool CAN bus joystick

Posted: Mon Jul 04, 2022 11:19 am
by kjn260
RE: https://rusefi.com/forum/viewtopic.php?p=45788#p45788

learned some lua, did some code. Please report back.

Code: Select all

-- BMW iDrive LUA. Witten for BMW #ZE931769502
-- 5 Button with L/R Joystick.
 
-- Timer
t_heartbeat = Timer.new()
 
-- CAN Rx Channels
IDRIVE_BUTTONS = 0x267
IDRIVE_ROTARY = 0x264
 
-- CAN Tx Channels
IDRIVE_BRIGHTNESS = 0x202
IDRIVE_HEARBEAT = 0x560
IDRIVE_ROTARY_INIT = 0x273
 
 
-- Init
brighness = 0
previous_button = 0
current_button = 0
current_btn_state = 0
previous_btn_state = 0
 
 
-- Tables
button_names = { }
button_names[0x01] = "Menu"
button_names[0x02] = "Back"
button_names[0x04] = "Option"
button_names[0x08] = "Audio"
button_names[0x40] = "Tel"
button_names[0xDE] = "Knob"
button_names[0xDD] = "Knob Tilt"
 
 
button_states = { }
button_states[0x00] = "Released"
button_states[0x01] = "Pushed"
button_states[0x02] = "Held"
button_states[0x21] = "Right"
button_states[0x22] = "Held Right"
button_states[0x81] = "Left"
button_states[0x82] = "Held Left"
 
 
 
 
 
canRxAdd(IDRIVE_ROTARY) -- add Rx Handler for Rotary
canRxAdd(IDRIVE_BUTTONS) -- add Rx Handler for Buttons
 
 
setTickRate(50) -- set tick rate to 50hz
 
-- One time rotary initialisation
 
txCan(1, IDRIVE_ROTARY_INIT, 0, { 0x1D, 0xE1, 0x00, 0xF0, 0xFF, 0x7F, 0xDE, 0x04 })
 
 
function onCanRx(bus, id, dlc, data)
 
 
	if id == IDRIVE_BUTTONS then
 
		if data[5] == 0xc0 then
			-- buttons
			-- print('button')
 
			-- update current and previous
			previous_button = current_button
			current_button = data[6]
 
			if (previous_button == current_button) then
				-- signal for the same button
 
				-- update the state
				previous_btn_state = current_btn_state
				current_btn_state = data[4]
 
				if (current_btn_state ~= previous_btn_state) then
					-- if the state has changed
 
					print(button_names[data[6]] ..' was ' ..button_states[data[4]]) -- print the state
 
				end
 
			else
				-- new button
 
				previous_btn_state = 0 -- clear the previous state
				current_btn_state = data[4] -- write the new state
 
				print(button_names[data[6]] ..' was ' ..button_states[data[4]]) -- print the state
 
			end
 
		end
 
		if data[5] == 0xde or data[5] == 0xdd then
 
			-- print('knob')
			-- knob push or tilt
 
			-- update current and previous
			previous_button = current_button
			current_button = data[5]
 
			if (previous_button == current_button) then
				-- signal for the same button
 
				-- update the state
				previous_btn_state = current_btn_state
				current_btn_state = data[4]
 
				if (current_btn_state ~= previous_btn_state) then
					-- if the state has changed
 
					print(button_names[data[5]] ..' was ' ..button_states[data[4]]) -- print the state
 
				end
 
			else
				-- new button
 
				previous_btn_state = 0 -- clear the previous state
				current_btn_state = data[4] -- write the new state
 
				print(button_names[data[5]] ..' was ' ..button_states[data[4]]) -- print the state
 
			end
 
		end
 
	end
 
	if id == IDRIVE_ROTARY then
 
		if data[5] == 0x80 then
			print('rotary turned right ' ..data[4] ..' clicks')
 
		end
 
		if data[5] == 0x7f then
			print('rotary turned left ' ..255 - data[4] ..' clicks')
 
		end
 
	end
 
end
 
 
function onTick()
 
 
	-- iDrive heartbeat code - every 1000ms
 
	if t_heartbeat : getElapsedSeconds() > 1 then
 
		txCan(1, IDRIVE_HEARBEAT, 0, { 0x00, 0x00, 0x00, 0x00, 0x57, 0x2F, 0x00, 0x60 })
 
		txCan(1, 0x202, 0, { 0xff })
 
		t_heartbeat : reset()
 
	end
 
 
end

Re: Look cool CAN bus joystick

Posted: Fri Aug 12, 2022 8:24 pm
by AndreyB
kjn260 wrote:
Mon Jul 04, 2022 11:19 am
learned some lua, did some code. Please report back.
Thank you!!!

Your version got the knob to function on my 9286699-02 but it's raising some errors looks like no button name for some cases? Can you please add 'nil' value handling?

Code: Select all

2022-08-12_16_17_14_276: EngineState: LUA: rotary turned right 0 clicks
2022-08-12_16_17_14_355: EngineState: LUA: rotary turned right 1 clicks
2022-08-12_16_17_14_355: EngineState: LUA: rotary turned right 2 clicks
2022-08-12_16_17_14_456: EngineState: LUA CAN RX error [string "-- BMW iDrive LUA. Witten for BMW #ZE93176950..."]:128: attempt to concatenate a nil value (field '?')
2022-08-12_16_17_14_662: EngineState: LUA: Knob Tilt was Released
2022-08-12_16_17_14_862: EngineState: LUA CAN RX error [string "-- BMW iDrive LUA. Witten for BMW #ZE93176950..."]:118: attempt to concatenate a nil value (field '?')
2022-08-12_16_17_15_063: EngineState: LUA: Knob was Pushed
2022-08-12_16_17_15_265: EngineState: LUA: Knob Tilt was Released
2022-08-12_16_17_15_265: EngineState: LUA: Knob was Released
2022-08-12_16_17_15_362: EngineState: LUA CAN RX error [string "-- BMW iDrive LUA. Witten for BMW #ZE93176950..."]:128: attempt to concatenate a nil value (field '?')
2022-08-12_16_17_15_463: EngineState: LUA: Knob Tilt was Released
2022-08-12_16_17_15_563: EngineState: LUA CAN RX error [string "-- BMW iDrive LUA. Witten for BMW #ZE93176950..."]:118: attempt to concatenate a nil value (field '?')
2022-08-12_16_17_15_665: EngineState: LUA: Knob was Pushed
2022-08-12_16_17_15_764: EngineState: LUA: Knob was Released
2022-08-12_16_17_15_865: EngineState: LUA: Knob Tilt was Released
I've improved https://github.com/rusefi/rusefi/blob/master/firmware/controllers/lua/examples/bmw-idrive.txt with your knob initialization https://github.com/rusefi/rusefi/commit/ef123e7f64a07c1a6e616f4c715b3474fc92db34 and https://github.com/rusefi/rusefi/commit/2aa1e13c0b228c8b8a7be3a148a51070e32b5866

I think we better take the github pull request approach if you are interested to improve the official https://github.com/rusefi/rusefi/blob/master/firmware/controllers/lua/examples/bmw-idrive.txt

I know your snipped has removed it but for now my preference is to keep the brightness adjustment logic in the example.

Re: Look cool CAN bus joystick

Posted: Fri Aug 12, 2022 8:37 pm
by AndreyB
I have two kinds. Looks like yours is similar to the left one while the one on the right has four extra buttons (it also has an aftermarket wheel enlargement in order to look bigger than it is in reality: do not ask, that's how I got it I promise!!!)