LG killed its 360 camera after only 4 years - here's how to get it back

by @edent | , , , , | Read ~122 times.

Four years ago, I reviewed the LG-R105 360 Camera. It's a pretty nifty bit of hardware. Sadly, LG have decided that they don't want to support it any more. They already got your money, so fuck you for expecting any further updates.

Here's their message:

We express a sincere gratitude for your patronage to LG 360 CAM Manager Service.
Due to changes in our operation policies, LG 360 CAM Manager Service via mobile applications will be terminated as of June 20, 2020.

Well, that's a load of bollocks, isn't it! Here's how you can continue using the camera on modern versions of Android - and connect to it on Linux.

Get The App

LG have removed it from Google Play. They could have left it there, but they didn't. But the Internet never forgets. So you can download the final version from APK Pure.

Copy the APK to your phone and install it. You can read the instructions to see how the app works.

If you're lucky, everything will just work. If not, read on…

Reset the camera

Charge the camera via USB-C. Turn it on by holding the power button for 4 seconds. After all the lights have stopped flashing, simultaneously hold down power and shutter for about 12 seconds. You'll get an assortment of flashy lights and sounds. This is the camera resetting. You may need to turn it off and on again.

Go into the app, and search for your device. Click on the device it finds.

Now, go to your phone's WiFi settings. You should see a new network called something like LGR105_123456.OSC. Connect to it.

The password will be 00123456 - so 00 plus the last 6 numbers of the Access Point name. Secure!

You can now go back to the app and use it as per normal.

Root it!

Oh yes 😁 using LGLAF you can force the camera into ADB debugging mode. You will also need to install PyUSB.

As per these instructions:

  1. Turn off camera by holding the power button until it beeps forlornly. Keep holding it down until the double LEDs on the side stop flashing.
  2. Plug a USB cable into a computer, but do not connect the camera
  3. Press and hold the shutter button while plugging the USB-C into the camera
  4. Keep holding the shutter button down until led turns blue
  5. In a terminal, type python lglaf.py --cr
  6. Type setprop persist.sys.usb.config mtp,adb
  7. Type exit and unplug camera
  8. Hold power button down until the blue LED goes off
  9. Hold power button to turn on the camera
  10. Plug camera back into USB-C
  11. On computer, type adb devices and you should see the camera

Now, using something like scrcpy you can connect to the camera and use it just like an Android phone!

Screenshot of an Android device with lots of debug options.

It acts just like a normal Android device - you have access to all the settings, developer mode, etc.
The Android "about phone" screen.

HTTP Requests

Once you've got access to the camera, you can turn on its WiFi and connect to your home network. As per these helpful instructions you can then use the built in OCS API.

For example, sending a HTTP GET to http://192.168.123.456:6624/osc/info will get you back:

{
  "manufacturer": "LGE",
  "model": "LG-R105",
  "serialNumber": "123456",
  "firmwareVersion": "R10510l",
  "supportUrl": "developer.lge.com/friends",
  "endpoints": {
    "httpPort": 6624,
    "httpUpdatesPort": 6624
  },
  "gps": false,
  "gyro": true,
  "uptime": 18,
  "api": [
    "/osc/checkForUpdates",
    "/osc/commands/execute",
    "/osc/commands/status",
    "/osc/info",
    "/osc/state"
  ],
  "apiLevel": [
    1,
    2
  ]
}

To take a photo, run:
curl -X POST http://192.168.123.456:6624/osc/commands/execute -H 'Content-Type: application/json' -d '{"name": "camera.takePicture"}'
that will save it on the camera's SD card.

To get a photo from the camera, run:
curl -X POST http://192.168.123.456:6624/osc/commands/execute -H 'Content-Type: application/json' -d '{"name": "camera.getLivePreview"}' --output test.jpg

I haven't figured out 360 streaming (if it is even possible) but you can get a preview of one of the cameras:

To start a session, run:
curl -X POST http://192.168.123.456:6624/osc/commands/execute -H 'Content-Type: application/json' -d '{"name": "camera.startSession"}'
To start a stream, run:
curl -X POST http://192.168.123.456:6624/osc/commands/execute -H 'Content-Type: application/json' -d '{"name": "camera._startPreview", "parameters": {"sessionId": "123"}}'

You will get back:

{
  "results": {
    "_previewUri": "udp://:1234"
  },
  "name": "camera._startPreview",
  "state": "done"
}

Run VLC and open the network stream udp://:1234 and you'll get a low-resolution preview of what the camera is seeing.

You can see more commands on the Open Spherical Camera API page.

Full list of commands

By decompiling the APK, I was able to extract these available commands. Anything which starts with _ is a manufacturer specific command, so won't work on other OSC cameras.

  • camera._getRecordingStatus
  • camera._getThumbnail
  • camera._getVideo
  • camera._listAll
  • camera._liveSnapshot
  • camera._manualMetaData
  • camera._pauseRecording
  • camera._resumeRecording
  • camera._startPreview
  • camera._startStillPreview
  • camera._stopPreview
  • camera._stopStillPreview
  • camera._updateTimer
  • camera.closeSession
  • camera.delete
  • camera.getFile
  • camera.getImage
  • camera.getMetadata
  • camera.getOptions
  • camera.listFiles
  • camera.setOptions
  • camera.startCapture
  • camera.startSession
  • camera.stopCapture
  • camera.takePicture
  • camera.updateSession

Enjoy!


Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: