# HG changeset patch
# User jfp <jf.pieronne@laposte.net>
# Date 1683904363 -7200
#      Fri May 12 17:12:43 2023 +0200
# Node ID d58f348ab0b6919fec08f0b0ce28bbbf40a90313
# Parent  34746597d2be62410295ad1dd8a8c4fae713da01
Define LNM$PERMANENT_MAILBOX (/user) to SUPERVISORD_TABLE

diff --git a/supervisorctl.py b/supervisorctl.py
--- a/supervisorctl.py
+++ b/supervisorctl.py
@@ -4,10 +4,11 @@
 import json
 from typing import Any, Set, Tuple
 
-from ovms import cmbdef, iodef, mbxqio, prvdef, psldef, starlet
+from ovms import cmbdef, iodef, mbxqio, prvdef, psldef, starlet, lnmdef
+from ovms.rtl import lib
 
 supervisorctl_pwd = ''
-# programs_name: Set[str] = set(('ALL',))
+supervisord_table_name = b'SUPERVISORD_TABLE'
 programs_name: Set[str] = set()
 
 
@@ -140,6 +141,22 @@
         print('stop all\t\tStop all processes')
 
 
+def logicals_init():
+    global supervisord_table_name
+    starlet.crelnt(
+        attr=lnmdef.LNM_M_CREATE_IF,
+        promsk=0xE000,
+        tabnam=supervisord_table_name,
+        partab=b'LNM$SYSTEM_DIRECTORY',
+        acmode=psldef.PSL_C_SUPER,
+    )
+    lib.set_logical(
+        b'LNM$PERMANENT_MAILBOX',
+        supervisord_table_name,
+        b'LNM$PROCESS_DIRECTORY',
+    )
+
+
 def mbx_init() -> Tuple[int, int]:
     s, chancmd = starlet.crembx(
         prmflg=1,
@@ -192,9 +209,10 @@
             name = sn.split(':')[-1].upper()
             programs_name.add(name)
 
-    # Required privilege: PRMMBX
-    starlet.setprv(1, prvdef.PRV_M_PRMMBX)
+    # Required privilege: PRMMBX, SYSNAM
+    starlet.setprv(1, prvdef.PRV_M_PRMMBX | prvdef.PRV_M_SYSNAM)
 
+    logicals_init()
     chan, chan_r = mbx_init()
     with (
         mbxqio.MBXQIO(channel=chan) as mcmd,
diff --git a/supervisord.py b/supervisord.py
--- a/supervisord.py
+++ b/supervisord.py
@@ -309,6 +309,7 @@
             prcnam=self.process_name,
             mbxunt=Program.mbxunt,
         )
+
         lib.set_logical(
             self.process_name + b'_PID',
             hex(pid)[2:].upper(),
@@ -422,13 +423,18 @@
 
 def logicals_init():
     global supervisord_table_name
-    starlet.crelnt(
+    s = starlet.crelnt(
         attr=lnmdef.LNM_M_CREATE_IF,
         promsk=0xE000,
         tabnam=supervisord_table_name,
         partab=b'LNM$SYSTEM_DIRECTORY',
         acmode=psldef.PSL_C_SUPER,
     )
+    lib.set_logical(
+        b'LNM$PERMANENT_MAILBOX',
+        supervisord_table_name,
+        b'LNM$PROCESS_DIRECTORY',
+    )
 
 
 def mbx_init() -> Tuple[int, int, int, int]:
@@ -755,8 +761,8 @@
             )
             Program.programs[name] = p
 
+    logicals_init()
     chan, Program.mbxunt, chancmd, chancmd_r = mbx_init()
-    logicals_init()
     run(chan, chancmd, chancmd_r)