HRDL.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. /****************************************************************************
  2. *
  3. * Filename: HRDL.h
  4. * Author: MAS
  5. * Description:
  6. *
  7. * This header defines the interface to driver routines for the PicoLog
  8. * High Resolution Data Logger Series.
  9. *
  10. * Copyright © 2004-2018 Pico Technology Ltd. All rights reserved.
  11. *
  12. ****************************************************************************/
  13. #pragma once
  14. #include <stdint.h>
  15. #ifdef PREF0
  16. #undef PREF0
  17. #endif
  18. #ifdef PREF1
  19. #undef PREF1
  20. #endif
  21. #ifdef PREF2
  22. #undef PREF2
  23. #endif
  24. #ifdef PREF3
  25. #undef PREF3
  26. #endif
  27. #ifdef __cplusplus
  28. #define PREF0 extern "C"
  29. #else
  30. #define PREF0
  31. #define TYPE_ENUM enum
  32. #endif
  33. #ifdef WIN32
  34. // If you are dynamically linking hrdl.dll into your project #define DYNLINK
  35. // somewhere in your project before here.
  36. #ifdef DYNLINK
  37. #define PREF1 typedef
  38. #define PREF2
  39. #define PREF3(x) (__stdcall *x)
  40. #else
  41. #define PREF1
  42. #ifdef _USRDLL
  43. #define PREF2 __declspec(dllexport) __stdcall
  44. #else
  45. #define PREF2 __declspec(dllimport) __stdcall
  46. #endif
  47. #define PREF3(x) x
  48. #endif
  49. #else
  50. /* Define a 64-bit integer type */
  51. #ifdef DYNLINK
  52. #define PREF1 typedef
  53. #define PREF2
  54. #define PREF3(x) (*x)
  55. #else
  56. #ifdef _USRDLL
  57. #define PREF1 __attribute__((visibility("default")))
  58. #else
  59. #define PREF1
  60. #endif
  61. #define PREF2
  62. #define PREF3(x) x
  63. #endif
  64. #define __stdcall
  65. #endif
  66. #define HRDL_MAX_PICO_UNITS 64
  67. #define HRDL_MAX_UNITS 20
  68. typedef enum enHRDLInputs
  69. {
  70. HRDL_DIGITAL_CHANNELS,
  71. HRDL_ANALOG_IN_CHANNEL_1,
  72. HRDL_ANALOG_IN_CHANNEL_2,
  73. HRDL_ANALOG_IN_CHANNEL_3,
  74. HRDL_ANALOG_IN_CHANNEL_4,
  75. HRDL_ANALOG_IN_CHANNEL_5,
  76. HRDL_ANALOG_IN_CHANNEL_6,
  77. HRDL_ANALOG_IN_CHANNEL_7,
  78. HRDL_ANALOG_IN_CHANNEL_8,
  79. HRDL_ANALOG_IN_CHANNEL_9,
  80. HRDL_ANALOG_IN_CHANNEL_10,
  81. HRDL_ANALOG_IN_CHANNEL_11,
  82. HRDL_ANALOG_IN_CHANNEL_12,
  83. HRDL_ANALOG_IN_CHANNEL_13,
  84. HRDL_ANALOG_IN_CHANNEL_14,
  85. HRDL_ANALOG_IN_CHANNEL_15,
  86. HRDL_ANALOG_IN_CHANNEL_16,
  87. HRDL_MAX_ANALOG_CHANNELS = HRDL_ANALOG_IN_CHANNEL_16,
  88. } HRDL_INPUTS;
  89. typedef enum enHRDLDigitalIoChannel
  90. {
  91. HRDL_DIGITAL_IO_CHANNEL_1 = 0x01,
  92. HRDL_DIGITAL_IO_CHANNEL_2 = 0x02,
  93. HRDL_DIGITAL_IO_CHANNEL_3 = 0x04,
  94. HRDL_DIGITAL_IO_CHANNEL_4 = 0x08,
  95. HRDL_MAX_DIGITAL_CHANNELS = 4
  96. } HRDL_DIGITAL_IO_CHANNEL;
  97. typedef enum enHRDLRange
  98. {
  99. HRDL_2500_MV,
  100. HRDL_1250_MV,
  101. HRDL_625_MV,
  102. HRDL_313_MV,
  103. HRDL_156_MV,
  104. HRDL_78_MV,
  105. HRDL_39_MV,
  106. HRDL_MAX_RANGES
  107. } HRDL_RANGE;
  108. typedef enum enHRDLConversionTime
  109. {
  110. HRDL_60MS,
  111. HRDL_100MS,
  112. HRDL_180MS,
  113. HRDL_340MS,
  114. HRDL_660MS,
  115. HRDL_MAX_CONVERSION_TIMES
  116. } HRDL_CONVERSION_TIME;
  117. typedef enum enHRDLInfo
  118. {
  119. HRDL_DRIVER_VERSION,
  120. HRDL_USB_VERSION,
  121. HRDL_HARDWARE_VERSION,
  122. HRDL_VARIANT_INFO,
  123. HRDL_BATCH_AND_SERIAL,
  124. HRDL_CAL_DATE,
  125. HRDL_KERNEL_DRIVER_VERSION,
  126. HRDL_ERROR,
  127. HRDL_SETTINGS,
  128. } HRDL_INFO;
  129. typedef enum enHRDLErrorCode
  130. {
  131. HRDL_OK,
  132. HRDL_KERNEL_DRIVER,
  133. HRDL_NOT_FOUND,
  134. HRDL_CONFIG_FAIL,
  135. HRDL_ERROR_OS_NOT_SUPPORTED,
  136. HRDL_MAX_DEVICES
  137. } HRDL_ERROR_CODES;
  138. typedef enum enSettingsError
  139. {
  140. SE_CONVERSION_TIME_OUT_OF_RANGE,
  141. SE_SAMPLEINTERVAL_OUT_OF_RANGE,
  142. SE_CONVERSION_TIME_TOO_SLOW,
  143. SE_CHANNEL_NOT_AVAILABLE,
  144. SE_INVALID_CHANNEL,
  145. SE_INVALID_VOLTAGE_RANGE,
  146. SE_INVALID_PARAMETER,
  147. SE_CONVERSION_IN_PROGRESS,
  148. SE_COMMUNICATION_FAILED,
  149. SE_OK,
  150. SE_MAX = SE_OK
  151. } SettingsError;
  152. typedef enum enHRDLOpenProgress
  153. {
  154. HRDL_OPEN_PROGRESS_FAIL = -1,
  155. HRDL_OPEN_PROGRESS_PENDING = 0,
  156. HRDL_OPEN_PROGRESS_COMPLETE = 1
  157. } HRDL_OPEN_PROGRESS;
  158. typedef enum enBlockMethod
  159. {
  160. HRDL_BM_BLOCK,
  161. HRDL_BM_WINDOW,
  162. HRDL_BM_STREAM
  163. } HRDL_BLOCK_METHOD;
  164. #define INVALID_HRDL_VALUE 0xF0000000
  165. PREF0 PREF1 int16_t PREF2 PREF3(HRDLOpenUnit) ( void );
  166. PREF0 PREF1 int16_t PREF2 PREF3(HRDLOpenUnitAsync) (void);
  167. PREF0 PREF1 int16_t PREF2 PREF3(HRDLOpenUnitProgress) (int16_t * handle, int16_t * progress);
  168. PREF0 PREF1 int16_t PREF2 PREF3(HRDLGetUnitInfo) (
  169. int16_t handle,
  170. int8_t * string,
  171. int16_t stringLength,
  172. int16_t info);
  173. PREF0 PREF1 int16_t PREF2 PREF3(HRDLCloseUnit) ( int16_t handle );
  174. PREF0 PREF1 int16_t PREF2 PREF3(HRDLGetMinMaxAdcCounts)(int16_t handle, int32_t * minAdc, int32_t * maxAdc, int16_t channel);
  175. PREF0 PREF1 int16_t PREF2 PREF3(HRDLSetAnalogInChannel) (int16_t handle, int16_t channel, int16_t enabled, int16_t range, int16_t singleEnded);
  176. PREF0 PREF1 int16_t PREF2 PREF3(HRDLSetDigitalIOChannel) (int16_t handle, int16_t directionOut, int16_t digitalOutPinState, int16_t enabledDigitalIn);
  177. PREF0 PREF1 int16_t PREF2 PREF3(HRDLSetInterval)(int16_t handle, int32_t sampleInterval_ms, int16_t conversionTime);
  178. PREF0 PREF1 int16_t PREF2 PREF3(HRDLRun) (int16_t handle, int32_t nValues, int16_t method);
  179. PREF0 PREF1 int16_t PREF2 PREF3(HRDLReady) (int16_t handle);
  180. PREF0 PREF1 void PREF2 PREF3(HRDLStop)(int16_t handle);
  181. PREF0 PREF1 int32_t PREF2 PREF3(HRDLGetValues) (
  182. int16_t handle,
  183. int32_t * values,
  184. int16_t * overflow,
  185. int32_t no_of_values);
  186. PREF0 PREF1 int32_t PREF2 PREF3(HRDLGetTimesAndValues) (
  187. int16_t handle,
  188. int32_t * times,
  189. int32_t * values,
  190. int16_t * overflow,
  191. int32_t noOfValues);
  192. // this routine blocks other functions until it returns
  193. PREF0 PREF1 int16_t PREF2 PREF3(HRDLGetSingleValue) (
  194. int16_t handle,
  195. int16_t channel,
  196. int16_t range,
  197. int16_t conversionTime,
  198. int16_t singleEnded,
  199. int16_t *overflow,
  200. int32_t *value);
  201. PREF0 PREF1 int16_t PREF2 PREF3(HRDLCollectSingleValueAsync) (
  202. int16_t handle,
  203. int16_t channel,
  204. int16_t range,
  205. int16_t conversionTime,
  206. int16_t singleEnded
  207. );
  208. PREF0 PREF1 int16_t PREF2 PREF3(HRDLGetSingleValueAsync) (
  209. int16_t handle,
  210. int32_t *value,
  211. int16_t *overflow);
  212. PREF0 PREF1 int16_t PREF2 PREF3(HRDLSetMains)(int16_t handle, int16_t sixtyHertz);
  213. PREF0 PREF1 int16_t PREF2 PREF3(HRDLGetNumberOfEnabledChannels)(int16_t handle, int16_t * nEnabledChannels);
  214. PREF0 PREF1 int16_t PREF2 PREF3 (HRDLAcknowledge)(int16_t handle);