m:info("No glib plugin found...")
end
+if m:plugin_exists("gam-resource-manager") then
+
+function get_general_priorities(self)
+ print("*** get_general_priorities\n")
+ return { "USB Headset", "wiredHeadset", "speakers" }
+end
+
+function get_phone_priorities(self)
+ print("*** get_phone_priorities\n")
+ return { "wiredHeadset", "USB Headset" }
+end
+
+m:load_plugin('gam-resource-manager', {
+ config_dir = '/etc/murphy/gam',
+ decision_names = 'gam-wrtApplication-4',
+ max_active = 4,
+ app_mapping = {
+ ['t8j6HTRpuz.MediaPlayer'] = 'wrtApplication',
+ ['pacat'] = 'icoApplication'
+ },
+ app_default = 'icoApplication'
+})
+
+routing_sink_priority {
+ application_class = "player",
+ priority_queue = get_general_priorities
+}
+
+routing_sink_priority {
+ application_class = "game",
+ priority_queue = get_general_priorities
+}
+
+routing_sink_priority {
+ application_class = "implicit",
+ priority_queue = get_general_priorities
+}
+
+routing_sink_priority {
+ application_class = "phone",
+ priority_queue = get_phone_priorities
+}
+
+routing_sink_priority {
+ application_class = "basic",
+ priority_queue = get_phone_priorities
+}
+
+routing_sink_priority {
+ application_class = "event",
+ priority_queue = get_phone_priorities
+}
+end
+
-- load the AMB plugin
if m:plugin_exists('amb') then
m:try_load_plugin('amb')
-- define resource classes
if not m:plugin_exists('ivi-resource-manager') and
- not with_system_controller
+ not with_system_controller and
+ not m:plugin_exists('gam-resource-manager')
then
resource.class {
name = "audio_playback",
attributes = {
role = { mdb.string, "music", "rw" },
pid = { mdb.string, "<unknown>", "rw" },
- policy = { mdb.string, "relaxed", "rw" }
+ policy = { mdb.string, "relaxed", "rw" },
+ source = { mdb.string, "webkit", "rw" },
+ conn_id = { mdb.unsigned, 0, "rw" }
}
}
end
-resource.class {
- name = "audio_recording",
- shareable = true,
- attributes = {
- role = { mdb.string, "music" , "rw" },
- pid = { mdb.string, "<unknown>", "rw" },
- policy = { mdb.string, "relaxed" , "rw" }
- }
-}
+if not m:plugin_exists('gam-resource-manager') then
+ resource.class {
+ name = "audio_recording",
+ shareable = true,
+ attributes = {
+ role = { mdb.string, "music" , "rw" },
+ pid = { mdb.string, "<unknown>", "rw" },
+ policy = { mdb.string, "relaxed" , "rw" }
+ }
+ }
+end
resource.class {
name = "video_playback",
return true
end,
update = function(self)
- send_night_mode_to_home_screen()
+ send_night_mode_to(homescreen)
end
}
end
function regulateApplications(t, regulation)
for k,v in pairs(ft(t)) do
- -- iterate through the undefined and entertainment apps, see if
- -- they have been overruled in local config
+ whitelisted = false
+ -- our local application config, which takes precedence
local conf = getApplication(v.appid)
- if conf and conf.resource_class ~= "player" then
+ if conf then
+ if conf.resource_class ~= "player" then
+ whitelisted = true
+ end
+
+ if conf.requisites and conf.requisites.screen then
+ if conf.requisites.screen.driving then
+ whitelisted = true
+ end
+ end
+ end
+
+ if whitelisted then
-- override, don't disable
resmgr:disable_screen_by_appid("*", "*", v.appid, false, false)
else
end
-- tell homescreen that driving mode was updated
- send_driving_mode_to_home_screen()
+ send_driving_mode_to(homescreen)
regulateApplications(ft(mdb.select.entertainment_applications), data)
regulateApplications(ft(mdb.select.undefined_applications), data)
m:load_plugin('system-controller')
+onscreen_counter = 0
+
window_manager_operation_names = {
[1] = "create",
[2] = "destroy"
[0x10003] = "show",
[0x10004] = "hide",
[0x10005] = "move",
- [0x10006] = "change_active",
- [0x10007] = "change_layer",
- [0x10008] = "change_attr",
- [0x10009] = "name",
- [0x10011] = "map_thumb",
- [0x10012] = "unmap_thumb",
- [0x10020] = "show layer",
- [0x10021] = "hide_layer",
- [0x10022] = "change_layer_attr",
+ [0x10006] = "animation",
+ [0x10007] = "change_active",
+ [0x10008] = "change_layer",
+ [0x10009] = "change_attr",
+ [0x10010] = "name",
+ [0x10020] = "map_thumb",
+ [0x10021] = "unmap_thumb",
+ [0x10022] = "map_get",
+ [0x10030] = "show layer",
+ [0x10031] = "hide_layer",
+ [0x10032] = "change_layer_attr",
[0x20001] = "add_input",
[0x20002] = "del_input",
- [0x20003] = "send_input",
+ [0x30001] = "change_user",
+ [0x30002] = "get_userlist",
+ [0x30003] = "get_lastinfo",
+ [0x30004] = "set_lastinfo",
[0x40001] = "acquire_res",
[0x40002] = "release_res",
[0x40003] = "deprive_res",
[0x40004] = "waiting_res",
[0x40005] = "revert_res",
+ [0x40006] = "window_id_res",
[0x40011] = "create_res",
[0x40012] = "destroy_res",
[0x50001] = "set_region",
end
input_layer = {
- [3] = true, -- input
- [4] = true, -- touch
- [5] = true -- cursor
+ [101] = true, -- input
+ [102] = true, -- touch
+ [103] = true -- cursor
}
-- some day this should be merged with wmgr.layers
ico_layer_type = {
- [1] = 0x1000, -- background
- [2] = 0x2000, -- application
- [3] = 0x4000, -- input
- [4] = 0xa000, -- touch
- [5] = 0xb000, -- cursor
- [6] = 0xc000, -- startup
- [7] = 0x3000 -- fullscreen
+ [1] = 0x1000, -- background
+ [2] = 0x2000, -- application
+ [3] = 0x2000, -- homescreen
+ [4] = 0x2000, -- interrupt application
+ [5] = 0x2000, -- onscreen application
+ [6] = 0xc000, -- startup
+ [7] = 0x3000, -- fullscreen
+ [101] = 0x4000, -- input
+ [102] = 0xa000, -- touch
+ [103] = 0xb000 -- cursor
}
resmgr = resource_manager {
local r = m:JSON({surface = surface,
visible = 1,
raise = 1})
+ if ev.appid == onscreen then
+ onscreen_counter = onscreen_counter + 1
+ wmgr:layer_request(m:JSON({layer = 5, visible = 1}))
+ end
+
wmgr:window_request(r,a,0)
elseif event == "revoke" then
if verbose > 0 then
local a = animation({})
local r = m:JSON({surface = ev.surface,
visible = 0})
+ if ev.appid == onscreen then
+ onscreen_counter = onscreen_counter - 1
+ if onscreen_counter <= 0 then
+ onscreen_counter = 0
+ wmgr:layer_request(m:JSON({layer = 5, visible = 0}))
+ end
+ end
wmgr:window_request(r,a,0)
elseif event == "create" then
-- our local application config, which takes precedence
local conf = getApplication(ev.appid)
- -- disable only non-whitelisted applications
- if not conf or conf.resource_class == "player" then
- if blacklisted then
- if verbose > 0 then
- print("disabling screen for " .. ev.appid)
+ if not conf then
+ blacklisted = true
+ else
+ if conf.resource_class == "player" then
+ blacklisted = true
+ end
+
+ -- check the exceptions
+ if conf.requisites and conf.requisites.screen then
+ if conf.requisites.screen.driving then
+ blacklisted = false
end
- resmgr:disable_screen_by_appid("*", "*", ev.appid, true, true)
end
end
+
+ -- disable only non-whitelisted applications
+ if blacklisted then
+ if verbose > 0 then
+ print("disabling screen for " .. ev.appid)
+ end
+ resmgr:disable_screen_by_appid("*", "*", ev.appid, true, true)
+ end
end
elseif event == "destroy" then
output_order = { 1, 0 },
outputs = { { name = "Mid",
- id = 0,
+ id = 1,
zone = "driver",
areas = { Full = {
id = 20,
}
},
{ name = "Center",
- id = 1,
+ id = 4,
zone = "driver",
areas = { Status = {
id = 0,
width = function(w,h) return w/2-181 end,
height = function(w,h) return h-64-128 end
},
- Control = {
+ MobileFull = {
id = 11,
pos_x = 0,
+ pos_y = 64,
+ width = function(w,h) return w end,
+ height = function(w,h) return h-64-128 end
+ },
+ MobileUpper = {
+ id = 12,
+ pos_x = 0,
+ pos_y = 64,
+ width = function(w,h) return w end,
+ height = function(w,h) return (h-64-128)/2 end
+ },
+ MobileLower = {
+ id = 13,
+ pos_x = 0,
+ pos_y = function(w,h) return (h-64-128)/2+64 end,
+ width = function(w,h) return w end,
+ height = function(w,h) return (h-64-128)/2 end
+ },
+ Control = {
+ id = 14,
+ pos_x = 0,
pos_y = function(w,h) return h-128 end,
width = function(w,h) return w end,
height = 128
}
}
},
- layers = { { 0, "Background" , 1 },
- { 1, "Application" , 2 },
- { 2, "Softkeyboard" , 4 },
- { 3, "HomeScreen" , 2 },
- { 4, "ControlBar" , 2 },
- { 5, "InterruptApp" , 2 },
- { 6, "OnScreen" , 2 },
- { 101, "Input" , 3 },
- { 102, "Cursor" , 5 },
- { 103, "Startup" , 6 },
- { 0x1000, "Background" , 1 },
- { 0x2000, "Normal" , 2 },
- { 0x3000, "Fullscreen" , 7 },
- { 0x4000, "InputPanel" , 3 },
- { 0xA000, "Touch" , 4 },
- { 0xB000, "Cursor" , 5 },
- { 0xC000, "Startup" , 6 }
+ -- id name type output
+ layers = { { 0, "BackGround" , 1, "Center" },
+ { 1, "Application" , 2, "Center" },
+ { 2, "HomeScreen" , 3, "Center" },
+ { 3, "ControlBar" , 3, "Center" },
+ { 4, "InterruptApp" , 4, "Center" },
+ { 5, "OnScreen" , 5, "Center" },
+ { 6, "Touch" , 102, "Center" },
+ { 7, "Cursor" , 103, "Center" }
},
window_manager_operation_name(oper))
end
if oper == 1 then
- local wumask = window_mask { raise = true,
+ local wumask = window_mask { --raise = true,
visible = true,
active = true }
- local wrmask = window_mask { active = true,
+ local wrmask = window_mask { raise = true,
+ active = true,
layer = true }
local lumask = layer_mask { visible = true }
local lrmask = layer_mask { visible = true }
end
local arg = m:JSON({ surface = win.surface,
- winname = win.name,
+ winname = win.name
})
local command = 0
elseif oper == 2 then -- destroy
command = 0x10002
elseif oper == 3 then -- namechange
+ command = 0x10010
+ elseif oper == 4 or oper == 5 then -- visible/configure
command = 0x10009
- elseif oper == 4 or oper == 5 then --visible or configure
- local icolayer = ico_layer_type[win.layertype]
- command = 0x10008
arg.zone = win.area
arg.node = win.node
- if icolayer then
- arg.layertype = icolayer
+ if win.layertype then
+ arg.layertype = win.layertype
end
arg.layer = win.layer
arg.pos_x = win.pos_x
end
return
end
- command = 0x10006
+ command = 0x10007
elseif oper == 7 then -- map
local map = win.map
if not map then
return
end
if win.mapped == 0 then
- command = 0x10012
+ command = 0x10021
else
- command = 0x10011
+ command = 0x10020
end
arg.attr = map.type
- arg.name = map.target
+ --arg.name = map.target
arg.width = map.width
arg.height = map.height
arg.stride = map.stride
if verbose > 0 then
print("### <== sending " ..
command_name(msg.command) ..
- " window message to '" .. win.name .. "'")
+ " window message to '" .. homescreen .. "'")
if verbose > 1 then
print(msg)
end
if s == "system" then
local a = animation({})
local r = m:JSON({surface = win.surface,
- visible = 1,
+ visible = 0,
raise = 1})
self:window_request(r,a,0)
else
special_screen_sets[win.surface] = true
end
end
+
+ if onscreen and win.appid == onscreen then
+ local resmsg = m:JSON({
+ command = 0x40006, -- window_id_res
+ appid = win.appid,
+ pid = win.pid,
+ res = m:JSON({
+ window = m:JSON({
+ ECU = "",
+ display = "",
+ layer = "",
+ layout = "",
+ area = "",
+ dispatchApp = "",
+ role = win.name,
+ resourceId = win.surface
+ })
+ })
+ })
+ if verbose > 0 then
+ print("### <== sending " ..
+ command_name(resmsg.command) ..
+ " message to '" .. onscreen .. "'")
+ if verbose > 1 then
+ print(resmsg)
+ end
+ end
+ sc:send_message(onscreen, resmsg);
+ end
elseif oper == 2 then -- destroy
resclnt:resource_set_destroy("screen", win.surface)
special_screen_sets[win.surface] = nil
end
end
if oper == 3 then -- visible
- local command = 0x10022
+ local command = 0x10008 -- change_layer
local msg = m:JSON({
command = command,
appid = "",
homescreen = ""
onscreen = ""
+cids = {}
+
-- these shoud be before wmgr:connect() is called
if verbose > 0 then
print("====== creating applications ======")
area = "Center.Full",
privileges = { screen = "none", audio = "none" },
resource_class = "system",
+ requisites = { screen = "driving", audio = "none" },
screen_priority = 30
}
+application {
+ appid = "MediaPlayer",
+ area = "Center.Full",
+ privileges = { screen = "none", audio = "none" },
+ requisites = { screen = "driving", audio = "none" },
+ resource_class = "player",
+ screen_priority = 0
+}
+
+application {
+ appid = "MyMediaPlayer",
+ area = "Center.Full",
+ privileges = { screen = "none", audio = "none" },
+ requisites = { screen = "driving", audio = "none" },
+ resource_class = "player",
+ screen_priority = 0
+}
+
+application {
+ appid = "MeterWidget",
+ area = "Center.Full",
+ privileges = { screen = "none", audio = "none" },
+ requisites = { screen = "driving", audio = "none" },
+ resource_class = "player",
+ screen_priority = 0
+}
+
+application {
+ appid = "org.tizen.ico.app-soundsample",
+ area = "Center.Full",
+ privileges = { screen = "none", audio = "none" },
+ -- uncomment the next line to make the app exempt from regulation
+ -- requisites = { screen = "driving", audio = "none" },
+ resource_class = "player",
+ screen_priority = 0
+}
+
+
if sc then
sc.client_handler = function (self, cid, msg)
local command = msg.command
print('Setting homescreen='..appid)
homescreen = appid
if command and command == 1 then
- send_driving_mode_to_home_screen()
- send_night_mode_to_home_screen()
+ send_driving_mode_to(homescreen)
+ send_night_mode_to(homescreen)
end
elseif appid == "org.tizen.ico.onscreen" then
onscreen = appid
+ if command and command == 1 then
+ send_driving_mode_to(onscreen)
+ send_night_mode_to(onscreen)
+ end
end
- if not connected and appid == "org.tizen.ico.homescreen" then
+ if not connected and appid == "org.tizen.ico.homescreen" then
print('Trying to connect to weston...')
connected = wmgr:connect()
end
+ cids[cid] = appid
end
end
sc.window_handler = function (self, cid, msg)
if verbose > 0 then
print('### ==> received ' ..
- command_name(msg.command) .. ' message')
+ command_name(msg.command) .. ' message from ' .. cids[cid])
if verbose > 1 then
print(tostring(msg))
end
local time = 200
if msg.arg.anim_time then
local t = msg.arg.anim_time
+ -- the actual time for the animation
time = m:AND(t, time_mask)
- nores = not m:AND(t, nores_mask)
+ -- flag for ignoring resource control
+ nores = m:AND(t, nores_mask)
if m:AND(t, raise_mask) then
msg.arg.raise = 1
elseif m:AND(t, lower_mask) then
end
if msg.arg.anim_name then
a.show = { msg.arg.anim_name, time }
- print('time: ' .. tostring(a.show[2]))
+ print('time: ' .. tostring(time))
end
end
if not nores then
local time = 200
if msg.arg.anim_time then
local t = msg.arg.anim_time
+ -- the actual time for the animation
time = m:AND(t, time_mask)
- nores = not m:AND(t, nores_mask)
+ -- flag for ignoring resource control
+ nores = m:AND(t, nores_mask)
end
if msg.arg.anim_name then
a.hide = { msg.arg.anim_name, time }
end
wmgr:window_request(msg.arg, a, 0)
-- TODO: handle if area changed
- elseif msg.command == 0x10006 then -- ico ACTIVE
+ elseif msg.command == 0x10007 then -- ico CHANGE_ACTIVE
if not msg.arg.active then
msg.arg.active = 3 -- pointer + keyboard
end
if verbose > 2 then
- print('### ==> ACTIVE REQUEST')
+ print('### ==> CHANGE_ACTIVE REQUEST')
print(tostring(msg.arg))
end
wmgr:window_request(msg.arg, a, 0)
- elseif msg.command == 0x10007 then -- ico CHANGE_LAYER
+ elseif msg.command == 0x10008 then -- ico CHANGE_LAYER
if verbose > 2 then
print('### ==> CHANGE_LAYER REQUEST')
print(tostring(msg.arg))
end
--]]
wmgr:window_request(msg.arg, a, 0)
- elseif msg.command == 0x10011 then -- ico MAP_THUMB
+ elseif msg.command == 0x10020 then -- ico MAP_THUMB
local framerate = msg.arg.framerate
- if not framerate or framerate < 0 then
- framerate = 0
+ local animname = msg.arg.anim_name
+ if animname then
+ a.map = { animname, 1 }
+ if not framerate or framerate < 0 then
+ framerate = 5
+ end
+ msg.arg.mapped = 1
+ if verbose > 2 then
+ print('### ==> MAP_THUMB REQUEST')
+ print(msg.arg)
+ print('framerate: '..framerate)
+ end
+ wmgr:window_request(msg.arg, a, framerate)
end
- msg.arg.mapped = 1
- if verbose > 2 then
- print('### ==> MAP_THUMB REQUEST')
- print(msg.arg)
- print('framerate: '..framerate)
- end
- wmgr:window_request(msg.arg, a, framerate)
- elseif msg.command == 0x10012 then -- ico UNMAP_THUMB
+ elseif msg.command == 0x10021 then -- ico UNMAP_THUMB
msg.arg.mapped = 0
if verbose > 2 then
print('### ==> UNMAP_THUMB REQUEST')
print(msg.arg)
end
wmgr:window_request(msg.arg, a, 0)
+--[[
elseif msg.command == 0x10013 then -- ico MAP_BUFFER command
local shmname = msg.arg.anim_name
local bufsize = msg.arg.width
end
wmgr:buffer_request(shmname, bufsize, bufnum)
end
- elseif msg.command == 0x10020 then -- ico SHOW_LAYER command
+--]]
+ elseif msg.command == 0x10030 then -- ico SHOW_LAYER command
msg.arg.visible = 1
if verbose > 2 then
print('### ==> SHOW_LAYER REQUEST')
print(msg.arg)
end
wmgr:layer_request(msg.arg)
- elseif msg.command == 0x10021 then -- ico HIDE_LAYER command
+ elseif msg.command == 0x10031 then -- ico HIDE_LAYER command
msg.arg.visible = 0
if verbose > 2 then
print('### ==> HIDE_LAYER REQUEST')
print(tostring(msg.arg))
end
imgr:input_request(msg.arg)
- elseif msg.command == 0x20003 then -- send_input
+ -- elseif msg.command == 0x20003 then -- send_input
end
end
return
end
- if msg.command == 0x00030001 then -- MSG_CMD_CHANGE_USER
+ if msg.command == 0x30001 then -- change_user
print("command CHANGE_USER")
if not msg.arg then
print("invalid message")
end
end
- elseif msg.command == 0x00030002 then -- MSG_CMD_GET_USERLIST
+ elseif msg.command == 0x30002 then -- get_userlist
print("command GET_USERLIST")
if not msg.appid then
print("invalid message")
print('*** reply FAILED')
end
- elseif msg.command == 0x00030003 then -- MSG_CMD_GET_LASTINFO
+ elseif msg.command == 0x30003 then -- get_lastinfo
print("command GET_LASTINFO")
if not msg.appid then
print("invalid message")
print('*** reply FAILED')
end
- elseif msg.command == 0x00030004 then -- MSG_CMD_SET_LASTINFO
+ elseif msg.command == 0x30004 then -- set_lastinfo
print("command SET_LASTINFO")
if not msg.arg or not msg.appid then
print("invalid message")
end
end
+ getKey = function (msg)
+ -- Field rset.key is an id for distinguishing between rsets. All
+ -- resource types appear to contain a different key. Just pick one
+ -- based on what we have on the message.
+
+ key = nil
+
+ if msg and msg.res then
+ if msg.res.sound then
+ key = msg.res.sound.id
+ elseif msg.res.input then
+ key = msg.res.input.name
+ elseif msg.res.window then
+ -- alarm! this appars to be non-unique?
+ key = msg.res.window.resourceId
+ end
+ end
+
+ return key
+ end
+
createResourceSet = function (ctl, client, msg)
- cb = function(rset, data)
- print("> resource callback")
+ cb = function(rset)
+
+ -- m:info("*** resource_cb: client = '" .. msg.appid .. "'")
-- type is either basic (0) or interrupt (1)
requestType = 0
requestType = msg.res.type
end
+ if rset.data.filter_first then
+ rset.data.filter_first = false
+ return
+ end
+
if rset.acquired then
cmd = 0x00040001 -- acquire
+
+ if msg.appid == onscreen then
+ -- notifications are valid only for a number of seconds
+ rset.timer = m:Timer({
+ interval = 5000,
+ oneshot = true,
+ callback = function (t)
+ m:info("notification timer expired")
+
+ if rset.data then
+ reply.res.window = rset.data.window
+ end
+
+ rset:release()
+ rset.timer = nil
+
+ -- Send a "RELEASE" message to client.
+ -- This triggers the resource deletion
+ -- cycle in OnScreen.
+
+ reply = m.JSON({
+ appid = msg.appid,
+ command = cmd,
+ res = {
+ type = requestType
+ }
+ })
+
+ sc:send_message(client, reply)
+ end
+ })
+ end
else
cmd = 0x00040002 -- release
+ if rset.timer then
+ rset.timer.callback = nil
+ rset.timer = nil
+ end
end
reply = m.JSON({
- appid = data.client,
+ appid = msg.appid,
command = cmd,
res = {
type = requestType
}
})
- if rset.resources.audio_playback then
- reply.res.sound = {
- zone = "driver",
- name = msg.appid,
- adjust = 0,
- -- id = "0"
- }
+ if rset.data.sound then
+ reply.res.sound = rset.data.sound
end
- if rset.resources.display then
- reply.res.window = {
- zone = "driver",
- name = msg.appid,
- -- id = "0"
- }
+ if rset.data.window then
+ reply.res.window = rset.data.window
end
- if rset.resources.input then
- reply.res.input = {
- name = msg.appid,
- event = 0
- }
+ if rset.data.input then
+ reply.res.input = rset.data.input
end
- print("sending message to client: " .. data.client)
- if sc:send_message(data.client, reply) then
- print('*** reply OK')
+ if rset.acquired then
+ m:info("resource cb: 'acquire' reply to client " .. client)
else
- print('*** reply FAILED')
+ m:info("resource cb: 'release' reply to client " .. client)
+ end
+
+ if not sc:send_message(client, reply) then
+ m:info('*** reply FAILED')
end
end
- rset = m:ResourceSet({
+ local rset = m:ResourceSet({
application_class = "player",
zone = "driver", -- msg.zone ("full")
callback = cb
rset.data = {
cid = cid,
- ctl = ctl
+ ctl = ctl,
+ filter_first = true
}
if msg.res.sound then
print("sound name: " .. msg.res.sound.name)
print("sound zone:" .. msg.res.sound.zone)
print("sound adjust: " .. tostring(msg.res.sound.adjust))
- if msg.res.sound.id then
- print("sound id: " .. msg.res.sound.id)
- end
+
+ rset.data.sound = msg.res.sound
end
if msg.res.input then
})
rset.resources.input.attributes.pid = tostring(msg.pid)
rset.resources.input.attributes.appid = msg.appid
- print("input name: " .. msg.res.sound.name)
+ print("input name: " .. msg.res.input.name)
print("input event:" .. tostring(msg.res.input.event))
+
+ rset.data.input = msg.res.input
end
if msg.res.window then
rset:addResource({
- resource_name = "display"
+ resource_name = "screen",
+ shared = true
})
- rset.resources.display.attributes.pid = tostring(msg.pid)
- rset.resources.display.attributes.appid = msg.appid
- print("display name: " .. msg.res.display.name)
- print("display zone:" .. msg.res.display.zone)
- if msg.res.display.id then
- print("display id: " .. msg.res.display.id)
+ rset.resources.screen.attributes.pid = tostring(msg.pid)
+ rset.resources.screen.attributes.appid = msg.appid
+ rset.resources.screen.attributes.surface = msg.res.window.resourceId
+ complete_area = msg.res.window.display .. '.' .. msg.res.window.area
+ rset.resources.screen.attributes.area = complete_area
+ if msg.appid == onscreen then
+ rset.resources.screen.attributes.classpri = 1
+ else
+ rset.resources.screen.attributes.classpri = 0
end
+
+ rset.data.window = msg.res.window
end
+ rset.key = getKey(msg)
+
return rset
end
-- msg.appid
-- msg.pid
- if msg.command == 0x00040011 then -- MSG_CMD_CREATE_RES
- print("command CREATE")
+ if msg.command == 0x40011 then -- create_res
+ print("command CREATE_RES")
+ key = getKey(msg)
- if not sets.cid then
- sets.cid = createResourceSet(self, cid, msg)
+ if key then
+ if not sets.cid then
+ sets.cid = {}
+ end
+ sets.cid[key] = createResourceSet(self, cid, msg)
end
- elseif msg.command == 0x00040012 then -- MSG_CMD_DESTORY_RES
- print("command DESTROY")
+ elseif msg.command == 0x40012 then -- destroy_res
+ print("command DESTROY_RES")
+ key = getKey(msg)
- if sets.cid then
- sets.cid:release()
+ if key then
+ if sets.cid and sets.cid[key] then
+ sets.cid[key]:release()
+ sets.cid[key].timer = nil
+ sets.cid[key] = nil -- garbage collecting
+ end
end
- sets.cid = nil -- garbage collecting
+ elseif msg.command == 0x40001 then -- acquire_res
+ print("command ACQUIRE_RES")
+ key = getKey(msg)
- elseif msg.command == 0x00040001 then -- MSG_CMD_ACQUIRE_RES
- print("command ACQUIRE")
-
- if not sets.cid then
- sets.cid = createResourceSet(self, cid, msg)
+ if key then
+ if not sets.cid then
+ sets.cid = {}
+ end
+ if not sets.cid[key] then
+ sets.cid[key] = createResourceSet(self, cid, msg)
+ end
+ print("acquiring the resource set")
+ sets.cid[key]:acquire()
end
- sets.cid:acquire()
+ elseif msg.command == 0x40002 then -- release_res
+ print("command RELEASE_RES")
+
+ key = getKey(msg)
- elseif msg.command == 0x00040002 then -- MSG_CMD_RELEASE_RES
- print("command RELEASE")
+ if key then
+ if sets.cid and sets.cid[key] then
+ sets.cid[key]:release()
- if sets.cid then
- sets.cid:release()
+ if msg.appid == onscreen then
+ -- in case of OnScreen, this actually means that the
+ -- resource set is never used again; let gc do its job
+ sets.cid[key].timer = nil
+ sets.cid[key] = nil -- garbage collecting
+ end
+ end
end
- elseif msg.command == 0x00040003 then -- MSG_CMD_DEPRIVE_RES
- print("command DEPRIVE")
+ elseif msg.command == 0x40003 then -- deprive_res
+ print("command DEPRIVE_RES")
- elseif msg.command == 0x00040004 then -- MSG_CMD_WAITING_RES
- print("command WAITING")
+ elseif msg.command == 0x40004 then -- waiting_res
+ print("command WAITING_RES")
- elseif msg.command == 0x00040005 then -- MSG_CMD_REVERT_RES
- print("command REVERT")
+ elseif msg.command == 0x40005 then -- revert_res
+ print("command REVERT_RES")
end
end
end
end
end
+
+ sc.notify_handler = function (self, cid, msg)
+ if verbose > 0 then
+ print('### notify handler: ' .. command_name(msg.command))
+ if verbose > 1 then
+ print(msg)
+ end
+ end
+ end
end
-function send_driving_mode_to_home_screen()
- if homescreen == "" then
+function send_driving_mode_to(client)
+ if client == "" then
return
end
end
end
- sc:send_message(homescreen, reply)
+ sc:send_message(client, reply)
end
-function send_night_mode_to_home_screen()
- if homescreen == "" then
+function send_night_mode_to(client)
+ if client == "" then
return
end
end
end
- sc:send_message(homescreen, reply)
+ sc:send_message(client, reply)
end
-- we should have 'audio_playback' defined by now