Recalbox Forum

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • recalbox.com
    • Gitlab repository
    • Documentation
    • Discord

    Recalbox API not starting - RecalboxOS 4.0.1

    Recalbox General
    recalbox api starting 4.0.1
    3
    18
    6770
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • thehive
      thehive last edited by

      Recalbox API not starting - RecalboxOS 4.0.1

      Much like this problem
      https://github.com/recalbox/recalbox-os/issues/1009

      The PM2 process just hangs. Although this fix appears to be present in my 4.0.1 build.

      https://github.com/recalbox/recalbox-buildroot/pull/432

      The log for PM2 indicates an error;

      2017-04-24 16:35:33: [PM2][WORKER] Started with refreshing interval: 30000
      2017-04-24 16:35:33: [[[[ PM2/God daemon launched ]]]]
      2017-04-24 16:35:33: BUS system [READY] on port /var/.pm2/pub.sock
      2017-04-24 16:35:33: RPC interface [READY] on port /var/.pm2/rpc.sock
      2017-04-24 16:35:33: Starting execution sequence in -cluster mode- for app name:api id:0
      2017-04-24 16:35:34: App name:api id:0 online
      2017-04-24 16:35:34: [PM2] Error caught by domain:
      TypeError: obj.hasOwnProperty is not a function
      at safeDeepClone (/usr/recalbox-api/node_modules/pm2/lib/tools/safeclonedeep.js:49:13)
      at safeDeepClone (/usr/recalbox-api/node_modules/pm2/lib/tools/safeclonedeep.js:53:22)
      at safeDeepClone (/usr/recalbox-api/node_modules/pm2/lib/tools/safeclonedeep.js:53:22)
      at cloneWrap (/usr/recalbox-api/node_modules/pm2/lib/tools/safeclonedeep.js:65:10)
      at Object.clone (/usr/recalbox-api/node_modules/pm2/lib/Utility.js:42:12)
      at Object.Common.deepCopy.Common.serialize.Common.clone (/usr/recalbox-api/node_modules/pm2/lib/Common.js:218:18)
      at /usr/recalbox-api/node_modules/pm2/lib/God.js:372:25
      at Worker.cluOnline (/usr/recalbox-api/node_modules/pm2/lib/God.js:186:17)
      at Worker.g (events.js:291:16)
      at emitNone (events.js:86:13)
      2017-04-24 16:35:34: [PM2] Trying to update PM2...
      2017-04-24 16:35:34: App name:api id:0 disconnected
      2017-04-24 16:35:34: App [api] with id [0] and pid [1294], exited with code [0] via signal [SIGINT]
      2017-04-24 16:35:34: Starting execution sequence in -cluster mode- for app name:api id:0
      2017-04-24 16:35:35: App name:api id:0 online
      2017-04-24 16:35:35: App name:api id:0 disconnected
      2017-04-24 16:35:35: App [api] with id [0] and pid [1314], exited with code [0] via signal [SIGINT]
      2017-04-24 16:35:35: Starting execution sequence in -cluster mode- for app name:api id:0
      Be sure to have the latest version by doing npm install pm2@latest -g before doing this procedure.
      /usr/recalbox-api/node_modules/pm2/lib/tools/safeclonedeep.js:49
      if (obj.hasOwnProperty(attr)) {
      ^

      TypeError: obj.hasOwnProperty is not a function
      at safeDeepClone (/usr/recalbox-api/node_modules/pm2/lib/tools/safeclonedeep.js:49:13)
      at safeDeepClone (/usr/recalbox-api/node_modules/pm2/lib/tools/safeclonedeep.js:53:22)
      at safeDeepClone (/usr/recalbox-api/node_modules/pm2/lib/tools/safeclonedeep.js:53:22)
      at cloneWrap (/usr/recalbox-api/node_modules/pm2/lib/tools/safeclonedeep.js:65:10)
      at Object.clone (/usr/recalbox-api/node_modules/pm2/lib/Utility.js:42:12)
      at Object.Common.deepCopy.Common.serialize.Common.clone (/usr/recalbox-api/node_modules/pm2/lib/Common.js:218:18)
      at Object.getFormatedProcesses (/usr/recalbox-api/node_modules/pm2/lib/God/Methods.js:68:21)
      at getMonitorData (/usr/recalbox-api/node_modules/pm2/lib/God/ActionMethods.js:42:25)
      at Server.onmessage (/usr/recalbox-api/node_modules/pm2-axon-rpc/lib/server.js:105:6)
      at emitTwo (events.js:106:13)

      1 Reply Last reply Reply Quote 0
      • Substring
        Substring last edited by

        Recalbox 4.0.1 ? are you sure ? Not recalbox 4.1 ?

        Former dev - Please reply with @substring so that i am notified when you answer me
        Ex dev - Merci de me répondre en utilisant @substring pour que je sois notifé

        1 Reply Last reply Reply Quote 0
        • thehive
          thehive last edited by thehive

          @substring Sorry, I can't read, or type or both.
          It's 4.1.0

          Substring 1 Reply Last reply Reply Quote 0
          • Substring
            Substring @thehive last edited by

            @thehive cuz we switched to nodejs 6.9.1 on 4.1, and the API just won't work anymore with it.

            Former dev - Please reply with @substring so that i am notified when you answer me
            Ex dev - Merci de me répondre en utilisant @substring pour que je sois notifé

            thehive 1 Reply Last reply Reply Quote 0
            • thehive
              thehive @Substring last edited by

              @Substring

              I built this myself from source as I've added some tweaks to get Daphne working.

              Would updating PM2 to the latest version resolve this?

              Substring 1 Reply Last reply Reply Quote 0
              • Substring
                Substring @thehive last edited by Substring

                @thehive /me knows definitely nothing to nodejs, npm, PM2 and such stuff ... And to tell you the truth, I'd rather get rid of PM2 and start the api with the nodejs bin (that's how recalbox-manager2 works, see /etc/init.d/S94manager)

                I guess you do need the API ?

                Concerning Daphne, have you made a package ? the recalbox-configgen part ? are you willing to contribute to the project ? 🙂

                Former dev - Please reply with @substring so that i am notified when you answer me
                Ex dev - Merci de me répondre en utilisant @substring pour que je sois notifé

                thehive 1 Reply Last reply Reply Quote 0
                • kjbstar
                  kjbstar last edited by

                  Anyway, some commands of the API are broken, so don't have regrets.
                  For example, if you planned to launch games through the API, forget it: if I remember well, ES is not re-launched when exiting a game.

                  Recalbox 4.0.2 sur Raspberry Pi 2
                  Recalboy sur Raspberry Pi Zero

                  1 Reply Last reply Reply Quote 0
                  • thehive
                    thehive @Substring last edited by

                    @Substring I've modified 2 or three configgen scripts, yes. It's quite a hack at the moment as there's no way of providing the many parameters that you can supply to Daphne - I just pass a set that suit me - so some hard coding sadly.
                    I would certainly be willing to help get this implemented properly, yes.

                    Regarding the API, this is for something else I was working on. I was hoping I could get it working in 4.1 and you might know of a quick(ish) fix, but if not I suppose I could drop back to 4.0.1.

                    Substring 1 Reply Last reply Reply Quote 0
                    • Substring
                      Substring @thehive last edited by

                      @thehive I pinged the api dev, no answer today, I'll try again tomorrow.

                      Regarding Daphne, i never tried to compile it. I see it uses SDL1, which saddens me quite much, but ok

                      Regarding configgen : most part of it is to setup controllers, eventually tweak some config file, but that's all. It's a real pain when config files are not documented, as it's some try'n'die progression to find out.

                      But I'd be glad to give you a hand for a "proper" integration, Buildroot is quite of a monster, we don't get that many contributors 😮

                      Former dev - Please reply with @substring so that i am notified when you answer me
                      Ex dev - Merci de me répondre en utilisant @substring pour que je sois notifé

                      thehive 1 Reply Last reply Reply Quote 0
                      • thehive
                        thehive @Substring last edited by

                        @Substring I will gather together what the information regarding what I've changed and we can discuss. I didn't take notes as I went along so I'll need to work backwards. I don't actually think I changed too much though.

                        As an aside, I took a look at S94manager and I see that it also uses the API in some instances (for example launching a ROM), so some of those things are also broken in 4.1.

                        I've being playing around with the API node module and it runs on 4.1 directly as a node process with just a few minor fixes to to the solfegejs node module.
                        I am going to patch S95api to start this process without PM2. If you'd like me to share the changes I'm happy to do so.

                        Substring 1 Reply Last reply Reply Quote 0
                        • Substring
                          Substring @thehive last edited by

                          @thehive I'd be very glad to review your PR 🙂

                          @thehive said in Recalbox API not starting - RecalboxOS 4.0.1:

                          As an aside, I took a look at S94manager and I see that it also uses the API in some instances (for example launching a ROM), so some of those things are also broken in 4.1

                          I'm not sure to understand what you mean ... The new manager (v2) can't launch roms, that feature has been disable as far as I remember (@DjLeChuck can you confirm ?). Because launching roms is a little more complex than that (need to launch them with configgen, make sure ES is not running as so far i haven't been able to externally put ES to hibernate while the emulator is running)

                          Former dev - Please reply with @substring so that i am notified when you answer me
                          Ex dev - Merci de me répondre en utilisant @substring pour que je sois notifé

                          thehive 1 Reply Last reply Reply Quote 0
                          • thehive
                            thehive @Substring last edited by

                            @Substring

                            I'm not sure to understand what you mean ... The new manager (v2) can't launch roms, that feature has been disable as far as I remember (@DjLeChuck can you confirm ?).

                            No, it's definitely not disabled, it's just broken, because the API is broken.
                            Now I've got the API working in 4.1 it will launch ROMS from within the V2 manager, but as @kjbstar pointed out, it fails to relaunch ES after the ROM is quit. I'm going to have a stab at fixing the way that the API handles ROM launching, because, as you point out, at the moment it's not performed by configgen.

                            kjbstar 1 Reply Last reply Reply Quote 0
                            • kjbstar
                              kjbstar @thehive last edited by

                              @thehive said in Recalbox API not starting - RecalboxOS 4.0.1:

                              I'm going to have a stab at fixing the way that the API handles ROM launching, because, as you point out, at the moment it's not performed by configgen.

                              Hmm, yes it is : https://github.com/recalbox/recalbox-api/blob/3aee79e43f60b59912a43b186f2d05afdad93085/config/config.js#L11
                              (or it's something else ?)

                              The complex stuff is about ES. Did not found neither how to handle it properly.

                              Recalbox 4.0.2 sur Raspberry Pi 2
                              Recalboy sur Raspberry Pi Zero

                              Substring 1 Reply Last reply Reply Quote 0
                              • Substring
                                Substring @kjbstar last edited by

                                @kjbstar to be honnest, the real deal is to make ES launch the rom for sooooo many reasons. The main one being that es knows how to launch properly configgen. I would dream of a dbus interface to tell es to launch a game, but that's sime complicated duty for my very lacking skills in C++.

                                The other trick i tried was linux signal handles to tell es to "hibernate" the same way it does when starting an emulator. Despite the "sleep" signal was working great, the wakeup was very painful, as es lost quite some textures. It would even crash after several launches.

                                Someone contacted me telle ng me he succeeded in adding a socket server in es to launch roms and it worked very good. He doesn't want to push his.commits because his code looks more like a proof of concept, but I do hope he'll contribute "soon" 🙂

                                Former dev - Please reply with @substring so that i am notified when you answer me
                                Ex dev - Merci de me répondre en utilisant @substring pour que je sois notifé

                                kjbstar 1 Reply Last reply Reply Quote 0
                                • kjbstar
                                  kjbstar @Substring last edited by

                                  @Substring said in Recalbox API not starting - RecalboxOS 4.0.1:

                                  @kjbstar to be honnest, the real deal is to make ES launch the rom for sooooo many reasons. The main one being that es knows how to launch properly configgen. I would dream of a dbus interface to tell es to launch a game, but that's sime complicated duty for my very lacking skills in C++.

                                  Yes that would be nice (and so logical finally).

                                  The other trick i tried was linux signal handles to tell es to "hibernate" the same way it does when starting an emulator. Despite the "sleep" signal was working great, the wakeup was very painful, as es lost quite some textures. It would even crash after several launches.

                                  Nice trick, I can imagine the disappointement during your tests...
                                  On my side I ended up to brutally kill it, then re-launch it (and not even with S31emulationstation... I had a weird bug - reminder: my project is external and in php ahah).

                                  Someone contacted me telle ng me he succeeded in adding a socket server in es to launch roms and it worked very good. He doesn't want to push his.commits because his code looks more like a proof of concept, but I do hope he'll contribute "soon" 🙂

                                  That would be great yes. Can't wait to test this 🙂

                                  Recalbox 4.0.2 sur Raspberry Pi 2
                                  Recalboy sur Raspberry Pi Zero

                                  1 Reply Last reply Reply Quote 0
                                  • Substring
                                    Substring last edited by Substring

                                    A few tries : using kill -STOP <pid> and kill -CONT <pid> does stop/resume ES. But it still gets inputs from joypads. But that's something i should be able to manage by patching ES. But using this method has drawbacks : the image is still displayed (so i guess it will conflict with emulators ... Maybe we can get around with chvt or openvt). I hope to have good news soon

                                    Edit: grrrrr .... SDL on pi doesn't use framebuffer, but GLES straight away; so playing with ttyX has no meaning ... I'm so disappointed ... But I still have ideas to try to make ES launch a rom (but i must admit it's more of some tricks than some pro programming)

                                    Former dev - Please reply with @substring so that i am notified when you answer me
                                    Ex dev - Merci de me répondre en utilisant @substring pour que je sois notifé

                                    1 Reply Last reply Reply Quote 0
                                    • Substring
                                      Substring last edited by

                                      Big thanks to @sevenx who gave me his code to add a socket server to ES and launch games through it. Looks like it runs rather fine after a few hours spent on it to improve and fix bugs. Once finished, i hope to have it accepted by his holyness DigitalLumberjack so that everyone can enjoy it.

                                      Now I'm dead tired, need some sleep

                                      Former dev - Please reply with @substring so that i am notified when you answer me
                                      Ex dev - Merci de me répondre en utilisant @substring pour que je sois notifé

                                      kjbstar 1 Reply Last reply Reply Quote 0
                                      • kjbstar
                                        kjbstar @Substring last edited by

                                        Glory to @sevenx and @Substring \o/

                                        4.1 will be awesome 🙂

                                        Recalbox 4.0.2 sur Raspberry Pi 2
                                        Recalboy sur Raspberry Pi Zero

                                        1 Reply Last reply Reply Quote 0
                                        • First post
                                          Last post

                                        Want to support us ?

                                        73
                                        Online

                                        99.0k
                                        Users

                                        28.1k
                                        Topics

                                        187.1k
                                        Posts

                                        Copyright © 2021 recalbox.com