1 /* 2 * This file is part of the libsigrok project. 3 * 4 * Copyright (C) 2014-2017 Kumar Abhishek <abhishek@theembeddedkitchen.net> 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 20 #ifndef LIBSIGROK_HARDWARE_BEAGLELOGIC_PROTOCOL_H 21 #define LIBSIGROK_HARDWARE_BEAGLELOGIC_PROTOCOL_H 22 23 #include <stdint.h> 24 #include <glib.h> 25 #include <libsigrok/libsigrok.h> 26 #include "libsigrok-internal.h" 27 28 #define LOG_PREFIX "beaglelogic" 29 30 /* Maximum possible input channels */ 31 #define NUM_CHANNELS 14 32 33 #define SAMPLEUNIT_TO_BYTES(x) ((x) == 1 ? 1 : 2) 34 35 #define TCP_BUFFER_SIZE (128 * 1024) 36 37 /** Private, per-device-instance driver context. */ 38 struct dev_context { 39 int max_channels; 40 uint32_t fw_ver; 41 42 /* Operations */ 43 const struct beaglelogic_ops *beaglelogic; 44 45 /* TCP Settings */ 46 char *address; 47 char *port; 48 int socket; 49 unsigned int read_timeout; 50 unsigned char *tcp_buffer; 51 52 /* Acquisition settings: see beaglelogic.h */ 53 uint64_t cur_samplerate; 54 uint64_t limit_samples; 55 uint32_t sampleunit; 56 uint32_t triggerflags; 57 uint64_t capture_ratio; 58 59 /* Buffers: size of each buffer block and the total buffer area */ 60 uint32_t bufunitsize; 61 uint32_t buffersize; 62 63 int fd; 64 GPollFD pollfd; 65 int last_error; 66 67 uint64_t bytes_read; 68 uint64_t sent_samples; 69 uint32_t offset; 70 uint8_t *sample_buf; /* mmap'd kernel buffer here */ 71 72 /* Trigger logic */ 73 struct soft_trigger_logic *stl; 74 gboolean trigger_fired; 75 }; 76 77 SR_PRIV int beaglelogic_native_receive_data(int fd, int revents, void *cb_data); 78 SR_PRIV int beaglelogic_tcp_receive_data(int fd, int revents, void *cb_data); 79 80 #endif 81