nuttx-apps/include/logging/nxscope/nxscope_chan.h
raiden00pl 220a5a2ce6 nxscope: use the entire reserved channel length when sending strings
The previous version makes stream data parser too complicated and susceptible to errors.
2023-02-08 10:29:28 +08:00

402 lines
16 KiB
C

/****************************************************************************
* apps/include/logging/nxscope/nxscope_chan.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __APPS_INCLUDE_LOGGING_NXSCOPE_NXSCOPE_CHAN_H
#define __APPS_INCLUDE_LOGGING_NXSCOPE_NXSCOPE_CHAN_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <fixedmath.h>
#include <logging/nxscope/nxscope.h>
/****************************************************************************
* Public Types
****************************************************************************/
/* Nxscope sample type */
enum nxscope_sample_dtype_e
{
/* Default numerical types */
NXSCOPE_TYPE_UNDEF = 0,
NXSCOPE_TYPE_NONE = 1,
NXSCOPE_TYPE_UINT8 = 2,
NXSCOPE_TYPE_INT8 = 3,
NXSCOPE_TYPE_UINT16 = 4,
NXSCOPE_TYPE_INT16 = 5,
NXSCOPE_TYPE_UINT32 = 6,
NXSCOPE_TYPE_INT32 = 7,
NXSCOPE_TYPE_UINT64 = 8,
NXSCOPE_TYPE_INT64 = 9,
NXSCOPE_TYPE_FLOAT = 10,
NXSCOPE_TYPE_DOUBLE = 11,
NXSCOPE_TYPE_UB8 = 12,
NXSCOPE_TYPE_B8 = 13,
NXSCOPE_TYPE_UB16 = 14,
NXSCOPE_TYPE_B16 = 15,
NXSCOPE_TYPE_UB32 = 16,
NXSCOPE_TYPE_B32 = 17,
/* Char/string data */
NXSCOPE_TYPE_CHAR = 18,
#if 0
/* Reserved for future use */
NXSCOPE_TYPE_WCHAR = 19,
#endif
#ifdef CONFIG_LOGGING_NXSCOPE_USERTYPES
/* User defined types starts from here.
* NXSCOPE_TYPE_USER must be always the last element.
*
* Type of size 1B. Together with channel.vdim this
* can be used to send custom protocol data.
*/
NXSCOPE_TYPE_USER = 20,
#endif
/* 5 bits reserved for data type */
NXSCOPE_TYPE_LAST = 31,
};
/* Forward declaration */
struct nxscope_s;
/****************************************************************************
* Public Function Puttypes
****************************************************************************/
/****************************************************************************
* Name: nxscope_chan_init
*
* Description:
* Initialize nxscope channel
*
* Input Parameters:
* s - a pointer to a nxscope instance
* ch - a channel id
* name - a channel name
* type - a channel data type (union nxscope_chinfo_type_u)
* vdim - a vector data dimension (vdim=1 for a point)
* mlen - a length of metadata
*
****************************************************************************/
int nxscope_chan_init(FAR struct nxscope_s *s, uint8_t ch,
FAR char *name, uint8_t type, uint8_t vdim,
uint8_t mlen);
/****************************************************************************
* Name: nxscope_chan_en
*
* Description:
* Enable/disable a given channel
*
* Input Parameters:
* s - a pointer to a nxscope instance
* ch - a channel id
* en - enable/disable
*
****************************************************************************/
int nxscope_chan_en(FAR struct nxscope_s *s, uint8_t chan, bool en);
#ifdef CONFIG_LOGGING_NXSCOPE_DIVIDER
/****************************************************************************
* Name: nxscope_chan_div
*
* Description:
* Configure divider for a given channel
*
* Input Parameters:
* s - a pointer to a nxscope instance
* ch - a channel id
* div - divider value - starts from 0
*
****************************************************************************/
int nxscope_chan_div(FAR struct nxscope_s *s, uint8_t chan, uint8_t div);
#endif
/****************************************************************************
* Name: nxscope_chan_all_en
*
* Description:
* Enable/disable all channels
*
* Input Parameters:
* s - a pointer to a nxscope instance
* en - enable/disable
*
****************************************************************************/
int nxscope_chan_all_en(FAR struct nxscope_s *s, bool en);
/****************************************************************************
* Name: nxscope_put_vXXXX_m
*
* Description:
* Put a vector with metadata on the stream buffer
*
* Input Parameters:
* s - a pointer to a nxscope instance
* ch - a channel id
* val - a pointer to a sample data vector
* d - a dimmention of sample data vector
* meta - a pointer to metadata
* mlen - a length of metadata
*
****************************************************************************/
int nxscope_put_vuint8_m(FAR struct nxscope_s *s, uint8_t ch,
FAR uint8_t *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vint8_m(FAR struct nxscope_s *s, uint8_t ch,
FAR int8_t *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vuint16_m(FAR struct nxscope_s *s, uint8_t ch,
FAR uint16_t *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vint16_m(FAR struct nxscope_s *s, uint8_t ch,
FAR int16_t *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vuint32_m(FAR struct nxscope_s *s, uint8_t ch,
FAR uint32_t *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vint32_m(FAR struct nxscope_s *s, uint8_t ch,
FAR int32_t *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vuint64_m(FAR struct nxscope_s *s, uint8_t ch,
FAR uint64_t *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vint64_m(FAR struct nxscope_s *s, uint8_t ch,
FAR int64_t *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vfloat_m(FAR struct nxscope_s *s, uint8_t ch,
FAR float *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vdouble_m(FAR struct nxscope_s *s, uint8_t ch,
FAR double *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vub8_m(FAR struct nxscope_s *s, uint8_t ch,
FAR ub8_t *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vb8_m(FAR struct nxscope_s *s, uint8_t ch,
FAR b8_t *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vub16_m(FAR struct nxscope_s *s, uint8_t ch,
FAR ub16_t *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vb16_m(FAR struct nxscope_s *s, uint8_t ch,
FAR b16_t *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vub32_m(FAR struct nxscope_s *s, uint8_t ch,
FAR ub32_t *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vb32_m(FAR struct nxscope_s *s, uint8_t ch,
FAR b32_t *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_vchar_m(FAR struct nxscope_s *s, uint8_t ch,
FAR char *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
/****************************************************************************
* Name: nxscope_put_vXXXX
*
* Description:
* Put a vector on the stream buffer
*
* Input Parameters:
* s - a pointer to a nxscope instance
* ch - a channel id
* val - a pointer to a sample data vector
* d - a dimmention of sample data vector
*
****************************************************************************/
int nxscope_put_vuint8(FAR struct nxscope_s *s, uint8_t ch,
FAR uint8_t *val, uint8_t d);
int nxscope_put_vint8(FAR struct nxscope_s *s, uint8_t ch,
FAR int8_t *val, uint8_t d);
int nxscope_put_vuint16(FAR struct nxscope_s *s, uint8_t ch,
FAR uint16_t *val, uint8_t d);
int nxscope_put_vint16(FAR struct nxscope_s *s, uint8_t ch,
FAR int16_t *val, uint8_t d);
int nxscope_put_vuint32(FAR struct nxscope_s *s, uint8_t ch,
FAR uint32_t *val, uint8_t d);
int nxscope_put_vint32(FAR struct nxscope_s *s, uint8_t ch,
FAR int32_t *val, uint8_t d);
int nxscope_put_vuint64(FAR struct nxscope_s *s, uint8_t ch,
FAR uint64_t *val, uint8_t d);
int nxscope_put_vint64(FAR struct nxscope_s *s, uint8_t ch,
FAR int64_t *val, uint8_t d);
int nxscope_put_vfloat(FAR struct nxscope_s *s, uint8_t ch,
FAR float *val, uint8_t d);
int nxscope_put_vdouble(FAR struct nxscope_s *s, uint8_t ch,
FAR double *val, uint8_t d);
int nxscope_put_vub8(FAR struct nxscope_s *s, uint8_t ch,
FAR ub8_t *val, uint8_t d);
int nxscope_put_vb8(FAR struct nxscope_s *s, uint8_t ch,
FAR b8_t *val, uint8_t d);
int nxscope_put_vub16(FAR struct nxscope_s *s, uint8_t ch,
FAR ub16_t *val, uint8_t d);
int nxscope_put_vb16(FAR struct nxscope_s *s, uint8_t ch,
FAR b16_t *val, uint8_t d);
int nxscope_put_vub32(FAR struct nxscope_s *s, uint8_t ch,
FAR ub32_t *val, uint8_t d);
int nxscope_put_vb32(FAR struct nxscope_s *s, uint8_t ch,
FAR b32_t *val, uint8_t d);
int nxscope_put_vchar(FAR struct nxscope_s *s, uint8_t ch,
FAR char *val, uint8_t d);
/****************************************************************************
* Name: nxscope_put_XXXX_m
*
* Description:
* Put a point with metadata on the stream buffer
*
* Input Parameters:
* s - a pointer to a nxscope instance
* ch - a channel id
* val - sample data
* meta - a pointer to metadata
* mlen - a length of metadata
*
****************************************************************************/
int nxscope_put_uint8_m(FAR struct nxscope_s *s, uint8_t ch, uint8_t val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_int8_m(FAR struct nxscope_s *s, uint8_t ch, int8_t val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_uint16_m(FAR struct nxscope_s *s, uint8_t ch, uint16_t val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_int16_m(FAR struct nxscope_s *s, uint8_t ch, int16_t val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_uint32_m(FAR struct nxscope_s *s, uint8_t ch, uint32_t val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_int32_m(FAR struct nxscope_s *s, uint8_t ch, int32_t val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_uint64_m(FAR struct nxscope_s *s, uint8_t ch, uint64_t val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_int64_m(FAR struct nxscope_s *s, uint8_t ch, int64_t val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_float_m(FAR struct nxscope_s *s, uint8_t ch, float val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_double_m(FAR struct nxscope_s *s, uint8_t ch, double val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_ub8_m(FAR struct nxscope_s *s, uint8_t ch, ub8_t val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_b8_m(FAR struct nxscope_s *s, uint8_t ch, b8_t val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_ub16_m(FAR struct nxscope_s *s, uint8_t ch, ub16_t val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_b16_m(FAR struct nxscope_s *s, uint8_t ch, b16_t val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_ub32_m(FAR struct nxscope_s *s, uint8_t ch, ub32_t val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_b32_m(FAR struct nxscope_s *s, uint8_t ch, b32_t val,
FAR uint8_t *meta, uint8_t mlen);
int nxscope_put_char_m(FAR struct nxscope_s *s, uint8_t ch, char val,
FAR uint8_t *meta, uint8_t mlen);
/****************************************************************************
* Name: nxscope_put_none_m
*
* Description:
* Put metadata only on the stream buffer
*
* Input Parameters:
* s - a pointer to a nxscope instance
* ch - a channel id
* meta - a pointer to metadata
* mlen - a length of metadata
*
****************************************************************************/
int nxscope_put_none_m(FAR struct nxscope_s *s, uint8_t ch,
FAR uint8_t *meta, uint8_t mlen);
#ifdef CONFIG_LOGGING_NXSCOPE_USERTYPES
/****************************************************************************
* Name: nxscope_put_user_m
*
* Description:
* Put a user specific data on the stream buffer
*
* Input Parameters:
* s - a pointer to a nxscope instance
* type - a channel type (starts from NXSCOPE_TYPE_USER)
* ch - a channel id
* val - a pointer to a sample data vector
* d - a dimmention of sample data vector
* meta - a pointer to metadata
* mlen - a length of metadata
*
****************************************************************************/
int nxscope_put_user_m(FAR struct nxscope_s *s, uint8_t ch, uint8_t type,
FAR uint8_t *val, uint8_t d,
FAR uint8_t *meta, uint8_t mlen);
#endif
/****************************************************************************
* Name: nxscope_put_user_m
*
* Description:
* Put a point on the stream buffer
*
* Input Parameters:
* s - a pointer to a nxscope instance
* ch - a channel id
* val - sample data
*
****************************************************************************/
int nxscope_put_uint8(FAR struct nxscope_s *s, uint8_t ch, uint8_t val);
int nxscope_put_int8(FAR struct nxscope_s *s, uint8_t ch, int8_t val);
int nxscope_put_uint16(FAR struct nxscope_s *s, uint8_t ch, uint16_t val);
int nxscope_put_int16(FAR struct nxscope_s *s, uint8_t ch, int16_t val);
int nxscope_put_uint32(FAR struct nxscope_s *s, uint8_t ch, uint32_t val);
int nxscope_put_int32(FAR struct nxscope_s *s, uint8_t ch, int32_t val);
int nxscope_put_uint64(FAR struct nxscope_s *s, uint8_t ch, uint64_t val);
int nxscope_put_int64(FAR struct nxscope_s *s, uint8_t ch, int64_t val);
int nxscope_put_float(FAR struct nxscope_s *s, uint8_t ch, float val);
int nxscope_put_double(FAR struct nxscope_s *s, uint8_t ch, double val);
int nxscope_put_ub8(FAR struct nxscope_s *s, uint8_t ch, ub8_t val);
int nxscope_put_b8(FAR struct nxscope_s *s, uint8_t ch, b8_t val);
int nxscope_put_ub16(FAR struct nxscope_s *s, uint8_t ch, ub16_t val);
int nxscope_put_b16(FAR struct nxscope_s *s, uint8_t ch, b16_t val);
int nxscope_put_ub32(FAR struct nxscope_s *s, uint8_t ch, ub32_t val);
int nxscope_put_b32(FAR struct nxscope_s *s, uint8_t ch, b32_t val);
int nxscope_put_char(FAR struct nxscope_s *s, uint8_t ch, char val);
#endif /* __APPS_INCLUDE_LOGGING_NXSCOPE_NXSCOPE_CHAN_H */