import config
import mediafiles
import mjpgclient
+import mmalctl
import monitor
import motionctl
import powerctl
if utils.is_mmal_camera(data):
configured_devices.add(data['mmalcam_name'])
- if "vc.ril.camera" not in configured_devices:
- cameras = [{'id': "vc.ril.camera", 'name': "VideoCore Camera (vc.ril.camera)"}]
-
- else:
- cameras = []
+ cameras = [{'id': d[0], 'name': d[1]} for d in mmalctl.list_devices()
+ if (d[0] not in configured_devices)]
self.finish_json({'cameras': cameras})
--- /dev/null
+
+# Copyright (c) 2013 Calin Crisan
+# This file is part of motionEye.
+#
+# motionEye is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import logging
+import subprocess
+
+import utils
+
+
+def list_devices():
+ # currently MMAL support is designed specifically for the RPi;
+ # therefore we can rely on the vcgencmd to report MMAL cameras
+
+ logging.debug('listing MMAL devices')
+
+ try:
+ binary = subprocess.check_output(['which', 'vcgencmd'], stderr=utils.DEV_NULL).strip()
+
+ except subprocess.CalledProcessError: # not found
+ return []
+
+ try:
+ support = subprocess.check_output([binary, 'get_camera']).strip()
+
+ except subprocess.CalledProcessError: # not found
+ return []
+
+ d = dict(p.split('=', 1) for p in support.split())
+ if d.get('detected') == d.get('supported') == '1':
+ logging.debug('MMAL camera detected')
+ return [('vc.ril.camera', 'VideoCore Camera')]
+
+ return []
def list_devices():
global _resolutions_cache, _ctrls_cache, _ctrl_values_cache
- logging.debug('listing v4l2 devices...')
+ logging.debug('listing V4L2 devices')
try:
output = ''
devices.append((device, persistent_device, name))
logging.debug('found device %(name)s: %(device)s, %(persistent_device)s' % {
- 'name': name, 'device': device, 'persistent_device': persistent_device})
+ 'name': name, 'device': device, 'persistent_device': persistent_device})
else:
name = line.split('(')[0].strip()