X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fdrv%2Fsipo.h;h=10918cd7de14cc3ec52ea2fe4562791a2df4d595;hb=e380431860a0d4e90b0b06aa628099637a572101;hp=50f64666164f474ef7bbae60b8606810a4f33625;hpb=7b81eb1ac45f5842cd1e71518962b034b216cc74;p=bertos.git diff --git a/bertos/drv/sipo.h b/bertos/drv/sipo.h index 50f64666..10918cd7 100644 --- a/bertos/drv/sipo.h +++ b/bertos/drv/sipo.h @@ -31,33 +31,123 @@ * --> * * \brief Generic Serial-in, Parallel-out implementation (SIPO). - * - * This module use kfile interface. * * - * \version $Id$ * * \author Andrea Grandi * \author Daniele Basile - * + * * $WIZ$ module_name = "sipo" * $WIZ$ module_depends = "kfile" - * $WIZ$ module_configuration = "" - * + * $WIZ$ module_hw = "bertos/hw/hw_sipo.h" */ #ifndef DRV_SIPO_H #define DRV_SIPO_H -#include +#include "hw/hw_sipo.h" +#include "cfg/cfg_sipo.h" + +#include + + +/* + * The following macros are needed to maintain compatibility with older sipo API. + * They can be safely removed once the old API is removed. + */ + + /** + * \addtogroup sipo_api + * \{ + */ +#if COMPILER_C99 + #define sipo_init(...) PP_CAT(sipo_init ## _, COUNT_PARMS(__VA_ARGS__)) (__VA_ARGS__) +#else + /** + * Initialize SIPO module. + * + * To initialize the module you can write this code: + * \code + * Sipo ctx; + * sipo_init(&ctx, settings); + * \endcode + */ + #define sipo_init(args...) PP_CAT(sipo_init ## _, COUNT_PARMS(args)) (args) + +#endif +/**\}*/ + + +#define SIPO_DATAORDER_START_LSB 1 +#define SIPO_DATAORDER_START_MSB 0x80 + +#if !CONFIG_SIPO_DISABLE_OLD_API +/** + * Define enum to set sipo data order. + */ +typedef enum SipoBitOrder +{ + SIPO_DATAORDER_MSB = 0, + SIPO_DATAORDER_LSB = 1 +} SipoBitOrder; + +/** + * Define enum to set the start level of clock. + */ +typedef enum SipoClockPol +{ + SIPO_START_LOW = 0, + SIPO_START_HIGH = 1 + +} SipoClkPol; + +/** + * Define enum to set load signal level. + */ +typedef enum SipoLoadPol +{ + SIPO_LOW_TO_HIGH = 0, + SIPO_HIGH_TO_LOW = 1 + +} SipoLoadPol; /** * Sipo KFile context structure. */ typedef struct Sipo { - KFile fd; ///< File descriptor. + KFile fd; ///< File descriptor. + SipoMap load_device; ///< Descriptor of the device that we want drive. + SipoLoadPol load_pol; ///< Set polarity of load signal. + SipoClkPol clock_pol; ///< Set polarity of data clock. + SipoBitOrder bit_order; ///< Set the order of pushed bits in sipo. + } Sipo; +#else /* New api */ + +#define SIPO_DATAORDER BV(0) +#define SIPO_DATAORDER_MSB BV(0) ///< MSB sipo data order setting +#define SIPO_DATAORDER_LSB 0 ///< LSB sipo data order setting + +#define SIPO_CLOCK_POL BV(1) +#define SIPO_START_LOW BV(1) ///< sipo clock start level high setting +#define SIPO_START_HIGH 0 ///< sipo clock start level low setting + +#define SIPO_LOAD_LEV BV(2) +#define SIPO_LOW_TO_HIGH BV(2) ///< sipo load high signal level setting. +#define SIPO_HIGH_TO_LOW 0 ///< sipo load low signal level setting. + +/** + * Sipo KFile context structure. + */ +typedef struct Sipo +{ + KFile fd; ///< File descriptor. + SipoMap device; ///< Descriptor of the device that we want drive. + uint8_t settings; +} Sipo; + +#endif /** * ID for sipo. @@ -73,7 +163,8 @@ INLINE Sipo * SIPO_CAST(KFile *fd) return (Sipo *)fd; } -void sipo_init(Sipo *fd); +void sipo_init_1(Sipo *fd); +void sipo_init_3(Sipo *fd, SipoMap dev, uint8_t settings); -#endif // DRV_SIPO_H +#endif /* DRV_SIPO_H */