protocol.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /*
  2. * This file is part of the libsigrok project.
  3. *
  4. * Copyright (C) 2013 Bert Vermeulen <bert@biot.com>
  5. *
  6. * This program is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. #ifndef LIBSIGROK_HARDWARE_KECHENG_KC_330B_PROTOCOL_H
  20. #define LIBSIGROK_HARDWARE_KECHENG_KC_330B_PROTOCOL_H
  21. #include <stdint.h>
  22. #include <glib.h>
  23. #include "libsigrok.h"
  24. #include "libsigrok-internal.h"
  25. #define LOG_PREFIX "kecheng-kc-330b"
  26. #define EP_IN 0x80 | 1
  27. #define EP_OUT 2
  28. /* 500ms */
  29. #define DEFAULT_SAMPLE_INTERVAL 0
  30. #define DEFAULT_ALARM_LOW 40
  31. #define DEFAULT_ALARM_HIGH 120
  32. #define DEFAULT_WEIGHT_TIME SR_MQFLAG_SPL_TIME_WEIGHT_F
  33. #define DEFAULT_WEIGHT_FREQ SR_MQFLAG_SPL_FREQ_WEIGHT_A
  34. /* Live */
  35. #define DEFAULT_DATA_SOURCE DATA_SOURCE_LIVE
  36. enum {
  37. LIVE_SPL_IDLE,
  38. LIVE_SPL_WAIT,
  39. LOG_DATA_IDLE,
  40. LOG_DATA_WAIT,
  41. };
  42. enum {
  43. CMD_CONFIGURE = 0x01,
  44. CMD_IDENTIFY = 0x02,
  45. CMD_SET_DATE_TIME = 0x03,
  46. CMD_GET_STATUS = 0x04,
  47. CMD_GET_LOG_INFO = 0x05,
  48. CMD_GET_LOG_DATA = 0x07,
  49. CMD_GET_LIVE_SPL = 0x08,
  50. };
  51. enum {
  52. DATA_SOURCE_LIVE,
  53. DATA_SOURCE_MEMORY,
  54. };
  55. enum {
  56. DEVICE_ACTIVE,
  57. DEVICE_INACTIVE,
  58. };
  59. /** Private, per-device-instance driver context. */
  60. struct dev_context {
  61. /* Acquisition settings */
  62. uint64_t limit_samples;
  63. int sample_interval;
  64. int alarm_low;
  65. int alarm_high;
  66. uint64_t mqflags;
  67. int data_source;
  68. /* Operational state */
  69. int state;
  70. gboolean config_dirty;
  71. uint64_t num_samples;
  72. uint64_t stored_samples;
  73. void *cb_data;
  74. struct libusb_transfer *xfer;
  75. unsigned char buf[128];
  76. /* Temporary state across callbacks */
  77. gint64 last_live_request;
  78. };
  79. SR_PRIV int kecheng_kc_330b_handle_events(int fd, int revents, void *cb_data);
  80. SR_PRIV void kecheng_kc_330b_receive_transfer(struct libusb_transfer *transfer);
  81. SR_PRIV int kecheng_kc_330b_configure(const struct sr_dev_inst *sdi);
  82. SR_PRIV int kecheng_kc_330b_set_date_time(struct sr_dev_inst *sdi);
  83. SR_PRIV int kecheng_kc_330b_recording_get(const struct sr_dev_inst *sdi,
  84. gboolean *tmp);
  85. SR_PRIV int kecheng_kc_330b_status_get(const struct sr_dev_inst *sdi,
  86. int *status);
  87. SR_PRIV int kecheng_kc_330b_log_info_get(const struct sr_dev_inst *sdi,
  88. unsigned char *buf);
  89. #endif