scpi_gpib_core.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. #ifndef SCPI_GPIB_CORE_H
  2. #define SCPI_GPIB_CORE_H
  3. #include <stdint.h>
  4. #include <stdbool.h>
  5. #include "app/scpi/scpi_base.h"
  6. // Reference:
  7. // [1] SCPI Specification, revision 1999.0
  8. // "Standard Commands for Programmable Instruments (SCPI), VERSION 1999.0, May 1999"
  9. // [2], Gpib Programming Tutorial, Electronics Group (http://www.few.vu.nl/~elec), 11 January 2000 Electronics Group, (http://g2pc1.bu.edu/~qzpeng/gpib/manual/GpibProgTut.pdf)
  10. // [3] USBTMC-USB488 Standard, rev. 1.0, 14/04/2003
  11. // "Universal Serial Bus Test and Measurement Class, Subclass USB488 Specification (USBTMC-USB488)
  12. // [4] IEEE 488.2 Standard, revision IEEE Std 488.2-1987 (1992)
  13. // "IEEE Standard Codes, Formats, Protocols, and Common Commands for Use With IEEE Std 488.1-1987, IEEE
  14. #pragma pack(push,1)
  15. typedef struct
  16. {
  17. const void * private[2];
  18. }
  19. xGPIBRegisters_t;
  20. #pragma pack(pop)
  21. // --------------------------------------------------------------------------------------------------------
  22. typedef struct
  23. {
  24. // --------------------------------------------------------------------------------------------------------
  25. // @fGPIB_get_event_status_register
  26. // Returns GPIB event status register
  27. // Reference:
  28. // "4 Instrument status", [2]
  29. // Parameters:
  30. // @_gpibr - GPIB Register structure;
  31. // @pesr - pointer to the variable to store the value of ESR (event status register) to.
  32. // Returns: none
  33. void ( * fGPIB_get_event_status_register)( xGPIBRegisters_t * _gpibr, uint8_t * pesr );
  34. // --------------------------------------------------------------------------------------------------------
  35. // @gpib_set_event_status_register_power_on_state
  36. // Sets GPIB event status register status: power on
  37. // Reference:
  38. // "4 Instrument status", [2]
  39. // "11.5.1.1 Standard Event Status Register Bit Definitions", [4]
  40. // Parameters:
  41. // @_gpibr - GPIB Register structure;
  42. // @pon - value of Power On bit (PON) in ESR (event status register) to write to GPIB Register structure.
  43. // Returns: none
  44. void ( * fGPIB_set_event_status_register_power_on_state )( xGPIBRegisters_t * _gpibr, bool pon );
  45. // --------------------------------------------------------------------------------------------------------
  46. // @gpib_set_event_status_register_user_request_state
  47. // Sets GPIB event status register status: user request
  48. // Reference:
  49. // "4 Instrument status", [2]
  50. // "11.5.1.1 Standard Event Status Register Bit Definitions", [4]
  51. // Parameters:
  52. // @_gpibr - GPIB Register structure;
  53. // @urq - value of User Request bit (URQ) in ESR (event status register) to write to GPIB Register structure.
  54. // Returns: none
  55. void ( * fGPIB_set_event_status_register_user_request_state )( xGPIBRegisters_t * _gpibr, bool urq );
  56. // --------------------------------------------------------------------------------------------------------
  57. // @gpib_set_event_status_register_command_error_state
  58. // Sets GPIB event status register status: command error
  59. // Reference:
  60. // "4 Instrument status", [2]
  61. // "11.5.1.1 Standard Event Status Register Bit Definitions", [4]
  62. // Parameters:
  63. // @_gpibr - GPIB Register structure;
  64. // @cme - value of Command Error bit (CME) in ESR (event status register) to write to GPIB Register structure.
  65. // Returns: none
  66. void ( * fGPIB_set_event_status_register_command_error_state )( xGPIBRegisters_t * _gpibr, bool cme );
  67. // --------------------------------------------------------------------------------------------------------
  68. // @gpib_set_event_status_register_execution_error_state
  69. // Sets GPIB event status register status: execution error
  70. // Reference:
  71. // "4 Instrument status", [2]
  72. // "11.5.1.1 Standard Event Status Register Bit Definitions", [4]
  73. // Parameters:
  74. // @_gpibr - GPIB Register structure;
  75. // @e - value of Execution Error bit (E) in ESR (event status register) to write to GPIB Register structure.
  76. // Returns: none
  77. void ( * fGPIB_set_event_status_register_execution_error_state )( xGPIBRegisters_t * _gpibr, bool e );
  78. // --------------------------------------------------------------------------------------------------------
  79. // @gpib_set_event_status_register_device_specific_error_state
  80. // Sets GPIB event status register status: device specific error
  81. // Reference:
  82. // "4 Instrument status", [2]
  83. // "11.5.1.1 Standard Event Status Register Bit Definitions", [4]
  84. // Parameters:
  85. // @_gpibr - GPIB Register structure;
  86. // @dde - value of Device Specific Error bit (DDE) in ESR (event status register) to write to GPIB Register structure.
  87. // Returns: none
  88. void ( * fGPIB_set_event_status_register_device_specific_error_state )( xGPIBRegisters_t * _gpibr, bool dde );
  89. // --------------------------------------------------------------------------------------------------------
  90. // @gpib_set_event_status_register_query_error_state
  91. // Sets GPIB event status register status: query error
  92. // Reference:
  93. // "4 Instrument status", [2]
  94. // "11.5.1.1 Standard Event Status Register Bit Definitions", [4]
  95. // Parameters:
  96. // @_gpibr - GPIB Register structure;
  97. // @qye - value of Device Specific Error bit (QYE) in ESR (event status register) to write to GPIB Register structure.
  98. // Returns: none
  99. void ( * fGPIB_set_event_status_register_query_error_state )( xGPIBRegisters_t * _gpibr, bool qye );
  100. // --------------------------------------------------------------------------------------------------------
  101. // @gpib_set_event_status_register_request_control_state
  102. // Sets GPIB event status register status: request control
  103. // Reference:
  104. // "4 Instrument status", [2]
  105. // "11.5.1.1 Standard Event Status Register Bit Definitions", [4]
  106. // Parameters:
  107. // @_gpibr - GPIB Register structure;
  108. // @rqc - value of Request Control bit (RQC) in ESR (event status register) to write to GPIB Register structure.
  109. // Returns: none
  110. void ( * fGPIB_set_event_status_register_request_control_state )( xGPIBRegisters_t * _gpibr, bool rqc );
  111. // --------------------------------------------------------------------------------------------------------
  112. // @gpib_set_event_status_register_operation_complete_state
  113. // Sets GPIB event status register status: operation complete
  114. // Reference:
  115. // "4 Instrument status", [2]
  116. // "11.5.1.1 Standard Event Status Register Bit Definitions", [4]
  117. // Parameters:
  118. // @_gpibr - GPIB Register structure;
  119. // @opc - value of Operation Complete bit (RQC) in ESR (event status register) to write to GPIB Register structure.
  120. // Returns: none
  121. void ( * fGPIB_set_event_status_register_operation_complete_state )( xGPIBRegisters_t * _gpibr, bool opc );
  122. // --------------------------------------------------------------------------------------------------------
  123. // @fGPIB_get_event_status_enable_register
  124. // Returns GPIB event status enable register
  125. // Reference:
  126. // "4 Instrument status", [2]
  127. // Parameters:
  128. // @_gpibr - GPIB Register structure;
  129. // @pesr - pointer to the variable to store the value of ESE (event status enable register) to.
  130. // Returns: none
  131. void ( * fGPIB_get_event_status_enable_register)( xGPIBRegisters_t * _gpibr, uint8_t * pese );
  132. // --------------------------------------------------------------------------------------------------------
  133. // @fGPIB_set_event_status_enable_register
  134. // Sets GPIB event status enable register
  135. // Reference:
  136. // "4 Instrument status", [2]
  137. // Parameters:
  138. // @_gpibr - GPIB Register structure;
  139. // @ese - value of ESE (event status enable register) to write to GPIB Register structure.
  140. // Returns: none
  141. void ( * fGPIB_set_event_status_enable_register)( xGPIBRegisters_t * _gpibr, uint8_t ese );
  142. // --------------------------------------------------------------------------------------------------------
  143. // @fGPIB_get_event_summary_bit
  144. // Return GPIB event summary bit
  145. // Reference:
  146. // "4.1 Status Byte registers (STB and SRE)", "Event Summary Bit", [2]
  147. // Parameters:
  148. // @_gpibr - GPIB Register structure;
  149. // @pesb - pointer to the variable to store the value of ESB (event summary bit) to.
  150. // Note: the value of the bit will be set to the corresponding bit position, all the rest bits are reset to zero.
  151. // Returns: none
  152. void ( * fGPIB_get_event_summary_bit)( xGPIBRegisters_t * _gpibr, uint8_t * pesb );
  153. // --------------------------------------------------------------------------------------------------------
  154. // @fGPIB_set_event_summary_enable_state
  155. // Set GPIB event summary enable bit in Service Request Enable Register (SRE)
  156. // Reference:
  157. // "4 Instrument status", [2]
  158. // "4.1 Status Byte registers (STB and SRE)", [2]
  159. // Parameters:
  160. // @_gpibr - GPIB Register structure;
  161. // @esb - the event summary indictor enable to set to GPIB Register structure.
  162. // Returns: none
  163. void ( * fGPIB_set_event_summary_enable_state)( xGPIBRegisters_t * _gpibr, bool esb );
  164. // --------------------------------------------------------------------------------------------------------
  165. // @fGPIB_set_message_available_bit
  166. // Set GPIB message available bit
  167. // Reference:
  168. // "4 Instrument status", [2]
  169. // "4.1 Status Byte registers (STB and SRE)", [2]
  170. // Parameters:
  171. // @_gpibr - GPIB Register structure;
  172. // @pmav - pointer to the variable to store the value of MAV (message available bit) to.
  173. // Note: the value of the bit will be set to the corresponding bit position, all the rest bits are reset to zero.
  174. // Returns: none
  175. void ( * fGPIB_set_message_available_bit)( xGPIBRegisters_t * _gpibr, bool mav );
  176. // --------------------------------------------------------------------------------------------------------
  177. // @fGPIB_set_message_available_enable_state
  178. // Set GPIB message available enable bit in Service Request Enable Register (SRE)
  179. // Reference:
  180. // "4 Instrument status", [2]
  181. // "4.1 Status Byte registers (STB and SRE)", [2]
  182. // Parameters:
  183. // @_gpibr - GPIB Register structure;
  184. // @mav - the message available indictor enable to set to GPIB Register structure.
  185. // Returns: none
  186. void ( * fGPIB_set_message_available_enable_state)( xGPIBRegisters_t * _gpibr, bool mav );
  187. // --------------------------------------------------------------------------------------------------------
  188. // @fGPIB_get_message_available_bit
  189. // Return GPIB message available bit
  190. // Reference:
  191. // "4 Instrument status", [2]
  192. // "4.1 Status Byte registers (STB and SRE)", [2]
  193. // Parameters:
  194. // @_gpibr - GPIB Register structure;
  195. // @mav - the message available indictor to set to GPIB Register structure.
  196. // Returns: none
  197. void ( * fGPIB_get_message_available_bit)( xGPIBRegisters_t * _gpibr, uint8_t * pmav );
  198. // --------------------------------------------------------------------------------------------------------
  199. // @fGPIB_set_error_available_bit
  200. // Set GPIB error available bit
  201. // Reference:
  202. // "4 Instrument status", [2]
  203. // "4.1 Status Byte registers (STB and SRE)", [2]
  204. // Parameters:
  205. // @_gpibr - GPIB Register structure;
  206. // @eav - the error available indictor to set to GPIB Register structure.
  207. // Returns: none
  208. void ( * fGPIB_set_error_available_bit)( xGPIBRegisters_t * _gpibr, bool eav );
  209. // --------------------------------------------------------------------------------------------------------
  210. // @fGPIB_set_error_available_enable_state
  211. // Set GPIB error available enable bit in Service Request Enable Register (SRE)
  212. // Reference:
  213. // "4 Instrument status", [2]
  214. // "4.1 Status Byte registers (STB and SRE)", [2]
  215. // Parameters:
  216. // @_gpibr - GPIB Register structure;
  217. // @eav - the error available indictor enable to set to GPIB Register structure.
  218. // Returns: none
  219. void ( * fGPIB_set_error_available_enable_state)( xGPIBRegisters_t * _gpibr, bool eav );
  220. // --------------------------------------------------------------------------------------------------------
  221. // @fGPIB_get_error_available_bit
  222. // Return GPIB error available bit
  223. // Reference:
  224. // "4 Instrument status", [2]
  225. // "4.1 Status Byte registers (STB and SRE)", [2]
  226. // Parameters:
  227. // @_gpibr - GPIB Register structure;
  228. // @peav - pointer to the variable to store the value of EAV (error available bit) to.
  229. // Note: the value of the bit will be set to the corresponding bit position, all the rest bits are reset to zero.
  230. // Returns: none
  231. void ( * fGPIB_get_error_available_bit)( xGPIBRegisters_t * _gpibr, uint8_t * peav );
  232. // --------------------------------------------------------------------------------------------------------
  233. // @fGPIB_get_status_byte_serial_poll
  234. // Return GPIB Status Byte
  235. // Reference:
  236. // "4 Instrument status", [2]
  237. // "4.1 Status Byte registers (STB and SRE)", [2]
  238. // "3.4.1 Interrupt-IN DATA sent due to an SRQ condition", [3]
  239. // "3.4.2 Interrupt-IN DATA sent due to READ_STATUS_BYTE request", [3]
  240. // "11.2.2 Reading the Status Byte Register", [4]
  241. // "11.2.2.3 Master Summary Status", [4]
  242. // "11.3.2.4 Clearing the Service Request Enable Register", [4]
  243. // Parameters:
  244. // @_gpibr - GPIB Register structure;
  245. // @pstb - pointer to the variable to store the value of STB (status byte) to.
  246. // Returns: none
  247. void ( * fGPIB_get_status_byte_serial_poll)( xGPIBRegisters_t * _gpibr, uint8_t * pstb );
  248. // --------------------------------------------------------------------------------------------------------
  249. // @fGPIB_get_status_byte_normal_poll
  250. // Return GPIB Status Byte
  251. // Reference:
  252. // "4 Instrument status", [2]
  253. // "4.1 Status Byte registers (STB and SRE)", [2]
  254. // "3.4.1 Interrupt-IN DATA sent due to an SRQ condition", [3]
  255. // "3.4.2 Interrupt-IN DATA sent due to READ_STATUS_BYTE request", [3]
  256. // "11.2.2 Reading the Status Byte Register", [4]
  257. // "11.2.2.3 Master Summary Status", [4]
  258. // "11.3.2.4 Clearing the Service Request Enable Register", [4]
  259. // Parameters:
  260. // @_gpibr - GPIB Register structure;
  261. // @pstb - pointer to the variable to store the value of STB (status byte) to.
  262. // Returns: none
  263. void ( * fGPIB_get_status_byte_normal_poll)( xGPIBRegisters_t * _gpibr, uint8_t * pstb );
  264. // --------------------------------------------------------------------------------------------------------
  265. // @fGPIB_clr_status_byte
  266. // Clears GPIB Status Byte
  267. // Reference:
  268. // "4 Instrument status", [2]
  269. // "4.1 Status Byte registers (STB and SRE)", [2]
  270. // "11.2.4 Clearing the Status Byte Register"
  271. // Parameters:
  272. // @_gpibr - GPIB Register structure;
  273. // Returns: none
  274. void ( * fGPIB_clr_status_byte)( xGPIBRegisters_t * _gpibr );
  275. // --------------------------------------------------------------------------------------------------------
  276. // @fGPIB_get_service_request_enable_register
  277. // Return GPIB Service Request Enable Register
  278. // Reference:
  279. // "4 Instrument status", [2]
  280. // "4.1 Status Byte registers (STB and SRE)", [2]
  281. // Parameters:
  282. // @_gpibr - GPIB Register structure;
  283. // @psre - pointer to the variable to store the value of SRE (Service Request Enable Register) to.
  284. // Returns: none
  285. void ( * fGPIB_get_service_request_enable_register)( xGPIBRegisters_t * _gpibr, uint8_t * psre );
  286. // --------------------------------------------------------------------------------------------------------
  287. // @fGPIB_set_service_request_enable_register
  288. // Set GPIB Service Request Enable Register
  289. // Reference:
  290. // "4 Instrument status", [2]
  291. // "4.1 Status Byte registers (STB and SRE)", [2]
  292. // Parameters:
  293. // @_gpibr - GPIB Register structure;
  294. // @sre - value of SRE (Service Request Enable Register) to write to GPIB Register structure.
  295. // Returns: none
  296. void ( * fGPIB_set_service_request_enable_register)( xGPIBRegisters_t * _gpibr, uint8_t sre );
  297. // --------------------------------------------------------------------------------------------------------
  298. // @fGPIB_get_service_request_status
  299. // Return GPIB Service Request indicator (Service Request Generation, SRQ)
  300. // Reference:
  301. // "4 Instrument status", [2]
  302. // "4.1 Status Byte registers (STB and SRE)", [2]
  303. // Parameters:
  304. // @_gpibr - GPIB Register structure;
  305. // @psrq - pointer to the variable to store the state of SRQ indicator (Service ReQuest) to.
  306. // Returns: none
  307. void ( * fGPIB_get_service_request_status)( xGPIBRegisters_t * _gpibr, bool * psrq );
  308. // --------------------------------------------------------------------------------------------------------
  309. // @fGPIB_set_service_request_status
  310. // Writes GPIB Service Request indicator (Service Request Generation, SRQ)
  311. // Reference:
  312. // "4 Instrument status", [2]
  313. // "4.1 Status Byte registers (STB and SRE)", [2]
  314. // "11.2.2.3 Master Summary Status", [4]
  315. // "11.3.2.4 Clearing the Service Request Enable Register", [4]
  316. // Parameters:
  317. // @_gpibr - GPIB Register structure;
  318. // @srq - SRQ indicator value (Service ReQuest) to write
  319. // Returns: none
  320. void ( * fGPIB_set_service_request_status)( xGPIBRegisters_t * _gpibr, bool srq );
  321. }
  322. sGPIBMachineRoutines_t;
  323. // Export GPIB Machine routines
  324. extern const sGPIBMachineRoutines_t GPIBMachine;
  325. #endif