camera.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. 'use strict';
  2. const { Controller } = require('ee-core');
  3. const Log = require('ee-core/log');
  4. const { checkCameraControlCmdExists, closeCameraControlTips} = require('../utils/camera');
  5. const {
  6. checkCamera,
  7. liveShow, liveHide, setParams, capture, getParams,CMD,captureLive,closeOtherWindow } = require('../api/camera');
  8. const { readConfigFile } = require('../utils/config');
  9. let isOPen = true
  10. class CameraController extends Controller {
  11. constructor(ctx) {
  12. super(ctx);
  13. }
  14. async connect() {
  15. try {
  16. if(readConfigFile().type === 'digiCamContro'){
  17. await getParams('iso').catch(e=>{
  18. isOPen = false;
  19. })
  20. if(!isOPen){
  21. await checkCameraControlCmdExists(digiCamControlPath)
  22. await CMD('All_Minimize')
  23. await closeCameraControlTips()
  24. isOPen = true
  25. }
  26. const res = await getParams('iso')
  27. if(res === '未将对象引用设置到对象的实例。'){
  28. return {
  29. status:-1,
  30. msg:"相机未连接,请链接相机。",
  31. }
  32. }
  33. return {
  34. status:2,
  35. msg:res,
  36. }
  37. }else{
  38. let res = await checkCamera().catch(e=>{
  39. isOPen = false;
  40. })
  41. if(res?.device_status === -1 ){
  42. isOPen = false;
  43. await checkCameraControlCmdExists()
  44. isOPen = true
  45. await new Promise(resolve => setTimeout(resolve, 10000)); // 等待5秒
  46. res = await checkCamera()
  47. }
  48. if(res?.device_status === 2){
  49. isOPen = true;
  50. return {
  51. ...res,
  52. status:2
  53. };
  54. }
  55. }
  56. } catch (error) {
  57. let msg = '请安装digiCamControl软件,并打开digiCamControl软件的web服务,端口为5513'
  58. if(readConfigFile().controlType === 'SmartShooter') msg = '请安装SmartShooter5软件'
  59. return {
  60. status:-1,
  61. msg,
  62. }
  63. }
  64. }
  65. /**
  66. * 启动预览
  67. */
  68. async liveShow() {
  69. try {
  70. await liveShow();
  71. if(readConfigFile().type === 'digiCamContro'){
  72. await CMD('All_Minimize')
  73. }
  74. return true;
  75. } catch (error) {
  76. console.error('eeee启动直播失败:', error);
  77. throw error;
  78. }
  79. }
  80. /**
  81. * 结束预览
  82. */
  83. async liveHide() {
  84. try {
  85. await liveHide();
  86. return true;
  87. } catch (error) {
  88. throw error;
  89. }
  90. }
  91. /**
  92. * 设置参数
  93. */
  94. async setParams(params) {
  95. try {
  96. console.log(params);
  97. await setParams(params);
  98. return true;
  99. } catch (error) {
  100. throw error;
  101. }
  102. }
  103. async takePictures(isLive=true) {
  104. try {
  105. if(isLive){
  106. await captureLive();
  107. }else{
  108. await capture();
  109. }
  110. return true;
  111. } catch (error) {
  112. throw error;
  113. }
  114. }
  115. // 示例:使用 fetchData 函数进行 HTTP 请求
  116. async fetchExampleData() {
  117. const options = {
  118. hostname: 'example.com',
  119. port: 443,
  120. path: '/api/data',
  121. method: 'GET'
  122. };
  123. try {
  124. const data = await fetchData(options);
  125. console.log('Fetched data:', data);
  126. return data;
  127. } catch (error) {
  128. console.error('Fetch data failed:', error);
  129. throw error;
  130. }
  131. }
  132. }
  133. CameraController.toString = () => '[class CameraController]';
  134. module.exports = CameraController;