X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fgmc-mh-1x-2x%2Fprotocol.h;h=ed759694861d2b59c8e6b75c626a7313b18012d8;hb=43e6f7a7798f579c97f34f77c586a4962a41c29a;hp=aa19be38a8a8d161ae7723f88d41b81293140242;hpb=155b680da482cea2381becb73c51cfb838bff31e;p=libsigrok.git
diff --git a/src/hardware/gmc-mh-1x-2x/protocol.h b/src/hardware/gmc-mh-1x-2x/protocol.h
index aa19be38..ed759694 100644
--- a/src/hardware/gmc-mh-1x-2x/protocol.h
+++ b/src/hardware/gmc-mh-1x-2x/protocol.h
@@ -17,22 +17,18 @@
* along with this program. If not, see .
*/
-/** @file
- * Gossen Metrawatt Metrahit 1x/2x drivers
- * @internal
- */
-
#ifndef LIBSIGROK_HARDWARE_GMC_MH_1X_2X_PROTOCOL_H
#define LIBSIGROK_HARDWARE_GMC_MH_1X_2X_PROTOCOL_H
#include
#include
-#include "libsigrok.h"
+#include
#include "libsigrok-internal.h"
#define LOG_PREFIX "gmc-mh-1x-2x"
-#define GMC_BUFSIZE 266
+#define GMC_BUFSIZE 266
+#define GMC_REPLY_SIZE 14
/** Message ID bits 4, 5 */
#define MSGID_MASK 0x30 /**< Mask to get message ID bits */
@@ -41,7 +37,7 @@
#define MSGID_DTA 0x20 /**< Start of data message, displayed, averaged */
#define MSGID_DATA 0x30 /**< Data byte in message */
-#define MSGC_MASK 0x0f /**< Mask to get message byte contents in send mode */
+#define MSGC_MASK 0x0f /**< Mask to get message byte contents in send mode */
#define MSGSRC_MASK 0xc0 /**< Mask to get bits related to message source */
@@ -75,33 +71,25 @@ enum model {
METRAHIT_26SM = METRAHIT_25S + 1, /**< Send mode */
METRAHIT_26S = METRAHIT_26SM + 1, /**< Bidi mode */
METRAHIT_26M = METRAHIT_26S + 1, /**< Bidi mode */
+ /* The Metrahit 27x and 28Cx have a totally different protocol */
METRAHIT_28S = METRAHIT_26M + 1,
METRAHIT_29S = METRAHIT_28S + 1,
};
-/** Private, per-device-instance driver context. */
struct dev_context {
- /* Model-specific information */
enum model model; /**< Model code. */
- /* Acquisition settings */
- uint64_t limit_samples; /**< Target number of samples */
- uint64_t limit_msec; /**< Target sampling time */
-
- /* Opaque pointer passed in by frontend. */
- void *cb_data;
+ struct sr_sw_limits limits;
- /* Operational state */
gboolean settings_ok; /**< Settings msg received yet. */
int msg_type; /**< Message type (MSGID_INF, ...). */
- int msg_len; /**< Message lengh (valid when msg, curr. type known).*/
- int mq; /**< Measured quantity */
- int unit; /**< Measured unit */
- uint64_t mqflags; /**< Measured quantity flags */
+ int msg_len; /**< Message length (valid when msg, curr. type known).*/
+ enum sr_mq mq; /**< Measured quantity */
+ enum sr_unit unit; /**< Measured unit */
+ enum sr_mqflag mqflags; /**< Measured quantity flags */
float value; /**< Measured value */
- float scale; /**< Scale for value. */
+ int8_t scale; /**< Scale for value. */
int8_t scale1000; /**< Additional scale factor 1000x. */
- gboolean vmains_29S; /**< Measured ctmv is V mains (29S only). */
int addr; /**< Device address (1..15). */
int cmd_idx; /**< Parameter "Idx" (Index) of current command, if required. */
int cmd_seq; /**< Command sequence. Used to query status every n messages. */
@@ -112,18 +100,12 @@ struct dev_context {
int64_t req_sent_at; /**< Request sent. */
gboolean response_pending; /**< Request sent, response is pending. */
- /* Temporary state across callbacks */
- uint64_t num_samples; /**< Current #samples for limit_samples */
- GTimer *elapsed_msec; /**< Used for sampling with limit_msec */
uint8_t buf[GMC_BUFSIZE]; /**< Buffer for read callback */
int buflen; /**< Data len in buf */
};
-/* Forward declarations */
-SR_PRIV int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi,
+SR_PRIV int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi,
const struct sr_channel_group *cg);
-SR_PRIV void create_cmd_14(guchar addr, guchar func, guchar* params, guchar* buf);
-SR_PRIV void dump_msg14(guchar* buf, gboolean raw);
SR_PRIV int gmc_decode_model_bd(uint8_t mcode);
SR_PRIV int gmc_decode_model_sm(uint8_t mcode);
SR_PRIV int gmc_mh_1x_2x_receive_data(int fd, int revents, void *cb_data);