rho-tau-extensions 5.5.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (661) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +2 -0
  3. data/LICENSE +21 -0
  4. data/README.md +6 -0
  5. data/Rakefile +90 -0
  6. data/libs/crosswalk.rb +2 -0
  7. data/libs/crosswalk/crosswalk.rb +2 -0
  8. data/libs/crosswalk/ext.yml +21 -0
  9. data/libs/crosswalk/ext/Crosswalk.xml +27 -0
  10. data/libs/crosswalk/ext/build +19 -0
  11. data/libs/crosswalk/ext/build.bat +29 -0
  12. data/libs/crosswalk/ext/platform/android/AndroidManifest.xml +9 -0
  13. data/libs/crosswalk/ext/platform/android/Rakefile +141 -0
  14. data/libs/crosswalk/ext/platform/android/adds/lib/armeabi/libxwalkcore.so +0 -0
  15. data/libs/crosswalk/ext/platform/android/adds/lib/armeabi/libxwalkdummy.so +0 -0
  16. data/libs/crosswalk/ext/platform/android/adds/lib/x86/libxwalkcore.so +0 -0
  17. data/libs/crosswalk/ext/platform/android/adds/lib/x86/libxwalkdummy.so +0 -0
  18. data/libs/crosswalk/ext/platform/android/adds/lib/xwalk_core_library_java.jar +0 -0
  19. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/bubble.9.png +0 -0
  20. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/bubble_arrow_up.png +0 -0
  21. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/color_picker_advanced_select_handle.png +0 -0
  22. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/crosswalk.png +0 -0
  23. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/dropdown_popup_background_down.9.png +0 -0
  24. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/dropdown_popup_background_up.9.png +0 -0
  25. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/ic_menu_share_holo_light.png +0 -0
  26. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/ic_search.png +0 -0
  27. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/ic_warning.png +0 -0
  28. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/ondemand_overlay.9.png +0 -0
  29. data/libs/crosswalk/ext/platform/android/adds/res/drawable-hdpi/verify_checkmark.png +0 -0
  30. data/libs/crosswalk/ext/platform/android/adds/res/drawable-ldpi/crosswalk.png +0 -0
  31. data/libs/crosswalk/ext/platform/android/adds/res/drawable-mdpi/crosswalk.png +0 -0
  32. data/libs/crosswalk/ext/platform/android/adds/res/drawable-v21/button_borderless_compat.xml +10 -0
  33. data/libs/crosswalk/ext/platform/android/adds/res/drawable-v21/button_compat.xml +9 -0
  34. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/bubble.9.png +0 -0
  35. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/bubble_arrow_up.png +0 -0
  36. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/color_picker_advanced_select_handle.png +0 -0
  37. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/crosswalk.png +0 -0
  38. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/dropdown_popup_background_down.9.png +0 -0
  39. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/dropdown_popup_background_up.9.png +0 -0
  40. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/ic_menu_share_holo_light.png +0 -0
  41. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/ic_search.png +0 -0
  42. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/ic_warning.png +0 -0
  43. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/ondemand_overlay.9.png +0 -0
  44. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xhdpi/verify_checkmark.png +0 -0
  45. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxhdpi/ic_menu_share_holo_light.png +0 -0
  46. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxhdpi/ic_search.png +0 -0
  47. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxhdpi/ic_warning.png +0 -0
  48. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxhdpi/verify_checkmark.png +0 -0
  49. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxxhdpi/ic_menu_share_holo_light.png +0 -0
  50. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxxhdpi/ic_search.png +0 -0
  51. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxxhdpi/ic_warning.png +0 -0
  52. data/libs/crosswalk/ext/platform/android/adds/res/drawable-xxxhdpi/verify_checkmark.png +0 -0
  53. data/libs/crosswalk/ext/platform/android/adds/res/drawable/autofill_chip_inset.xml +15 -0
  54. data/libs/crosswalk/ext/platform/android/adds/res/drawable/bubble.9.png +0 -0
  55. data/libs/crosswalk/ext/platform/android/adds/res/drawable/bubble_arrow_up.png +0 -0
  56. data/libs/crosswalk/ext/platform/android/adds/res/drawable/button_compat_shape.xml +9 -0
  57. data/libs/crosswalk/ext/platform/android/adds/res/drawable/color_button_background.xml +36 -0
  58. data/libs/crosswalk/ext/platform/android/adds/res/drawable/color_picker_advanced_select_handle.png +0 -0
  59. data/libs/crosswalk/ext/platform/android/adds/res/drawable/color_picker_border.xml +12 -0
  60. data/libs/crosswalk/ext/platform/android/adds/res/drawable/dropdown_label_color.xml +11 -0
  61. data/libs/crosswalk/ext/platform/android/adds/res/drawable/dropdown_popup_background.xml +13 -0
  62. data/libs/crosswalk/ext/platform/android/adds/res/drawable/dropdown_popup_background_down.9.png +0 -0
  63. data/libs/crosswalk/ext/platform/android/adds/res/drawable/dropdown_popup_background_up.9.png +0 -0
  64. data/libs/crosswalk/ext/platform/android/adds/res/drawable/ic_menu_share_holo_light.png +0 -0
  65. data/libs/crosswalk/ext/platform/android/adds/res/drawable/ic_search.png +0 -0
  66. data/libs/crosswalk/ext/platform/android/adds/res/drawable/ic_warning.png +0 -0
  67. data/libs/crosswalk/ext/platform/android/adds/res/drawable/launchscreen_bg.xml +19 -0
  68. data/libs/crosswalk/ext/platform/android/adds/res/drawable/ondemand_overlay.9.png +0 -0
  69. data/libs/crosswalk/ext/platform/android/adds/res/drawable/verify_checkmark.png +0 -0
  70. data/libs/crosswalk/ext/platform/android/adds/res/layout-land/date_time_picker_dialog.xml +42 -0
  71. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/autofill_keyboard_accessory_item.xml +40 -0
  72. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/autofill_suggestion_item.xml +18 -0
  73. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/color_picker_advanced_component.xml +46 -0
  74. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/color_picker_dialog_content.xml +51 -0
  75. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/color_picker_dialog_title.xml +41 -0
  76. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/date_time_suggestion.xml +35 -0
  77. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/dropdown_item.xml +58 -0
  78. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/multi_field_time_picker_dialog.xml +122 -0
  79. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/two_field_date_picker.xml +38 -0
  80. data/libs/crosswalk/ext/platform/android/adds/res/layout-v17/validation_message_bubble.xml +72 -0
  81. data/libs/crosswalk/ext/platform/android/adds/res/layout/autofill_keyboard_accessory_icon.xml +13 -0
  82. data/libs/crosswalk/ext/platform/android/adds/res/layout/autofill_keyboard_accessory_item.xml +17 -0
  83. data/libs/crosswalk/ext/platform/android/adds/res/layout/autofill_suggestion_item.xml +7 -0
  84. data/libs/crosswalk/ext/platform/android/adds/res/layout/color_picker_advanced_component.xml +30 -0
  85. data/libs/crosswalk/ext/platform/android/adds/res/layout/color_picker_dialog_content.xml +36 -0
  86. data/libs/crosswalk/ext/platform/android/adds/res/layout/color_picker_dialog_title.xml +25 -0
  87. data/libs/crosswalk/ext/platform/android/adds/res/layout/date_time_picker_dialog.xml +42 -0
  88. data/libs/crosswalk/ext/platform/android/adds/res/layout/date_time_suggestion.xml +16 -0
  89. data/libs/crosswalk/ext/platform/android/adds/res/layout/dropdown_item.xml +34 -0
  90. data/libs/crosswalk/ext/platform/android/adds/res/layout/multi_field_time_picker_dialog.xml +50 -0
  91. data/libs/crosswalk/ext/platform/android/adds/res/layout/two_field_date_picker.xml +26 -0
  92. data/libs/crosswalk/ext/platform/android/adds/res/layout/validation_message_bubble.xml +47 -0
  93. data/libs/crosswalk/ext/platform/android/adds/res/menu/select_action_menu.xml +54 -0
  94. data/libs/crosswalk/ext/platform/android/adds/res/raw/contacts_api.js +206 -0
  95. data/libs/crosswalk/ext/platform/android/adds/res/raw/device_capabilities_api.js +231 -0
  96. data/libs/crosswalk/ext/platform/android/adds/res/raw/empty.wav +0 -0
  97. data/libs/crosswalk/ext/platform/android/adds/res/raw/icudtl.dat +0 -0
  98. data/libs/crosswalk/ext/platform/android/adds/res/raw/launch_screen_api.js +9 -0
  99. data/libs/crosswalk/ext/platform/android/adds/res/raw/messaging_api.js +359 -0
  100. data/libs/crosswalk/ext/platform/android/adds/res/raw/presentation_api.js +144 -0
  101. data/libs/crosswalk/ext/platform/android/adds/res/raw/wifidirect_api.js +227 -0
  102. data/libs/crosswalk/ext/platform/android/adds/res/raw/xwalk.pak +0 -0
  103. data/libs/crosswalk/ext/platform/android/adds/res/values-am/android_content_strings.xml +15 -0
  104. data/libs/crosswalk/ext/platform/android/adds/res/values-am/android_ui_strings.xml +47 -0
  105. data/libs/crosswalk/ext/platform/android/adds/res/values-ar/android_content_strings.xml +15 -0
  106. data/libs/crosswalk/ext/platform/android/adds/res/values-ar/android_ui_strings.xml +47 -0
  107. data/libs/crosswalk/ext/platform/android/adds/res/values-bg/android_content_strings.xml +15 -0
  108. data/libs/crosswalk/ext/platform/android/adds/res/values-bg/android_ui_strings.xml +47 -0
  109. data/libs/crosswalk/ext/platform/android/adds/res/values-ca/android_content_strings.xml +15 -0
  110. data/libs/crosswalk/ext/platform/android/adds/res/values-ca/android_ui_strings.xml +47 -0
  111. data/libs/crosswalk/ext/platform/android/adds/res/values-cs/android_content_strings.xml +15 -0
  112. data/libs/crosswalk/ext/platform/android/adds/res/values-cs/android_ui_strings.xml +47 -0
  113. data/libs/crosswalk/ext/platform/android/adds/res/values-da/android_content_strings.xml +15 -0
  114. data/libs/crosswalk/ext/platform/android/adds/res/values-da/android_ui_strings.xml +47 -0
  115. data/libs/crosswalk/ext/platform/android/adds/res/values-de/android_content_strings.xml +15 -0
  116. data/libs/crosswalk/ext/platform/android/adds/res/values-de/android_ui_strings.xml +47 -0
  117. data/libs/crosswalk/ext/platform/android/adds/res/values-el/android_content_strings.xml +15 -0
  118. data/libs/crosswalk/ext/platform/android/adds/res/values-el/android_ui_strings.xml +47 -0
  119. data/libs/crosswalk/ext/platform/android/adds/res/values-en-rGB/android_content_strings.xml +15 -0
  120. data/libs/crosswalk/ext/platform/android/adds/res/values-en-rGB/android_ui_strings.xml +47 -0
  121. data/libs/crosswalk/ext/platform/android/adds/res/values-es-rUS/android_content_strings.xml +15 -0
  122. data/libs/crosswalk/ext/platform/android/adds/res/values-es-rUS/android_ui_strings.xml +47 -0
  123. data/libs/crosswalk/ext/platform/android/adds/res/values-es/android_content_strings.xml +15 -0
  124. data/libs/crosswalk/ext/platform/android/adds/res/values-es/android_ui_strings.xml +47 -0
  125. data/libs/crosswalk/ext/platform/android/adds/res/values-fa/android_content_strings.xml +15 -0
  126. data/libs/crosswalk/ext/platform/android/adds/res/values-fa/android_ui_strings.xml +47 -0
  127. data/libs/crosswalk/ext/platform/android/adds/res/values-fi/android_content_strings.xml +15 -0
  128. data/libs/crosswalk/ext/platform/android/adds/res/values-fi/android_ui_strings.xml +47 -0
  129. data/libs/crosswalk/ext/platform/android/adds/res/values-fr/android_content_strings.xml +15 -0
  130. data/libs/crosswalk/ext/platform/android/adds/res/values-fr/android_ui_strings.xml +47 -0
  131. data/libs/crosswalk/ext/platform/android/adds/res/values-hi/android_content_strings.xml +15 -0
  132. data/libs/crosswalk/ext/platform/android/adds/res/values-hi/android_ui_strings.xml +47 -0
  133. data/libs/crosswalk/ext/platform/android/adds/res/values-hr/android_content_strings.xml +15 -0
  134. data/libs/crosswalk/ext/platform/android/adds/res/values-hr/android_ui_strings.xml +47 -0
  135. data/libs/crosswalk/ext/platform/android/adds/res/values-hu/android_content_strings.xml +15 -0
  136. data/libs/crosswalk/ext/platform/android/adds/res/values-hu/android_ui_strings.xml +47 -0
  137. data/libs/crosswalk/ext/platform/android/adds/res/values-in/android_content_strings.xml +15 -0
  138. data/libs/crosswalk/ext/platform/android/adds/res/values-in/android_ui_strings.xml +47 -0
  139. data/libs/crosswalk/ext/platform/android/adds/res/values-it/android_content_strings.xml +15 -0
  140. data/libs/crosswalk/ext/platform/android/adds/res/values-it/android_ui_strings.xml +47 -0
  141. data/libs/crosswalk/ext/platform/android/adds/res/values-iw/android_content_strings.xml +15 -0
  142. data/libs/crosswalk/ext/platform/android/adds/res/values-iw/android_ui_strings.xml +47 -0
  143. data/libs/crosswalk/ext/platform/android/adds/res/values-ja/android_content_strings.xml +15 -0
  144. data/libs/crosswalk/ext/platform/android/adds/res/values-ja/android_ui_strings.xml +47 -0
  145. data/libs/crosswalk/ext/platform/android/adds/res/values-ko/android_content_strings.xml +15 -0
  146. data/libs/crosswalk/ext/platform/android/adds/res/values-ko/android_ui_strings.xml +47 -0
  147. data/libs/crosswalk/ext/platform/android/adds/res/values-lt/android_content_strings.xml +15 -0
  148. data/libs/crosswalk/ext/platform/android/adds/res/values-lt/android_ui_strings.xml +47 -0
  149. data/libs/crosswalk/ext/platform/android/adds/res/values-lv/android_content_strings.xml +15 -0
  150. data/libs/crosswalk/ext/platform/android/adds/res/values-lv/android_ui_strings.xml +47 -0
  151. data/libs/crosswalk/ext/platform/android/adds/res/values-nb/android_content_strings.xml +15 -0
  152. data/libs/crosswalk/ext/platform/android/adds/res/values-nb/android_ui_strings.xml +47 -0
  153. data/libs/crosswalk/ext/platform/android/adds/res/values-nl/android_content_strings.xml +15 -0
  154. data/libs/crosswalk/ext/platform/android/adds/res/values-nl/android_ui_strings.xml +47 -0
  155. data/libs/crosswalk/ext/platform/android/adds/res/values-pl/android_content_strings.xml +15 -0
  156. data/libs/crosswalk/ext/platform/android/adds/res/values-pl/android_ui_strings.xml +47 -0
  157. data/libs/crosswalk/ext/platform/android/adds/res/values-pt-rBR/android_content_strings.xml +15 -0
  158. data/libs/crosswalk/ext/platform/android/adds/res/values-pt-rBR/android_ui_strings.xml +47 -0
  159. data/libs/crosswalk/ext/platform/android/adds/res/values-pt-rPT/android_content_strings.xml +15 -0
  160. data/libs/crosswalk/ext/platform/android/adds/res/values-pt-rPT/android_ui_strings.xml +47 -0
  161. data/libs/crosswalk/ext/platform/android/adds/res/values-ro/android_content_strings.xml +15 -0
  162. data/libs/crosswalk/ext/platform/android/adds/res/values-ro/android_ui_strings.xml +47 -0
  163. data/libs/crosswalk/ext/platform/android/adds/res/values-ru/android_content_strings.xml +15 -0
  164. data/libs/crosswalk/ext/platform/android/adds/res/values-ru/android_ui_strings.xml +47 -0
  165. data/libs/crosswalk/ext/platform/android/adds/res/values-sk/android_content_strings.xml +15 -0
  166. data/libs/crosswalk/ext/platform/android/adds/res/values-sk/android_ui_strings.xml +47 -0
  167. data/libs/crosswalk/ext/platform/android/adds/res/values-sl/android_content_strings.xml +15 -0
  168. data/libs/crosswalk/ext/platform/android/adds/res/values-sl/android_ui_strings.xml +47 -0
  169. data/libs/crosswalk/ext/platform/android/adds/res/values-sr/android_content_strings.xml +15 -0
  170. data/libs/crosswalk/ext/platform/android/adds/res/values-sr/android_ui_strings.xml +47 -0
  171. data/libs/crosswalk/ext/platform/android/adds/res/values-sv/android_content_strings.xml +15 -0
  172. data/libs/crosswalk/ext/platform/android/adds/res/values-sv/android_ui_strings.xml +47 -0
  173. data/libs/crosswalk/ext/platform/android/adds/res/values-sw/android_content_strings.xml +15 -0
  174. data/libs/crosswalk/ext/platform/android/adds/res/values-sw/android_ui_strings.xml +47 -0
  175. data/libs/crosswalk/ext/platform/android/adds/res/values-th/android_content_strings.xml +15 -0
  176. data/libs/crosswalk/ext/platform/android/adds/res/values-th/android_ui_strings.xml +47 -0
  177. data/libs/crosswalk/ext/platform/android/adds/res/values-tl/android_content_strings.xml +15 -0
  178. data/libs/crosswalk/ext/platform/android/adds/res/values-tl/android_ui_strings.xml +47 -0
  179. data/libs/crosswalk/ext/platform/android/adds/res/values-tr/android_content_strings.xml +15 -0
  180. data/libs/crosswalk/ext/platform/android/adds/res/values-tr/android_ui_strings.xml +47 -0
  181. data/libs/crosswalk/ext/platform/android/adds/res/values-uk/android_content_strings.xml +15 -0
  182. data/libs/crosswalk/ext/platform/android/adds/res/values-uk/android_ui_strings.xml +47 -0
  183. data/libs/crosswalk/ext/platform/android/adds/res/values-v14/theme.xml +16 -0
  184. data/libs/crosswalk/ext/platform/android/adds/res/values-v17/styles.xml +19 -0
  185. data/libs/crosswalk/ext/platform/android/adds/res/values-v17/ui_java_styles.xml +41 -0
  186. data/libs/crosswalk/ext/platform/android/adds/res/values-v21/styles.xml +14 -0
  187. data/libs/crosswalk/ext/platform/android/adds/res/values-v21/ui_java_styles.xml +14 -0
  188. data/libs/crosswalk/ext/platform/android/adds/res/values-vi/android_content_strings.xml +15 -0
  189. data/libs/crosswalk/ext/platform/android/adds/res/values-vi/android_ui_strings.xml +47 -0
  190. data/libs/crosswalk/ext/platform/android/adds/res/values-zh-rCN/android_content_strings.xml +15 -0
  191. data/libs/crosswalk/ext/platform/android/adds/res/values-zh-rCN/android_ui_strings.xml +47 -0
  192. data/libs/crosswalk/ext/platform/android/adds/res/values-zh-rTW/android_content_strings.xml +15 -0
  193. data/libs/crosswalk/ext/platform/android/adds/res/values-zh-rTW/android_ui_strings.xml +47 -0
  194. data/libs/crosswalk/ext/platform/android/adds/res/values/android_content_strings.xml +15 -0
  195. data/libs/crosswalk/ext/platform/android/adds/res/values/android_ui_strings.xml +47 -0
  196. data/libs/crosswalk/ext/platform/android/adds/res/values/android_xwalk_strings.xml +17 -0
  197. data/libs/crosswalk/ext/platform/android/adds/res/values/ui_java_attrs.xml +9 -0
  198. data/libs/crosswalk/ext/platform/android/adds/res/values/ui_java_dimens.xml +31 -0
  199. data/libs/crosswalk/ext/platform/android/adds/res/values/ui_java_strings.xml +16 -0
  200. data/libs/crosswalk/ext/platform/android/adds/res/values/ui_java_styles.xml +101 -0
  201. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_app_strings.xml +28 -0
  202. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_attrs.xml +11 -0
  203. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_colors.xml +13 -0
  204. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_core_internal_java_strings.xml +16 -0
  205. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_core_java_strings.xml +16 -0
  206. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_dimens.xml +11 -0
  207. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_resources_list.xml +7 -0
  208. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_styles.xml +40 -0
  209. data/libs/crosswalk/ext/platform/android/adds/res/values/xwalk_values.xml +10 -0
  210. data/libs/crosswalk/ext/platform/android/ext_java.files +14 -0
  211. data/libs/crosswalk/ext/platform/android/ext_native.files +7 -0
  212. data/libs/crosswalk/ext/platform/android/jni/Crosswalk_impl.cpp +61 -0
  213. data/libs/crosswalk/ext/platform/android/src/com/rho/crosswalk/Crosswalk.java +14 -0
  214. data/libs/crosswalk/ext/platform/android/src/com/rho/crosswalk/CrosswalkFactory.java +18 -0
  215. data/libs/crosswalk/ext/platform/android/src/com/rho/crosswalk/CrosswalkSingleton.java +24 -0
  216. data/libs/crosswalk/ext/platform/android/src/com/tautechnologies/tau/crosswalk/CrosswalkExtension.java +16 -0
  217. data/libs/crosswalk/ext/platform/android/src/com/tautechnologies/tau/crosswalk/RhodesListener.java +18 -0
  218. data/libs/crosswalk/ext/platform/android/src/com/tautechnologies/tau/crosswalk/TauXWResourceClient.java +182 -0
  219. data/libs/crosswalk/ext/platform/android/src/com/tautechnologies/tau/crosswalk/TauXWUIClient.java +125 -0
  220. data/libs/crosswalk/ext/platform/android/src/com/tautechnologies/tau/crosswalk/TauXWalkWebView.java +368 -0
  221. data/libs/crosswalk/ext/platform/iphone/Crosswalk.xcodeproj/project.pbxproj +368 -0
  222. data/libs/crosswalk/ext/platform/iphone/Crosswalk_Prefix.pch +7 -0
  223. data/libs/crosswalk/ext/platform/iphone/Rakefile +73 -0
  224. data/libs/crosswalk/ext/platform/iphone/impl/Crosswalk.h +14 -0
  225. data/libs/crosswalk/ext/platform/iphone/impl/Crosswalk.m +24 -0
  226. data/libs/crosswalk/ext/platform/iphone/impl/CrosswalkFactorySingleton.m +16 -0
  227. data/libs/crosswalk/ext/platform/iphone/impl/CrosswalkSetup.m +9 -0
  228. data/libs/crosswalk/ext/platform/iphone/impl/CrosswalkSingleton.h +17 -0
  229. data/libs/crosswalk/ext/platform/iphone/impl/CrosswalkSingleton.m +23 -0
  230. data/libs/crosswalk/ext/platform/iphone/impl/readme.txt +7 -0
  231. data/libs/crosswalk/ext/platform/qt/Crosswalk.pro +66 -0
  232. data/libs/crosswalk/ext/platform/qt/Rakefile +35 -0
  233. data/libs/crosswalk/ext/platform/qt/src/Crosswalk_impl.cpp +77 -0
  234. data/libs/crosswalk/ext/platform/wm/Crosswalk.sln +52 -0
  235. data/libs/crosswalk/ext/platform/wm/Crosswalk.vcproj +714 -0
  236. data/libs/crosswalk/ext/platform/wm/Crosswalk.vsprops +15 -0
  237. data/libs/crosswalk/ext/platform/wm/src/Crosswalk_impl.cpp +77 -0
  238. data/libs/crosswalk/ext/platform/wp8/Crosswalk.props +18 -0
  239. data/libs/crosswalk/ext/platform/wp8/Crosswalk.vcxproj +170 -0
  240. data/libs/crosswalk/ext/platform/wp8/Crosswalk.vcxproj.filters +50 -0
  241. data/libs/crosswalk/ext/platform/wp8/CrosswalkImpl.csproj +119 -0
  242. data/libs/crosswalk/ext/platform/wp8/CrosswalkImpl.props +8 -0
  243. data/libs/crosswalk/ext/platform/wp8/CrosswalkImpl.targets +7 -0
  244. data/libs/crosswalk/ext/platform/wp8/CrosswalkLib.props +18 -0
  245. data/libs/crosswalk/ext/platform/wp8/CrosswalkLib.vcxproj +185 -0
  246. data/libs/crosswalk/ext/platform/wp8/CrosswalkLib.vcxproj.filters +58 -0
  247. data/libs/crosswalk/ext/platform/wp8/src/Crosswalk_impl.cpp +76 -0
  248. data/libs/crosswalk/ext/platform/wp8/src/Crosswalk_impl.cs +69 -0
  249. data/libs/crosswalk/ext/platform/wp8/src/Properties/AssemblyInfo.cs +37 -0
  250. data/libs/enterprise-barcode/ext.yml +13 -0
  251. data/libs/enterprise-barcode/ext/barcode.xml +2144 -0
  252. data/libs/enterprise-barcode/ext/build +17 -0
  253. data/libs/enterprise-barcode/ext/build.bat +29 -0
  254. data/libs/enterprise-barcode/ext/platform/android/AndroidManifest.xml +31 -0
  255. data/libs/enterprise-barcode/ext/platform/android/ZXing_Info/AUTHORS +58 -0
  256. data/libs/enterprise-barcode/ext/platform/android/ZXing_Info/CHANGES +266 -0
  257. data/libs/enterprise-barcode/ext/platform/android/ZXing_Info/COPYING +201 -0
  258. data/libs/enterprise-barcode/ext/platform/android/ZXing_Info/README +11 -0
  259. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/drawable-hdpi/cancel_icon.png +0 -0
  260. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/drawable-hdpi/ok_icon.png +0 -0
  261. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/drawable-hdpi/retake_icon.png +0 -0
  262. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/drawable/cancel_icon.png +0 -0
  263. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/drawable/ok_icon.png +0 -0
  264. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/drawable/retake_icon.png +0 -0
  265. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/layout/capture.xml +122 -0
  266. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/raw/beep.ogg +0 -0
  267. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/values/attrs.xml +20 -0
  268. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/values/colors.xml +42 -0
  269. data/libs/enterprise-barcode/ext/platform/android/additional_files/res/values/ids.xml +31 -0
  270. data/libs/enterprise-barcode/ext/platform/android/adds/lib/armeabi/liballbarcode.a +0 -0
  271. data/libs/enterprise-barcode/ext/platform/android/adds/lib/x86/liballbarcode.a +0 -0
  272. data/libs/enterprise-barcode/ext/platform/android/allbarcode.jar +0 -0
  273. data/libs/enterprise-barcode/ext/platform/iphone/Barcode.xcodeproj/project.pbxproj +524 -0
  274. data/libs/enterprise-barcode/ext/platform/iphone/Barcode_Prefix.pch +7 -0
  275. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeCallbackHelper.h +27 -0
  276. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeCallbackHelper.mm +231 -0
  277. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeViewController.h +95 -0
  278. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeViewController.m +1017 -0
  279. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeViewFactory.h +7 -0
  280. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeViewFactory.mm +58 -0
  281. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeViewFactoryRegister.mm +18 -0
  282. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeViewManager.h +16 -0
  283. data/libs/enterprise-barcode/ext/platform/iphone/Classes/BarcodeViewManager.mm +32 -0
  284. data/libs/enterprise-barcode/ext/platform/iphone/Classes/ImageProvider.cpp +25 -0
  285. data/libs/enterprise-barcode/ext/platform/iphone/Classes/ImageProvider.h +15 -0
  286. data/libs/enterprise-barcode/ext/platform/iphone/Classes/ImageProvider.mm +159 -0
  287. data/libs/enterprise-barcode/ext/platform/iphone/Classes/barcode.m +123 -0
  288. data/libs/enterprise-barcode/ext/platform/iphone/Rakefile +69 -0
  289. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/COPYING +27 -0
  290. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarCameraSimulator.h +45 -0
  291. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarCaptureReader.h +111 -0
  292. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarHelpController.h +60 -0
  293. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarImage.h +69 -0
  294. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarImageScanner.h +51 -0
  295. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderController.h +142 -0
  296. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderView.h +135 -0
  297. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderViewController.h +130 -0
  298. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarSDK.h +34 -0
  299. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarSymbol.h +71 -0
  300. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar.h +1497 -0
  301. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Decoder.h +202 -0
  302. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Exception.h +187 -0
  303. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Image.h +321 -0
  304. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/ImageScanner.h +130 -0
  305. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Processor.h +223 -0
  306. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Scanner.h +162 -0
  307. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Symbol.h +528 -0
  308. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Video.h +170 -0
  309. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Window.h +136 -0
  310. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/LICENSE +504 -0
  311. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/README +59 -0
  312. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Resources/zbar-back.png +0 -0
  313. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Resources/zbar-help.html +88 -0
  314. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Resources/zbar-helpicons.png +0 -0
  315. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/Resources/zbar-samples.png +0 -0
  316. data/libs/enterprise-barcode/ext/platform/iphone/ZBarSDK/libzbar.a +0 -0
  317. data/libs/enterprise-barcode/ext/platform/iphone/impl/Barcode.h +21 -0
  318. data/libs/enterprise-barcode/ext/platform/iphone/impl/Barcode.m +132 -0
  319. data/libs/enterprise-barcode/ext/platform/iphone/impl/BarcodeFactory.h +10 -0
  320. data/libs/enterprise-barcode/ext/platform/iphone/impl/BarcodeFactory.m +16 -0
  321. data/libs/enterprise-barcode/ext/platform/iphone/impl/BarcodeFactorySingleton.m +16 -0
  322. data/libs/enterprise-barcode/ext/platform/iphone/impl/BarcodeSetup.m +8 -0
  323. data/libs/enterprise-barcode/ext/platform/iphone/impl/BarcodeSingleton.h +17 -0
  324. data/libs/enterprise-barcode/ext/platform/iphone/impl/BarcodeSingleton.m +22 -0
  325. data/libs/enterprise-barcode/ext/platform/iphone/impl/readme.txt +7 -0
  326. data/libs/enterprise-barcode/ext/platform/wm/Barcode.sln +44 -0
  327. data/libs/enterprise-barcode/ext/platform/wm/Barcode.vcproj +836 -0
  328. data/libs/enterprise-barcode/ext/platform/wm/Barcode.vsprops +15 -0
  329. data/libs/enterprise-barcode/ext/platform/wm/readme.txt +0 -0
  330. data/libs/enterprise-barcode/ext/platform/wm/src/Barcode_impl.cpp +376 -0
  331. data/libs/enterprise-barcode/ext/platform/wm/src/DecodeNotifier.cpp +173 -0
  332. data/libs/enterprise-barcode/ext/platform/wm/src/DecodeNotifier.h +149 -0
  333. data/libs/enterprise-barcode/ext/platform/wm/src/EMDKInterfaceAbstraction.cpp +476 -0
  334. data/libs/enterprise-barcode/ext/platform/wm/src/GetDecoderProperties.cpp +1195 -0
  335. data/libs/enterprise-barcode/ext/platform/wm/src/GetScannerProperties.cpp +553 -0
  336. data/libs/enterprise-barcode/ext/platform/wm/src/KeyInjector.cpp +177 -0
  337. data/libs/enterprise-barcode/ext/platform/wm/src/KeyInjector.h +40 -0
  338. data/libs/enterprise-barcode/ext/platform/wm/src/NotificationLoader.cpp +76 -0
  339. data/libs/enterprise-barcode/ext/platform/wm/src/NotificationLoader.h +44 -0
  340. data/libs/enterprise-barcode/ext/platform/wm/src/RSM.cpp +1211 -0
  341. data/libs/enterprise-barcode/ext/platform/wm/src/Scanner.cpp +2609 -0
  342. data/libs/enterprise-barcode/ext/platform/wm/src/Scanner.h +1099 -0
  343. data/libs/enterprise-barcode/ext/platform/wm/src/ScannerDefines.h +322 -0
  344. data/libs/enterprise-barcode/ext/platform/wm/src/SetDecoderProperties.cpp +2106 -0
  345. data/libs/enterprise-barcode/ext/platform/wm/src/SetScannerProperties.cpp +1060 -0
  346. data/libs/enterprise-barcode/ext/platform/wm/src/Utilities.cpp +184 -0
  347. data/libs/enterprise-barcode/ext/platform/wp8/BarcodeImpl.csproj +119 -0
  348. data/libs/enterprise-barcode/ext/platform/wp8/BarcodeImpl.props +8 -0
  349. data/libs/enterprise-barcode/ext/platform/wp8/BarcodeImpl.targets +35 -0
  350. data/libs/enterprise-barcode/ext/platform/wp8/BarcodeLib.props +18 -0
  351. data/libs/enterprise-barcode/ext/platform/wp8/BarcodeLib.vcxproj +185 -0
  352. data/libs/enterprise-barcode/ext/platform/wp8/BarcodeLib.vcxproj.filters +58 -0
  353. data/libs/enterprise-barcode/ext/platform/wp8/lib/ARM/Nokia.Graphics.Imaging.dll +0 -0
  354. data/libs/enterprise-barcode/ext/platform/wp8/lib/ARM/Nokia.Graphics.Imaging.winmd +0 -0
  355. data/libs/enterprise-barcode/ext/platform/wp8/lib/ARM/Nokia.Graphics.Imaging.xml +4813 -0
  356. data/libs/enterprise-barcode/ext/platform/wp8/lib/ARM/Nokia.InteropServices.WindowsRuntime.dll +0 -0
  357. data/libs/enterprise-barcode/ext/platform/wp8/lib/ARM/Nokia.InteropServices.WindowsRuntime.winmd +0 -0
  358. data/libs/enterprise-barcode/ext/platform/wp8/lib/ARM/Nokia.InteropServices.WindowsRuntime.xml +41 -0
  359. data/libs/enterprise-barcode/ext/platform/wp8/lib/ARM/OpticalReaderLib.dll +0 -0
  360. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib.XML +68 -0
  361. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib.dll +0 -0
  362. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib/BarcodeReaderLib.csproj +120 -0
  363. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib/BarcodeReaderLib.sln +34 -0
  364. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib/CameraNavigatePage.xaml +32 -0
  365. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib/CameraNavigatePage.xaml.cs +235 -0
  366. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib/OpticalReaderTask.cs +182 -0
  367. data/libs/enterprise-barcode/ext/platform/wp8/lib/BarcodeReaderLib/Properties/AssemblyInfo.cs +37 -0
  368. data/libs/enterprise-barcode/ext/platform/wp8/lib/Nokia.Graphics.Imaging.Managed.dll +0 -0
  369. data/libs/enterprise-barcode/ext/platform/wp8/lib/Nokia.Graphics.Imaging.Managed.xml +341 -0
  370. data/libs/enterprise-barcode/ext/platform/wp8/lib/x86/Nokia.Graphics.Imaging.dll +0 -0
  371. data/libs/enterprise-barcode/ext/platform/wp8/lib/x86/Nokia.Graphics.Imaging.winmd +0 -0
  372. data/libs/enterprise-barcode/ext/platform/wp8/lib/x86/Nokia.Graphics.Imaging.xml +4813 -0
  373. data/libs/enterprise-barcode/ext/platform/wp8/lib/x86/Nokia.InteropServices.WindowsRuntime.dll +0 -0
  374. data/libs/enterprise-barcode/ext/platform/wp8/lib/x86/Nokia.InteropServices.WindowsRuntime.winmd +0 -0
  375. data/libs/enterprise-barcode/ext/platform/wp8/lib/x86/Nokia.InteropServices.WindowsRuntime.xml +41 -0
  376. data/libs/enterprise-barcode/ext/platform/wp8/lib/x86/OpticalReaderLib.dll +0 -0
  377. data/libs/enterprise-barcode/ext/platform/wp8/lib/zxing.wp8.0.XML +10324 -0
  378. data/libs/enterprise-barcode/ext/platform/wp8/lib/zxing.wp8.0.dll +0 -0
  379. data/libs/enterprise-barcode/ext/platform/wp8/src/Barcode_impl.cs +630 -0
  380. data/libs/enterprise-barcode/ext/platform/wp8/src/Properties/AssemblyInfo.cs +37 -0
  381. data/libs/enterprise-barcode/public/api/generated/Rho.Barcode.js +772 -0
  382. data/libs/ie/rhobrowser.dll +0 -0
  383. data/libs/nodejs.rb +2 -0
  384. data/libs/nodejs/ext.yml +25 -0
  385. data/libs/nodejs/ext/Nodejs.xml +37 -0
  386. data/libs/nodejs/ext/build +19 -0
  387. data/libs/nodejs/ext/build.bat +29 -0
  388. data/libs/nodejs/ext/platform/android/Rakefile +161 -0
  389. data/libs/nodejs/ext/platform/android/ext_native.files +8 -0
  390. data/libs/nodejs/ext/platform/android/jxCore/jx.h +134 -0
  391. data/libs/nodejs/ext/platform/android/jxCore/jx_result.h +221 -0
  392. data/libs/nodejs/ext/platform/android/jxCore/libcares_arm.a +0 -0
  393. data/libs/nodejs/ext/platform/android/jxCore/libcares_ia32.a +0 -0
  394. data/libs/nodejs/ext/platform/android/jxCore/libcares_x64.a +0 -0
  395. data/libs/nodejs/ext/platform/android/jxCore/libchrome_zlib_arm.a +0 -0
  396. data/libs/nodejs/ext/platform/android/jxCore/libchrome_zlib_ia32.a +0 -0
  397. data/libs/nodejs/ext/platform/android/jxCore/libchrome_zlib_x64.a +0 -0
  398. data/libs/nodejs/ext/platform/android/jxCore/libhttp_parser_arm.a +0 -0
  399. data/libs/nodejs/ext/platform/android/jxCore/libhttp_parser_ia32.a +0 -0
  400. data/libs/nodejs/ext/platform/android/jxCore/libhttp_parser_x64.a +0 -0
  401. data/libs/nodejs/ext/platform/android/jxCore/libjx_arm.a +0 -0
  402. data/libs/nodejs/ext/platform/android/jxCore/libjx_ia32.a +0 -0
  403. data/libs/nodejs/ext/platform/android/jxCore/libjx_x64.a +0 -0
  404. data/libs/nodejs/ext/platform/android/jxCore/libopenssl_arm.a +0 -0
  405. data/libs/nodejs/ext/platform/android/jxCore/libopenssl_ia32.a +0 -0
  406. data/libs/nodejs/ext/platform/android/jxCore/libopenssl_x64.a +0 -0
  407. data/libs/nodejs/ext/platform/android/jxCore/libsqlite3_arm.a +0 -0
  408. data/libs/nodejs/ext/platform/android/jxCore/libsqlite3_ia32.a +0 -0
  409. data/libs/nodejs/ext/platform/android/jxCore/libsqlite3_x64.a +0 -0
  410. data/libs/nodejs/ext/platform/android/jxCore/libuv_arm.a +0 -0
  411. data/libs/nodejs/ext/platform/android/jxCore/libuv_ia32.a +0 -0
  412. data/libs/nodejs/ext/platform/android/jxCore/libuv_x64.a +0 -0
  413. data/libs/nodejs/ext/platform/android/jxCore/libv8_base_arm.a +0 -0
  414. data/libs/nodejs/ext/platform/android/jxCore/libv8_base_ia32.a +0 -0
  415. data/libs/nodejs/ext/platform/android/jxCore/libv8_base_x64.a +0 -0
  416. data/libs/nodejs/ext/platform/android/jxCore/libv8_nosnapshot_arm.a +0 -0
  417. data/libs/nodejs/ext/platform/android/jxCore/libv8_nosnapshot_ia32.a +0 -0
  418. data/libs/nodejs/ext/platform/android/jxCore/libv8_nosnapshot_x64.a +0 -0
  419. data/libs/nodejs/ext/platform/iphone/Nodejs.xcodeproj/project.pbxproj +350 -0
  420. data/libs/nodejs/ext/platform/iphone/Nodejs_Prefix.pch +7 -0
  421. data/libs/nodejs/ext/platform/iphone/Rakefile +73 -0
  422. data/libs/nodejs/ext/platform/iphone/jxCore/jx.h +134 -0
  423. data/libs/nodejs/ext/platform/iphone/jxCore/jx_result.h +221 -0
  424. data/libs/nodejs/ext/platform/iphone/jxCore/libcares.a +0 -0
  425. data/libs/nodejs/ext/platform/iphone/jxCore/libchrome_zlib.a +0 -0
  426. data/libs/nodejs/ext/platform/iphone/jxCore/libhttp_parser.a +0 -0
  427. data/libs/nodejs/ext/platform/iphone/jxCore/libjx.a +0 -0
  428. data/libs/nodejs/ext/platform/iphone/jxCore/libmozjs.a +0 -0
  429. data/libs/nodejs/ext/platform/iphone/jxCore/libopenssl.a +0 -0
  430. data/libs/nodejs/ext/platform/iphone/jxCore/libsqlite3.a +0 -0
  431. data/libs/nodejs/ext/platform/iphone/jxCore/libuv.a +0 -0
  432. data/libs/nodejs/ext/shared/jxcore/jx.h +134 -0
  433. data/libs/nodejs/ext/shared/jxcore/jx_result.h +221 -0
  434. data/libs/nodejs/ext/shared/jxcoretau.cpp +454 -0
  435. data/libs/nodejs/ext/shared/jxcoretau.h +20 -0
  436. data/libs/nodejs/ext/shared/nodejs_impl.cpp +106 -0
  437. data/libs/nodejs/nodejs.rb +2 -0
  438. data/libs/openssl-edge.rb +2 -0
  439. data/libs/openssl-edge/ext.yml +4 -0
  440. data/libs/openssl-edge/ext/Rakefile +145 -0
  441. data/libs/openssl-edge/ext/android/Rakefile +107 -0
  442. data/libs/openssl-edge/ext/android/ext_native.files +32 -0
  443. data/libs/openssl-edge/ext/android/extconf.h +91 -0
  444. data/libs/openssl-edge/ext/build +12 -0
  445. data/libs/openssl-edge/ext/build.bat +5 -0
  446. data/libs/openssl-edge/ext/extconf.rb +141 -0
  447. data/libs/openssl-edge/ext/openssl.pro +109 -0
  448. data/libs/openssl-edge/ext/openssl.sln +52 -0
  449. data/libs/openssl-edge/ext/openssl.vcproj +1010 -0
  450. data/libs/openssl-edge/ext/openssl_missing.c +1163 -0
  451. data/libs/openssl-edge/ext/openssl_missing.h +537 -0
  452. data/libs/openssl-edge/ext/ossl.c +1203 -0
  453. data/libs/openssl-edge/ext/ossl.h +242 -0
  454. data/libs/openssl-edge/ext/ossl_asn1.c +2008 -0
  455. data/libs/openssl-edge/ext/ossl_asn1.h +66 -0
  456. data/libs/openssl-edge/ext/ossl_bio.c +118 -0
  457. data/libs/openssl-edge/ext/ossl_bio.h +19 -0
  458. data/libs/openssl-edge/ext/ossl_bn.c +1153 -0
  459. data/libs/openssl-edge/ext/ossl_bn.h +23 -0
  460. data/libs/openssl-edge/ext/ossl_cipher.c +1085 -0
  461. data/libs/openssl-edge/ext/ossl_cipher.h +20 -0
  462. data/libs/openssl-edge/ext/ossl_config.c +89 -0
  463. data/libs/openssl-edge/ext/ossl_config.h +19 -0
  464. data/libs/openssl-edge/ext/ossl_digest.c +453 -0
  465. data/libs/openssl-edge/ext/ossl_digest.h +20 -0
  466. data/libs/openssl-edge/ext/ossl_engine.c +580 -0
  467. data/libs/openssl-edge/ext/ossl_engine.h +19 -0
  468. data/libs/openssl-edge/ext/ossl_hmac.c +398 -0
  469. data/libs/openssl-edge/ext/ossl_hmac.h +18 -0
  470. data/libs/openssl-edge/ext/ossl_ns_spki.c +406 -0
  471. data/libs/openssl-edge/ext/ossl_ns_spki.h +19 -0
  472. data/libs/openssl-edge/ext/ossl_ocsp.c +2013 -0
  473. data/libs/openssl-edge/ext/ossl_ocsp.h +23 -0
  474. data/libs/openssl-edge/ext/ossl_pkcs12.c +261 -0
  475. data/libs/openssl-edge/ext/ossl_pkcs12.h +13 -0
  476. data/libs/openssl-edge/ext/ossl_pkcs5.c +180 -0
  477. data/libs/openssl-edge/ext/ossl_pkcs5.h +6 -0
  478. data/libs/openssl-edge/ext/ossl_pkcs7.c +1157 -0
  479. data/libs/openssl-edge/ext/ossl_pkcs7.h +20 -0
  480. data/libs/openssl-edge/ext/ossl_pkey.c +469 -0
  481. data/libs/openssl-edge/ext/ossl_pkey.h +245 -0
  482. data/libs/openssl-edge/ext/ossl_pkey_dh.c +650 -0
  483. data/libs/openssl-edge/ext/ossl_pkey_dsa.c +672 -0
  484. data/libs/openssl-edge/ext/ossl_pkey_ec.c +1806 -0
  485. data/libs/openssl-edge/ext/ossl_pkey_rsa.c +768 -0
  486. data/libs/openssl-edge/ext/ossl_rand.c +238 -0
  487. data/libs/openssl-edge/ext/ossl_rand.h +18 -0
  488. data/libs/openssl-edge/ext/ossl_ssl.c +2724 -0
  489. data/libs/openssl-edge/ext/ossl_ssl.h +41 -0
  490. data/libs/openssl-edge/ext/ossl_ssl_session.c +352 -0
  491. data/libs/openssl-edge/ext/ossl_version.h +15 -0
  492. data/libs/openssl-edge/ext/ossl_x509.c +186 -0
  493. data/libs/openssl-edge/ext/ossl_x509.h +119 -0
  494. data/libs/openssl-edge/ext/ossl_x509attr.c +328 -0
  495. data/libs/openssl-edge/ext/ossl_x509cert.c +863 -0
  496. data/libs/openssl-edge/ext/ossl_x509crl.c +565 -0
  497. data/libs/openssl-edge/ext/ossl_x509ext.c +480 -0
  498. data/libs/openssl-edge/ext/ossl_x509name.c +547 -0
  499. data/libs/openssl-edge/ext/ossl_x509req.c +492 -0
  500. data/libs/openssl-edge/ext/ossl_x509revoked.c +279 -0
  501. data/libs/openssl-edge/ext/ossl_x509store.c +846 -0
  502. data/libs/openssl-edge/ext/ruby_missing.h +32 -0
  503. data/libs/openssl-edge/openssl-edge.rb +2 -0
  504. data/libs/openssl-edge/openssl.rb +24 -0
  505. data/libs/openssl-edge/openssl/bn.rb +35 -0
  506. data/libs/openssl-edge/openssl/buffering.rb +341 -0
  507. data/libs/openssl-edge/openssl/cipher.rb +65 -0
  508. data/libs/openssl-edge/openssl/digest.rb +61 -0
  509. data/libs/openssl-edge/openssl/ssl-internal.rb +180 -0
  510. data/libs/openssl-edge/openssl/ssl.rb +1 -0
  511. data/libs/openssl-edge/openssl/x509-internal.rb +153 -0
  512. data/libs/openssl-edge/openssl/x509.rb +1 -0
  513. data/libs/openssl.so-edge.rb +2 -0
  514. data/libs/openssl.so-edge/ext.yml +8 -0
  515. data/libs/openssl.so-edge/ext/Rakefile +140 -0
  516. data/libs/openssl.so-edge/ext/android/armeabi/libcrypto.a +0 -0
  517. data/libs/openssl.so-edge/ext/android/armeabi/libssl.a +0 -0
  518. data/libs/openssl.so-edge/ext/android/x86/libcrypto.a +0 -0
  519. data/libs/openssl.so-edge/ext/android/x86/libssl.a +0 -0
  520. data/libs/openssl.so-edge/ext/build +12 -0
  521. data/libs/openssl.so-edge/ext/build.bat +1 -0
  522. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/dh/dh_locl.h +56 -0
  523. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/dsa/dsa_locl.h +76 -0
  524. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/evp/evp_locl.h +66 -0
  525. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/hmac/hmac_lcl.h +33 -0
  526. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/asn1_int.h +94 -0
  527. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/async.h +14 -0
  528. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/bn_conf.h +28 -0
  529. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/bn_dh.h +17 -0
  530. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/bn_int.h +82 -0
  531. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/bn_srp.h +32 -0
  532. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/chacha.h +49 -0
  533. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/cryptlib.h +81 -0
  534. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/cryptlib_int.h +31 -0
  535. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/dso_conf.h +16 -0
  536. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/engine.h +20 -0
  537. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/err_int.h +17 -0
  538. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/evp_int.h +382 -0
  539. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/md32_common.h +383 -0
  540. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/objects.h +12 -0
  541. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/poly1305.h +19 -0
  542. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/rand.h +20 -0
  543. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/include/internal/x509_int.h +267 -0
  544. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/ocsp/ocsp_lcl.h +216 -0
  545. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/rsa/rsa_locl.h +96 -0
  546. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/crypto/x509/x509_lcl.h +142 -0
  547. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/e_os.h +520 -0
  548. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/bio.h +26 -0
  549. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/comp.h +12 -0
  550. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/conf.h +32 -0
  551. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/constant_time_locl.h +185 -0
  552. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/dane.h +103 -0
  553. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/dso.h +216 -0
  554. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/err.h +15 -0
  555. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/numbers.h +68 -0
  556. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/o_dir.h +63 -0
  557. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/o_str.h +17 -0
  558. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/internal/thread_once.h +42 -0
  559. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/__DECC_INCLUDE_EPILOGUE.H +16 -0
  560. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/__DECC_INCLUDE_PROLOGUE.H +20 -0
  561. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/aes.h +92 -0
  562. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/asn1.h +1096 -0
  563. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/asn1_mac.h +10 -0
  564. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/asn1t.h +924 -0
  565. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/async.h +98 -0
  566. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/bio.h +854 -0
  567. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/blowfish.h +61 -0
  568. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/bn.h +575 -0
  569. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/buffer.h +76 -0
  570. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/camellia.h +83 -0
  571. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/cast.h +53 -0
  572. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/cmac.h +41 -0
  573. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/cms.h +512 -0
  574. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/comp.h +72 -0
  575. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/conf.h +216 -0
  576. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/conf_api.h +40 -0
  577. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/crypto.h +463 -0
  578. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ct.h +518 -0
  579. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/des.h +174 -0
  580. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/dh.h +343 -0
  581. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/dsa.h +282 -0
  582. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/dtls1.h +56 -0
  583. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/e_os2.h +311 -0
  584. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ebcdic.h +33 -0
  585. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ec.h +1581 -0
  586. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ecdh.h +10 -0
  587. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ecdsa.h +10 -0
  588. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/engine.h +842 -0
  589. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/err.h +259 -0
  590. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/evp.h +1586 -0
  591. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/hmac.h +49 -0
  592. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/idea.h +64 -0
  593. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/kdf.h +75 -0
  594. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/lhash.h +204 -0
  595. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/md2.h +44 -0
  596. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/md4.h +51 -0
  597. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/md5.h +50 -0
  598. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/mdc2.h +42 -0
  599. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/modes.h +203 -0
  600. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/obj_mac.h +4577 -0
  601. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/objects.h +1097 -0
  602. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ocsp.h +409 -0
  603. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/opensslconf.h +169 -0
  604. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/opensslconf.h.in +141 -0
  605. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/opensslv.h +105 -0
  606. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ossl_typ.h +190 -0
  607. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/pem.h +501 -0
  608. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/pem2.h +20 -0
  609. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/pkcs12.h +282 -0
  610. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/pkcs7.h +404 -0
  611. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/rand.h +89 -0
  612. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/rc2.h +51 -0
  613. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/rc4.h +36 -0
  614. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/rc5.h +63 -0
  615. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ripemd.h +47 -0
  616. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/rsa.h +588 -0
  617. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/safestack.h +164 -0
  618. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/seed.h +98 -0
  619. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/sha.h +119 -0
  620. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/srp.h +131 -0
  621. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/srtp.h +50 -0
  622. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ssl.h +2527 -0
  623. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ssl2.h +24 -0
  624. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ssl3.h +307 -0
  625. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/stack.h +78 -0
  626. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/symhacks.h +52 -0
  627. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/tls1.h +972 -0
  628. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ts.h +643 -0
  629. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/txt_db.h +57 -0
  630. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/ui.h +368 -0
  631. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/whrlpool.h +48 -0
  632. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/x509.h +1123 -0
  633. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/x509_vfy.h +539 -0
  634. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/openssl/x509v3.h +1005 -0
  635. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/ssl/packet_locl.h +555 -0
  636. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/ssl/record/record.h +240 -0
  637. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/ssl/record/record_locl.h +114 -0
  638. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/ssl/ssl_locl.h +2127 -0
  639. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/ssl/statem/statem.h +123 -0
  640. data/libs/openssl.so-edge/ext/openssl-1-1-0-stable/include/ssl/statem/statem_locl.h +124 -0
  641. data/libs/openssl.so-edge/openssl.so.rb +2 -0
  642. data/libs/webkit.rb +2 -0
  643. data/libs/webkit/ext.yml +4 -0
  644. data/libs/webkit/ext/build +12 -0
  645. data/libs/webkit/ext/build.bat +7 -0
  646. data/libs/webkit/ext/wm/Rakefile +61 -0
  647. data/libs/webkit/ext/wm/RhoMsgs.cpp +17 -0
  648. data/libs/webkit/ext/wm/RhoMsgs.h +14 -0
  649. data/libs/webkit/ext/wm/RhoWKBrowserEngine.cpp +736 -0
  650. data/libs/webkit/ext/wm/RhoWKBrowserEngine.h +105 -0
  651. data/libs/webkit/ext/wm/lib/npapi/rhobridge.dll +0 -0
  652. data/libs/webkit/ext/wm/lib/rhoengine_defs.h +80 -0
  653. data/libs/webkit/ext/wm/lib/rhowebkit.dll +0 -0
  654. data/libs/webkit/ext/wm/webkit.sln +36 -0
  655. data/libs/webkit/ext/wm/webkit.suo +0 -0
  656. data/libs/webkit/ext/wm/webkit.vcproj +800 -0
  657. data/libs/webkit/ext/wm/webkit.vsprops +20 -0
  658. data/libs/webkit/webkit.rb +2 -0
  659. data/rho-tau-extensions.gemspec +23 -0
  660. data/version +1 -0
  661. metadata +705 -0
@@ -0,0 +1,2609 @@
1
+ #include "Scanner.h"
2
+ #include <pm.h>
3
+ // TODO: This flag should not need to be global in true multiple instance.
4
+
5
+ #pragma region public_methods
6
+
7
+ CScanner::CScanner(int iInstanceID)
8
+ {
9
+ // Initialise Variables (no memory allocation in constructor
10
+ InitializeCriticalSection(&m_scanner_prop_cs);
11
+ m_hiddenWindow = NULL;
12
+ m_iInstanceID = iInstanceID;
13
+ // Find a unique event name for this Scanner instance (to be used in Named Events)
14
+ m_iInstanceID2 = iInstanceID;
15
+ WCHAR szTempName[25];
16
+ wsprintf(szTempName, L"NeonTempNam4%i", m_iInstanceID2);
17
+ m_hUniqueEvent = CreateEvent(NULL, TRUE, FALSE, szTempName);
18
+ while(GetLastError() == ERROR_ALREADY_EXISTS)
19
+ {
20
+ m_iInstanceID2++;
21
+ wsprintf(szTempName, L"NeonTempNam4%i", m_iInstanceID2);
22
+ CloseHandle(m_hUniqueEvent);
23
+ m_hUniqueEvent = CreateEvent(NULL, TRUE, FALSE, szTempName);
24
+ }
25
+ if (m_iInstanceID >= 500)
26
+ m_iInstanceID -= 500;
27
+ m_hScnAPIDLL = NULL;
28
+ InitialiseEMDKFunctionPointers();
29
+ m_bScannerEnabled = false;
30
+ m_bScannerBeingEnabled = false;
31
+ m_bTriggerConnected = true;
32
+ m_hMetaMsgQRead = NULL;
33
+ m_hMetaMsgQWrite = NULL;
34
+ // m_hRSMMsgQRead = NULL;
35
+ // m_hRSMMsgQWrite = NULL;
36
+ m_hTagsOnCurrentPageQRead = NULL;
37
+ m_hTagsOnCurrentPageQWrite = NULL;
38
+ m_bScannerOpen = false;
39
+ m_szUserSpecifiedScanner = NULL;
40
+ m_szCurrentlyOpenScanner = NULL;
41
+ m_bUsingBluetoothScanner = false;
42
+ m_hScanner = NULL;
43
+ m_ScannerState = NO_BT_CONNECTION;
44
+ m_lpScanBuffer = NULL;
45
+ m_hReadComplete = NULL;
46
+ m_hEnableForTakeComplete = NULL;
47
+ m_hUniqueEvent = NULL;
48
+ m_dwRequestID = -1;
49
+ g_bShuttingDown = false;
50
+ // Configuration Settings
51
+ m_dwDecodeVolume = DEFAULT_DECODE_VOLUME;
52
+ m_dwDecodeFrequency = DEFAULT_GOOD_DECODE_FREQUENCY;
53
+ m_dwInvalidDecodeFrequency = DEFAULT_INVALID_DECODE_FREQUENCY;
54
+ m_dwDecodeDuration = DEFAULT_DECODE_DURATION;
55
+ m_szScanDecodeWav = NULL;
56
+ m_szScanInvalidWav = NULL;
57
+ //Developer - Abhineet Agarwal
58
+ //Reading value from config.xml
59
+ m_bLowBatteryScan = RHOCONF().getBool("Scanner.LowBatteryScan");//rho_wmimpl_sharedconfig_getboolvalue(L"System\\LowBatteryScan");
60
+ m_bLegacyNavBehaviour = !RHOCONF().getBool("Scanner.DisableScannerDuringNavigation");//rho_wmimpl_sharedconfig_getboolvalue(L"Scanner\\DisableScannerDuringNavigation");
61
+ m_bCurrentlyNavigating = false;
62
+ m_bResetScanBuffer = false;
63
+ m_bScannedDuringNavigate = false;
64
+ // Scanner Properties
65
+ m_bAutoEnter = false;
66
+ m_bAutoTab = false;
67
+ m_iDataBufferSize = DEFAULT_SCAN_BUFFER_SIZE;
68
+ m_bufferFormat = BUFFER_TEXT;
69
+ m_currentScanType = SCAN_TYPE_BACKGROUND;
70
+ m_iDisplayBTPairBarcode = BT_PAIRING_BARCODE_INITIAL;
71
+ m_dwEnableTimeout = 0;
72
+ // RSM
73
+ m_rsmSupportedAttributes = NULL;
74
+ m_iCountOfMarkedRSMAttributes = 0;
75
+ // Viewfinder
76
+ m_iViewfinderRequestedLeft = -1;
77
+ m_iViewfinderRequestedRight = -1;
78
+ m_iViewfinderRequestedTop = -1;
79
+ m_iViewfinderRequestedBottom= -1;
80
+ // Low Battery Scan
81
+ m_hPowerNotifications = NULL;
82
+ m_hLowBatteryScanMessageQueueRead = NULL;
83
+ m_hLowBatteryScanMessageQueueWrite = NULL;
84
+ }
85
+
86
+ CScanner::~CScanner()
87
+ {
88
+ LOG(TRACE) + L"Destroy scanner instance.";
89
+ // TODO: This flag should not need to be global in true multiple instance.
90
+ // if (m_iInstanceID >= 0)
91
+ g_bShuttingDown = true;
92
+ //Modified by Developer - Abhineet Agarwal
93
+ //Terminating thread i.e. terminating low battery check, if running.....
94
+ if (!m_bLowBatteryScan){
95
+ POWER_BROADCAST PwrBcast[64];
96
+ WriteMsgQueue(m_hLowBatteryScanMessageQueueWrite, &PwrBcast, 64, INFINITE, 0);
97
+ StopPowerNotifications(m_hPowerNotifications);
98
+ CloseMsgQueue(m_hLowBatteryScanMessageQueueRead);
99
+ CloseMsgQueue(m_hLowBatteryScanMessageQueueWrite);
100
+ }
101
+
102
+ // Shut down the thread processing RSM Tags for retrieval
103
+ ATTRIB_NUMBER shutDownRSM = (ATTRIB_NUMBER)ATTR_END;
104
+ // WriteMsgQueue(m_hRSMMsgQWrite,
105
+ // &shutDownRSM,
106
+ // sizeof(shutDownRSM),
107
+ // INFINITE, 0);
108
+
109
+ m_pDecodeEvent = NULL;
110
+ m_pBluetoothStatusEvent = NULL;
111
+ m_pRSMEvent = NULL;
112
+ m_pDeviceCapabilities = NULL;
113
+ m_pTakeCallback = NULL;
114
+ if (m_szScanDecodeWav)
115
+ delete[] m_szScanDecodeWav;
116
+ if (m_szScanInvalidWav)
117
+ delete[] m_szScanInvalidWav;
118
+
119
+ CloseScanner();
120
+ LOG(TRACE) + L"Scanner Closed.";
121
+
122
+ if (!UnloadEMDK())
123
+ return;
124
+
125
+ LOG(TRACE) + L"EMDK unloaded";
126
+
127
+ if (m_rsmSupportedAttributes)
128
+ {
129
+ delete[] m_rsmSupportedAttributes;
130
+ m_rsmSupportedAttributes = NULL;
131
+ }
132
+
133
+ // Close RSM Queues
134
+ // if (m_hRSMMsgQWrite)
135
+ // {
136
+ // CloseMsgQueue(m_hRSMMsgQWrite);
137
+ // m_hRSMMsgQWrite = NULL;
138
+ // }
139
+ // if (m_hRSMMsgQRead)
140
+ // {
141
+ // CloseMsgQueue(m_hRSMMsgQRead);
142
+ // m_hRSMMsgQRead = NULL;
143
+ // }
144
+
145
+ // Close Meta Tag Queues
146
+ if (m_hMetaMsgQWrite)
147
+ {
148
+ CloseMsgQueue (m_hMetaMsgQWrite);
149
+ m_hMetaMsgQWrite = NULL;
150
+ }
151
+ if (m_hMetaMsgQRead)
152
+ {
153
+ CloseMsgQueue (m_hMetaMsgQRead);
154
+ m_hMetaMsgQRead = NULL;
155
+ }
156
+
157
+ // Close the Tags on current page queues
158
+ if (m_hTagsOnCurrentPageQWrite)
159
+ {
160
+ CloseMsgQueue(m_hTagsOnCurrentPageQWrite);
161
+ m_hTagsOnCurrentPageQWrite = NULL;
162
+ }
163
+ if (m_hTagsOnCurrentPageQRead)
164
+ {
165
+ CloseMsgQueue(m_hTagsOnCurrentPageQRead);
166
+ m_hTagsOnCurrentPageQRead = NULL;
167
+ }
168
+
169
+ delete m_decodeNotifier;
170
+ delete m_keyInjector;
171
+ CloseHandle(m_hReadComplete);
172
+ CloseHandle(m_hEnableForTakeComplete);
173
+ // Free the memory into which the scanned data was stored
174
+ delete[] m_lastScannedData.szData;
175
+ CloseHandle(m_hUniqueEvent);
176
+
177
+ //LOG(TRACE) + L"Cleanup done.";
178
+
179
+ }
180
+
181
+ BOOL CScanner::Initialise(bool bLaunchingAppHasFocus, const WCHAR* szScannerID)
182
+ {
183
+ m_bApplicationActive = bLaunchingAppHasFocus;
184
+ // For RE4 we will know the Scanner ID when we launch
185
+ if (szScannerID)
186
+ {
187
+ m_szUserSpecifiedScanner = new WCHAR[wcslen(szScannerID) + 1];
188
+ wcscpy(m_szUserSpecifiedScanner, szScannerID);
189
+ }
190
+ // Load Scanner DLL
191
+ BOOL bReturnValue = LoadEMDK();
192
+ if (!bReturnValue)
193
+ {
194
+ LOG(ERROR) + L"Unable to load Scanner Driver, quitting scanner initialisation";
195
+ }
196
+ else
197
+ {
198
+ // Populate Internal meta tag structure (to make it faster to parse tags)
199
+ InitialiseMETATagMapForSet();
200
+ InitialiseMETATagMapForGet();
201
+ InitialiseDecoderStringMap();
202
+
203
+ // Initialise Meta Tag Message queues (to handle meta tags when scanner is not enabled)
204
+ MSGQUEUEOPTIONS metaMsgQOpt;
205
+ metaMsgQOpt.dwSize = sizeof(metaMsgQOpt);
206
+ metaMsgQOpt.dwFlags = MSGQUEUE_ALLOW_BROKEN;
207
+ metaMsgQOpt.dwMaxMessages = 0;
208
+ metaMsgQOpt.cbMaxMessage = sizeof(MetaTagQEntry);
209
+ metaMsgQOpt.bReadAccess = TRUE;
210
+ WCHAR metaMsgQName[16];
211
+ wsprintf(metaMsgQName, L"MetaMsgQ%i", m_iInstanceID2);
212
+ m_hMetaMsgQRead = CreateMsgQueue(metaMsgQName, &metaMsgQOpt);
213
+ metaMsgQOpt.bReadAccess = FALSE;
214
+ m_hMetaMsgQWrite = CreateMsgQueue(metaMsgQName, &metaMsgQOpt);
215
+
216
+ // Initialise RSM Message Queues for marking RSM values for retrieval
217
+ // MSGQUEUEOPTIONS rsmMsgQOpt;
218
+ // rsmMsgQOpt.dwSize = sizeof(rsmMsgQOpt);
219
+ // rsmMsgQOpt.dwFlags = MSGQUEUE_ALLOW_BROKEN;
220
+ // rsmMsgQOpt.dwMaxMessages = 0;
221
+ // rsmMsgQOpt.cbMaxMessage = sizeof(ATTRIB_NUMBER);
222
+ // rsmMsgQOpt.bReadAccess = TRUE;
223
+ // WCHAR rsmMsgQName[16];
224
+ // wsprintf(rsmMsgQName, L"rsmMsgQ%i", m_iInstanceID2);
225
+ // m_hRSMMsgQRead = CreateMsgQueue(rsmMsgQName, &rsmMsgQOpt);
226
+ // rsmMsgQOpt.bReadAccess = FALSE;
227
+ // m_hRSMMsgQWrite = CreateMsgQueue(rsmMsgQName, &rsmMsgQOpt);
228
+
229
+ // Initialise the Tags on current page Message Queues, holding the tags parsed on
230
+ // the current page
231
+ MSGQUEUEOPTIONS tagsOnPageMsgQOpt;
232
+ tagsOnPageMsgQOpt.dwSize = sizeof(tagsOnPageMsgQOpt);
233
+ tagsOnPageMsgQOpt.dwFlags = MSGQUEUE_ALLOW_BROKEN;
234
+ // If you don't navigate from the page or minimize the app the queue of scanner requsts
235
+ // grows without limit. Apply a limit here.
236
+ tagsOnPageMsgQOpt.dwMaxMessages = 250;
237
+ tagsOnPageMsgQOpt.cbMaxMessage = sizeof(MetaTagQEntry);
238
+ tagsOnPageMsgQOpt.bReadAccess = TRUE;
239
+ WCHAR tagsOnPageMsgQName[16];
240
+ wsprintf(tagsOnPageMsgQName, L"PageMsgQ%i", m_iInstanceID2);
241
+ m_hTagsOnCurrentPageQRead = CreateMsgQueue(tagsOnPageMsgQName, &tagsOnPageMsgQOpt);
242
+ tagsOnPageMsgQOpt.bReadAccess = FALSE;
243
+ m_hTagsOnCurrentPageQWrite = CreateMsgQueue(tagsOnPageMsgQName, &tagsOnPageMsgQOpt);
244
+
245
+ m_keyInjector = new CKeyInjector();
246
+ m_decodeNotifier = new CDecodeNotifier();
247
+ LPCTSTR pScanDecodeWavValue;
248
+ pScanDecodeWavValue = rho::common::convertToStringW(RHOCONF().getString("Scanner.ScanDecodeWav").c_str()).c_str();
249
+ if (pScanDecodeWavValue)
250
+ {
251
+ if (m_szScanDecodeWav){
252
+ delete[] m_szScanDecodeWav;
253
+ m_szScanDecodeWav = NULL;
254
+ }
255
+ m_szScanDecodeWav = new WCHAR[wcslen(pScanDecodeWavValue) + 1];
256
+ wcscpy(m_szScanDecodeWav, pScanDecodeWavValue);
257
+ }
258
+
259
+ m_decodeNotifier->Initialise(m_dwDecodeVolume, m_dwDecodeFrequency,
260
+ m_dwInvalidDecodeFrequency, m_dwDecodeDuration, m_szScanDecodeWav,
261
+ m_szScanInvalidWav);
262
+
263
+ // Initialise RSM
264
+ //CloseHandle(CreateThread(NULL, 0, &ProcessRSMGetQueue, (void*)this, 0, NULL));
265
+
266
+ // Other Initialisation
267
+ // Named event will need to be instance specific in multi instance environment
268
+ WCHAR szReadEventName[25];
269
+ wsprintf(szReadEventName, L"NeonReadScanEven4%i", m_iInstanceID2);
270
+ m_hReadComplete = CreateEvent(NULL, TRUE, FALSE, szReadEventName);
271
+ WCHAR szTakeEventName[25];
272
+ wsprintf(szTakeEventName, L"NeonTakeEven4%i", m_iInstanceID2);
273
+ m_hEnableForTakeComplete = CreateEvent(NULL, TRUE, FALSE, szTakeEventName);
274
+ // Allocate the memory in m_lpScanBuffer to retrieve the data
275
+ m_lastScannedData.szData = new WCHAR[m_iDataBufferSize];
276
+ if (!m_lastScannedData.szData)
277
+ LOG(ERROR) + L"Unable to allocate memory to return data buffer";
278
+
279
+ // Register a class for the hidden window to receive Windows Notifications
280
+ WNDCLASS wndclass;
281
+ memset (&wndclass, 0, sizeof wndclass);
282
+ wndclass.lpfnWndProc = HiddenWindowProc;
283
+ wndclass.hInstance = NULL;
284
+ wsprintf(m_szHiddenWindowName, L"RhoElementsScan%i", m_iInstanceID2);
285
+ wndclass.lpszClassName = m_szHiddenWindowName;
286
+ RegisterClass (&wndclass);
287
+ }
288
+ return bReturnValue;
289
+ }
290
+ /*
291
+ // Existing logging function removed for RE4 to allow Rhodes' existing log macro to work properly
292
+ BOOL CScanner::Log(int logSeverity, LPCTSTR pLogComment,
293
+ LPCTSTR pFunctionName, DWORD dwLineNumber)
294
+ {
295
+ DEBUGMSG(true, (L"Log: %s\n", pLogComment));
296
+ LOG(ERROR) + pLogComment;
297
+ return TRUE;
298
+ // return m_pModule->Log(logSeverity, pLogComment, pFunctionName, dwLineNumber);
299
+ }
300
+ */
301
+
302
+ BOOL CScanner::BeforeNavigate()
303
+ {
304
+ // Browser is navigating, ignore any scans that occur
305
+ m_bCurrentlyNavigating = true;
306
+ m_bScannedDuringNavigate = false;
307
+
308
+ // Reset the Events to ""
309
+ m_pDecodeEvent = NULL;
310
+ m_pBluetoothStatusEvent = NULL;
311
+ m_pRSMEvent = NULL;
312
+ m_pDeviceCapabilities = NULL;
313
+ m_pTakeCallback = NULL;
314
+
315
+ if (m_bLegacyNavBehaviour)
316
+ {
317
+ BOOL bSetTrigger = FALSE;
318
+ (lpfn_SCAN_SetSoftTrigger(m_hScanner, &bSetTrigger) == E_SCN_SUCCESS);
319
+ }
320
+ else
321
+ {
322
+ // Empty the list of tags on the current page.
323
+ ActionPendingMetaTags(m_hTagsOnCurrentPageQRead, false);
324
+ // Before we navigate disable the scanner by default
325
+ CloseScanner();
326
+ }
327
+ return TRUE;
328
+ }
329
+
330
+ BOOL CScanner::DocumentComplete()
331
+ {
332
+ m_bCurrentlyNavigating = false;
333
+
334
+ // Reopen the enabled Scanner which was closed during navigate
335
+ // (will only happen if the user tried to scan during a navigate)
336
+ if (m_bScannedDuringNavigate && m_bScannerEnabled)
337
+ {
338
+ m_bScannedDuringNavigate = false;
339
+ SubmitRead();
340
+ }
341
+
342
+ // Tags may have been queued whilst we were navigating, clear them here
343
+ if (m_bScannerEnabled)
344
+ ActionPendingMetaTags(m_hMetaMsgQRead, true);
345
+
346
+ return TRUE;
347
+ }
348
+
349
+ BOOL CScanner::ApplicationFocusChange(bool bActivated)
350
+ {
351
+ // An Application focus change is received when this Scanner instance either
352
+ // goes to the background (bActivated False) or comes to the foreground
353
+ // (bActivated True).
354
+
355
+ // the application focus change was messing up
356
+ // registering the RSM scanner by scanning the barcode being displayed on the
357
+ // device. If we have lost focus as a result of displaying the BT barcode ignore it
358
+ HWND hBtWnd = FindWindow(L"DisplayBarcode", L"Scan barcode");
359
+ if (!hBtWnd)
360
+ hBtWnd = FindWindow(L"Dialog", L"Enter Passcode");
361
+ if (!hBtWnd)
362
+ hBtWnd = FindWindow(L"Dialog", L"Bluetooth");
363
+ if (!hBtWnd)
364
+ hBtWnd = FindWindow(L"Dialog", L"Device Added");
365
+ if (!hBtWnd)
366
+ hBtWnd = FindWindow(L"Dialog", L"Cannot Connect");
367
+ if (!hBtWnd)
368
+ hBtWnd = FindWindow(L"MotoBTUI", L"MotoBTUI");
369
+ // EMDPD00153787: These values are for the APD progressbar Popup. They are obtained from the APD prtlib resource file
370
+ // (under source control in the BROWSER ClearCase VOB). The scanner will now ignore focus changes from the APD
371
+ // Printer connection dialog.
372
+ if (!hBtWnd)
373
+ hBtWnd = FindWindow(L"Prtdrv", L"Symbol APD V2.19.06");
374
+ if (hBtWnd)
375
+ {
376
+ // Scan Barcode window is shown, if it's the foreground window ignore the
377
+ // focus change.
378
+ if (hBtWnd == GetForegroundWindow())
379
+ {
380
+ //LOG(TRACE) + "Bluetooth UI on top";
381
+ return TRUE;
382
+ }
383
+ else
384
+ {
385
+ // Some devices uses different application
386
+ // to show the BT association barcode. Unfortunately that
387
+ // popup is unnamed but is always launched from BTUI window:
388
+ if (hBtWnd == GetWindow(GetForegroundWindow(), GW_HWNDNEXT))
389
+ {
390
+ //LOG(TRACE) + "Bluetooth UI on top (MPA3)";
391
+ return TRUE;
392
+ }
393
+ }
394
+ }
395
+
396
+ if (bActivated && !m_bApplicationActive)
397
+ {
398
+ //LOG(TRACE) + "Scanner UI activated";
399
+ // Application has become active. Parse the tags processed on the current page.
400
+ m_bApplicationActive = true;
401
+ ActionPendingMetaTags(m_hTagsOnCurrentPageQRead, true);
402
+ }
403
+ else if (!bActivated && m_bApplicationActive)
404
+ {
405
+ //LOG(TRACE) + "Scanner UI deactived";
406
+ // Application has gone into the background. Disable the Scanner and reset
407
+ // it to its default state.
408
+ m_bApplicationActive = false;
409
+ DisableScannerAndResetToDefault();
410
+ }
411
+ else
412
+ {
413
+ WCHAR wLog[MAXLOG];
414
+ wsprintf(wLog, L"Unexpected application activation received by scanner, current state is %u but request was for %u",
415
+ m_bApplicationActive, bActivated);
416
+ // Changing this log to trace as it is causing a lot of confusion in the field
417
+ LOG(TRACE) + wLog;
418
+ }
419
+ return TRUE;
420
+ }
421
+
422
+ void CScanner::SetCallback(int iWhichCallback, rho::apiGenerator::CMethodResult pCallback)
423
+ {
424
+ if (iWhichCallback == 0)
425
+ m_pDecodeEvent = pCallback;
426
+ else if (iWhichCallback == 1)
427
+ m_pBluetoothStatusEvent = pCallback;
428
+ else if (iWhichCallback == 2)
429
+ m_pRSMEvent = pCallback;
430
+ else if (iWhichCallback == 3)
431
+ m_pDeviceCapabilities = pCallback;
432
+ else if (iWhichCallback == 4)
433
+ m_pTakeCallback = pCallback;
434
+ }
435
+
436
+ BOOL CScanner::SetPropertyOrMethod(LPCTSTR szPropertyName, LPCTSTR szPropertyValue)
437
+ {
438
+ BOOL bResult = FALSE;
439
+ metaTagsSetIterator = metaTagsSetFunctions.find(szPropertyName);
440
+ if (metaTagsSetIterator != metaTagsSetFunctions.end())
441
+ {
442
+ if (!AddMetaTagToQueue(m_hTagsOnCurrentPageQWrite, szPropertyName, szPropertyValue))
443
+ LOG(WARNING) + L"Number of scanner methods / properties has exceeded the limit which can be re-applied when switching out to another native application (" + szPropertyName + ")";
444
+ if (m_bApplicationActive)
445
+ {
446
+ // Only process certain meta tags before the Scanner is enabled, all others are
447
+ // queued up
448
+ if (!m_bScannerEnabled || m_bCurrentlyNavigating)
449
+ {
450
+ for (int i = 0;;i++)
451
+ {
452
+ if (wAllowedTagsWhilstNotEnabled[i] == NULL)
453
+ {
454
+ // Our tag was not allowed, queue it up
455
+ return AddMetaTagToQueue(m_hMetaMsgQWrite, szPropertyName, szPropertyValue);
456
+ }
457
+ else if (cmp(wAllowedTagsWhilstNotEnabled[i], szPropertyName))
458
+ {
459
+ // This tag is allowed
460
+ break;
461
+ }
462
+ }
463
+ }
464
+ bResult = (*this.*(metaTagsSetFunctions[szPropertyName]))(szPropertyName, szPropertyValue);
465
+ }
466
+ else
467
+ {
468
+ // set bResult to true as the tag will be processed after we become active
469
+ bResult = true;
470
+ }
471
+ }
472
+ else
473
+ {
474
+ // Meta Tag was not recognised by the Scanner
475
+ WCHAR wLog[MAXLOG];
476
+ wsprintf(wLog, L"Parameter %s not found in Scanner Module", szPropertyName);
477
+ LOG(WARNING) + wLog;
478
+ }
479
+ return bResult;
480
+ }
481
+
482
+ // Call this to retrieve the value of an EMML Tag
483
+ int CScanner::RetrieveProperty(LPCTSTR szParameterName, WCHAR* szParameterValue)
484
+ {
485
+ int iResult = -1;
486
+ metaTagsGetIterator = metaTagsGetFunctions.find(szParameterName);
487
+ // if (metaTagsGetFunctions[szParameterName])
488
+ if (metaTagsGetIterator != metaTagsGetFunctions.end())
489
+ {
490
+ // Only attempt to retrieve the current setting if the Scanner is enabled
491
+ if (!m_bScannerEnabled)
492
+ {
493
+ // Scanner is not enabled, ensure this parameter is retrieval when the scanner is not enabled
494
+ for (int i = 0;;i++)
495
+ {
496
+ if (wAllowedTagsWhilstNotEnabled[i] == NULL)
497
+ {
498
+ LOG(INFO) + L"Unable to retrieve Scanner parameter as no scanner is enabled";
499
+ return -1;
500
+ }
501
+ else if (cmp(wAllowedTagsWhilstNotEnabled[i], szParameterName))
502
+ {
503
+ // This tag is allowed
504
+ break;
505
+ }
506
+ }
507
+ }
508
+ // Before we retrieve this property ensure we are an RS507 Scanner
509
+ if (m_bScannerEnabled && !m_bUsingBluetoothScanner &&
510
+ ((metaTagsGetFunctions[szParameterName]) == &CScanner::rsm_GetPropertyValue))
511
+ {
512
+ LOG(WARNING) + L"Could not retrieve RSM Property " + szParameterName + " because the enabled scanner is not a bluetooth ring scanner";
513
+ return -1;
514
+ }
515
+ iResult = (*this.*(metaTagsGetFunctions[szParameterName]))(szParameterName, szParameterValue);
516
+ }
517
+ else
518
+ {
519
+ // Meta Tag was not recognised by the Scanner
520
+ WCHAR wLog[MAXLOG];
521
+ wsprintf(wLog, L"Parameter %s not found in Scanner Module", szParameterName);
522
+ LOG(WARNING) + wLog;
523
+ }
524
+ return iResult;
525
+ }
526
+
527
+ void CScanner::RetrieveAllProperties(rho::apiGenerator::CMethodResult* pCallback)
528
+ {
529
+ // Iterate over the metaTagsGetFunctions which contains all the possible
530
+ // properties to retrieve
531
+ rho::Hashtable<rho::String, rho::String> propsHash;
532
+ for (metaTagsGetIterator = metaTagsGetFunctions.begin();
533
+ metaTagsGetIterator != metaTagsGetFunctions.end();
534
+ metaTagsGetIterator++)
535
+ {
536
+ // Only return RSM properties for BT Scanners
537
+ if (!(wcslen(metaTagsGetIterator->first) > 3 && wcsnicmp(metaTagsGetIterator->first, L"rsm", 3) == 0 &&
538
+ !m_bUsingBluetoothScanner))
539
+ {
540
+ int iValueLength = RetrieveProperty(metaTagsGetIterator->first, NULL);
541
+ if (iValueLength > 0)
542
+ {
543
+ WCHAR szValue[MAXIMUM_PARAMETER_LENGTH];
544
+ if (!szValue) {return;}
545
+ (*this.*(metaTagsGetFunctions[metaTagsGetIterator->first]))(metaTagsGetIterator->first, szValue);
546
+ propsHash.put(rho::common::convertToStringA(metaTagsGetIterator->first), rho::common::convertToStringA(szValue));
547
+ }
548
+ else
549
+ propsHash.put(rho::common::convertToStringA(metaTagsGetIterator->first), "Unavailable");
550
+ }
551
+ }
552
+ pCallback->set(propsHash);
553
+ }
554
+
555
+ // Get all properties supported on WM / CE
556
+ void CScanner::GetSupportedProperties(rho::apiGenerator::CMethodResult* pCallback)
557
+ {
558
+ rho::Vector<rho::String> supportedProps;
559
+ // Iterate over the metaTagsGetFunctions which contains all the possible
560
+ // properties we support
561
+ rho::Hashtable<rho::String, rho::String> propsHash;
562
+ for (metaTagsGetIterator = metaTagsGetFunctions.begin();
563
+ metaTagsGetIterator != metaTagsGetFunctions.end();
564
+ metaTagsGetIterator++)
565
+ {
566
+ // Only return RSM properties for BT Scanners
567
+ if (!(wcslen(metaTagsGetIterator->first) > 3 && wcsnicmp(metaTagsGetIterator->first, L"rsm", 3) == 0 &&
568
+ !m_bUsingBluetoothScanner))
569
+ {
570
+ supportedProps.addElement(rho::common::convertToStringA(metaTagsGetIterator->first));
571
+ }
572
+ }
573
+ pCallback->set(supportedProps);
574
+ }
575
+
576
+
577
+ #pragma endregion
578
+
579
+ #pragma region EMDK_Interface
580
+
581
+ BOOL CScanner::LoadEMDK()
582
+ {
583
+ if (m_hScnAPIDLL)
584
+ {
585
+ LOG(INFO) + L"Attempted to load scanner driver but it is already loaded";
586
+ return FALSE;
587
+ }
588
+ m_hScnAPIDLL = LoadLibrary(EMDK_DLL);
589
+ if (!m_hScnAPIDLL)
590
+ {
591
+ LOG(WARNING) + L"Failed to load scanner driver";
592
+ return FALSE;
593
+ }
594
+
595
+ // Map function pointers to functions exported from the DLL
596
+ lpfn_SCAN_AllocateBuffer = (LPFN_SCAN_ALLOCATEBUFFER_T)GetProcAddress
597
+ (m_hScnAPIDLL, _T(SCAN_AllocateBuffer_EXPORT));
598
+ lpfn_SCAN_CancelRead = (LPFN_SCAN_CANCELREAD_T)GetProcAddress
599
+ (m_hScnAPIDLL, _T(SCAN_CancelRead_EXPORT));
600
+ lpfn_SCAN_DeallocateBuffer = (LPFN_SCAN_DEALLOCATEBUFFER_T)GetProcAddress
601
+ (m_hScnAPIDLL, _T(SCAN_DeallocateBuffer_EXPORT));
602
+ lpfn_SCAN_Disable = (LPFN_SCAN_DISABLE_T)GetProcAddress
603
+ (m_hScnAPIDLL, _T(SCAN_Disable_EXPORT));
604
+ lpfn_SCAN_Flush = (LPFN_SCAN_FLUSH_T)GetProcAddress
605
+ (m_hScnAPIDLL, _T(SCAN_Flush_EXPORT));
606
+ lpfn_SCAN_GetDecoderParams = (LPFN_SCAN_GETDECODERPARAMS_T)GetProcAddress
607
+ (m_hScnAPIDLL, _T(SCAN_GetDecoderParams_EXPORT));
608
+ lpfn_SCAN_GetEnabledDecoders = (LPFN_SCAN_GETENABLEDDECODERS_T)GetProcAddress
609
+ (m_hScnAPIDLL, _T(SCAN_GetEnabledDecoders_EXPORT));
610
+ lpfn_SCAN_GetReaderParams = (LPFN_SCAN_GETREADERPARAMS_T)GetProcAddress
611
+ (m_hScnAPIDLL, _T(SCAN_GetReaderParams_EXPORT));
612
+ lpfn_SCAN_GetScanParameters = (LPFN_SCAN_GETSCANPARAMETERS_T)GetProcAddress
613
+ (m_hScnAPIDLL, _T(SCAN_GetScanParameters_EXPORT));
614
+ lpfn_SCAN_GetScanStatus = (LPFN_SCAN_GETSCANSTATUS_T)GetProcAddress
615
+ (m_hScnAPIDLL, _T(SCAN_GetScanStatus_EXPORT));
616
+ lpfn_SCAN_GetSupportedDecoders = (LPFN_SCAN_GETSUPPORTEDDECODERS_T)GetProcAddress
617
+ (m_hScnAPIDLL, _T(SCAN_GetSupportedDecoders_EXPORT));
618
+ lpfn_SCAN_GetUPCEANParams = (LPFN_SCAN_GETUPCEANPARAMS_T)GetProcAddress
619
+ (m_hScnAPIDLL, _T(SCAN_GetUPCEANParams_EXPORT));
620
+ lpfn_SCAN_Open = (LPFN_SCAN_OPEN_T)GetProcAddress
621
+ (m_hScnAPIDLL, _T(SCAN_Open_EXPORT));
622
+ lpfn_SCAN_ReadLabelEvent = (LPFN_SCAN_READLABELEVENT_T)GetProcAddress
623
+ (m_hScnAPIDLL, _T(SCAN_ReadLabelEvent_EXPORT));
624
+ lpfn_SCAN_ReadLabelMsg = (LPFN_SCAN_READLABELMSG_T)GetProcAddress
625
+ (m_hScnAPIDLL, _T(SCAN_ReadLabelMsg_EXPORT));
626
+ lpfn_SCAN_RSMGetAttribute = (LPFN_SCAN_RSMGETATTRIBUTE_T)GetProcAddress
627
+ (m_hScnAPIDLL, _T(SCAN_RSMGetAttribute_EXPORT));
628
+ lpfn_SCAN_RSMGetSupportedAttributes = (LPFN_SCAN_RSMGETSUPPORTEDATTRIBUTES_T)GetProcAddress
629
+ (m_hScnAPIDLL, _T(SCAN_RSMGetSupportedAttributes_EXPORT));
630
+ lpfn_SCAN_RSMSetAttribute = (LPFN_SCAN_RSMSETATTRIBUTE_T)GetProcAddress
631
+ (m_hScnAPIDLL, _T(SCAN_RSMSetAttribute_EXPORT));
632
+ lpfn_SCAN_SetDecoderParams = (LPFN_SCAN_SETDECODERPARAMS_T)GetProcAddress
633
+ (m_hScnAPIDLL, _T(SCAN_SetDecoderParams_EXPORT));
634
+ lpfn_SCAN_SetEnabledDecoders = (LPFN_SCAN_SETENABLEDDECODERS_T)GetProcAddress
635
+ (m_hScnAPIDLL, _T(SCAN_SetEnabledDecoders_EXPORT));
636
+ lpfn_SCAN_SetReaderParams = (LPFN_SCAN_SETREADERPARAMS_T)GetProcAddress
637
+ (m_hScnAPIDLL, _T(SCAN_SetReaderParams_EXPORT));
638
+ lpfn_SCAN_SetScanParameters = (LPFN_SCAN_SETSCANPARAMETERS_T)GetProcAddress
639
+ (m_hScnAPIDLL, _T(SCAN_SetScanParameters_EXPORT));
640
+ lpfn_SCAN_SetSoftTrigger = (LPFN_SCAN_SETSOFTTRIGGER_T)GetProcAddress
641
+ (m_hScnAPIDLL, _T(SCAN_SetSoftTrigger_EXPORT));
642
+ lpfn_SCAN_SetUPCEANParams = (LPFN_SCAN_SETUPCEANPARAMS_T)GetProcAddress
643
+ (m_hScnAPIDLL, _T(SCAN_SetUPCEANParams_EXPORT));
644
+ lpfn_SCAN_Close = (LPFN_SCAN_CLOSE_T)GetProcAddress(
645
+ m_hScnAPIDLL, _T(SCAN_Close_EXPORT));
646
+ lpfn_SCAN_Enable = (LPFN_SCAN_ENABLE_T)GetProcAddress
647
+ (m_hScnAPIDLL, _T(SCAN_Enable_EXPORT));
648
+ lpfn_SCAN_RegisterScanMessage = (LPFN_SCAN_REGISTERSCANMESSAGE_T)GetProcAddress
649
+ (m_hScnAPIDLL, _T(SCAN_RegisterScanMessage_EXPORT));
650
+ lpfn_SCAN_DeRegisterScanMessage = (LPFN_SCAN_DEREGISTERSCANMESSAGE_T)GetProcAddress
651
+ (m_hScnAPIDLL, _T(SCAN_DeRegisterScanMessage_EXPORT));
652
+ lpfn_SCAN_FindFirst = (LPFN_SCAN_FINDFIRST_T)GetProcAddress
653
+ (m_hScnAPIDLL, _T(SCAN_FindFirst_EXPORT));
654
+ lpfn_SCAN_FindNext = (LPFN_SCAN_FINDNEXT_T)GetProcAddress
655
+ (m_hScnAPIDLL, _T(SCAN_FindNext_EXPORT));
656
+ lpfn_SCAN_FindClose = (LPFN_SCAN_FINDCLOSE_T)GetProcAddress
657
+ (m_hScnAPIDLL, _T(SCAN_FindClose_EXPORT));
658
+ lpfn_SCAN_GetInterfaceParams = (LPFN_SCAN_GETINTERFACEPARAMS_T)GetProcAddress
659
+ (m_hScnAPIDLL, _T(SCAN_GetInterfaceParams_EXPORT));
660
+ lpfn_SCAN_SetInterfaceParams = (LPFN_SCAN_SETINTERFACEPARAMS_T)GetProcAddress
661
+ (m_hScnAPIDLL, _T(SCAN_SetInterfaceParams_EXPORT));
662
+ lpfn_SCAN_GetDeviceInfo = (LPFN_SCAN_GETDEVICEINFO_T)GetProcAddress
663
+ (m_hScnAPIDLL, _T(SCAN_GetDeviceInfo_EXPORT));
664
+ lpfn_SCAN_GetVersionInfo = (LPFN_SCAN_GETVERSIONINFO_T)GetProcAddress
665
+ (m_hScnAPIDLL, _T(SCAN_GetVersionInfo_EXPORT));
666
+
667
+ // Check all functions have been loaded. It is not an error for RSM functions
668
+ // to not be loaded, that functionality just won't be available
669
+ if (!lpfn_SCAN_AllocateBuffer)
670
+ {
671
+ LOG(ERROR) + L"Unable to load SCAN_AllocateBuffer";
672
+ return FALSE;
673
+ }
674
+ if (!lpfn_SCAN_CancelRead)
675
+ LOG(ERROR) + L"Unable to load SCAN_CancelRead";
676
+ if (!lpfn_SCAN_DeallocateBuffer)
677
+ LOG(ERROR) + L"Unable to load SCAN_DeallocateBuffer";
678
+ if (!lpfn_SCAN_Disable)
679
+ LOG(ERROR) + L"Unable to load SCAN_Disable";
680
+ if (!lpfn_SCAN_Flush)
681
+ LOG(ERROR) + L"Unable to load SCAN_Flush";
682
+ if (!lpfn_SCAN_GetDecoderParams)
683
+ LOG(ERROR) + L"Unable to load SCAN_GetDecoderParams";
684
+ if (!lpfn_SCAN_GetEnabledDecoders)
685
+ LOG(ERROR) + L"Unable to load SCAN_GetEnabledDecoders";
686
+ if (!lpfn_SCAN_GetReaderParams)
687
+ LOG(ERROR) + L"Unable to load SCAN_GetReaderParams";
688
+ if (!lpfn_SCAN_GetScanParameters)
689
+ LOG(ERROR) + L"Unable to load SCAN_GetScanParameters";
690
+ if (!lpfn_SCAN_GetScanStatus)
691
+ LOG(ERROR) + L"Unable to load SCAN_GetScanStatus";
692
+ if (!lpfn_SCAN_GetSupportedDecoders)
693
+ LOG(ERROR) + L"Unable to load SCAN_GetSupportedDecoders";
694
+ if (!lpfn_SCAN_GetUPCEANParams)
695
+ LOG(ERROR) + L"Unable to load SCAN_GetUPCEANParams";
696
+ if (!lpfn_SCAN_Open)
697
+ LOG(ERROR) + L"Unable to load SCAN_Open";
698
+ if (!lpfn_SCAN_ReadLabelEvent)
699
+ LOG(ERROR) + L"Unable to load SCAN_ReadLabelEvent";
700
+ if (!lpfn_SCAN_ReadLabelMsg)
701
+ LOG(ERROR) + L"Unable to load SCAN_ReadLabelMsg";
702
+ if (!lpfn_SCAN_SetDecoderParams)
703
+ LOG(ERROR) + L"Unable to load SCAN_SetDecoderParams";
704
+ if (!lpfn_SCAN_SetEnabledDecoders)
705
+ LOG(ERROR) + L"Unable to load SCAN_SetEnabledDecoders";
706
+ if (!lpfn_SCAN_SetReaderParams)
707
+ LOG(ERROR) + L"Unable to load SCAN_SetReaderParams";
708
+ if (!lpfn_SCAN_SetScanParameters)
709
+ LOG(ERROR) + L"Unable to load SCAN_SetScanParameters";
710
+ if (!lpfn_SCAN_SetSoftTrigger)
711
+ LOG(ERROR) + L"Unable to load SCAN_SetSoftTrigger";
712
+ if (!lpfn_SCAN_SetUPCEANParams)
713
+ LOG(ERROR) + L"Unable to load SCAN_SetUPCEANParams";
714
+ if (!lpfn_SCAN_Close)
715
+ LOG(ERROR) + L"Unable to load SCAN_Close";
716
+ if (!lpfn_SCAN_Enable)
717
+ LOG(ERROR) + L"Unable to load SCAN_Enable";
718
+ if (!lpfn_SCAN_RegisterScanMessage)
719
+ LOG(ERROR) + L"Unable to load SCAN_RegisterScanMessage";
720
+ if (!lpfn_SCAN_DeRegisterScanMessage)
721
+ LOG(ERROR) + L"Unable to load SCAN_DeRegisterScanMessage";
722
+ if (!lpfn_SCAN_FindFirst)
723
+ LOG(ERROR) + L"Unable to load SCAN_FindFirst";
724
+ if (!lpfn_SCAN_FindNext)
725
+ LOG(ERROR) + L"Unable to load SCAN_FindNext";
726
+ if (!lpfn_SCAN_FindClose)
727
+ LOG(ERROR) + L"Unable to load SCAN_FindClose";
728
+ if (!lpfn_SCAN_GetInterfaceParams)
729
+ LOG(ERROR) + L"Unable to Load SCAN_GetInterfaceParams";
730
+ if (!lpfn_SCAN_SetInterfaceParams)
731
+ LOG(ERROR) + L"Unable to Load SCAN_SetInterfaceParams";
732
+ if (!lpfn_SCAN_GetDeviceInfo)
733
+ LOG(ERROR) + L"Unable to Load SCAN_GetDeviceInfo";
734
+ if (!lpfn_SCAN_GetVersionInfo)
735
+ LOG(ERROR) + L"Unable to Load SCAN_GetVersionInfo";
736
+
737
+ // Unable to Load RSM Attributes
738
+ if (!(lpfn_SCAN_RSMGetAttribute && lpfn_SCAN_RSMGetSupportedAttributes && lpfn_SCAN_RSMSetAttribute))
739
+ LOG(INFO) + L"RSM Functionality is not supported on this device";
740
+
741
+ return TRUE;
742
+ }
743
+
744
+ BOOL CScanner::UnloadEMDK()
745
+ {
746
+ if (m_hScnAPIDLL)
747
+ {
748
+ FreeLibrary(m_hScnAPIDLL);
749
+ m_hScnAPIDLL = NULL;
750
+ }
751
+ else
752
+ {
753
+ LOG(WARNING) + L"Attempted to unload Scanner Driver but it is not loaded";
754
+ return FALSE;
755
+ }
756
+
757
+ // Nullify Function Pointers
758
+ InitialiseEMDKFunctionPointers();
759
+
760
+ return TRUE;
761
+ }
762
+
763
+ #pragma endregion
764
+
765
+ #pragma region InitialisationFunctions
766
+
767
+ void CScanner::InitialiseEMDKFunctionPointers()
768
+ {
769
+ lpfn_SCAN_AllocateBuffer = NULL;
770
+ lpfn_SCAN_CancelRead = NULL;
771
+ lpfn_SCAN_DeallocateBuffer = NULL;
772
+ lpfn_SCAN_Disable = NULL;
773
+ lpfn_SCAN_Flush = NULL;
774
+ lpfn_SCAN_GetDecoderParams = NULL;
775
+ lpfn_SCAN_GetEnabledDecoders = NULL;
776
+ lpfn_SCAN_GetReaderParams = NULL;
777
+ lpfn_SCAN_GetScanParameters = NULL;
778
+ lpfn_SCAN_GetScanStatus = NULL;
779
+ lpfn_SCAN_GetSupportedDecoders = NULL;
780
+ lpfn_SCAN_GetUPCEANParams = NULL;
781
+ lpfn_SCAN_Open = NULL;
782
+ lpfn_SCAN_ReadLabelEvent = NULL;
783
+ lpfn_SCAN_ReadLabelMsg = NULL;
784
+ lpfn_SCAN_RSMGetAttribute = NULL;
785
+ lpfn_SCAN_RSMGetSupportedAttributes = NULL;
786
+ lpfn_SCAN_RSMSetAttribute = NULL;
787
+ lpfn_SCAN_SetDecoderParams = NULL;
788
+ lpfn_SCAN_SetEnabledDecoders = NULL;
789
+ lpfn_SCAN_SetReaderParams = NULL;
790
+ lpfn_SCAN_SetScanParameters = NULL;
791
+ lpfn_SCAN_SetSoftTrigger = NULL;
792
+ lpfn_SCAN_SetUPCEANParams = NULL;
793
+ lpfn_SCAN_Close = NULL;
794
+ lpfn_SCAN_Enable = NULL;
795
+ lpfn_SCAN_RegisterScanMessage = NULL;
796
+ lpfn_SCAN_DeRegisterScanMessage = NULL;
797
+ lpfn_SCAN_FindFirst = NULL;
798
+ lpfn_SCAN_FindNext = NULL;
799
+ lpfn_SCAN_FindClose = NULL;
800
+ }
801
+
802
+
803
+ void CScanner::InitialiseMETATagMapForSet()
804
+ {
805
+ // Add All known meta tags to the map
806
+ metaTagsSetFunctions[L"All_Decoders"] = &CScanner::Set_all_decoders_MetaProc;
807
+ metaTagsSetFunctions[L"AllDecoders"] = &CScanner::Set_all_decoders_MetaProc;
808
+ metaTagsSetFunctions[L"Auspostal"] = &CScanner::Set_auspostal_MetaProc;
809
+ metaTagsSetFunctions[L"aztec"] = &CScanner::Set_AZTEC_MetaProc;
810
+ metaTagsSetFunctions[L"Canpostal"] = &CScanner::Set_canpostal_MetaProc;
811
+ metaTagsSetFunctions[L"chinese_2of5"] = &CScanner::Set_Chinese_2Of5_MetaProc;
812
+ metaTagsSetFunctions[L"chinese2of5"] = &CScanner::Set_Chinese_2Of5_MetaProc;
813
+ metaTagsSetFunctions[L"codabar"] = &CScanner::Set_codabar_MetaProc;
814
+ metaTagsSetFunctions[L"codabarCLSIEditing"] = &CScanner::Set_codabar_MetaProc;
815
+ metaTagsSetFunctions[L"codabarMaxLength"] = &CScanner::Set_codabar_MetaProc;
816
+ metaTagsSetFunctions[L"codabarMinLength"] = &CScanner::Set_codabar_MetaProc;
817
+ metaTagsSetFunctions[L"codabarNotisEditing"] = &CScanner::Set_codabar_MetaProc;
818
+ metaTagsSetFunctions[L"codabarRedundancy"] = &CScanner::Set_codabar_MetaProc;
819
+ metaTagsSetFunctions[L"code11"] = &CScanner::Set_code11_MetaProc;
820
+ metaTagsSetFunctions[L"code11CheckDigitCount"] = &CScanner::Set_code11_MetaProc;
821
+ metaTagsSetFunctions[L"code11Redundancy"] = &CScanner::Set_code11_MetaProc;
822
+ metaTagsSetFunctions[L"code11ReportCheckdigit"] = &CScanner::Set_code11_MetaProc;
823
+ metaTagsSetFunctions[L"code128"] = &CScanner::Set_code128_MetaProc;
824
+ metaTagsSetFunctions[L"code128EAN128"] = &CScanner::Set_code128_MetaProc;
825
+ metaTagsSetFunctions[L"code128IsBT128"] = &CScanner::Set_code128_MetaProc;
826
+ metaTagsSetFunctions[L"code128MaxLength"] = &CScanner::Set_code128_MetaProc;
827
+ metaTagsSetFunctions[L"code128MinLength"] = &CScanner::Set_code128_MetaProc;
828
+ metaTagsSetFunctions[L"code39"] = &CScanner::Set_code39_MetaProc;
829
+ metaTagsSetFunctions[L"code39Code32Prefix"] = &CScanner::Set_code39_MetaProc;
830
+ metaTagsSetFunctions[L"code39Concatenation"] = &CScanner::Set_code39_MetaProc;
831
+ metaTagsSetFunctions[L"code39ConvertToCode32"] = &CScanner::Set_code39_MetaProc;
832
+ metaTagsSetFunctions[L"code39FullASCII"] = &CScanner::Set_code39_MetaProc;
833
+ metaTagsSetFunctions[L"code39MaxLength"] = &CScanner::Set_code39_MetaProc;
834
+ metaTagsSetFunctions[L"code39MinLength"] = &CScanner::Set_code39_MetaProc;
835
+ metaTagsSetFunctions[L"code39Redundancy"] = &CScanner::Set_code39_MetaProc;
836
+ metaTagsSetFunctions[L"code39ReportCheckDigit"] = &CScanner::Set_code39_MetaProc;
837
+ metaTagsSetFunctions[L"code39VerifyCheckDigit"] = &CScanner::Set_code39_MetaProc;
838
+ metaTagsSetFunctions[L"code93"] = &CScanner::Set_code93_MetaProc;
839
+ metaTagsSetFunctions[L"code93MaxLength"] = &CScanner::Set_code93_MetaProc;
840
+ metaTagsSetFunctions[L"code93MinLength"] = &CScanner::Set_code93_MetaProc;
841
+ metaTagsSetFunctions[L"code93Redundancy"] = &CScanner::Set_code93_MetaProc;
842
+ metaTagsSetFunctions[L"composit_ab"] = &CScanner::Set_composit_ab_MetaProc;
843
+ metaTagsSetFunctions[L"composite_ab"] = &CScanner::Set_composit_ab_MetaProc;
844
+ metaTagsSetFunctions[L"compositeab"] = &CScanner::Set_composit_ab_MetaProc;
845
+ metaTagsSetFunctions[L"composit_c"] = &CScanner::Set_composit_c_MetaProc;
846
+ metaTagsSetFunctions[L"composite_c"] = &CScanner::Set_composit_c_MetaProc;
847
+ metaTagsSetFunctions[L"compositec"] = &CScanner::Set_composit_c_MetaProc;
848
+ metaTagsSetFunctions[L"d2of5"] = &CScanner::Set_d2of5_MetaProc;
849
+ metaTagsSetFunctions[L"d2of5MaxLength"] = &CScanner::Set_d2of5_MetaProc;
850
+ metaTagsSetFunctions[L"d2of5MinLength"] = &CScanner::Set_d2of5_MetaProc;
851
+ metaTagsSetFunctions[L"d2of5Redundancy"] = &CScanner::Set_d2of5_MetaProc;
852
+ metaTagsSetFunctions[L"datamatrix"] = &CScanner::Set_datamatrix_MetaProc;
853
+ metaTagsSetFunctions[L"dutchPostal"] = &CScanner::Set_dutchpostal_MetaProc;
854
+ metaTagsSetFunctions[L"ean13"] = &CScanner::Set_ean13_MetaProc;
855
+ metaTagsSetFunctions[L"ean8"] = &CScanner::Set_ean8_MetaProc;
856
+ metaTagsSetFunctions[L"ean8ConvertToEAN13"] = &CScanner::Set_ean8_MetaProc;
857
+ metaTagsSetFunctions[L"i2of5"] = &CScanner::Set_i2of5_MetaProc;
858
+ metaTagsSetFunctions[L"i2of5ConvertToEAN13"] = &CScanner::Set_i2of5_MetaProc;
859
+ metaTagsSetFunctions[L"i2of5MaxLength"] = &CScanner::Set_i2of5_MetaProc;
860
+ metaTagsSetFunctions[L"i2of5MinLength"] = &CScanner::Set_i2of5_MetaProc;
861
+ metaTagsSetFunctions[L"i2of5Redundancy"] = &CScanner::Set_i2of5_MetaProc;
862
+ metaTagsSetFunctions[L"i2of5ReportCheckDigit"] = &CScanner::Set_i2of5_MetaProc;
863
+ metaTagsSetFunctions[L"i2of5VerifyCheckDigit"] = &CScanner::Set_i2of5_MetaProc;
864
+ metaTagsSetFunctions[L"japPostal"] = &CScanner::Set_jappostal_MetaProc;
865
+ metaTagsSetFunctions[L"Korean_3of5"] = &CScanner::Set_Korean_3Of5_MetaProc;
866
+ metaTagsSetFunctions[L"Korean3of5"] = &CScanner::Set_Korean_3Of5_MetaProc;
867
+ metaTagsSetFunctions[L"macroMicroPDF"] = &CScanner::Set_macromicropdf_MetaProc;
868
+ metaTagsSetFunctions[L"macroPDF"] = &CScanner::Set_macropdf_MetaProc;
869
+ metaTagsSetFunctions[L"maxiCode"] = &CScanner::Set_maxicode_MetaProc;
870
+ metaTagsSetFunctions[L"microPDF"] = &CScanner::Set_micropdf_MetaProc;
871
+ metaTagsSetFunctions[L"microQR"] = &CScanner::Set_MicroQR_MetaProc;
872
+ metaTagsSetFunctions[L"msi"] = &CScanner::Set_msi_MetaProc;
873
+ metaTagsSetFunctions[L"msiCheckDigits"] = &CScanner::Set_msi_MetaProc;
874
+ metaTagsSetFunctions[L"msicheckDigitScheme"] = &CScanner::Set_msi_MetaProc;
875
+ metaTagsSetFunctions[L"msiMaxLength"] = &CScanner::Set_msi_MetaProc;
876
+ metaTagsSetFunctions[L"msiMinLength"] = &CScanner::Set_msi_MetaProc;
877
+ metaTagsSetFunctions[L"msiRedundancy"] = &CScanner::Set_msi_MetaProc;
878
+ metaTagsSetFunctions[L"msiReportCheckDigit"] = &CScanner::Set_msi_MetaProc;
879
+ metaTagsSetFunctions[L"pdf417"] = &CScanner::Set_pdf417_MetaProc;
880
+ metaTagsSetFunctions[L"qrCode"] = &CScanner::Set_qrcode_MetaProc;
881
+ metaTagsSetFunctions[L"rss14"] = &CScanner::Set_rss14_MetaProc;
882
+ metaTagsSetFunctions[L"rssexp"] = &CScanner::Set_rssexp_MetaProc;
883
+ metaTagsSetFunctions[L"rsslim"] = &CScanner::Set_rsslim_MetaProc;
884
+ metaTagsSetFunctions[L"gs1dataBar"] = &CScanner::Set_rss14_MetaProc;
885
+ metaTagsSetFunctions[L"gs1dataBarExpanded"] = &CScanner::Set_rssexp_MetaProc;
886
+ metaTagsSetFunctions[L"gs1dataBarLimited"] = &CScanner::Set_rsslim_MetaProc;
887
+ metaTagsSetFunctions[L"signature"] = &CScanner::Set_signature_MetaProc;
888
+ metaTagsSetFunctions[L"tlc39"] = &CScanner::Set_tlc39_MetaProc;
889
+ metaTagsSetFunctions[L"trioptic39"] = &CScanner::Set_trioptic39_MetaProc;
890
+ metaTagsSetFunctions[L"trioptic39Redundancy"] = &CScanner::Set_trioptic39_MetaProc;
891
+ metaTagsSetFunctions[L"ukPostal"] = &CScanner::Set_ukpostal_MetaProc;
892
+ metaTagsSetFunctions[L"upc_eanbookland"] = &CScanner::Set_upc_ean_MetaProc;
893
+ metaTagsSetFunctions[L"upceanbookland"] = &CScanner::Set_upc_ean_MetaProc;
894
+ metaTagsSetFunctions[L"upc_eancoupon"] = &CScanner::Set_upc_ean_MetaProc;
895
+ metaTagsSetFunctions[L"upceancoupon"] = &CScanner::Set_upc_ean_MetaProc;
896
+ metaTagsSetFunctions[L"upc_eanlineardecode"] = &CScanner::Set_upc_ean_MetaProc;
897
+ metaTagsSetFunctions[L"upceanlineardecode"] = &CScanner::Set_upc_ean_MetaProc;
898
+ metaTagsSetFunctions[L"upc_eanRandomWeightCheckDigit"] = &CScanner::Set_upc_ean_MetaProc;
899
+ metaTagsSetFunctions[L"upceanRandomWeightCheckDigit"] = &CScanner::Set_upc_ean_MetaProc;
900
+ metaTagsSetFunctions[L"upc_eanRetryCount"] = &CScanner::Set_upc_ean_MetaProc;
901
+ metaTagsSetFunctions[L"upceanRetryCount"] = &CScanner::Set_upc_ean_MetaProc;
902
+ metaTagsSetFunctions[L"upc_eanSecurityLevel"] = &CScanner::Set_upc_ean_MetaProc;
903
+ metaTagsSetFunctions[L"upc_eanSupplemental2"] = &CScanner::Set_upc_ean_MetaProc;
904
+ metaTagsSetFunctions[L"upceanSupplemental2"] = &CScanner::Set_upc_ean_MetaProc;
905
+ metaTagsSetFunctions[L"upc_eanSupplemental5"] = &CScanner::Set_upc_ean_MetaProc;
906
+ metaTagsSetFunctions[L"upceanSupplemental5"] = &CScanner::Set_upc_ean_MetaProc;
907
+ metaTagsSetFunctions[L"upc_eanSupplementalMode"]= &CScanner::Set_upc_ean_MetaProc;
908
+ metaTagsSetFunctions[L"upceanSupplementalMode"] = &CScanner::Set_upc_ean_MetaProc;
909
+ metaTagsSetFunctions[L"upca"] = &CScanner::Set_upca_MetaProc;
910
+ metaTagsSetFunctions[L"upcaPreamble"] = &CScanner::Set_upca_MetaProc;
911
+ metaTagsSetFunctions[L"upcaReportCheckDigit"] = &CScanner::Set_upca_MetaProc;
912
+ metaTagsSetFunctions[L"upce0"] = &CScanner::Set_upce0_MetaProc;
913
+ metaTagsSetFunctions[L"upce0ConvertToUPCA"] = &CScanner::Set_upce0_MetaProc;
914
+ metaTagsSetFunctions[L"upce0Preamble"] = &CScanner::Set_upce0_MetaProc;
915
+ metaTagsSetFunctions[L"upce0ReportCheckDigit"] = &CScanner::Set_upce0_MetaProc;
916
+ metaTagsSetFunctions[L"upce1"] = &CScanner::Set_upce1_MetaProc;
917
+ metaTagsSetFunctions[L"upce1ConvertToUPCA"] = &CScanner::Set_upce1_MetaProc;
918
+ metaTagsSetFunctions[L"upce1Preamble"] = &CScanner::Set_upce1_MetaProc;
919
+ metaTagsSetFunctions[L"upce1ReportCheckDigit"] = &CScanner::Set_upce1_MetaProc;
920
+ metaTagsSetFunctions[L"us4State"] = &CScanner::Set_Us4State_MetaProc;
921
+ metaTagsSetFunctions[L"usplanet"] = &CScanner::Set_usplanet_MetaProc;
922
+ metaTagsSetFunctions[L"uspostnet"] = &CScanner::Set_uspostnet_MetaProc;
923
+ metaTagsSetFunctions[L"webcode"] = &CScanner::Set_webcode_MetaProc;
924
+ metaTagsSetFunctions[L"matrix2of5"] = &CScanner::Set_matrix2of5_MetaProc;
925
+ metaTagsSetFunctions[L"matrix2of5MaxLength"] = &CScanner::Set_matrix2of5_MetaProc;
926
+ metaTagsSetFunctions[L"matrix2of5MinLength"] = &CScanner::Set_matrix2of5_MetaProc;
927
+ metaTagsSetFunctions[L"matrix2of5ReportCheckDigit"] = &CScanner::Set_matrix2of5_MetaProc;
928
+ metaTagsSetFunctions[L"matrix2of5VerifyCheckDigit"] = &CScanner::Set_matrix2of5_MetaProc;
929
+ metaTagsSetFunctions[L"us4StateFics"] = &CScanner::Set_Us4StateFics_MetaProc;
930
+
931
+ // Top level Scanner Tags
932
+ metaTagsSetFunctions[L"getDeviceCapabilities"] = &CScanner::ScannerTag_MetaProc; // Not exposed to the user
933
+ metaTagsSetFunctions[L"enable"] = &CScanner::ScannerTag_MetaProc;
934
+ metaTagsSetFunctions[L"disable"] = &CScanner::ScannerTag_MetaProc;
935
+ metaTagsSetFunctions[L"enabled"] = &CScanner::ScannerTag_MetaProc; // Work around for T&V tests which attempt two methods in one EMML tag
936
+ metaTagsSetFunctions[L"disabled"] = &CScanner::ScannerTag_MetaProc; // Work around for T&V tests which attempt two methods in one EMML tag
937
+ metaTagsSetFunctions[L"init"] = &CScanner::ScannerTag_MetaProc;
938
+ metaTagsSetFunctions[L"initialise"] = &CScanner::ScannerTag_MetaProc;
939
+ metaTagsSetFunctions[L"deinit"] = &CScanner::ScannerTag_MetaProc;
940
+ metaTagsSetFunctions[L"deinitialise"] = &CScanner::ScannerTag_MetaProc;
941
+ metaTagsSetFunctions[L"start"] = &CScanner::ScannerTag_MetaProc;
942
+ metaTagsSetFunctions[L"stop"] = &CScanner::ScannerTag_MetaProc;
943
+ metaTagsSetFunctions[L"enabled"] = &CScanner::ScannerTag_MetaProc;
944
+ metaTagsSetFunctions[L"autoenter"] = &CScanner::ScannerTag_MetaProc;
945
+ metaTagsSetFunctions[L"autoTab"] = &CScanner::ScannerTag_MetaProc;
946
+ metaTagsSetFunctions[L"lowBatteryScan"] = &CScanner::ScannerTag_MetaProc;
947
+ metaTagsSetFunctions[L"triggerConnected"] = &CScanner::ScannerTag_MetaProc;
948
+ metaTagsSetFunctions[L"rasterMode"] = &CScanner::ScannerReaderTag_MetaProc;
949
+ metaTagsSetFunctions[L"aimType"] = &CScanner::ScannerReaderTag_MetaProc;
950
+ metaTagsSetFunctions[L"aimMode"] = &CScanner::ScannerReaderTag_MetaProc;
951
+ metaTagsSetFunctions[L"linearSecurityLevel"] = &CScanner::ScannerReaderTag_MetaProc;
952
+ metaTagsSetFunctions[L"dbpMode"] = &CScanner::ScannerReaderTag_MetaProc;
953
+ metaTagsSetFunctions[L"focusMode"] = &CScanner::ScannerReaderTag_MetaProc;
954
+ metaTagsSetFunctions[L"picklistMode"] = &CScanner::ScannerReaderTag_MetaProc;
955
+ metaTagsSetFunctions[L"illuminationMode"] = &CScanner::ScannerReaderTag_MetaProc;
956
+ metaTagsSetFunctions[L"viewfinderMode"] = &CScanner::ScannerReaderTag_MetaProc;
957
+ metaTagsSetFunctions[L"viewfinderFeedback"] = &CScanner::ScannerReaderTag_MetaProc;
958
+ metaTagsSetFunctions[L"inverse1DMode"] = &CScanner::ScannerReaderTag_MetaProc;
959
+ metaTagsSetFunctions[L"timedAimDuration"] = &CScanner::ScannerReaderTag_MetaProc;
960
+ metaTagsSetFunctions[L"connectionIdleTimeout"] = &CScanner::ScannerBluetoothTag_MetaProc;
961
+ metaTagsSetFunctions[L"disconnectBTOnDisable"] = &CScanner::ScannerBluetoothTag_MetaProc;
962
+ metaTagsSetFunctions[L"displayBtAddressBarcodeOnEnable"] = &CScanner::ScannerBluetoothTag_MetaProc;
963
+ metaTagsSetFunctions[L"enableTimeout"] = &CScanner::ScannerBluetoothTag_MetaProc;
964
+ metaTagsSetFunctions[L"narrowbeam"] = &CScanner::ScannerReaderTag_MetaProc;
965
+ metaTagsSetFunctions[L"beamWidth"] = &CScanner::ScannerReaderTag_MetaProc;
966
+ metaTagsSetFunctions[L"scanTimeout"] = &CScanner::ScannerReaderTag_MetaProc;
967
+ metaTagsSetFunctions[L"klasseEins"] = &CScanner::ScannerReaderTag_MetaProc;
968
+ metaTagsSetFunctions[L"bidirectionalRedundancy"]= &CScanner::ScannerReaderTag_MetaProc;
969
+ metaTagsSetFunctions[L"rasterHeight"] = &CScanner::ScannerReaderTag_MetaProc;
970
+ metaTagsSetFunctions[L"sameSymbolTimeout"] = &CScanner::ScannerReaderTag_MetaProc;
971
+ metaTagsSetFunctions[L"differentSymbolTimeout"] = &CScanner::ScannerReaderTag_MetaProc;
972
+ metaTagsSetFunctions[L"poorQuality1DMode"] = &CScanner::ScannerReaderTag_MetaProc;
973
+ metaTagsSetFunctions[L"dpmMode"] = &CScanner::ScannerReaderTag_MetaProc;
974
+ metaTagsSetFunctions[L"viewfinderX"] = &CScanner::ScannerReaderTag_MetaProc;
975
+ metaTagsSetFunctions[L"viewfinderY"] = &CScanner::ScannerReaderTag_MetaProc;
976
+ metaTagsSetFunctions[L"viewfinderWidth"] = &CScanner::ScannerReaderTag_MetaProc;
977
+ metaTagsSetFunctions[L"viewfinderHeight"] = &CScanner::ScannerReaderTag_MetaProc;
978
+ metaTagsSetFunctions[L"viewfinderFeedbackTime"] = &CScanner::ScannerReaderTag_MetaProc;
979
+ metaTagsSetFunctions[L"adaptiveScanning"] = &CScanner::ScannerReaderTag_MetaProc;
980
+ metaTagsSetFunctions[L"dataBufferSize"] = &CScanner::ScannerReaderTag_MetaProc;
981
+ metaTagsSetFunctions[L"scanType"] = &CScanner::ScannerReaderTag_MetaProc; // Not exposed to the user
982
+ metaTagsSetFunctions[L"barcodeDataFormat"] = &CScanner::ScannerReaderTag_MetaProc;
983
+ metaTagsSetFunctions[L"disableScannerDuringNavigate"] = &CScanner::ScannerTag_MetaProc;
984
+ // Scanner Beeper Parameters
985
+ metaTagsSetFunctions[L"DecodeVolume"] = &CScanner::ScannerBeeper_MetaProc;
986
+ metaTagsSetFunctions[L"DecodeDuration"] = &CScanner::ScannerBeeper_MetaProc;
987
+ metaTagsSetFunctions[L"decodeFrequency"] = &CScanner::ScannerBeeper_MetaProc;
988
+ metaTagsSetFunctions[L"SuccessfulDecodeFrequency"] = &CScanner::ScannerBeeper_MetaProc;
989
+ metaTagsSetFunctions[L"InvalidDecodeFrequency"] = &CScanner::ScannerBeeper_MetaProc;
990
+ metaTagsSetFunctions[L"DecodeSound"] = &CScanner::ScannerBeeper_MetaProc;
991
+ metaTagsSetFunctions[L"InvalidDecodeSound"] = &CScanner::ScannerBeeper_MetaProc;
992
+ // RSM Tags
993
+ metaTagsSetFunctions[L"rsmBluetoothAuthentication"] = &CScanner::rsm_MetaProc;
994
+ metaTagsSetFunctions[L"rsmBluetoothEncryption"] = &CScanner::rsm_MetaProc;
995
+ metaTagsSetFunctions[L"rsmBluetoothPinCode"] = &CScanner::rsm_MetaProc;
996
+ metaTagsSetFunctions[L"rsmBluetoothPinCodeType"] = &CScanner::rsm_MetaProc;
997
+ metaTagsSetFunctions[L"rsmBluetoothReconnectionAttempts"] = &CScanner::rsm_MetaProc;
998
+ metaTagsSetFunctions[L"rsmBluetoothBeepOnReconnectAttempt"] = &CScanner::rsm_MetaProc;
999
+ metaTagsSetFunctions[L"rsmBluetoothHidAutoReconnect"] = &CScanner::rsm_MetaProc;
1000
+ metaTagsSetFunctions[L"rsmBluetoothFriendlyName"] = &CScanner::rsm_MetaProc;
1001
+ metaTagsSetFunctions[L"rsmBluetoothInquiryMode"] = &CScanner::rsm_MetaProc;
1002
+ metaTagsSetFunctions[L"rsmBluetoothAutoReconnect"] = &CScanner::rsm_MetaProc;
1003
+ metaTagsSetFunctions[L"rsmForceSavePairingBarcode"] = &CScanner::rsm_MetaProc;
1004
+ metaTagsSetFunctions[L"rsmLowBatteryIndication"] = &CScanner::rsm_MetaProc;
1005
+ metaTagsSetFunctions[L"rsmLowBatteryIndicationCycle"] = &CScanner::rsm_MetaProc;
1006
+ metaTagsSetFunctions[L"rsmScanLineWidth"] = &CScanner::rsm_MetaProc;
1007
+ metaTagsSetFunctions[L"rsmGoodScansDelay"] = &CScanner::rsm_MetaProc;
1008
+ metaTagsSetFunctions[L"rsmDecodeFeedback"] = &CScanner::rsm_MetaProc;
1009
+ metaTagsSetFunctions[L"rsmIgnoreCode128Usps"] = &CScanner::rsm_MetaProc;
1010
+ metaTagsSetFunctions[L"rsmScanTriggerWakeup"] = &CScanner::rsm_MetaProc;
1011
+ metaTagsSetFunctions[L"rsmMems"] = &CScanner::rsm_MetaProc;
1012
+ metaTagsSetFunctions[L"rsmProximityEnable"] = &CScanner::rsm_MetaProc;
1013
+ metaTagsSetFunctions[L"rsmProximityContinuous"] = &CScanner::rsm_MetaProc;
1014
+ metaTagsSetFunctions[L"rsmProximityDistance"] = &CScanner::rsm_MetaProc;
1015
+ metaTagsSetFunctions[L"rsmPagingEnable"] = &CScanner::rsm_MetaProc;
1016
+ metaTagsSetFunctions[L"rsmPagingBeepSequence"] = &CScanner::rsm_MetaProc;
1017
+
1018
+ // Parameters newly added in RhoElements 1.0
1019
+ metaTagsSetFunctions[L"code128CheckISBTTable"] = &CScanner::Set_code128_MetaProc;
1020
+ metaTagsSetFunctions[L"compositeABUseUPCPreambleCheckDigitRules"] = &CScanner::Set_composit_ab_MetaProc;
1021
+ metaTagsSetFunctions[L"compositeabucclinkmode"] = &CScanner::Set_composit_ab_MetaProc;
1022
+ metaTagsSetFunctions[L"Korean3Of5Redundancy"] = &CScanner::Set_Korean_3Of5_MetaProc;
1023
+ metaTagsSetFunctions[L"Korean3Of5MinLength"] = &CScanner::Set_Korean_3Of5_MetaProc;
1024
+ metaTagsSetFunctions[L"Korean3Of5MaxLength"] = &CScanner::Set_Korean_3Of5_MetaProc;
1025
+ metaTagsSetFunctions[L"macroMicroPDFReportAppendInfo"] = &CScanner::Set_macromicropdf_MetaProc;
1026
+ metaTagsSetFunctions[L"macroMicroPDFBufferLabels"] = &CScanner::Set_macromicropdf_MetaProc;
1027
+ metaTagsSetFunctions[L"macroMicroPdfConvertToMicroPdf"] = &CScanner::Set_macromicropdf_MetaProc;
1028
+ metaTagsSetFunctions[L"macroMicroPDFExclusive"] = &CScanner::Set_macromicropdf_MetaProc;
1029
+ metaTagsSetFunctions[L"macroPDFBufferLabels"] = &CScanner::Set_macropdf_MetaProc;
1030
+ metaTagsSetFunctions[L"macroPDFExclusive"] = &CScanner::Set_macropdf_MetaProc;
1031
+ metaTagsSetFunctions[L"macroPDFConvertToPDF417"] = &CScanner::Set_macropdf_MetaProc;
1032
+ metaTagsSetFunctions[L"upcEANConvertRSSToUPCEAN"] = &CScanner::Set_upc_ean_MetaProc;
1033
+ metaTagsSetFunctions[L"upcEanConvertGs1dataBarToUpcEan"] = &CScanner::Set_upc_ean_MetaProc;
1034
+ metaTagsSetFunctions[L"webcodeDecodeGTSubtype"] = &CScanner::Set_webcode_MetaProc;
1035
+ metaTagsSetFunctions[L"signatureImageQuality"] = &CScanner::Set_signature_MetaProc;
1036
+ metaTagsSetFunctions[L"signatureImageWidth"] = &CScanner::Set_signature_MetaProc;
1037
+ metaTagsSetFunctions[L"signatureImageHeight"] = &CScanner::Set_signature_MetaProc;
1038
+ metaTagsSetFunctions[L"signatureImageSize"] = &CScanner::Set_signature_MetaProc;
1039
+ metaTagsSetFunctions[L"upcEANSecurityLevel"] = &CScanner::Set_upc_ean_MetaProc;
1040
+ metaTagsSetFunctions[L"code128IsBT128ConcatMode"] = &CScanner::Set_code128_MetaProc;
1041
+ metaTagsSetFunctions[L"Code128SecurityLevel"] = &CScanner::Set_code128_MetaProc;
1042
+ metaTagsSetFunctions[L"code128other128"] = &CScanner::Set_code128_MetaProc;
1043
+ metaTagsSetFunctions[L"code128redundancy"] = &CScanner::Set_code128_MetaProc;
1044
+ metaTagsSetFunctions[L"upcEANBooklandFormat"] = &CScanner::Set_upc_ean_MetaProc;
1045
+
1046
+ // Parameters newly added in RhoElements 2.1
1047
+ metaTagsSetFunctions[L"code39securityLevel"] = &CScanner::Set_code39_MetaProc;
1048
+ metaTagsSetFunctions[L"code11maxLength"] = &CScanner::Set_code11_MetaProc;
1049
+ metaTagsSetFunctions[L"code11minLength"] = &CScanner::Set_code11_MetaProc;
1050
+
1051
+ }
1052
+
1053
+ void CScanner::InitialiseMETATagMapForGet()
1054
+ {
1055
+ // Add All known meta tags to the map for retrieval
1056
+ // metaTagsGetFunctions[L"All_Decoders"] = &CScanner::Get_all_decoders_PropertyValue;
1057
+ metaTagsGetFunctions[L"AllDecoders"] = &CScanner::Get_all_decoders_PropertyValue;
1058
+ metaTagsGetFunctions[L"Auspostal"] = &CScanner::Get_auspostal_PropertyValue;
1059
+ metaTagsGetFunctions[L"aztec"] = &CScanner::Get_AZTEC_PropertyValue;
1060
+ metaTagsGetFunctions[L"Canpostal"] = &CScanner::Get_canpostal_PropertyValue;
1061
+ // metaTagsGetFunctions[L"chinese_2of5"] = &CScanner::Get_Chinese_2Of5_PropertyValue;
1062
+ metaTagsGetFunctions[L"chinese2of5"] = &CScanner::Get_Chinese_2Of5_PropertyValue;
1063
+ metaTagsGetFunctions[L"codabar"] = &CScanner::Get_codabar_PropertyValue;
1064
+ metaTagsGetFunctions[L"codabarCLSIEditing"] = &CScanner::Get_codabar_PropertyValue;
1065
+ metaTagsGetFunctions[L"codabarMaxLength"] = &CScanner::Get_codabar_PropertyValue;
1066
+ metaTagsGetFunctions[L"codabarMinLength"] = &CScanner::Get_codabar_PropertyValue;
1067
+ metaTagsGetFunctions[L"codabarNotisEditing"] = &CScanner::Get_codabar_PropertyValue;
1068
+ metaTagsGetFunctions[L"codabarRedundancy"] = &CScanner::Get_codabar_PropertyValue;
1069
+ metaTagsGetFunctions[L"code11"] = &CScanner::Get_code11_PropertyValue;
1070
+ metaTagsGetFunctions[L"code11CheckDigitCount"] = &CScanner::Get_code11_PropertyValue;
1071
+ metaTagsGetFunctions[L"code11Redundancy"] = &CScanner::Get_code11_PropertyValue;
1072
+ metaTagsGetFunctions[L"code11ReportCheckdigit"] = &CScanner::Get_code11_PropertyValue;
1073
+ metaTagsGetFunctions[L"code11MinLength"] = &CScanner::Get_code11_PropertyValue;
1074
+ metaTagsGetFunctions[L"code11MaxLength"] = &CScanner::Get_code11_PropertyValue;
1075
+ metaTagsGetFunctions[L"code128"] = &CScanner::Get_code128_PropertyValue;
1076
+ metaTagsGetFunctions[L"code128EAN128"] = &CScanner::Get_code128_PropertyValue;
1077
+ metaTagsGetFunctions[L"code128IsBT128"] = &CScanner::Get_code128_PropertyValue;
1078
+ metaTagsGetFunctions[L"code128MaxLength"] = &CScanner::Get_code128_PropertyValue;
1079
+ metaTagsGetFunctions[L"code128MinLength"] = &CScanner::Get_code128_PropertyValue;
1080
+ metaTagsGetFunctions[L"code39"] = &CScanner::Get_code39_PropertyValue;
1081
+ metaTagsGetFunctions[L"code39Code32Prefix"] = &CScanner::Get_code39_PropertyValue;
1082
+ // metaTagsGetFunctions[L"code39Concatenation"] = &CScanner::Get_code39_PropertyValue; //(EMDK Says Deprecated)
1083
+ metaTagsGetFunctions[L"code39ConvertToCode32"] = &CScanner::Get_code39_PropertyValue;
1084
+ metaTagsGetFunctions[L"code39FullASCII"] = &CScanner::Get_code39_PropertyValue;
1085
+ metaTagsGetFunctions[L"code39MaxLength"] = &CScanner::Get_code39_PropertyValue;
1086
+ metaTagsGetFunctions[L"code39MinLength"] = &CScanner::Get_code39_PropertyValue;
1087
+ metaTagsGetFunctions[L"code39Redundancy"] = &CScanner::Get_code39_PropertyValue;
1088
+ metaTagsGetFunctions[L"code39ReportCheckDigit"] = &CScanner::Get_code39_PropertyValue;
1089
+ metaTagsGetFunctions[L"code39VerifyCheckDigit"] = &CScanner::Get_code39_PropertyValue;
1090
+ metaTagsGetFunctions[L"code39SecurityLevel"] = &CScanner::Get_code39_PropertyValue;
1091
+ metaTagsGetFunctions[L"code93"] = &CScanner::Get_code93_PropertyValue;
1092
+ metaTagsGetFunctions[L"code93MaxLength"] = &CScanner::Get_code93_PropertyValue;
1093
+ metaTagsGetFunctions[L"code93MinLength"] = &CScanner::Get_code93_PropertyValue;
1094
+ metaTagsGetFunctions[L"code93Redundancy"] = &CScanner::Get_code93_PropertyValue;
1095
+ // metaTagsGetFunctions[L"composit_ab"] = &CScanner::Get_composit_ab_PropertyValue;
1096
+ // metaTagsGetFunctions[L"composite_ab"] = &CScanner::Get_composit_ab_PropertyValue;
1097
+ metaTagsGetFunctions[L"compositeab"] = &CScanner::Get_composit_ab_PropertyValue;
1098
+ // metaTagsGetFunctions[L"composit_c"] = &CScanner::Get_composit_c_PropertyValue;
1099
+ // metaTagsGetFunctions[L"composite_c"] = &CScanner::Get_composit_c_PropertyValue;
1100
+ metaTagsGetFunctions[L"compositec"] = &CScanner::Get_composit_c_PropertyValue;
1101
+ metaTagsGetFunctions[L"d2of5"] = &CScanner::Get_d2of5_PropertyValue;
1102
+ metaTagsGetFunctions[L"d2of5MaxLength"] = &CScanner::Get_d2of5_PropertyValue;
1103
+ metaTagsGetFunctions[L"d2of5MinLength"] = &CScanner::Get_d2of5_PropertyValue;
1104
+ metaTagsGetFunctions[L"d2of5Redundancy"] = &CScanner::Get_d2of5_PropertyValue;
1105
+ metaTagsGetFunctions[L"datamatrix"] = &CScanner::Get_datamatrix_PropertyValue;
1106
+ metaTagsGetFunctions[L"dutchPostal"] = &CScanner::Get_dutchpostal_PropertyValue;
1107
+ metaTagsGetFunctions[L"ean13"] = &CScanner::Get_ean13_PropertyValue;
1108
+ metaTagsGetFunctions[L"ean8"] = &CScanner::Get_ean8_PropertyValue;
1109
+ metaTagsGetFunctions[L"ean8ConvertToEAN13"] = &CScanner::Get_ean8_PropertyValue;
1110
+ metaTagsGetFunctions[L"i2of5"] = &CScanner::Get_i2of5_PropertyValue;
1111
+ metaTagsGetFunctions[L"i2of5ConvertToEAN13"] = &CScanner::Get_i2of5_PropertyValue;
1112
+ metaTagsGetFunctions[L"i2of5MaxLength"] = &CScanner::Get_i2of5_PropertyValue;
1113
+ metaTagsGetFunctions[L"i2of5MinLength"] = &CScanner::Get_i2of5_PropertyValue;
1114
+ metaTagsGetFunctions[L"i2of5Redundancy"] = &CScanner::Get_i2of5_PropertyValue;
1115
+ metaTagsGetFunctions[L"i2of5ReportCheckDigit"] = &CScanner::Get_i2of5_PropertyValue;
1116
+ metaTagsGetFunctions[L"i2of5VerifyCheckDigit"] = &CScanner::Get_i2of5_PropertyValue;
1117
+ metaTagsGetFunctions[L"japPostal"] = &CScanner::Get_jappostal_PropertyValue;
1118
+ // metaTagsGetFunctions[L"Korean_3of5"] = &CScanner::Get_Korean_3Of5_PropertyValue;
1119
+ metaTagsGetFunctions[L"Korean3of5"] = &CScanner::Get_Korean_3Of5_PropertyValue;
1120
+ metaTagsGetFunctions[L"macroMicroPDF"] = &CScanner::Get_macromicropdf_PropertyValue;
1121
+ metaTagsGetFunctions[L"macroPDF"] = &CScanner::Get_macropdf_PropertyValue;
1122
+ metaTagsGetFunctions[L"maxiCode"] = &CScanner::Get_maxicode_PropertyValue;
1123
+ metaTagsGetFunctions[L"microPDF"] = &CScanner::Get_micropdf_PropertyValue;
1124
+ metaTagsGetFunctions[L"microQR"] = &CScanner::Get_MicroQR_PropertyValue;
1125
+ metaTagsGetFunctions[L"msi"] = &CScanner::Get_msi_PropertyValue;
1126
+ metaTagsGetFunctions[L"msiCheckDigits"] = &CScanner::Get_msi_PropertyValue;
1127
+ metaTagsGetFunctions[L"msicheckDigitScheme"] = &CScanner::Get_msi_PropertyValue;
1128
+ metaTagsGetFunctions[L"msiMaxLength"] = &CScanner::Get_msi_PropertyValue;
1129
+ metaTagsGetFunctions[L"msiMinLength"] = &CScanner::Get_msi_PropertyValue;
1130
+ metaTagsGetFunctions[L"msiRedundancy"] = &CScanner::Get_msi_PropertyValue;
1131
+ metaTagsGetFunctions[L"msiReportCheckDigit"] = &CScanner::Get_msi_PropertyValue;
1132
+ metaTagsGetFunctions[L"pdf417"] = &CScanner::Get_pdf417_PropertyValue;
1133
+ metaTagsGetFunctions[L"qrCode"] = &CScanner::Get_qrcode_PropertyValue;
1134
+ // metaTagsGetFunctions[L"rss14"] = &CScanner::Get_rss14_PropertyValue;
1135
+ // metaTagsGetFunctions[L"rssexp"] = &CScanner::Get_rssexp_PropertyValue;
1136
+ // metaTagsGetFunctions[L"rsslim"] = &CScanner::Get_rsslim_PropertyValue;
1137
+ metaTagsGetFunctions[L"gs1dataBar"] = &CScanner::Get_rss14_PropertyValue;
1138
+ metaTagsGetFunctions[L"gs1dataBarExpanded"] = &CScanner::Get_rssexp_PropertyValue;
1139
+ metaTagsGetFunctions[L"gs1dataBarLimited"] = &CScanner::Get_rsslim_PropertyValue;
1140
+ metaTagsGetFunctions[L"signature"] = &CScanner::Get_signature_PropertyValue;
1141
+ metaTagsGetFunctions[L"tlc39"] = &CScanner::Get_tlc39_PropertyValue;
1142
+ metaTagsGetFunctions[L"trioptic39"] = &CScanner::Get_trioptic39_PropertyValue;
1143
+ metaTagsGetFunctions[L"trioptic39Redundancy"] = &CScanner::Get_trioptic39_PropertyValue;
1144
+ metaTagsGetFunctions[L"ukPostal"] = &CScanner::Get_ukpostal_PropertyValue;
1145
+ // metaTagsGetFunctions[L"upc_eanbookland"] = &CScanner::Get_upc_ean_PropertyValue;
1146
+ metaTagsGetFunctions[L"upceanbookland"] = &CScanner::Get_upc_ean_PropertyValue;
1147
+ // metaTagsGetFunctions[L"upc_eancoupon"] = &CScanner::Get_upc_ean_PropertyValue;
1148
+ metaTagsGetFunctions[L"upceancoupon"] = &CScanner::Get_upc_ean_PropertyValue;
1149
+ // metaTagsGetFunctions[L"upc_eanlineardecode"] = &CScanner::Get_upc_ean_PropertyValue;
1150
+ metaTagsGetFunctions[L"upceanlineardecode"] = &CScanner::Get_upc_ean_PropertyValue;
1151
+ // metaTagsGetFunctions[L"upc_eanRandomWeightCheckDigit"] = &CScanner::Get_upc_ean_PropertyValue;
1152
+ metaTagsGetFunctions[L"upceanRandomWeightCheckDigit"] = &CScanner::Get_upc_ean_PropertyValue;
1153
+ // metaTagsGetFunctions[L"upc_eanRetryCount"] = &CScanner::Get_upc_ean_PropertyValue;
1154
+ metaTagsGetFunctions[L"upceanRetryCount"] = &CScanner::Get_upc_ean_PropertyValue;
1155
+ // metaTagsGetFunctions[L"upc_eanSecurityLevel"] = &CScanner::Get_upc_ean_PropertyValue;
1156
+ // metaTagsGetFunctions[L"upc_eanSupplemental2"] = &CScanner::Get_upc_ean_PropertyValue;
1157
+ metaTagsGetFunctions[L"upceanSupplemental2"] = &CScanner::Get_upc_ean_PropertyValue;
1158
+ // metaTagsGetFunctions[L"upc_eanSupplemental5"] = &CScanner::Get_upc_ean_PropertyValue;
1159
+ metaTagsGetFunctions[L"upceanSupplemental5"] = &CScanner::Get_upc_ean_PropertyValue;
1160
+ // metaTagsGetFunctions[L"upc_eanSupplementalMode"]= &CScanner::Get_upc_ean_PropertyValue;
1161
+ metaTagsGetFunctions[L"upceanSupplementalMode"] = &CScanner::Get_upc_ean_PropertyValue;
1162
+ metaTagsGetFunctions[L"upca"] = &CScanner::Get_upca_PropertyValue;
1163
+ metaTagsGetFunctions[L"upcaPreamble"] = &CScanner::Get_upca_PropertyValue;
1164
+ metaTagsGetFunctions[L"upcaReportCheckDigit"] = &CScanner::Get_upca_PropertyValue;
1165
+ metaTagsGetFunctions[L"upce0"] = &CScanner::Get_upce0_PropertyValue;
1166
+ metaTagsGetFunctions[L"upce0ConvertToUPCA"] = &CScanner::Get_upce0_PropertyValue;
1167
+ metaTagsGetFunctions[L"upce0Preamble"] = &CScanner::Get_upce0_PropertyValue;
1168
+ metaTagsGetFunctions[L"upce0ReportCheckDigit"] = &CScanner::Get_upce0_PropertyValue;
1169
+ metaTagsGetFunctions[L"upce1"] = &CScanner::Get_upce1_PropertyValue;
1170
+ metaTagsGetFunctions[L"upce1ConvertToUPCA"] = &CScanner::Get_upce1_PropertyValue;
1171
+ metaTagsGetFunctions[L"upce1Preamble"] = &CScanner::Get_upce1_PropertyValue;
1172
+ metaTagsGetFunctions[L"upce1ReportCheckDigit"] = &CScanner::Get_upce1_PropertyValue;
1173
+ metaTagsGetFunctions[L"us4State"] = &CScanner::Get_Us4State_PropertyValue;
1174
+ metaTagsGetFunctions[L"usPlanet"] = &CScanner::Get_usplanet_PropertyValue;
1175
+ metaTagsGetFunctions[L"usPostNet"] = &CScanner::Get_uspostnet_PropertyValue;
1176
+ metaTagsGetFunctions[L"webcode"] = &CScanner::Get_webcode_PropertyValue;
1177
+ metaTagsGetFunctions[L"matrix2of5"] = &CScanner::Get_matrix2of5_PropertyValue;
1178
+ metaTagsGetFunctions[L"matrix2of5MaxLength"] = &CScanner::Get_matrix2of5_PropertyValue;
1179
+ metaTagsGetFunctions[L"matrix2of5MinLength"] = &CScanner::Get_matrix2of5_PropertyValue;
1180
+ metaTagsGetFunctions[L"matrix2of5ReportCheckDigit"] = &CScanner::Get_matrix2of5_PropertyValue;
1181
+ metaTagsGetFunctions[L"matrix2of5VerifyCheckDigit"] = &CScanner::Get_matrix2of5_PropertyValue;
1182
+ metaTagsGetFunctions[L"us4StateFics"] = &CScanner::Get_Us4StateFics_PropertyValue;
1183
+
1184
+ // Top level Scanner Tags
1185
+ // metaTagsGetFunctions[L"getDeviceCapabilities"] = &CScanner::ScannerTag_GetPropertyValue;
1186
+ // metaTagsGetFunctions[L"enable"] = &CScanner::ScannerTag_GetPropertyValue;
1187
+ // metaTagsGetFunctions[L"disable"] = &CScanner::ScannerTag_GetPropertyValue;
1188
+ // metaTagsGetFunctions[L"enabled"] = &CScanner::ScannerTag_GetPropertyValue; // Work around for T&V tests which attempt two methods in one EMML tag
1189
+ // metaTagsGetFunctions[L"disabled"] = &CScanner::ScannerTag_GetPropertyValue; // Work around for T&V tests which attempt two methods in one EMML tag
1190
+ // metaTagsGetFunctions[L"init"] = &CScanner::ScannerTag_GetPropertyValue;
1191
+ // metaTagsGetFunctions[L"initialise"] = &CScanner::ScannerTag_GetPropertyValue;
1192
+ // metaTagsGetFunctions[L"deinit"] = &CScanner::ScannerTag_GetPropertyValue;
1193
+ // metaTagsGetFunctions[L"deinitialise"] = &CScanner::ScannerTag_GetPropertyValue;
1194
+ // metaTagsGetFunctions[L"start"] = &CScanner::ScannerTag_GetPropertyValue;
1195
+ // metaTagsGetFunctions[L"stop"] = &CScanner::ScannerTag_GetPropertyValue;
1196
+ // metaTagsGetFunctions[L"enabled"] = &CScanner::ScannerTag_GetPropertyValue;
1197
+ metaTagsGetFunctions[L"autoenter"] = &CScanner::ScannerTag_GetPropertyValue;
1198
+ metaTagsGetFunctions[L"autoTab"] = &CScanner::ScannerTag_GetPropertyValue;
1199
+ metaTagsGetFunctions[L"friendlyName"] = &CScanner::ScannerTag_GetPropertyValue;
1200
+ metaTagsGetFunctions[L"triggerConnected"] = &CScanner::ScannerTag_GetPropertyValue;
1201
+ metaTagsGetFunctions[L"rasterMode"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1202
+ metaTagsGetFunctions[L"aimType"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1203
+ metaTagsGetFunctions[L"aimMode"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1204
+ metaTagsGetFunctions[L"linearSecurityLevel"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1205
+ metaTagsGetFunctions[L"dbpMode"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1206
+ metaTagsGetFunctions[L"focusMode"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1207
+ metaTagsGetFunctions[L"picklistMode"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1208
+ metaTagsGetFunctions[L"illuminationMode"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1209
+ metaTagsGetFunctions[L"viewfinderMode"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1210
+ metaTagsGetFunctions[L"viewfinderFeedback"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1211
+ metaTagsGetFunctions[L"inverse1DMode"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1212
+ metaTagsGetFunctions[L"timedAimDuration"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1213
+ metaTagsGetFunctions[L"connectionIdleTimeout"] = &CScanner::ScannerBluetoothTag_GetPropertyValue;
1214
+ metaTagsGetFunctions[L"disconnectBTOnDisable"] = &CScanner::ScannerBluetoothTag_GetPropertyValue;
1215
+ metaTagsGetFunctions[L"displayBTAddressBarcodeOnEnable"] = &CScanner::ScannerBluetoothTag_GetPropertyValue;
1216
+ metaTagsGetFunctions[L"enableTimeout"] = &CScanner::ScannerBluetoothTag_GetPropertyValue;
1217
+ // metaTagsGetFunctions[L"narrowbeam"] = &CScanner::ScannerReaderTag_GetPropertyValue; // Deprecated
1218
+ metaTagsGetFunctions[L"beamWidth"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1219
+ metaTagsGetFunctions[L"scanTimeout"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1220
+ metaTagsGetFunctions[L"klasseEins"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1221
+ metaTagsGetFunctions[L"bidirectionalRedundancy"]= &CScanner::ScannerReaderTag_GetPropertyValue;
1222
+ metaTagsGetFunctions[L"rasterHeight"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1223
+ metaTagsGetFunctions[L"sameSymbolTimeout"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1224
+ metaTagsGetFunctions[L"differentSymbolTimeout"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1225
+ metaTagsGetFunctions[L"poorQuality1DMode"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1226
+ metaTagsGetFunctions[L"dpmMode"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1227
+ metaTagsGetFunctions[L"viewfinderX"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1228
+ metaTagsGetFunctions[L"viewfinderY"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1229
+ metaTagsGetFunctions[L"viewfinderWidth"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1230
+ metaTagsGetFunctions[L"viewfinderHeight"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1231
+ metaTagsGetFunctions[L"viewfinderFeedbackTime"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1232
+ metaTagsGetFunctions[L"adaptiveScanning"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1233
+ metaTagsGetFunctions[L"dataBufferSize"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1234
+ metaTagsGetFunctions[L"scanType"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1235
+ metaTagsGetFunctions[L"barcodeDataFormat"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1236
+ metaTagsGetFunctions[L"scannerType"] = &CScanner::ScannerReaderTag_GetPropertyValue;
1237
+ // Scanner Beeper Parameters
1238
+ metaTagsGetFunctions[L"DecodeVolume"] = &CScanner::ScannerBeeper_GetPropertyValue;
1239
+ metaTagsGetFunctions[L"DecodeDuration"] = &CScanner::ScannerBeeper_GetPropertyValue;
1240
+ metaTagsGetFunctions[L"DecodeFrequency"] = &CScanner::ScannerBeeper_GetPropertyValue;
1241
+ metaTagsGetFunctions[L"InvalidDecodeFrequency"] = &CScanner::ScannerBeeper_GetPropertyValue;
1242
+ metaTagsGetFunctions[L"DecodeSound"] = &CScanner::ScannerBeeper_GetPropertyValue;
1243
+ metaTagsGetFunctions[L"InvalidDecodeSound"] = &CScanner::ScannerBeeper_GetPropertyValue;
1244
+ metaTagsGetFunctions[L"lowBatteryScan"] = &CScanner::ScannerTag_GetPropertyValue;;
1245
+ metaTagsGetFunctions[L"disableScannerDuringNavigate"] = &CScanner::ScannerTag_GetPropertyValue;;
1246
+ // RSM Tags
1247
+ metaTagsGetFunctions[L"rsmModelNumber"] = &CScanner::rsm_GetPropertyValue;
1248
+ metaTagsGetFunctions[L"rsmSerialNumber"] = &CScanner::rsm_GetPropertyValue;
1249
+ metaTagsGetFunctions[L"rsmDateOfManufacture"] = &CScanner::rsm_GetPropertyValue;
1250
+ metaTagsGetFunctions[L"rsmDateOfService"] = &CScanner::rsm_GetPropertyValue;
1251
+ metaTagsGetFunctions[L"rsmBluetoothAddress"] = &CScanner::rsm_GetPropertyValue;
1252
+ metaTagsGetFunctions[L"rsmFirmwareVersion"] = &CScanner::rsm_GetPropertyValue;
1253
+ metaTagsGetFunctions[L"rsmDeviceClass"] = &CScanner::rsm_GetPropertyValue;
1254
+ metaTagsGetFunctions[L"rsmBatteryStatus"] = &CScanner::rsm_GetPropertyValue;
1255
+ metaTagsGetFunctions[L"rsmBatteryCapacity"] = &CScanner::rsm_GetPropertyValue;
1256
+ metaTagsGetFunctions[L"rsmBatteryId"] = &CScanner::rsm_GetPropertyValue;
1257
+ metaTagsGetFunctions[L"rsmBluetoothAuthentication"] = &CScanner::rsm_GetPropertyValue;
1258
+ metaTagsGetFunctions[L"rsmBluetoothEncryption"] = &CScanner::rsm_GetPropertyValue;
1259
+ metaTagsGetFunctions[L"rsmBluetoothPinCode"] = &CScanner::rsm_GetPropertyValue;
1260
+ metaTagsGetFunctions[L"rsmBluetoothPinCodeType"] = &CScanner::rsm_GetPropertyValue;
1261
+ metaTagsGetFunctions[L"rsmBluetoothReconnectionAttempts"] = &CScanner::rsm_GetPropertyValue;
1262
+ metaTagsGetFunctions[L"rsmBluetoothBeepOnReconnectAttempt"] = &CScanner::rsm_GetPropertyValue;
1263
+ metaTagsGetFunctions[L"rsmBluetoothHidAutoReconnect"] = &CScanner::rsm_GetPropertyValue;
1264
+ metaTagsGetFunctions[L"rsmBluetoothFriendlyName"] = &CScanner::rsm_GetPropertyValue;
1265
+ metaTagsGetFunctions[L"rsmBluetoothInquiryMode"] = &CScanner::rsm_GetPropertyValue;
1266
+ metaTagsGetFunctions[L"rsmBluetoothAutoReconnect"] = &CScanner::rsm_GetPropertyValue;
1267
+ metaTagsGetFunctions[L"rsmForceSavePairingBarcode"] = &CScanner::rsm_GetPropertyValue;
1268
+ metaTagsGetFunctions[L"rsmLowBatteryIndication"] = &CScanner::rsm_GetPropertyValue;
1269
+ metaTagsGetFunctions[L"rsmLowBatteryIndicationCycle"] = &CScanner::rsm_GetPropertyValue;
1270
+ metaTagsGetFunctions[L"rsmScanLineWidth"] = &CScanner::rsm_GetPropertyValue;
1271
+ metaTagsGetFunctions[L"rsmGoodScansDelay"] = &CScanner::rsm_GetPropertyValue;
1272
+ metaTagsGetFunctions[L"rsmDecodeFeedback"] = &CScanner::rsm_GetPropertyValue;
1273
+ metaTagsGetFunctions[L"rsmIgnoreCode128Usps"] = &CScanner::rsm_GetPropertyValue;
1274
+ metaTagsGetFunctions[L"rsmScanTriggerWakeup"] = &CScanner::rsm_GetPropertyValue;
1275
+ metaTagsGetFunctions[L"rsmMems"] = &CScanner::rsm_GetPropertyValue;
1276
+ metaTagsGetFunctions[L"rsmProximityEnable"] = &CScanner::rsm_GetPropertyValue;
1277
+ metaTagsGetFunctions[L"rsmProximityContinuous"] = &CScanner::rsm_GetPropertyValue;
1278
+ metaTagsGetFunctions[L"rsmProximityDistance"] = &CScanner::rsm_GetPropertyValue;
1279
+ metaTagsGetFunctions[L"rsmPagingEnable"] = &CScanner::rsm_GetPropertyValue;
1280
+ metaTagsGetFunctions[L"rsmPagingBeepSequence"] = &CScanner::rsm_GetPropertyValue;
1281
+
1282
+ /*
1283
+ metaTagsGetFunctions[L"markForRetrievalscanLineWidth"] = &CScanner::rsm_GetPropertyValue;
1284
+ metaTagsGetFunctions[L"markForRetrievaldecodeFeedback"] = &CScanner::rsm_GetPropertyValue;
1285
+ metaTagsGetFunctions[L"markForRetrievalbluetoothAuthentication"] = &CScanner::rsm_GetPropertyValue;
1286
+ metaTagsGetFunctions[L"markForRetrievalbluetoothEncryption"] = &CScanner::rsm_GetPropertyValue;
1287
+ metaTagsGetFunctions[L"markForRetrievalbluetoothPINCode"] = &CScanner::rsm_GetPropertyValue;
1288
+ metaTagsGetFunctions[L"markForRetrievalbluetoothReconnectAttempts"] = &CScanner::rsm_GetPropertyValue;
1289
+ metaTagsGetFunctions[L"markForRetrievalbluetoothBeepOnReconnectAttempt"] = &CScanner::rsm_GetPropertyValue;
1290
+ metaTagsGetFunctions[L"markForRetrievalbluetoothHIDAutoReconnect"] = &CScanner::rsm_GetPropertyValue;
1291
+ metaTagsGetFunctions[L"markForRetrievalbluetoothFriendlyName"] = &CScanner::rsm_GetPropertyValue;
1292
+ metaTagsGetFunctions[L"markForRetrievalbluetoothPINCodeType"] = &CScanner::rsm_GetPropertyValue;
1293
+ metaTagsGetFunctions[L"markForRetrievalbluetoothInquiryMode"] = &CScanner::rsm_GetPropertyValue;
1294
+ metaTagsGetFunctions[L"markForRetrievalignoreCode128USPS"] = &CScanner::rsm_GetPropertyValue;
1295
+ metaTagsGetFunctions[L"markForRetrievalmems"] = &CScanner::rsm_GetPropertyValue;
1296
+ metaTagsGetFunctions[L"markForRetrievalproximityEnable"] = &CScanner::rsm_GetPropertyValue;
1297
+ metaTagsGetFunctions[L"markForRetrievalproximityDistance"] = &CScanner::rsm_GetPropertyValue;
1298
+ metaTagsGetFunctions[L"markForRetrievalpagingEnable"] = &CScanner::rsm_GetPropertyValue;
1299
+ metaTagsGetFunctions[L"markForRetrievalpagingBeepSequence"] = &CScanner::rsm_GetPropertyValue;
1300
+ metaTagsGetFunctions[L"markForRetrievallowBatteryIndication"] = &CScanner::rsm_GetPropertyValue;
1301
+ metaTagsGetFunctions[L"markForRetrievalscanTriggerWakeup"] = &CScanner::rsm_GetPropertyValue;
1302
+ metaTagsGetFunctions[L"markForRetrievalbluetoothAutoReconnect"] = &CScanner::rsm_GetPropertyValue;
1303
+ metaTagsGetFunctions[L"markForRetrievallowBatteryIndicationCycle"] = &CScanner::rsm_GetPropertyValue;
1304
+ metaTagsGetFunctions[L"markForRetrievalproximityContinuous"] = &CScanner::rsm_GetPropertyValue;
1305
+ metaTagsGetFunctions[L"markForRetrievalgoodScansDelay"] = &CScanner::rsm_GetPropertyValue;
1306
+ metaTagsGetFunctions[L"markForRetrievalForceSavePairingBarcode"] = &CScanner::rsm_GetPropertyValue;
1307
+ metaTagsGetFunctions[L"markForRetrievalmodelNumber"] = &CScanner::rsm_GetPropertyValue;
1308
+ metaTagsGetFunctions[L"markForRetrievalserialNumber"] = &CScanner::rsm_GetPropertyValue;
1309
+ metaTagsGetFunctions[L"markForRetrievaldateOfManufacture"] = &CScanner::rsm_GetPropertyValue;
1310
+ metaTagsGetFunctions[L"markForRetrievaldateOfService"] = &CScanner::rsm_GetPropertyValue;
1311
+ metaTagsGetFunctions[L"markForRetrievalbluetoothAddress"] = &CScanner::rsm_GetPropertyValue;
1312
+ metaTagsGetFunctions[L"markForRetrievalfirmwareVersion"] = &CScanner::rsm_GetPropertyValue;
1313
+ metaTagsGetFunctions[L"markForRetrievaldeviceClass"] = &CScanner::rsm_GetPropertyValue;
1314
+ metaTagsGetFunctions[L"markForRetrievalbatteryStatus"] = &CScanner::rsm_GetPropertyValue;
1315
+ metaTagsGetFunctions[L"markForRetrievalbatteryCapacity"] = &CScanner::rsm_GetPropertyValue;
1316
+ metaTagsGetFunctions[L"markForRetrievalbatteryId"] = &CScanner::rsm_GetPropertyValue;
1317
+ */
1318
+ // RSM Events
1319
+ // metaTagsGetFunctions[L"RSMGetEvent"] = &CScanner::rsm_GetPropertyValue;
1320
+
1321
+ // Parameters newly added in RhoElements 1.0
1322
+ metaTagsGetFunctions[L"code128CheckISBTTable"] = &CScanner::Get_code128_PropertyValue;
1323
+ metaTagsGetFunctions[L"compositeABUseUPCPreambleCheckDigitRules"] = &CScanner::Get_composit_ab_PropertyValue;
1324
+ metaTagsGetFunctions[L"compositeabucclinkmode"] = &CScanner::Get_composit_ab_PropertyValue;
1325
+ metaTagsGetFunctions[L"Korean3Of5Redundancy"] = &CScanner::Get_Korean_3Of5_PropertyValue;
1326
+ metaTagsGetFunctions[L"Korean3Of5MinLength"] = &CScanner::Get_Korean_3Of5_PropertyValue;
1327
+ metaTagsGetFunctions[L"Korean3Of5MaxLength"] = &CScanner::Get_Korean_3Of5_PropertyValue;
1328
+ metaTagsGetFunctions[L"macroMicroPDFReportAppendInfo"] = &CScanner::Get_macromicropdf_PropertyValue;
1329
+ metaTagsGetFunctions[L"macroMicroPDFBufferLabels"] = &CScanner::Get_macromicropdf_PropertyValue;
1330
+ metaTagsGetFunctions[L"macroMicroPdfConvertToMicroPdf"] = &CScanner::Get_macromicropdf_PropertyValue;
1331
+ metaTagsGetFunctions[L"macroMicroPDFExclusive"] = &CScanner::Get_macromicropdf_PropertyValue;
1332
+ metaTagsGetFunctions[L"macroPDFBufferLabels"] = &CScanner::Get_macropdf_PropertyValue;
1333
+ metaTagsGetFunctions[L"macroPDFExclusive"] = &CScanner::Get_macropdf_PropertyValue;
1334
+ metaTagsGetFunctions[L"macroPDFConvertToPDF417"] = &CScanner::Get_macropdf_PropertyValue;
1335
+ metaTagsGetFunctions[L"upcEANConvertRSSToUPCEAN"] = &CScanner::Get_upc_ean_PropertyValue;
1336
+ metaTagsGetFunctions[L"upcEanConvertGs1dataBarToUpcEan"] = &CScanner::Get_upc_ean_PropertyValue;
1337
+ metaTagsGetFunctions[L"webcodeDecodeGTSubtype"] = &CScanner::Get_webcode_PropertyValue;
1338
+ metaTagsGetFunctions[L"signatureImageQuality"] = &CScanner::Get_signature_PropertyValue;
1339
+ metaTagsGetFunctions[L"signatureImageWidth"] = &CScanner::Get_signature_PropertyValue;
1340
+ metaTagsGetFunctions[L"signatureImageHeight"] = &CScanner::Get_signature_PropertyValue;
1341
+ metaTagsGetFunctions[L"signatureImageSize"] = &CScanner::Get_signature_PropertyValue;
1342
+ metaTagsGetFunctions[L"upcEANSecurityLevel"] = &CScanner::Get_upc_ean_PropertyValue;
1343
+ metaTagsGetFunctions[L"code128IsBT128ConcatMode"] = &CScanner::Get_code128_PropertyValue;
1344
+ metaTagsGetFunctions[L"Code128SecurityLevel"] = &CScanner::Get_code128_PropertyValue;
1345
+ metaTagsGetFunctions[L"code128other128"] = &CScanner::Get_code128_PropertyValue;
1346
+ metaTagsGetFunctions[L"code128redundancy"] = &CScanner::Get_code128_PropertyValue;
1347
+ metaTagsGetFunctions[L"upcEANBooklandFormat"] = &CScanner::Get_upc_ean_PropertyValue;
1348
+ }
1349
+
1350
+ void CScanner::InitialiseDecoderStringMap()
1351
+ {
1352
+ decoderStrings[(BYTE)*DECODER_UPCE0] = L"upce0";
1353
+ decoderStrings[(BYTE)*DECODER_UPCE1] = L"upce1";
1354
+ decoderStrings[(BYTE)*DECODER_UPCA] = L"upca";
1355
+ decoderStrings[(BYTE)*DECODER_MSI] = L"msi";
1356
+ decoderStrings[(BYTE)*DECODER_EAN8] = L"ean8";
1357
+ decoderStrings[(BYTE)*DECODER_EAN13] = L"ean13";
1358
+ decoderStrings[(BYTE)*DECODER_CODABAR] = L"codabar";
1359
+ decoderStrings[(BYTE)*DECODER_CODE39] = L"code39";
1360
+ decoderStrings[(BYTE)*DECODER_D2OF5] = L"d2of5";
1361
+ decoderStrings[(BYTE)*DECODER_I2OF5] = L"i2of5";
1362
+ decoderStrings[(BYTE)*DECODER_CODE11] = L"code11";
1363
+ decoderStrings[(BYTE)*DECODER_CODE93] = L"code93";
1364
+ decoderStrings[(BYTE)*DECODER_CODE128] = L"code128";
1365
+ decoderStrings[(BYTE)*DECODER_PDF417] = L"pdf417";
1366
+ decoderStrings[(BYTE)*DECODER_TRIOPTIC39] = L"trioptic39";
1367
+ decoderStrings[(BYTE)*DECODER_MICROPDF] = L"microPDF";
1368
+ decoderStrings[(BYTE)*DECODER_MACROPDF] = L"macroPDF";
1369
+ decoderStrings[(BYTE)*DECODER_MAXICODE] = L"maxicode";
1370
+ decoderStrings[(BYTE)*DECODER_DATAMATRIX] = L"datamatrix";
1371
+ decoderStrings[(BYTE)*DECODER_QRCODE] = L"qrCode";
1372
+ decoderStrings[(BYTE)*DECODER_MACROMICROPDF]= L"macroMicroPDF";
1373
+ decoderStrings[(BYTE)*DECODER_RSS14] = L"rss14";
1374
+ decoderStrings[(BYTE)*DECODER_RSSLIM] = L"rsslim";
1375
+ decoderStrings[(BYTE)*DECODER_RSSEXP] = L"rssexp";
1376
+ decoderStrings[(BYTE)*DECODER_IMAGE] = L"image";
1377
+ decoderStrings[(BYTE)*DECODER_SIGNATURE] = L"signature";
1378
+ decoderStrings[(BYTE)*DECODER_DOCCAP] = L"documentCapture";
1379
+ decoderStrings[(BYTE)*DECODER_WEBCODE] = L"webcode";
1380
+ decoderStrings[(BYTE)*DECODER_COMPOSITE_AB] = L"compositeAb";
1381
+ decoderStrings[(BYTE)*DECODER_COMPOSITE_C] = L"compositeC";
1382
+ decoderStrings[(BYTE)*DECODER_TLC39] = L"tlc39";
1383
+ decoderStrings[(BYTE)*DECODER_USPOSTNET] = L"usPostNet";
1384
+ decoderStrings[(BYTE)*DECODER_USPLANET] = L"usPlanet";
1385
+ decoderStrings[(BYTE)*DECODER_UKPOSTAL] = L"ukPostal";
1386
+ decoderStrings[(BYTE)*DECODER_JAPPOSTAL] = L"japPostal";
1387
+ decoderStrings[(BYTE)*DECODER_AUSPOSTAL] = L"ausPostal";
1388
+ decoderStrings[(BYTE)*DECODER_DUTCHPOSTAL] = L"dutchPostal";
1389
+ decoderStrings[(BYTE)*DECODER_CANPOSTAL] = L"canPostal";
1390
+ decoderStrings[(BYTE)*DECODER_CHINESE_2OF5] = L"chinese2of5";
1391
+ decoderStrings[(BYTE)*DECODER_AZTEC] = L"aztec";
1392
+ decoderStrings[(BYTE)*DECODER_MICROQR] = L"microQR";
1393
+ decoderStrings[(BYTE)*DECODER_KOREAN_3OF5] = L"korean2of5";
1394
+ decoderStrings[(BYTE)*DECODER_US4STATE] = L"us4state";
1395
+ decoderStrings[(BYTE)*DECODER_MATRIX_2OF5] = L"matrix2of5";
1396
+ decoderStrings[(BYTE)*DECODER_US4STATE_FICS]= L"us4stateFics";
1397
+ }
1398
+
1399
+ #pragma endregion
1400
+
1401
+ #pragma region Meta_Tag_Queue_Control
1402
+
1403
+ BOOL CScanner::AddMetaTagToQueue(HANDLE hQueueToAddTo, LPCTSTR szPropertyName, LPCTSTR szPropertyValue)
1404
+ {
1405
+ MetaTagQEntry metaTag;
1406
+ if (szPropertyName){
1407
+ metaTag.szParameter = new WCHAR[wcslen(szPropertyName) + 1];
1408
+ wcscpy(metaTag.szParameter, szPropertyName);
1409
+ }
1410
+ else
1411
+ szPropertyName = NULL;
1412
+
1413
+ if (szPropertyValue)
1414
+ {
1415
+ metaTag.szValue = new WCHAR[wcslen(szPropertyValue) + 1];
1416
+ wcscpy(metaTag.szValue, szPropertyValue);
1417
+ }
1418
+ else
1419
+ szPropertyValue = NULL;
1420
+
1421
+ return WriteMsgQueue(hQueueToAddTo, &metaTag, sizeof(metaTag), 0, 0);
1422
+ }
1423
+
1424
+
1425
+ void CScanner::ActionPendingMetaTags(HANDLE hQueueToProcess, bool bParseTags)
1426
+ {
1427
+ // Read the pending Meta tags and resubmit them
1428
+ BOOL bMetaQReadValue, bProcessingMetaTags = TRUE;
1429
+ //PBMetaStruct defined in PBPlugin.h
1430
+ MetaTagQEntry metaTag;
1431
+ DWORD dwRead, dwFlags;
1432
+ if (bParseTags &&
1433
+ hQueueToProcess == m_hTagsOnCurrentPageQRead)
1434
+ {
1435
+ // To prevent the TagsOnCurrentPage queue cyclically being populated
1436
+ // put in a special entry to it
1437
+ AddMetaTagToQueue(m_hTagsOnCurrentPageQWrite, L"StopProcessing", L"StopProcessing");
1438
+ }
1439
+ while (bProcessingMetaTags)
1440
+ {
1441
+ bMetaQReadValue =
1442
+ ReadMsgQueue(hQueueToProcess, &metaTag,
1443
+ sizeof(MetaTagQEntry), &dwRead, 0, &dwFlags);
1444
+ if (bMetaQReadValue)
1445
+ {
1446
+ // Successfully read a value from the queue of Meta Tags
1447
+ // to parse. Note if we are actioning the queue of tags on the current
1448
+ // page we do not re-add them to the same queue, that is what the
1449
+ // third parameter does below.
1450
+ if (wcscmp(metaTag.szParameter, L"StopProcessing") == 0 &&
1451
+ wcscmp(metaTag.szValue, L"StopProcessing") == 0)
1452
+ {
1453
+ bProcessingMetaTags = FALSE;
1454
+ }
1455
+ else
1456
+ {
1457
+ if (bParseTags)
1458
+ SetPropertyOrMethod(metaTag.szParameter, metaTag.szValue);
1459
+ }
1460
+ delete[] metaTag.szParameter;
1461
+ delete[] metaTag.szValue;
1462
+ }
1463
+ else
1464
+ {
1465
+ // Failed to read a value from the queue, probably because
1466
+ // there are no entries left to read
1467
+ bProcessingMetaTags = FALSE;
1468
+ }
1469
+ }
1470
+ }
1471
+
1472
+ #pragma endregion
1473
+
1474
+ #pragma region Scanner_Control_Functions
1475
+
1476
+ BOOL CScanner::OpenScanner(LPCTSTR wScannerName)
1477
+ {
1478
+ BOOL bReturnValue = FALSE;
1479
+ // The request to the EMDK layer requires us to append a ':'
1480
+ WCHAR* wScannerToRequest = NULL;
1481
+ if (wScannerName != NULL && wcslen(wScannerName) > 0)
1482
+ {
1483
+ // The user has specified a Scanner to Open
1484
+ wScannerToRequest = new WCHAR[wcslen(wScannerName) + 2];
1485
+ wsprintf(wScannerToRequest, L"%s:", wScannerName);
1486
+ if (m_szUserSpecifiedScanner)
1487
+ delete[] m_szUserSpecifiedScanner;
1488
+ m_szUserSpecifiedScanner = new WCHAR[wcslen(wScannerName) + 1];
1489
+ wcscpy(m_szUserSpecifiedScanner, wScannerName);
1490
+ if (FindScanner(wScannerToRequest, &m_bUsingBluetoothScanner, NULL))
1491
+ {
1492
+ // The Scanner exists on the device, open it
1493
+ if (lpfn_SCAN_Open(wScannerToRequest, &m_hScanner) != E_SCN_SUCCESS)
1494
+ {
1495
+ m_hScanner = NULL;
1496
+ LOG(WARNING) + L"Failed to open Scanner";
1497
+ }
1498
+ else
1499
+ {
1500
+ if (m_szCurrentlyOpenScanner)
1501
+ delete[] m_szCurrentlyOpenScanner;
1502
+ m_szCurrentlyOpenScanner = new WCHAR[wcslen(wScannerName) + 1];
1503
+ wcscpy(m_szCurrentlyOpenScanner, wScannerName);
1504
+ bReturnValue = TRUE;
1505
+ }
1506
+ }
1507
+ else
1508
+ {
1509
+ WCHAR logMsg[MAXLOG];
1510
+ wsprintf(logMsg, L"Requested Scanner ID, %s, is not present on device", wScannerToRequest);
1511
+ LOG(WARNING) + logMsg;
1512
+ }
1513
+ }
1514
+ else
1515
+ {
1516
+ // The user has not specified a Scanner to open, open the default
1517
+ // scanner
1518
+ bool bDefaultScanOpenSuccess = false;
1519
+ if (m_szCurrentlyOpenScanner)
1520
+ delete[] m_szCurrentlyOpenScanner;
1521
+ m_szCurrentlyOpenScanner = new WCHAR[5];
1522
+ if (FindScanner(L"SCN1:", &m_bUsingBluetoothScanner, NULL))
1523
+ {
1524
+ bDefaultScanOpenSuccess = (lpfn_SCAN_Open(L"SCN1:", &m_hScanner) == E_SCN_SUCCESS);
1525
+ if (bDefaultScanOpenSuccess)
1526
+ wcscpy(m_szCurrentlyOpenScanner, L"SCN1");
1527
+ }
1528
+ else if (FindScanner(L"SCN2:", &m_bUsingBluetoothScanner, NULL))
1529
+ {
1530
+ bDefaultScanOpenSuccess = (lpfn_SCAN_Open(L"SCN2:", &m_hScanner) == E_SCN_SUCCESS);
1531
+ if (bDefaultScanOpenSuccess)
1532
+ wcscpy(m_szCurrentlyOpenScanner, L"SCN2");
1533
+ }
1534
+ if (!bDefaultScanOpenSuccess)
1535
+ LOG(WARNING) + L"Failed to open default scanner";
1536
+
1537
+ bReturnValue = bDefaultScanOpenSuccess;
1538
+ }
1539
+
1540
+ m_bScannerOpen = (bReturnValue == TRUE);
1541
+ if (wScannerToRequest)
1542
+ delete[] wScannerToRequest;
1543
+ if (!bReturnValue)
1544
+ m_bUsingBluetoothScanner = false;
1545
+
1546
+ return bReturnValue;
1547
+ }
1548
+
1549
+ // Returns whether or not the specified Scanner is present on the device
1550
+ // bIsBluetoothScanner is an output parameter, set to true if the found scanner
1551
+ // is bluetooth.
1552
+ BOOL CScanner::FindScanner(LPCTSTR wScannerName, bool* bIsBluetoothScanner, WCHAR* szFriendlyName)
1553
+ {
1554
+ BOOL bReturnValue = FALSE;
1555
+ *bIsBluetoothScanner = false;
1556
+
1557
+ SCAN_FINDINFO scanFindInfo;
1558
+ memset(&scanFindInfo, 0, sizeof(scanFindInfo));
1559
+ scanFindInfo.StructInfo.dwAllocated = sizeof(scanFindInfo);
1560
+ HANDLE scanFindHandle = NULL;
1561
+
1562
+ DWORD dwResult = lpfn_SCAN_FindFirst(&scanFindInfo, &scanFindHandle);
1563
+ while(dwResult == E_SCN_SUCCESS)
1564
+ {
1565
+ // Application has requested a specific scanner, check to see
1566
+ // if this is the scanner requested
1567
+ if (!wcsicmp(wScannerName, scanFindInfo.szDeviceName))
1568
+ {
1569
+ // Found the scanner requested by the user
1570
+ bReturnValue = TRUE;
1571
+ if (szFriendlyName)
1572
+ {
1573
+ wcscpy_s(szFriendlyName, 30, scanFindInfo.szFriendlyName);
1574
+ }
1575
+ // Check to see if this is a Bluetooth scanner (these always
1576
+ // start with the string 'Bluetooth' in their Friendly name
1577
+ if (wcsstr(scanFindInfo.szFriendlyName, L"Bluetooth") ||
1578
+ wcsstr(scanFindInfo.szFriendlyName, L"bluetooth"))
1579
+ {
1580
+ *bIsBluetoothScanner = true;
1581
+ }
1582
+ break;
1583
+ }
1584
+ dwResult = lpfn_SCAN_FindNext(&scanFindInfo, scanFindHandle);
1585
+ }
1586
+ lpfn_SCAN_FindClose(scanFindHandle);
1587
+
1588
+ return bReturnValue;
1589
+ }
1590
+
1591
+ BOOL CScanner::CloseScanner()
1592
+ {
1593
+ //LOG(TRACE) + "Closing Scanner ...";
1594
+ // Shut down all communication with the Scanner,
1595
+ // equivilent to ScanTerm() in PB3
1596
+ // Free memory associated with the list of supported RSM Attributes
1597
+ // which have not been returned to the user.
1598
+ delete[] m_rsmSupportedAttributes;
1599
+ m_rsmSupportedAttributes = NULL;
1600
+ for(int i=0; i < m_iCountOfMarkedRSMAttributes; i++)
1601
+ {
1602
+ delete[] m_szRSMValuesToReturn[i];
1603
+ m_szRSMValuesToReturn[i] = NULL;
1604
+ }
1605
+ m_iCountOfMarkedRSMAttributes = 0;
1606
+ m_bScannerOpen = false;
1607
+ m_bScannerEnabled = false;
1608
+ m_bScannerBeingEnabled = false;
1609
+ m_bTriggerConnected = true;
1610
+ if(m_bUsingBluetoothScanner)
1611
+ {
1612
+ //LOG(TRACE) + "Closing Bluetooth hidden windows...";
1613
+ SetBluetoothStatus(FALSE);
1614
+ // Deregister for Windows Status notifications of Bluetooth events
1615
+ lpfn_SCAN_DeRegisterScanMessage(m_hScanner);
1616
+ // Destroy the hidden window, listening for BT events from EMDK
1617
+ if (m_hiddenWindow)
1618
+ {
1619
+ PostMessage(m_hiddenWindow, WM_CLOSE, 0, 0);
1620
+ m_hiddenWindow = NULL;
1621
+ }
1622
+ }
1623
+ m_ScannerState = NO_BT_CONNECTION;
1624
+ m_bUsingBluetoothScanner = false;
1625
+ // if (m_szUserSpecifiedScanner)
1626
+ // {
1627
+ // delete[] m_szUserSpecifiedScanner;
1628
+ // m_szUserSpecifiedScanner = NULL;
1629
+ // }
1630
+ if (m_szCurrentlyOpenScanner)
1631
+ {
1632
+ delete[] m_szCurrentlyOpenScanner;
1633
+ m_szCurrentlyOpenScanner = NULL;
1634
+ }
1635
+
1636
+ // If a scanner is open
1637
+ DWORD dwResult = E_SCN_SUCCESS;
1638
+ if (m_hScanner != NULL)
1639
+ {
1640
+ // Stop any active scan
1641
+ BOOL bSetTrigger = FALSE;
1642
+ lpfn_SCAN_SetSoftTrigger(m_hScanner, &bSetTrigger);
1643
+ // Disable the Scanner, flushing the pending read
1644
+ lpfn_SCAN_Flush(m_hScanner);
1645
+ dwResult = lpfn_SCAN_Disable(m_hScanner);
1646
+
1647
+ if (dwResult == E_SCN_SUCCESS)
1648
+ {
1649
+ // Deallocate the Scan Buffer
1650
+ if (m_lpScanBuffer != NULL)
1651
+ {
1652
+ // If the scan buffer is still pending, cancel the read
1653
+ if ( SCNBUF_GETSTAT(m_lpScanBuffer) == E_SCN_READPENDING )
1654
+ {
1655
+ lpfn_SCAN_CancelRead(m_hScanner, SCNBUF_GETREQID(m_lpScanBuffer));
1656
+ }
1657
+ // Deallocate the scan buffer
1658
+ lpfn_SCAN_DeallocateBuffer(m_lpScanBuffer);
1659
+
1660
+ // Mark scan buffer unallocated
1661
+ m_lpScanBuffer = NULL;
1662
+ }
1663
+ }
1664
+
1665
+ // Close the scanner
1666
+ dwResult = lpfn_SCAN_Close(m_hScanner);
1667
+
1668
+ // Mark the scanner closed
1669
+ m_hScanner = NULL;
1670
+ }
1671
+
1672
+ return (dwResult == E_SCN_SUCCESS);
1673
+ }
1674
+
1675
+ BOOL CScanner::DisableScannerAndResetToDefault()
1676
+ {
1677
+ // When disabling the scanner EMDK automatically resets the Scanner
1678
+ // settings back to default.
1679
+ return CloseScanner();
1680
+ }
1681
+
1682
+ BOOL CScanner::EnableScanner()
1683
+ {
1684
+ // Creates the thread to enable the Scanner
1685
+ m_bScannerBeingEnabled = true;
1686
+
1687
+ if (!m_bScannerOpen)
1688
+ {
1689
+ if (OpenScanner(m_szUserSpecifiedScanner) == FALSE)
1690
+ {
1691
+ LOG(ERROR) + "OpenScanner Failed";
1692
+ m_bScannerBeingEnabled = false;
1693
+ return FALSE;
1694
+ }
1695
+ }
1696
+
1697
+ // the hidden for the bluetooth window has been mode to the thread spawned in the
1698
+ // next line, becuae it will need a message pump.
1699
+
1700
+ // Enable the Scanner in a separate thread as this can block
1701
+ // for Bluetooth Scanners
1702
+ CloseHandle(CreateThread(NULL, 0, &EnableScannerThread, (void*)this, 0, NULL));
1703
+
1704
+ return TRUE;
1705
+ }
1706
+
1707
+ BOOL CScanner::SubmitRead()
1708
+ {
1709
+ // Previously called GoScan()
1710
+ // Enable the Scanner if it is not already enabled.
1711
+ if (!m_bScannerEnabled && !m_bScannerBeingEnabled)
1712
+ {
1713
+ if (!EnableScanner())
1714
+ {
1715
+ LOG(WARNING) + "EnableScanner failed!";
1716
+ return FALSE;
1717
+ }
1718
+ }
1719
+ // Setting Scanner parameters requires a read to not be pending, block here whilst the scanner parameters are set
1720
+ EnterCriticalSection(&m_scanner_prop_cs);
1721
+ LeaveCriticalSection(&m_scanner_prop_cs);
1722
+
1723
+ // Create a thread to submit the Scan. If the user had previously disconnected the trigger we skip this step until
1724
+ // the user reconnects the trigger.
1725
+ if (m_bTriggerConnected)
1726
+ CloseHandle(CreateThread(NULL, 0, &SubmitReadThread, (void*)this, 0, NULL));
1727
+ return TRUE;
1728
+ }
1729
+
1730
+ BOOL CScanner::RetrieveDataFromScanBuffer()
1731
+ {
1732
+ // Put last scanned data in m_lastScannedData
1733
+ // last scan data is stored in m_lpScanBuffer
1734
+ if (m_lpScanBuffer != NULL && !g_bShuttingDown)
1735
+ {
1736
+ // If the user has requested a text barcode then just
1737
+ // copy the data
1738
+ DWORD dataLen = (DWORD)SCNBUF_GETLEN(m_lpScanBuffer);
1739
+ if (SCNBUF_ISTEXT(m_lpScanBuffer))
1740
+ wcsncpy(m_lastScannedData.szData, (LPTSTR)SCNBUF_GETDATA(m_lpScanBuffer), m_iDataBufferSize);
1741
+ else
1742
+ {
1743
+ // User has requested data to be read as binary, convert this
1744
+ // to a Data URI before returning
1745
+ // Converting to Base 64 will produce output 1/3 larger than the binary
1746
+ // input
1747
+ char* szEncodedString = new char[dataLen * 2];
1748
+ memset(szEncodedString, 0, dataLen * 2);
1749
+ EncodeToBase64(SCNBUF_GETDATA(m_lpScanBuffer), SCNBUF_GETLEN(m_lpScanBuffer), szEncodedString);
1750
+ // Because we are returning binary data the size of the receiving buffer will
1751
+ // need to be enlargened to accommodate the extra space.
1752
+ // 30 is added for the "data:....." header for the encoding
1753
+ int iLengthOfReturnString = strlen(szEncodedString) + 30;
1754
+ delete[] m_lastScannedData.szData;
1755
+ m_lastScannedData.szData = new WCHAR[iLengthOfReturnString];
1756
+ if (!m_lastScannedData.szData)
1757
+ {
1758
+ LOG(ERROR) + L"Unable to allocate memory to return data buffer";
1759
+ delete[] szEncodedString;
1760
+ return FALSE;
1761
+ }
1762
+ memset(m_lastScannedData.szData, 0, iLengthOfReturnString * sizeof(WCHAR));
1763
+ if (SCNBUF_GETLBLTYP(m_lpScanBuffer) == LABELTYPE_SIGNATURE)
1764
+ {
1765
+ // User has scanned a barcode type which should be
1766
+ // returned as Jpeg data
1767
+ // Note: If scanner ever supports anything other than jpeg then
1768
+ // this mime type will need to be changed.
1769
+ wcscpy(m_lastScannedData.szData, L"data:image/jpeg;base64,");
1770
+ mbstowcs(m_lastScannedData.szData + wcslen(L"data:image/jpeg;base64,"),
1771
+ szEncodedString, iLengthOfReturnString);
1772
+ }
1773
+ else
1774
+ {
1775
+ // User has scanned a barcode type which should be
1776
+ // returned as text
1777
+ wcscpy(m_lastScannedData.szData, L"data:text/plain;base64,");
1778
+ mbstowcs(m_lastScannedData.szData + wcslen(L"data:text/plain;base64,"),
1779
+ szEncodedString, iLengthOfReturnString);
1780
+ }
1781
+ delete[] szEncodedString;
1782
+ }
1783
+
1784
+ SYSTEMTIME systime;
1785
+ wsprintf(m_lastScannedData.szLength, L"%d", dataLen);
1786
+ DWORD labelType = (DWORD)SCNBUF_GETLBLTYP(m_lpScanBuffer);
1787
+ wsprintf(m_lastScannedData.szType, L"0x%x", labelType);
1788
+ memset(m_lastScannedData.szSource, 0, MAX_SOURCE_SIZE * sizeof(TCHAR));
1789
+ // Klocwork: error reported here and ignored as related to EMDK Macro
1790
+ wcsncpy(m_lastScannedData.szSource, SCNBUF_GETSRC(m_lpScanBuffer), MAX_SOURCE_SIZE - 1);
1791
+ if (m_lpScanBuffer->dwDirection == DIR_FORWARD)
1792
+ wcscpy(m_lastScannedData.szDirection, L"forward");
1793
+ else if (m_lpScanBuffer->dwDirection == DIR_REVERSE)
1794
+ wcscpy(m_lastScannedData.szDirection, L"reverse");
1795
+ else
1796
+ wcscpy(m_lastScannedData.szDirection, L"unavailable");
1797
+
1798
+ // Test to see if there is any auxiliary data associated with this barcode,
1799
+ // eg. for Composite Barcodes
1800
+ if (m_lpScanBuffer->bIsMultiPart && SCNBUF_ISTEXT(m_lpScanBuffer))
1801
+ {
1802
+ // Get the data in the auxiliary data area
1803
+ LPBYTE lpbyTemp = (LPBYTE)m_lpScanBuffer + m_lpScanBuffer->dwOffsetAuxDataBuff;
1804
+ DWORD dwAuxDataPackets = m_lpScanBuffer->dwNumRemaining;
1805
+ DWORD dwAuxiliaryDataLength = 0;
1806
+ for (DWORD dwIndex = 1; dwIndex <= dwAuxDataPackets; dwIndex++)
1807
+ {
1808
+ // Get the total length of the auxiliary data
1809
+ DWORD dwPacketLength = (MAKEWORD(lpbyTemp[2], lpbyTemp[1]));
1810
+ dwAuxiliaryDataLength += dwPacketLength;
1811
+ lpbyTemp += (3 + dwPacketLength);
1812
+ }
1813
+ // Create a string to hold the auxiliary data
1814
+ lpbyTemp = (LPBYTE)m_lpScanBuffer + m_lpScanBuffer->dwOffsetAuxDataBuff;
1815
+ WCHAR* szAuxiliaryData = new WCHAR[dwAuxiliaryDataLength + 1];
1816
+ memset(szAuxiliaryData, 0, (dwAuxiliaryDataLength + 1) * 2);
1817
+ // Copy Auxiliary Data to String
1818
+ DWORD dwPacketDataLocation = 0;
1819
+ for (DWORD dwIndex = 1; dwIndex <= dwAuxDataPackets; dwIndex++)
1820
+ {
1821
+ // Untested with more than one Aux Packet
1822
+ DWORD dwPacketLength = (MAKEWORD(lpbyTemp[2], lpbyTemp[1]));
1823
+ MultiByteToWideChar(
1824
+ CP_OEMCP,
1825
+ MB_PRECOMPOSED,
1826
+ (LPCSTR)&lpbyTemp[3],
1827
+ dwPacketLength,
1828
+ (LPWSTR)&szAuxiliaryData[dwPacketDataLocation],
1829
+ dwPacketLength * 2);
1830
+
1831
+ // Move to the next packet
1832
+ lpbyTemp += (3 + dwPacketLength);
1833
+ dwPacketDataLocation += dwPacketLength;
1834
+ }
1835
+ // Append the Auxiliary string to the end of the Scanned Data
1836
+ // if there is space.
1837
+ // Klocwork: Error reported here and ignored as KW doesn't understand that if buffer
1838
+ // was too small (m_iDataBufferSize) then EMDK would have thrown an error before we get here.
1839
+ if (wcslen(m_lastScannedData.szData) + wcslen(szAuxiliaryData) < m_iDataBufferSize)
1840
+ wcscat(m_lastScannedData.szData, szAuxiliaryData);
1841
+ else
1842
+ m_decodeNotifier->BadDecode();
1843
+ delete[] szAuxiliaryData;
1844
+ }
1845
+
1846
+ // If the time stamp field was filled in
1847
+ if ( SI_FIELD_VALID(m_lpScanBuffer, TimeStamp) )
1848
+ {
1849
+ // Get time stamp
1850
+ systime = m_lpScanBuffer->TimeStamp;
1851
+
1852
+ // Format it
1853
+ wsprintf(m_lastScannedData.szTimeStamp,
1854
+ TEXT("%02d:%02d:%02d"),
1855
+ systime.wHour,
1856
+ systime.wMinute,
1857
+ systime.wSecond);
1858
+ }
1859
+ }
1860
+ return TRUE;
1861
+ }
1862
+
1863
+ BOOL CScanner::ResetScanBuffer()
1864
+ {
1865
+ // Buffer will be reallocated at next read request
1866
+ BOOL bRetVal = lpfn_SCAN_DeallocateBuffer(m_lpScanBuffer);
1867
+ m_lpScanBuffer = NULL;
1868
+ return bRetVal;
1869
+ }
1870
+
1871
+ // Changes the type of the next scanner read (foreground / background / monitor)
1872
+ BOOL CScanner::ChangeReadType(tagSCANTYPE scanType)
1873
+ {
1874
+ m_currentScanType = scanType;
1875
+ SCAN_PARAMS scan_params;
1876
+ memset(&scan_params, 0, sizeof(scan_params));
1877
+ SI_INIT(&scan_params);
1878
+ DWORD dwResult = lpfn_SCAN_GetScanParameters(m_hScanner, &scan_params);
1879
+ if (dwResult != E_SCN_SUCCESS)
1880
+ return FALSE;
1881
+ scan_params.dwScanType = scanType;
1882
+ dwResult = lpfn_SCAN_SetScanParameters(m_hScanner, &scan_params);
1883
+ if (dwResult != E_SCN_SUCCESS)
1884
+ return FALSE;
1885
+ else
1886
+ return TRUE;
1887
+ }
1888
+
1889
+
1890
+ #pragma endregion
1891
+
1892
+ #pragma region User_Interface_Routines
1893
+
1894
+ void CScanner::SetBluetoothStatus(BOOL bConnected)
1895
+ {
1896
+
1897
+ // Only expect to become Connected when we are in the NO_BT_CONNECTION
1898
+ // or the WAITING_FOR_BT_RECONNECTION states.
1899
+ // Only expect to become Disconnected when we are in the BT_CONNECTED state or
1900
+ // when waiting for the user to scan the association barcode
1901
+ if ((bConnected &&
1902
+ (m_ScannerState == NO_BT_CONNECTION || m_ScannerState == WAITING_FOR_BT_RECONNECTION
1903
+ || m_ScannerState == WAITING_FOR_BT_CONNECTION))
1904
+ ||
1905
+ (!bConnected && (m_ScannerState == BT_CONNECTED || m_ScannerState == WAITING_FOR_BT_CONNECTION)))
1906
+ {
1907
+ //LOG(INFO) + L"BT event recieved";
1908
+ // The state transition is legal, action it.
1909
+ if (bConnected)
1910
+ {
1911
+ // Scanner has become connected
1912
+ // Set the application State to Bluetooth Connected
1913
+ ScannerState stateBeforeConnection = m_ScannerState;
1914
+ m_ScannerState = BT_CONNECTED;
1915
+
1916
+ // Call GoScan() if this is a _Reconnection_, not for the first connection.
1917
+ // There is precidence for calling GoScan from the main event queue.
1918
+ //if (stateBeforeConnection == WAITING_FOR_BT_RECONNECTION)
1919
+ // EnableScanner();
1920
+
1921
+ // Set the Connected String to Connected. Use of a critical section
1922
+ // ensures the m_szBluetoothStatus variable is updated only once
1923
+ wcscpy(m_szBluetoothStatus, L"BluetoothConnected");
1924
+ }
1925
+ else
1926
+ {
1927
+ // Scanner has become disconnected (Transitioned from BT_CONNECTED to
1928
+ // here).
1929
+ // Set the application State to Waiting for Reconnection
1930
+ m_ScannerState = WAITING_FOR_BT_RECONNECTION;
1931
+
1932
+ // Set the Connected String to Disconnected. Use of a critical section
1933
+ // ensures the m_szBluetoothStatus variable is updated only once
1934
+ wcscpy(m_szBluetoothStatus, L"BluetoothDisconnected");
1935
+ }
1936
+
1937
+ // Inform the User of the Connect / Disconnect in a separate thread
1938
+ HANDLE hThread;
1939
+ hThread = CreateThread(NULL, 0, &InformUserOfBTEvent, (void*)this, 0, NULL);
1940
+ CloseHandle(hThread);
1941
+
1942
+
1943
+ }
1944
+ else if (bConnected && (m_ScannerState == BT_CONNECTED))
1945
+ {
1946
+ // This is not part of this SR, but it was observed that sometimes even if the scanner is connectd
1947
+ // messages seem to be coming saying its connected. why should we close the scanner
1948
+ //if we get a message saying if the scanner is connected
1949
+ // eventhough its already connected. I am not sure if there can be any condition
1950
+ return;
1951
+ }
1952
+ else
1953
+ {
1954
+ // Unexpected State Transition, this will be a case for debugging.
1955
+ // This occurs sometimes if we take the battery off the Scanner as the EMDK
1956
+ // doesn't always seem to notify us via a Windows Message.
1957
+ TCHAR szLogMsg[MAX_PATH] = {0};
1958
+ wsprintf(szLogMsg, L"Unexpected Scanner BT State Transition, Disabling Scanner %d, %d", bConnected, m_ScannerState);
1959
+ LOG(WARNING) + szLogMsg;
1960
+
1961
+ m_bUsingBluetoothScanner = false;
1962
+ CloseScanner();
1963
+ }
1964
+ }
1965
+
1966
+
1967
+ // szDecodeEvent can not be NULL
1968
+ /*BOOL CScanner::SetScannerEvent(LPCTSTR szUserDefinedEvent, WCHAR** szScannerMemberVariable)
1969
+ {
1970
+ if (!szUserDefinedEvent)
1971
+ return FALSE;
1972
+ if (*szScannerMemberVariable)
1973
+ delete[] *szScannerMemberVariable;
1974
+ *szScannerMemberVariable = new WCHAR[(wcslen(szUserDefinedEvent) * sizeof(WCHAR)) + 1];
1975
+ wcscpy(*szScannerMemberVariable, szUserDefinedEvent);
1976
+ return TRUE;
1977
+ }
1978
+ */
1979
+ #pragma endregion
1980
+
1981
+ #pragma region Threads
1982
+
1983
+
1984
+ // Thread to enable the Scanner and connect to a BT scanner as
1985
+ // appropriate
1986
+ DWORD CScanner::EnableScannerThread(LPVOID lParam)
1987
+ {
1988
+ CScanner* pScanner = (CScanner*)lParam;
1989
+ DWORD dwReturnValue = E_SCN_SUCCESS;
1990
+
1991
+ // the hidden for the bluetooth window has been mode in here from the Enable scanner
1992
+ // method, becuae it will need a message pump and that will keep the thraed blocked
1993
+ if(pScanner->m_bUsingBluetoothScanner)
1994
+ {
1995
+ if (NULL == pScanner->m_hiddenWindow)
1996
+ {
1997
+ LOG(TRACE) + "Create the bluetooth hidden window...";
1998
+ pScanner->m_hiddenWindow = CreateWindow(pScanner->m_szHiddenWindowName, NULL, 0, 0, 0, 0, 0, NULL, (HMENU)0, NULL, NULL);
1999
+
2000
+ if (pScanner->m_hiddenWindow)
2001
+ {
2002
+ SetWindowLong(pScanner->m_hiddenWindow, GWL_USERDATA, (LONG)pScanner);
2003
+ //LOG(TRACE) + "Bluetooth hidden window created...";
2004
+
2005
+ }
2006
+ //SetWindowLong(m_hiddenWindow, GWL_WNDPROC, (DWORD)HiddenWindowProc);
2007
+ }
2008
+
2009
+
2010
+ // Test to see whether the user has requested to display the BT address barcode
2011
+ // on enable or not
2012
+ if (pScanner->m_iDisplayBTPairBarcode > BT_PAIRING_BARCODE_INITIAL ||
2013
+ pScanner->m_dwEnableTimeout > -1)
2014
+ {
2015
+ INTERFACE_PARAMS interfaceParams;
2016
+ pScanner->RetrieveScannerInterfaceParameters(&interfaceParams);
2017
+ if (pScanner->m_iDisplayBTPairBarcode > BT_PAIRING_BARCODE_INITIAL)
2018
+ interfaceParams.InterfaceSpecific.SsiSpecific.bDisplayBTAddressBarcode = pScanner->m_iDisplayBTPairBarcode;
2019
+ if (pScanner->m_dwEnableTimeout > 0)
2020
+ interfaceParams.InterfaceSpecific.SsiSpecific.dwEstablishConnectionTime = pScanner->m_dwEnableTimeout;
2021
+ BOOL bRetVal = pScanner->SetScannerInterfaceParameters(&interfaceParams, sizeof(interfaceParams));
2022
+ if (!bRetVal)
2023
+ LOG(WARNING) + L"Unable to configure Bluetooth scanner configuration settings";
2024
+
2025
+ }
2026
+ }
2027
+
2028
+ pScanner->m_ScannerState = NO_BT_CONNECTION;
2029
+
2030
+ if(pScanner->m_bUsingBluetoothScanner)
2031
+ {
2032
+ wcscpy(pScanner->m_szBluetoothStatus, L"BTScanAssociationBarcode");
2033
+ CloseHandle(CreateThread(NULL, 0, &InformUserOfBTEvent, (void*)pScanner, 0, NULL));
2034
+ pScanner->m_ScannerState = WAITING_FOR_BT_CONNECTION;
2035
+ }
2036
+
2037
+ dwReturnValue = pScanner->lpfn_SCAN_Enable(pScanner->m_hScanner);
2038
+ if (dwReturnValue != E_SCN_SUCCESS)
2039
+ {
2040
+ // Scanner did not enable correctly, terminate scanning.
2041
+ pScanner->CloseScanner();
2042
+ }
2043
+ else
2044
+ {
2045
+ if(pScanner->m_bUsingBluetoothScanner)
2046
+ {
2047
+ pScanner->SetBluetoothStatus(TRUE);
2048
+ // Register to receive BT Status event via a Windows message (this is the only way to do it)
2049
+ // In EnableScanner() we created our own hidden window, associated with this
2050
+ // scanner instance.
2051
+ DWORD dwResult = pScanner->lpfn_SCAN_RegisterScanMessage(pScanner->m_hScanner,
2052
+ pScanner->m_hiddenWindow, WM_SCAN_EVENT_RHOELEMENTS);
2053
+ if (dwResult != E_SCN_SUCCESS)
2054
+ {
2055
+ LOG(WARNING) + L"Failed to register for BT Notification messages, BT status reporting may be inaccurate";
2056
+ }
2057
+ }
2058
+
2059
+ // Configure Scanner Parameters
2060
+ SCAN_PARAMS scan_params;
2061
+ memset(&scan_params, 0, sizeof(scan_params));
2062
+ SI_INIT(&scan_params);
2063
+ DWORD dwResult = pScanner->lpfn_SCAN_GetScanParameters(pScanner->m_hScanner, &scan_params);
2064
+ if (dwResult != E_SCN_SUCCESS)
2065
+ return dwResult;
2066
+ // Disable the Beep and Wave at the Scanner Layer. We do it manually in DecodeBeep()
2067
+ // This is legacy behaviour which is being maintained in RhoElements as it will
2068
+ // better encapsulate a Scanner user.
2069
+ SI_SET_IF_CHANGED(&scan_params, dwCodeIdType, 0);
2070
+ SI_SET_IF_CHANGED(&scan_params, dwDecodeBeepTime, 0);
2071
+ WCHAR wWaveFile[1];
2072
+ wWaveFile[0] = 0;
2073
+ SI_SET_STRING(&scan_params, szWaveFile, wWaveFile);
2074
+ scan_params.dwScanType = pScanner->m_currentScanType;
2075
+ dwResult = pScanner->lpfn_SCAN_SetScanParameters(pScanner->m_hScanner, &scan_params);
2076
+ if (dwResult != E_SCN_SUCCESS)
2077
+ return dwResult;
2078
+
2079
+ // Scanner Initialised, get supported RSM attributes
2080
+ pScanner->RSMGetSupportedAttributes();
2081
+
2082
+ // Enable the Scanner
2083
+ pScanner->m_bScannerBeingEnabled = false;
2084
+ pScanner->m_bScannerEnabled = true;
2085
+
2086
+ // Action any tags which were pending our scanner being enabled
2087
+ if (!pScanner->m_bCurrentlyNavigating)
2088
+ pScanner->ActionPendingMetaTags(pScanner->m_hMetaMsgQRead, true);
2089
+
2090
+ pScanner->SubmitRead();
2091
+
2092
+ // keep the message loop for the hiddden window to recieve any kind of posted
2093
+ // messages or send messages from another thread. For bluetooth scanners
2094
+ // this thread will live till the scanner is closed. Looks the now the WM_CLOSE
2095
+ // can reach the scanner
2096
+ //LOG(TRACE) + "Start the bluetooth message loop.";
2097
+ if(pScanner->m_bUsingBluetoothScanner)
2098
+ {
2099
+ MSG msg;
2100
+ while (NULL != ::GetMessage(&msg, NULL, 0, 0))
2101
+ {
2102
+ ::TranslateMessage(&msg);
2103
+ ::DispatchMessage(&msg);
2104
+ }
2105
+ LOG(TRACE) + "Exit the bluetooth message listening thread.";
2106
+ }
2107
+
2108
+ }
2109
+ return dwReturnValue;
2110
+ }
2111
+
2112
+
2113
+ DWORD CScanner::SubmitReadThread(LPVOID lParam)
2114
+ {
2115
+ CScanner* pScanner = (CScanner*)lParam;
2116
+ SetEvent(pScanner->m_hEnableForTakeComplete);
2117
+ DWORD dwResult;
2118
+ if (pScanner->m_lpScanBuffer == NULL)
2119
+ {
2120
+ // Scan buffer is unallocated, allocate it
2121
+ pScanner->m_lpScanBuffer = pScanner->lpfn_SCAN_AllocateBuffer(
2122
+ pScanner->m_bufferFormat, pScanner->m_iDataBufferSize);
2123
+ if (pScanner->m_lpScanBuffer == NULL)
2124
+ {
2125
+ // Some memory error allocating the Scanner buffer
2126
+ LOG(WARNING) + L"Unable to allocate enough memory for Scanning";
2127
+ return E_SCN_NOTENOUGHMEMORY;
2128
+ }
2129
+ else
2130
+ pScanner->m_lpScanBuffer->dwTimeout = 0; // Set timeout to 0 as we control it via scanTimeout meta tag
2131
+ }
2132
+
2133
+ ResetEvent(pScanner->m_hReadComplete);
2134
+ // Scan buffer has been allocated, submit the read event
2135
+ dwResult = pScanner->lpfn_SCAN_ReadLabelEvent(pScanner->m_hScanner,
2136
+ pScanner->m_lpScanBuffer,
2137
+ pScanner->m_hReadComplete,
2138
+ 0, &pScanner->m_dwRequestID);
2139
+
2140
+ // If the read failed disable the Scanner
2141
+ if (dwResult != E_SCN_SUCCESS)
2142
+ {
2143
+ // Handle a BT Disconnection here, we don't want to call ScanTerm()
2144
+ // for a BT Disconnection as this would require the user to
2145
+ // reassociate the scanner with the device.
2146
+ if (!(pScanner->m_ScannerState == BT_CONNECTED ||
2147
+ pScanner->m_ScannerState == WAITING_FOR_BT_RECONNECTION))
2148
+ {
2149
+ // Scanner is not connected via Bluetooth, perform existing
2150
+ // shutting down behaviour.
2151
+ LOG(WARNING) + L"Scanner Read failed, disabling scanner";
2152
+ pScanner->CloseScanner();
2153
+ }
2154
+ }
2155
+ else
2156
+ {
2157
+ // The read request was successful, wait for the data
2158
+ // Check we're not shutting down before we continue processing
2159
+ dwResult = WaitForSingleObject(pScanner->m_hReadComplete, INFINITE);
2160
+ ResetEvent(pScanner->m_hReadComplete);
2161
+ if (!pScanner->g_bShuttingDown &&
2162
+ pScanner->m_bScannerEnabled && dwResult == E_SCN_SUCCESS)
2163
+ {
2164
+ if (pScanner->m_bCurrentlyNavigating)
2165
+ {
2166
+ // If we are in the process of navigating then indicate a bad decode
2167
+ // and do not notify the application.
2168
+ LOG(INFO) + L"Attempted to Scan a barcode but data ignored as a navigation is in progress";
2169
+ pScanner->m_decodeNotifier->BadDecode();
2170
+ // return early here if we experience a scan during navigation, customer reports
2171
+ // that this is more reliable.
2172
+ if (!pScanner->m_bLegacyNavBehaviour)
2173
+ {
2174
+ pScanner->m_bScannedDuringNavigate = true;
2175
+ // pScanner->CloseScanner(); // Closing the scanner here is bad as it's already being closed for the navigate
2176
+ return dwResult;
2177
+ }
2178
+ }
2179
+ else if (pScanner->m_lpScanBuffer != NULL &&
2180
+ SCNBUF_GETSTAT(pScanner->m_lpScanBuffer) == E_SCN_SUCCESS)
2181
+ {
2182
+ // We have successfully read data from the scanner.
2183
+ // Only do anything if the Scan buffer is not NULL
2184
+ pScanner->RetrieveDataFromScanBuffer();
2185
+ // Beep that we made a good scan
2186
+ pScanner->m_decodeNotifier->GoodDecode();
2187
+
2188
+ // Call the callback function with Scanned data. If we have specified a Take
2189
+ // callback then this takes priority over a decode event, since a decode event
2190
+ // can persist but take is a one short affair.
2191
+ if (pScanner->m_pTakeCallback.hasCallback())
2192
+ {
2193
+ rho::Hashtable<rho::String, rho::String> scannedData;
2194
+ scannedData.put( rho::common::convertToStringA(L"barcode"),
2195
+ rho::common::convertToStringA(pScanner->m_lastScannedData.szData) );
2196
+ scannedData.put( rho::common::convertToStringA(L"status"),
2197
+ rho::common::convertToStringA(L"ok") );
2198
+ pScanner->m_pTakeCallback.set(scannedData);
2199
+ }
2200
+ else if (pScanner->m_pDecodeEvent.hasCallback())
2201
+ {
2202
+ rho::Hashtable<rho::String, rho::String> scannedData;
2203
+ scannedData.put( rho::common::convertToStringA(L"data"),
2204
+ rho::common::convertToStringA(pScanner->m_lastScannedData.szData) );
2205
+ scannedData.put( rho::common::convertToStringA(L"source"),
2206
+ rho::common::convertToStringA(pScanner->m_lastScannedData.szSource) );
2207
+ scannedData.put( rho::common::convertToStringA(L"type"),
2208
+ rho::common::convertToStringA(pScanner->m_lastScannedData.szType) );
2209
+ scannedData.put( rho::common::convertToStringA(L"time"),
2210
+ rho::common::convertToStringA(pScanner->m_lastScannedData.szTimeStamp) );
2211
+ scannedData.put( rho::common::convertToStringA(L"length"),
2212
+ rho::common::convertToStringA(pScanner->m_lastScannedData.szLength) );
2213
+ scannedData.put( rho::common::convertToStringA(L"direction"),
2214
+ rho::common::convertToStringA(pScanner->m_lastScannedData.szDirection) );
2215
+ pScanner->m_pDecodeEvent.set(scannedData);
2216
+ }
2217
+ else if (SCNBUF_ISTEXT(pScanner->m_lpScanBuffer))
2218
+ {
2219
+ // User has not specified a decode event, output key strokes if the buffer was text
2220
+ pScanner->m_keyInjector->SendString(pScanner->m_lastScannedData.szData);
2221
+ if (pScanner->m_bAutoEnter)
2222
+ pScanner->m_keyInjector->SendKey(VK_RETURN);
2223
+ else if (pScanner->m_bAutoTab)
2224
+ pScanner->m_keyInjector->SendKey(VK_TAB);
2225
+ }
2226
+ }
2227
+ else if(pScanner->m_lpScanBuffer && SCNBUF_GETSTAT(pScanner->m_lpScanBuffer) == E_SCN_READINCOMPATIBLE)
2228
+ {
2229
+ LOG(ERROR) + L"The last selected setting(s) can not be applied to the scanner whilst it is Enabled, Disabling Scanner";
2230
+ pScanner->CloseScanner();
2231
+ }
2232
+ else if (pScanner->m_lpScanBuffer && SCNBUF_GETSTAT(pScanner->m_lpScanBuffer) == E_SCN_NOTENABLED)
2233
+ {
2234
+ LOG(ERROR) + L"The scan did not succeed as the Scanner is not enabled";
2235
+ pScanner->CloseScanner();
2236
+ }
2237
+ else if (pScanner->m_lpScanBuffer && SCNBUF_GETSTAT(pScanner->m_lpScanBuffer) == E_SCN_INVALIDHANDLE)
2238
+ {
2239
+ LOG(ERROR) + L"The scanner handle has returned an invalid status, please try re-enabling.";
2240
+ pScanner->CloseScanner();
2241
+ }
2242
+ else if(pScanner->m_lpScanBuffer && SCNBUF_GETSTAT(pScanner->m_lpScanBuffer) == E_SCN_BUFFERTOOSMALL)
2243
+ {
2244
+ LOG(WARNING) + L"The barcode was successfully scanned but the data was too big for the data buffer";
2245
+ pScanner->m_decodeNotifier->BadDecode();
2246
+ }
2247
+ else if(pScanner->m_lpScanBuffer && SCNBUF_GETSTAT(pScanner->m_lpScanBuffer) == E_SCN_DEVICEFAILURE)
2248
+ {
2249
+ LOG(ERROR) + L"Scanner Device Failure. Is the scanner is already paired? or already in use? Try un-pairing";
2250
+ pScanner->CloseScanner();
2251
+ }
2252
+ else if (pScanner->m_lpScanBuffer != NULL &&
2253
+ SCNBUF_GETSTAT(pScanner->m_lpScanBuffer) != E_SCN_SUCCESS &&
2254
+ SCNBUF_GETSTAT(pScanner->m_lpScanBuffer) != E_SCN_READCANCELLED)
2255
+ {
2256
+ WCHAR szLog[256];
2257
+ long liStatus = SCNBUF_GETSTAT(pScanner->m_lpScanBuffer);
2258
+ wsprintf(szLog, L"The barcode was successfully scanned but the scan buffer has an invalid status: 0x%08x", liStatus);
2259
+ LOG(WARNING) + szLog;
2260
+ pScanner->m_decodeNotifier->BadDecode();
2261
+ }
2262
+ else
2263
+ {
2264
+ // Data was successfully read but the Scan buffer was NULL, do
2265
+ // nothing as it could have been caused by a cancel read / scanner flush.
2266
+ }
2267
+ // Continually read from the scanner until it is disabled.
2268
+ if (pScanner->m_bResetScanBuffer)
2269
+ {
2270
+ pScanner->ResetScanBuffer();
2271
+ pScanner->m_bResetScanBuffer = false;
2272
+ }
2273
+ if (pScanner->m_bScannerEnabled && pScanner->m_bTriggerConnected)
2274
+ pScanner->SubmitRead();
2275
+ }
2276
+ }
2277
+ return dwResult;
2278
+ }
2279
+
2280
+
2281
+ // Send the Device Capabilities (from SCAN_GetDeviceInfo and SCAN_GetVersionInfo) to the application
2282
+ DWORD CScanner::DeviceCapabilitiesToApplication(LPVOID lParam)
2283
+ {
2284
+ CScanner* pScanner = (CScanner*)lParam;
2285
+ DEVICE_INFO device_info;
2286
+ memset(&device_info, 0, sizeof(device_info));
2287
+ SI_INIT(&device_info);
2288
+ SCAN_VERSION_INFO version_info;
2289
+ memset(&version_info, 0, sizeof(version_info));
2290
+ SI_INIT(&version_info);
2291
+
2292
+ DWORD retVal = pScanner->lpfn_SCAN_GetDeviceInfo(pScanner->m_hScanner, &device_info);
2293
+ if (retVal != E_SCN_SUCCESS)
2294
+ {
2295
+ LOG(WARNING) + L"Unable to retrieve device capabilities";
2296
+ }
2297
+ else
2298
+ {
2299
+ // Successfully read the Device Info, try and read the Version Info
2300
+ retVal = pScanner->lpfn_SCAN_GetVersionInfo(pScanner->m_hScanner, &version_info);
2301
+ if (retVal != E_SCN_SUCCESS)
2302
+ {
2303
+ LOG(WARNING) + L"Unable to retrieve version information";
2304
+ }
2305
+ else
2306
+ {
2307
+ // Supported Decoders
2308
+ WCHAR szDecodersArray[(MAX_DECODERS * MAX_DECODER_NAME_LENGTH) + 1];
2309
+ memset(szDecodersArray, 0, ((MAX_DECODERS * MAX_DECODER_NAME_LENGTH) + 1) * 2);
2310
+ pScanner->RetrieveSupportedDecoders(szDecodersArray);
2311
+
2312
+ // Supported Beam Widths
2313
+ // TODO: MEMORY LEAK HERE BUT THIS CODE IS NEVER EXERCISED SO I HAVE NOT RESOLVED THIS.
2314
+ WCHAR* szSupportedBeamWidths = new WCHAR[35];
2315
+ wcscpy(szSupportedBeamWidths, L"new Array('normal',");
2316
+ if (device_info.dwSupportedBeamWidths & BEAM_WIDTH_NARROW)
2317
+ wcscat(szSupportedBeamWidths, L"'narrow',");
2318
+ if (device_info.dwSupportedBeamWidths & BEAM_WIDTH_WIDE)
2319
+ wcscat(szSupportedBeamWidths, L"'wide',");
2320
+ // Remove the final ','
2321
+ szSupportedBeamWidths[wcslen(szSupportedBeamWidths) - 1] = L')';
2322
+
2323
+ // Aim Mode
2324
+ WCHAR szAimModeSupported[6];
2325
+ if (device_info.bAimMode)
2326
+ wcscpy(szAimModeSupported, L"true");
2327
+ else
2328
+ wcscpy(szAimModeSupported, L"false");
2329
+
2330
+ // Scan Direction Reporting
2331
+ WCHAR szScanDirectionSupported[6];
2332
+ if (device_info.bDirection)
2333
+ wcscpy(szScanDirectionSupported, L"true");
2334
+ else
2335
+ wcscpy(szScanDirectionSupported, L"false");
2336
+
2337
+ // Supported Image Formats
2338
+ // TODO: MEMORY LEAK HERE BUT THIS CODE IS NEVER EXERCISED SO I HAVE NOT RESOLVED THIS.
2339
+ WCHAR* szSupportedImageFormats = new WCHAR[35];
2340
+ wcscpy(szSupportedImageFormats, L"new Array(");
2341
+ if (device_info.dwSupportedImageFormats & IMAGE_FORMAT_JPEG)
2342
+ wcscat(szSupportedImageFormats, L"'jpeg',");
2343
+ // Remove the final ','
2344
+ if (szSupportedImageFormats[wcslen(szSupportedImageFormats) - 1] == L',')
2345
+ szSupportedImageFormats[wcslen(szSupportedImageFormats) - 1] = L')';
2346
+ else
2347
+ wcscat(szSupportedImageFormats, L")");
2348
+
2349
+ // Maximum Image Resolution
2350
+ // TODO: MEMORY LEAK HERE BUT THIS CODE IS NEVER EXERCISED SO I HAVE NOT RESOLVED THIS.
2351
+ WCHAR* szMaximumImageRectangle = new WCHAR[35];
2352
+ wsprintf(szMaximumImageRectangle, L"new Array('%i','%i','%i','%i')",
2353
+ device_info.MaxImageRect.left,
2354
+ device_info.MaxImageRect.right,
2355
+ device_info.MaxImageRect.top,
2356
+ device_info.MaxImageRect.bottom);
2357
+
2358
+ // DPM Available
2359
+ WCHAR szDpmAvailable[6];
2360
+ if (device_info.dwDPMCapable == DPM_ENABLED)
2361
+ wcscpy(szDpmAvailable, L"true");
2362
+ else
2363
+ wcscpy(szDpmAvailable, L"false");
2364
+
2365
+ // Viewfinder Supported
2366
+ WCHAR szViewfinderSupported[6];
2367
+ if (device_info.bViewfinder)
2368
+ wcscpy(szViewfinderSupported, L"true");
2369
+ else
2370
+ wcscpy(szViewfinderSupported, L"false");
2371
+
2372
+ // Adaptive Scanning Supported
2373
+ WCHAR szAdaptiveScanningSupported[6];
2374
+ if (device_info.bAdaptiveScanning)
2375
+ wcscpy(szAdaptiveScanningSupported, L"true");
2376
+ else
2377
+ wcscpy(szAdaptiveScanningSupported, L"false");
2378
+
2379
+ // Interface Type
2380
+ WCHAR szInterfaceType[30];
2381
+ INTERFACE_PARAMS interfaceParams;
2382
+ pScanner->RetrieveScannerInterfaceParameters(&interfaceParams);
2383
+ if (interfaceParams.dwInterfaceType == INTERFACE_TYPE_QSNAC)
2384
+ wcscpy(szInterfaceType, L"QSNAC Interface");
2385
+ else if (interfaceParams.dwInterfaceType == INTERFACE_TYPE_SSI)
2386
+ wcscpy(szInterfaceType, L"SSI Interface");
2387
+ else if (interfaceParams.dwInterfaceType == INTERFACE_TYPE_LS48XX)
2388
+ wcscpy(szInterfaceType, L"LS48XX Interface");
2389
+ else if (interfaceParams.dwInterfaceType == INTERFACE_TYPE_LIGHTHOUSE)
2390
+ wcscpy(szInterfaceType, L"Lighthouse ASIC");
2391
+ else if (interfaceParams.dwInterfaceType == INTERFACE_TYPE_CAMSCAN)
2392
+ wcscpy(szInterfaceType, L"CamScan Interface");
2393
+
2394
+ // Scanner Version
2395
+ WCHAR szHardwareVersion[16];
2396
+ WCHAR szDecoderVersion[32];
2397
+ WCHAR szPhysicalDeviceVersion[16];
2398
+ WCHAR szModuleDeviceVersion[16];
2399
+ WCHAR szAPIVersion[16];
2400
+ wsprintf(szHardwareVersion, L"%02i.%02i",
2401
+ ((version_info.dwHardwareVersion & 0xFFFF0000) >> 16),
2402
+ version_info.dwHardwareVersion & 0xFFFF);
2403
+ wsprintf(szDecoderVersion,L"%02i.%02i.%02i.%02i",
2404
+ ((version_info.dwDecoderVersion & 0xFFFF0000) >> 16),
2405
+ version_info.dwDecoderVersion & 0xFFFF,
2406
+ ((version_info.dwDecoderBuildVersion & 0xFFFF0000) >> 16),
2407
+ version_info.dwDecoderBuildVersion & 0xFFFF);
2408
+ wsprintf(szPhysicalDeviceVersion, L"%02i.%02i",
2409
+ ((version_info.dwPddVersion & 0xFFFF0000) >> 16),
2410
+ version_info.dwPddVersion & 0xFFFF);
2411
+ wsprintf(szModuleDeviceVersion, L"%02i.%02i",
2412
+ ((version_info.dwMddVersion & 0xFFFF0000) >> 16),
2413
+ version_info.dwMddVersion & 0xFFFF);
2414
+ wsprintf(szAPIVersion, L"%02i.%02i",
2415
+ ((version_info.dwCAPIVersion & 0xFFFF0000) >> 16),
2416
+ version_info.dwCAPIVersion & 0xFFFF);
2417
+
2418
+ if(pScanner->m_pDeviceCapabilities.hasCallback())
2419
+ {
2420
+ // TODO: Device Capabilities Callback
2421
+ // pScanner->m_pModule->SendPBNavigate(szDeviceCapabilitiesEventNames, pScanner->m_iInstanceID,
2422
+ // pScanner->m_szEventDeviceCapabilities,
2423
+ // szDecodersArray,
2424
+ // szSupportedBeamWidths,
2425
+ // szAimModeSupported,
2426
+ // szScanDirectionSupported,
2427
+ // szSupportedImageFormats,
2428
+ // szMaximumImageRectangle,
2429
+ // szDpmAvailable,
2430
+ // szViewfinderSupported,
2431
+ // szAdaptiveScanningSupported,
2432
+ // szInterfaceType,
2433
+ // szHardwareVersion,
2434
+ // szDecoderVersion,
2435
+ // szPhysicalDeviceVersion,
2436
+ // szModuleDeviceVersion,
2437
+ // szAPIVersion,
2438
+ // NULL);
2439
+ }
2440
+ delete[] szSupportedImageFormats;
2441
+ delete[] szSupportedBeamWidths;
2442
+ delete[] szMaximumImageRectangle;
2443
+ }
2444
+ }
2445
+ return 0;
2446
+ }
2447
+
2448
+ DWORD CScanner::InformUserOfBTEvent(LPVOID lParam)
2449
+ {
2450
+ CScanner* pScanner = (CScanner*)lParam;
2451
+ // Notify the user of the bluetooth event using either the BluetoothStatusEvent or
2452
+ // (for backward compatibility) the DecodeEvent
2453
+ WCHAR* wBTStatus = new WCHAR[wcslen(pScanner->m_szBluetoothStatus) + 1];
2454
+ memset(wBTStatus, 0, (wcslen(pScanner->m_szBluetoothStatus) + 1) * sizeof(WCHAR));
2455
+ wcscpy(wBTStatus, pScanner->m_szBluetoothStatus);
2456
+
2457
+ // First test to see if there's a Bluetooth Status Event
2458
+ if (pScanner->m_pBluetoothStatusEvent.hasCallback())
2459
+ {
2460
+ rho::Hashtable<rho::String, rho::String> btStatus;
2461
+ btStatus.put(rho::common::convertToStringA(L"status"),
2462
+ rho::common::convertToStringA(wBTStatus) );
2463
+ pScanner->m_pBluetoothStatusEvent.set(btStatus);
2464
+ }
2465
+ else
2466
+ {
2467
+ WCHAR szLog[256];
2468
+ wsprintf(szLog,
2469
+ L"A Bluetooth Status event occurred (%s) but the Bluetooth status event has not been registered for",
2470
+ wBTStatus);
2471
+ LOG(INFO) + szLog;
2472
+ }
2473
+ delete[] wBTStatus;
2474
+ return 0;
2475
+ }
2476
+ /**
2477
+ * Developer - Abhineet Agarwal
2478
+ * Checking Low Battery Status
2479
+ * If LowBatteryScan is false, then disable the scanner, if battery is Low or Critical.
2480
+ * else do nothing.
2481
+ */
2482
+ VOID CScanner::StartOrDisableCheckingLowBattery(){
2483
+ static bool isCheckingStarted = false;
2484
+ if (m_bLowBatteryScan && isCheckingStarted){
2485
+ isCheckingStarted = false;
2486
+ LOG(INFO) + L"Terminating LowBatteryScan check.";
2487
+ //Low Battery Scan - True, No effect to scanner, if battery is low or critical...
2488
+ //Terminate thread if running.....
2489
+ POWER_BROADCAST PwrBcast[64];
2490
+ WriteMsgQueue(m_hLowBatteryScanMessageQueueWrite, &PwrBcast, 64, INFINITE, 0);
2491
+ StopPowerNotifications(m_hPowerNotifications);
2492
+ CloseMsgQueue(m_hLowBatteryScanMessageQueueRead);
2493
+ CloseMsgQueue(m_hLowBatteryScanMessageQueueWrite);
2494
+ }
2495
+ else if(!m_bLowBatteryScan && !isCheckingStarted){
2496
+ isCheckingStarted = true;
2497
+ LOG(INFO) + L"Starting LowBatteryScan check.";
2498
+ //Low Battery Scan - False, Disable scanner, if battery is low or critical...
2499
+ //Start low battery thread, if not running and disable the scanner if the battery is low or critical....
2500
+ MSGQUEUEOPTIONS msgqOpt;
2501
+ msgqOpt.dwSize = sizeof(MSGQUEUEOPTIONS);
2502
+ msgqOpt.dwFlags = MSGQUEUE_ALLOW_BROKEN;
2503
+ msgqOpt.dwMaxMessages = 0;
2504
+ msgqOpt.cbMaxMessage = 64;
2505
+ msgqOpt.bReadAccess = TRUE;
2506
+ WCHAR powerQName[16];
2507
+ wsprintf(powerQName, L"NeonPw4Q%i", m_iInstanceID2);
2508
+ m_hLowBatteryScanMessageQueueRead = CreateMsgQueue(powerQName, &msgqOpt);
2509
+ msgqOpt.bReadAccess = FALSE;
2510
+ m_hLowBatteryScanMessageQueueWrite = CreateMsgQueue(powerQName, &msgqOpt);
2511
+ if (m_hLowBatteryScanMessageQueueRead != NULL)
2512
+ {
2513
+ m_hPowerNotifications = RequestPowerNotifications(m_hLowBatteryScanMessageQueueRead,PBT_POWERINFOCHANGE);
2514
+ HANDLE handleToLowBatteryThread = CreateThread(NULL, 0, &LowBatteryScanThread, (void*)this, 0, NULL);
2515
+ if(handleToLowBatteryThread != NULL){
2516
+ CloseHandle(handleToLowBatteryThread);
2517
+ handleToLowBatteryThread = NULL;
2518
+ }else{
2519
+ wchar_t errorMsg[100];
2520
+ wsprintf(errorMsg,L"Unable to create LowBatteryScanThread. Error code is %ld.",GetLastError());
2521
+ LOG(INFO) + errorMsg;
2522
+ }
2523
+ }
2524
+ }
2525
+ }
2526
+
2527
+ // Thread responsible for monitoring the available battery power and if it gets too
2528
+ // low the Scanner will be disabled
2529
+ DWORD CScanner::LowBatteryScanThread(LPVOID lParam)
2530
+ {
2531
+ CScanner* pScanner = (CScanner*)lParam;
2532
+ LOG(INFO) + L"Starting Thread to monitor power state and disable Scanner if power gets low.";
2533
+
2534
+ BOOL bQueueRead;
2535
+ POWER_BROADCAST PwrInfo[64];
2536
+ DWORD dwRead, dwFlags;
2537
+ //Modified by - Abhineet Agarwal
2538
+ while (!pScanner->m_bLowBatteryScan)
2539
+ {
2540
+ bQueueRead = ReadMsgQueue(pScanner->m_hLowBatteryScanMessageQueueRead, &PwrInfo, 64, &dwRead, INFINITE, &dwFlags);
2541
+ if (pScanner->g_bShuttingDown){
2542
+ break;
2543
+ }
2544
+ else
2545
+ {
2546
+ // We have received a power notification, disable the scanner if it is a low power notification
2547
+ POWER_BROADCAST_POWER_INFO *pBPwrInfo = (POWER_BROADCAST_POWER_INFO*)PwrInfo->SystemPowerState;
2548
+ //Modified by Abhineet Agarwal, the battery flag need to be checked whether it is low or critical.
2549
+ if ((pBPwrInfo->bBatteryFlag != BATTERY_FLAG_UNKNOWN) && ((pBPwrInfo->bBatteryFlag & BATTERY_FLAG_LOW) || (pBPwrInfo->bBatteryFlag & BATTERY_FLAG_CRITICAL)))
2550
+ {
2551
+ LOG(INFO) + L"Power state is critical, disabling the Scanner";
2552
+ pScanner->CloseScanner();
2553
+ }
2554
+ }
2555
+ }
2556
+ return 0;
2557
+ }
2558
+
2559
+ // Message handler for our hidden window to resynchronize with the main thread (NPAPI is not
2560
+ // threadsafe)
2561
+ LRESULT CALLBACK CScanner::HiddenWindowProc (HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
2562
+ {
2563
+ // TODO: TEST THAT THIS IS CALLED
2564
+ if (message == WM_SCAN_EVENT_RHOELEMENTS)
2565
+ {
2566
+ //LOG(INFO) + "Received a bluetooth status message";
2567
+ //OutputDebugString(L"Received a bluetooth status message\r\n");
2568
+ CScanner* pScanner = (CScanner*)GetWindowLong(hwnd, GWL_USERDATA);
2569
+ if (pScanner)
2570
+ {
2571
+ if (wparam == SCAN_EVENT_BT_CONNECTION_STATE_CHANGE)
2572
+ {
2573
+ // We are only interested in Bluetooth Connection events
2574
+ if (lparam == SCAN_BT_CONNECTION_STATE_DISCONNECTED)
2575
+ {
2576
+ // The Bluetooth Scanner has become Disconnected
2577
+ pScanner->SetBluetoothStatus(FALSE);
2578
+ }
2579
+ else if (lparam == SCAN_BT_CONNECTION_STATE_CONNECTED)
2580
+ {
2581
+ pScanner->SetBluetoothStatus(TRUE);
2582
+ }
2583
+ }
2584
+ }
2585
+ }
2586
+ else if (message == WM_CREATE)
2587
+ {
2588
+ //LOG(INFO) + "Hidden window proc created...";
2589
+ //OutputDebugString(L"Received a request to close hidden window ...\r\n");
2590
+ return 0;
2591
+ }
2592
+ else if (message == WM_CLOSE)
2593
+ {
2594
+ //LOG(INFO) + "Received a request to close hidden window ...";
2595
+ //OutputDebugString(L"Received a request to close hidden window ...\r\n");
2596
+
2597
+ // Not destroying the window can result
2598
+ // in a GDI window leak. The WM_CLOSE eventhough was posted in the earlier
2599
+ // logic never reached the window proc probably becuase the thread that created
2600
+ // the window was probably not spending time in the message loop.
2601
+ ::DestroyWindow(hwnd);
2602
+ return 0;
2603
+ }
2604
+
2605
+ return DefWindowProc (hwnd, message, wparam, lparam);
2606
+ }
2607
+
2608
+ #pragma endregion
2609
+