wdm.h 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. #pragma once
  2. /****************************
  3. * CONTROLS *
  4. ****************************/
  5. static int webcamSetControlCallback_wdm( struct v4l2_ctrl* );
  6. static const struct v4l2_ctrl_ops webcamControlOps_wdm = {
  7. .s_ctrl = webcamSetControlCallback_wdm,
  8. };
  9. //TODO: Merge these into V4L API.
  10. #define V4L2_CID_GREEN_BALANCE (V4L2_CID_BASE+31)
  11. #define V4L2_CID_NIGHT_MODE (V4L2_CID_BASE+33)
  12. /* 2007-09-09 TJ Ensure names are identical to uvcvideo,
  13. * so user applications aren't confused by differing results for UVC queries */
  14. /* TODO: Use our own internal control IDs, instead of crap unmerged ones. */
  15. static struct webcam_control r5u870_wdm_ctrls[] = {
  16. [R5U870_WDM_CTRL_BRIGHTNESS] = {
  17. .control = {
  18. .ops = &webcamControlOps_wdm,
  19. .id = V4L2_CID_BRIGHTNESS,
  20. .type = V4L2_CTRL_TYPE_INTEGER,
  21. .name = "Brightness",
  22. .min = 0,
  23. .max = 127,
  24. .step = 1,
  25. .def = 63,
  26. .flags = V4L2_CTRL_FLAG_SLIDER
  27. },
  28. .reg = R5U870_REG_BRIGHTNESS,
  29. },
  30. [R5U870_WDM_CTRL_CONTRAST] = {
  31. .control = {
  32. .ops = &webcamControlOps_wdm,
  33. .id = V4L2_CID_CONTRAST,
  34. .type = V4L2_CTRL_TYPE_INTEGER,
  35. .name = "Contrast",
  36. .min = 0,
  37. .max = 127,
  38. .step = 1,
  39. .def = 63,
  40. .flags = V4L2_CTRL_FLAG_SLIDER
  41. },
  42. .reg = R5U870_REG_CONTRAST,
  43. },
  44. [R5U870_WDM_CTRL_SATURATION] = {
  45. .control = {
  46. .ops = &webcamControlOps_wdm,
  47. .id = V4L2_CID_SATURATION,
  48. .type = V4L2_CTRL_TYPE_INTEGER,
  49. .name = "Saturation",
  50. .min = 0,
  51. .max = 127,
  52. .step = 1,
  53. .def = 63,
  54. .flags = V4L2_CTRL_FLAG_SLIDER
  55. },
  56. .reg = R5U870_REG_SATURATION,
  57. },
  58. [R5U870_WDM_CTRL_SHARPNESS] = {
  59. .control = {
  60. .ops = &webcamControlOps_wdm,
  61. .id = V4L2_CID_SHARPNESS,
  62. .type = V4L2_CTRL_TYPE_INTEGER,
  63. .name = "Sharpness",
  64. .min = 0,
  65. .max = 127,
  66. .step = 1,
  67. .def = 63,
  68. .flags = V4L2_CTRL_FLAG_SLIDER
  69. },
  70. .reg = R5U870_REG_SHARPNESS,
  71. },
  72. [R5U870_WDM_CTRL_HUE] = {
  73. .control = {
  74. .ops = &webcamControlOps_wdm,
  75. .id = V4L2_CID_HUE,
  76. .type = V4L2_CTRL_TYPE_INTEGER,
  77. .name = "Hue",
  78. .min = -180,
  79. .max = 180,
  80. .step = 1,
  81. .def = 0,
  82. .flags = V4L2_CTRL_FLAG_SLIDER
  83. },
  84. .reg = R5U870_REG_HUE,
  85. },
  86. [R5U870_WDM_CTRL_GAMMA] = {
  87. .control = {
  88. .ops = &webcamControlOps_wdm,
  89. .id = V4L2_CID_GAMMA,
  90. .type = V4L2_CTRL_TYPE_INTEGER,
  91. .name = "Gamma",
  92. .min = 0,
  93. .max = 500,
  94. .step = 1,
  95. .def = 100,
  96. .flags = V4L2_CTRL_FLAG_SLIDER
  97. },
  98. .reg = R5U870_REG_GAMMA,
  99. },
  100. [R5U870_WDM_CTRL_BACKLIGHT_COMP_500] = {
  101. .control = {
  102. .ops = &webcamControlOps_wdm,
  103. .id = V4L2_CID_BACKLIGHT_COMPENSATION,
  104. .type = V4L2_CTRL_TYPE_INTEGER,
  105. .name = "Backlight Compensation",
  106. .min = 0,
  107. .max = 500,
  108. .step = 1,
  109. .def = 250,
  110. .flags = V4L2_CTRL_FLAG_SLIDER
  111. },
  112. .reg = R5U870_REG_BACKLIGHT_COMP,
  113. },
  114. [R5U870_WDM_CTRL_BACKLIGHT_COMP_500_DEF1] = {
  115. .control = {
  116. .ops = &webcamControlOps_wdm,
  117. .id = V4L2_CID_BACKLIGHT_COMPENSATION,
  118. .type = V4L2_CTRL_TYPE_INTEGER,
  119. .name = "Backlight Compensation",
  120. .min = 0,
  121. .max = 500,
  122. .step = 1,
  123. .def = 1,
  124. .flags = V4L2_CTRL_FLAG_SLIDER
  125. },
  126. .reg = R5U870_REG_BACKLIGHT_COMP,
  127. },
  128. [R5U870_WDM_CTRL_BACKLIGHT_COMP_X1834] = {
  129. .control = {
  130. .ops = &webcamControlOps_wdm,
  131. .id = V4L2_CID_BACKLIGHT_COMPENSATION,
  132. .type = V4L2_CTRL_TYPE_INTEGER,
  133. .name = "Backlight Compensation",
  134. .min = 0,
  135. .max = 2,
  136. .step = 1,
  137. .def = 1,
  138. .flags = V4L2_CTRL_FLAG_SLIDER
  139. },
  140. .reg = R5U870_REG_BACKLIGHT_COMP_2,
  141. },
  142. [R5U870_WDM_CTRL_WB_RED] = {
  143. .control = {
  144. .ops = &webcamControlOps_wdm,
  145. .id = V4L2_CID_RED_BALANCE,
  146. .type = V4L2_CTRL_TYPE_INTEGER,
  147. .name = "White Balance Red",
  148. .min = 0,
  149. .max = 255,
  150. .step = 1,
  151. .def = 127,
  152. .flags = 0
  153. },
  154. //.query_fn = r5u870_query_ctrl,
  155. .reg = R5U870_REG_WB_RED_EX,
  156. //.auto_offset = offsetof(struct driverInstance, vh_auto_wb)
  157. },
  158. [R5U870_WDM_CTRL_WB_GREEN] = {
  159. .control = {
  160. .ops = &webcamControlOps_wdm,
  161. .id = V4L2_CID_GREEN_BALANCE,
  162. .type = V4L2_CTRL_TYPE_INTEGER,
  163. .name = "White Balance Green",
  164. .min = 0,
  165. .max = 255,
  166. .step = 1,
  167. .def = 127,
  168. .flags = 0
  169. },
  170. //.query_fn = r5u870_query_ctrl,
  171. .reg = R5U870_REG_WB_GREEN_EX,
  172. //.auto_offset = offsetof(struct driverInstance, vh_auto_wb)
  173. },
  174. [R5U870_WDM_CTRL_WB_BLUE] = {
  175. .control = {
  176. .ops = &webcamControlOps_wdm,
  177. .id = V4L2_CID_BLUE_BALANCE,
  178. .type = V4L2_CTRL_TYPE_INTEGER,
  179. .name = "White Balance Blue",
  180. .min = 0,
  181. .max = 255,
  182. .step = 1,
  183. .def = 127,
  184. .flags = 0
  185. },
  186. //.query_fn = r5u870_query_ctrl,
  187. .reg = R5U870_REG_WB_BLUE_EX,
  188. //.auto_offset = offsetof(struct driverInstance, vh_auto_wb)
  189. },
  190. [R5U870_WDM_CTRL_WB_AUTO] = {
  191. .control = {
  192. .ops = &webcamControlOps_wdm,
  193. .id = V4L2_CID_AUTO_WHITE_BALANCE,
  194. .type = V4L2_CTRL_TYPE_BOOLEAN,
  195. .name = "Auto White Balance",
  196. .min = 0,
  197. .max = 1,
  198. .step = 1,
  199. .def = 1,
  200. .flags = V4L2_CTRL_FLAG_UPDATE
  201. },
  202. .reg = R5U870_REG_WB_AUTO_EX,
  203. //.is_auto = 1,
  204. //.val_offset = offsetof(struct driverInstance, vh_auto_wb)
  205. },
  206. [R5U870_WDM_CTRL_AUTO_EXPOSURE] = {
  207. .control = {
  208. .ops = &webcamControlOps_wdm,
  209. .id = V4L2_CID_EXPOSURE_AUTO,
  210. .type = V4L2_CTRL_TYPE_BOOLEAN,
  211. .name = "Auto Exposure Control",
  212. .min = 0,
  213. .max = 1,
  214. .step = 1,
  215. .def = 1,
  216. .flags = 0
  217. },
  218. .reg = R5U870_REG_AEC_EX,
  219. //.is_auto = 1,
  220. //.val_offset = offsetof(struct driverInstance, vh_aec)
  221. },
  222. [R5U870_WDM_CTRL_EXPOSURE] = {
  223. .control = {
  224. .ops = &webcamControlOps_wdm,
  225. .id = V4L2_CID_EXPOSURE,
  226. .type = V4L2_CTRL_TYPE_INTEGER,
  227. .name = "Exposure",
  228. .min = 0,
  229. .max = 511,
  230. .step = 1,
  231. .def = 255,
  232. .flags = 0
  233. },
  234. //.query_fn = r5u870_query_ctrl,
  235. .reg = R5U870_REG_EXPOSURE_EX,
  236. //.auto_offset = offsetof(struct driverInstance, vh_aec)
  237. },
  238. [R5U870_WDM_CTRL_AUTO_GAIN] = {
  239. .control = {
  240. .ops = &webcamControlOps_wdm,
  241. .id = V4L2_CID_AUTOGAIN,
  242. .type = V4L2_CTRL_TYPE_BOOLEAN,
  243. .name = "Auto Gain Control",
  244. .min = 0,
  245. .max = 1,
  246. .step = 1,
  247. .def = 1,
  248. .flags = 0
  249. },
  250. .reg = R5U870_REG_AGC_EX,
  251. //.is_auto = 1,
  252. //.val_offset = offsetof(struct driverInstance, vh_agc)
  253. },
  254. [R5U870_WDM_CTRL_GAIN] = {
  255. .control = {
  256. .ops = &webcamControlOps_wdm,
  257. .id = V4L2_CID_GAIN,
  258. .type = V4L2_CTRL_TYPE_INTEGER,
  259. .name = "Gain",
  260. .min = 0,
  261. .max = 127,
  262. .step = 1,
  263. .def = 63,
  264. .flags = 0
  265. },
  266. //.query_fn = r5u870_query_ctrl,
  267. .reg = R5U870_REG_GAIN_EX,
  268. //.auto_offset = offsetof(struct driverInstance, vh_agc)
  269. },
  270. [R5U870_WDM_CTRL_POWERLINE] = {
  271. .control = {
  272. .ops = &webcamControlOps_wdm,
  273. .id = V4L2_CID_POWER_LINE_FREQUENCY,
  274. .type = V4L2_CTRL_TYPE_MENU,
  275. .name = "Power Line Frequency",
  276. .min = 0,
  277. .max = 2,
  278. //.step = 1,
  279. .def = 0,
  280. .flags = 0,
  281. .qmenu = powerline_frequency_menu_item_names
  282. },
  283. .reg = R5U870_REG_POWERLINE_EX,
  284. },
  285. [R5U870_WDM_CTRL_VFLIP] = {
  286. .control = {
  287. .ops = &webcamControlOps_wdm,
  288. .id = V4L2_CID_VFLIP,
  289. .type = V4L2_CTRL_TYPE_BOOLEAN,
  290. .name = "V-Flip",
  291. .min = 0,
  292. .max = 1,
  293. .step = 1,
  294. .def = 0,
  295. .flags = 0
  296. },
  297. .reg = R5U870_REG_VFLIP_EX,
  298. },
  299. [R5U870_WDM_CTRL_VFLIP_DEFAULTON] = {
  300. .control = {
  301. .ops = &webcamControlOps_wdm,
  302. .id = V4L2_CID_VFLIP,
  303. .type = V4L2_CTRL_TYPE_BOOLEAN,
  304. .name = "V-Flip",
  305. .min = 0,
  306. .max = 1,
  307. .step = 1,
  308. .def = 1,
  309. .flags = 0
  310. },
  311. .reg = R5U870_REG_VFLIP_EX,
  312. },
  313. [R5U870_WDM_CTRL_HFLIP] = {
  314. .control = {
  315. .ops = &webcamControlOps_wdm,
  316. .id = V4L2_CID_HFLIP,
  317. .type = V4L2_CTRL_TYPE_BOOLEAN,
  318. .name = "H-Flip",
  319. .min = 0,
  320. .max = 1,
  321. .step = 1,
  322. .def = 0,
  323. .flags = 0
  324. },
  325. .reg = R5U870_REG_HFLIP_EX,
  326. },
  327. [R5U870_WDM_CTRL_PRIVACY] = {
  328. .control = {
  329. .ops = &webcamControlOps_wdm,
  330. .id = V4L2_CID_PRIVACY,
  331. .type = V4L2_CTRL_TYPE_BOOLEAN,
  332. .name = "Privacy",
  333. .min = 0,
  334. .max = 1,
  335. .step = 1,
  336. .def = 0,
  337. .flags = 0
  338. },
  339. .reg = R5U870_REG_PRIVACY_EX,
  340. },
  341. [R5U870_WDM_CTRL_NIGHTMODE] = {
  342. .control = {
  343. .ops = &webcamControlOps_wdm,
  344. .id = V4L2_CID_NIGHT_MODE,
  345. .type = V4L2_CTRL_TYPE_BOOLEAN,
  346. .name = "Night Mode",
  347. .min = 0,
  348. .max = 1,
  349. .step = 1,
  350. .def = 0,
  351. .flags = 0
  352. },
  353. //2007-09-09 TJ Add missing IOCTL query
  354. //.query_fn = r5u870_query_ctrl,
  355. .reg = R5U870_REG_NIGHT_MODE_EX,
  356. },
  357. };