camera.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. const axios = require('axios');
  2. const http = require('http');
  3. const { net } = require('electron');
  4. const { post, get: requestGet } = require('./request')
  5. const { spawn, exec } = require('child_process');
  6. //
  7. const baseURL = 'http://localhost:5513/';
  8. // 创建 Axios 实例
  9. const service = axios.create({
  10. baseURL:baseURL,
  11. timeout: 60000,
  12. });
  13. // 封装 GET 方法
  14. function get(config = { url: '' }) {
  15. return service.get(config.url, {
  16. insecureHTTPParser: true,
  17. timeout: config.timeout || 60000,
  18. });
  19. }
  20. async function fetchExampleData(url) {
  21. return new Promise((resolve, reject) => {
  22. const request = net.request({
  23. method: 'GET',
  24. url: baseURL+url
  25. });
  26. request.on('response', (response) => {
  27. let data = '';
  28. response.on('data', (chunk) => {
  29. data += chunk;
  30. });
  31. response.on('end', () => {
  32. try {
  33. resolve(data);
  34. } catch (error) {
  35. console.error('Error parsing data:', error);
  36. reject(error);
  37. }
  38. });
  39. });
  40. request.on('error', (error) => {
  41. console.error('Request error:', error);
  42. reject(error);
  43. });
  44. request.end();
  45. });
  46. }
  47. const socket = require('../utils/socket')
  48. const pySocket = new socket()
  49. const { readConfigFile } = require('../utils/config');
  50. module.exports = {
  51. async liveShow(point_name = 'A'){
  52. if(readConfigFile().controlType === 'digiCamControl'){
  53. return get({
  54. url: '?CMD=LiveViewWnd_Show'
  55. })
  56. }else{
  57. await pySocket.sendMessage(JSON.stringify({
  58. type: 'smart_shooter_enable_preview',
  59. data:{
  60. value:true,
  61. point_name: point_name
  62. }
  63. }))
  64. return new Promise(async (resolve, reject) => {
  65. pySocket.onSocketMessage('smart_shooter_enable_preview',(message)=>{
  66. resolve(message)
  67. })
  68. })
  69. }
  70. },
  71. async liveHide(point_name = 'A'){
  72. if(readConfigFile().controlType === 'digiCamControl'){
  73. return get({
  74. url: '?CMD=LiveViewWnd_Hide'
  75. })
  76. }else{
  77. await pySocket.sendMessage(JSON.stringify({
  78. type: 'smart_shooter_enable_preview',
  79. data:{
  80. value:false,
  81. point_name: point_name
  82. }
  83. }))
  84. return new Promise(async (resolve, reject) => {
  85. pySocket.onSocketMessage('smart_shooter_enable_preview',(message)=>{
  86. resolve(message)
  87. })
  88. })
  89. }
  90. },
  91. captureLive(){
  92. return get({
  93. url: '?CMD=LiveView_Capture'
  94. })
  95. },
  96. capture(){
  97. return get({
  98. url: '?CMD=Capture'
  99. })
  100. },
  101. CMD(cmd){
  102. return get({
  103. url: '?CMD='+cmd
  104. })
  105. },
  106. getParams(params){
  107. return fetchExampleData(`?slc=get&param1=${params}`)
  108. },
  109. setParams(params){
  110. return get({
  111. url: `?slc=set&param1=${params.key}&param2=${params.value}`
  112. })
  113. },
  114. closeOtherWindow(){
  115. return post({
  116. url: '/close_other_window',
  117. })
  118. },
  119. async minimizeSmartShooter(){
  120. return requestGet({
  121. url: '/minimize_window?window_title=Smart%20Shoote',
  122. })
  123. },
  124. async checkCamera(){
  125. if(readConfigFile().controlType === 'digiCamControl'){
  126. return fetchExampleData(`?slc=get&param1=iso`)
  127. }else {
  128. await pySocket.sendMessage(JSON.stringify({
  129. type: 'smart_shooter_getinfo',
  130. data:{}
  131. }))
  132. return new Promise(async (resolve, reject) => {
  133. pySocket.onSocketMessage('smart_shooter_getinfo',(message)=>{
  134. resolve(message)
  135. })
  136. })
  137. }
  138. }
  139. }
  140. /*
  141. *
  142. * 设置 iso
  143. * 光圈 aperture
  144. * 拍摄模式 mode
  145. * 快门速度 shutterSpeed
  146. * 白平衡 whitebalance
  147. * 曝光补偿 ExposureCompensation
  148. * 对焦模式 focusmode
  149. *
  150. *folder 文件夹
  151. 曝光度:exposure
  152. 压缩:compression
  153. 测光点:metering
  154. * */