summaryrefslogtreecommitdiff
path: root/bsp/nuvoton/libraries/nu_packages/CCAP_Sensors/ccap_sensor.h
blob: 6fe5af24a3cd83252ca694791e585a16ee19b4ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/**************************************************************************//**
*
* @copyright (C) 2019 Nuvoton Technology Corp. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date            Author       Notes
* 2022-8-16       Wayne        First version
*
******************************************************************************/

#ifndef __CCAP_SENSOR_H__
#define __CCAP_SENSOR_H__

#include <rtthread.h>
#include <rtdevice.h>
#include <drv_gpio.h>
#include "NuMicro.h"

typedef enum
{
    evCCAPSNR_HM1055,
    evCCAPSNR_ADV728X,
    evCCAPSNR_CNT
} ccap_sensor_id;

typedef enum
{
    CCAP_SENSOR_CMD_RESET,
    CCAP_SENSOR_CMD_SET_POWER,
    CCAP_SENSOR_CMD_SET_MODE,
    CCAP_SENSOR_CMD_GET_SUIT_MODE,
} ccap_sensor_cmd;

typedef struct
{
    uint32_t u32Width;     // Horizontal total pixel
    uint32_t u32Height;    // Vertical total pixel
    uint8_t *pu8FarmAddr;
    uint32_t u32PixFmt;
} ccap_view_info;
typedef ccap_view_info *ccap_view_info_t;

typedef struct
{
    rt_uint16_t  u16Addr;
    rt_uint16_t  u16Val;
} sensor_reg_val;
typedef sensor_reg_val *sensor_reg_val_t;

typedef struct
{
    ccap_view_info        sViewInfo;
    const sensor_reg_val *psRegArr;
    rt_uint32_t           u32RegArrSize;
    rt_uint32_t           u32SenClk;
    rt_uint32_t           u32Polarity;
} sensor_mode_info;
typedef sensor_mode_info *sensor_mode_info_t;

typedef rt_err_t (*ccap_sensor_set_mode)(struct rt_i2c_bus_device *i2cdev, void *pvPriv, sensor_mode_info *psInfo);
typedef struct
{
    ccap_sensor_id     eId;
    sensor_mode_info_t psModeInfo;
    uint32_t           ModeInfoSize;
    rt_uint16_t        u16AddrBL;  // Address byte length
    rt_uint16_t        u16ValBL;   // Address byte length
    rt_uint16_t        u16DevAddr;

    rt_bool_t          RstActLow;
    rt_uint32_t        RstHoldTimeInMs;
    rt_bool_t          PwrDwnActLow;

    ccap_sensor_set_mode pfnSetMode;
} sensor_priv;
typedef sensor_priv *sensor_priv_t;

typedef struct
{
    rt_base_t     RstPin;
    rt_base_t     PwrDwnPin;
    const char   *I2cName;
} ccap_sensor_io;
typedef ccap_sensor_io *ccap_sensor_io_t;

typedef struct
{
    struct rt_device  device;
    ccap_sensor_io   *psIo;
} ccap_sensor_dev;
typedef ccap_sensor_dev *ccap_sensor_dev_t;

rt_err_t ccap_sensor_i2c_write(struct rt_i2c_bus_device *i2cdev, rt_uint16_t addr, rt_uint8_t *puBuf, int i32BufLen);
rt_err_t ccap_sensor_i2c_read(struct rt_i2c_bus_device *i2cdev, rt_uint16_t addr, rt_uint8_t *puWBuf, int i32WBufLen, rt_uint8_t *puRBuf, int i32RBufLen);
rt_err_t ccap_sensor_register(struct rt_device *device, const char *name, void *user_data);
rt_err_t nu_ccap_sensor_create(ccap_sensor_io *psIo, ccap_sensor_id evSensorId, const char *szName);
ccap_sensor_dev_t nu_create_hm1055(ccap_sensor_io *psIo, const char *szName);
ccap_sensor_dev_t nu_create_adv728x(ccap_sensor_io *psIo, const char *szName);

#endif /* __CCAP_SENSOR_H__ */