1 /**************************************************************************//** 2 * 3 * @copyright (C) 2019 Nuvoton Technology Corp. All rights reserved. 4 * 5 * SPDX-License-Identifier: Apache-2.0 6 * 7 * Change Logs: 8 * Date Author Notes 9 * 2022-8-16 Wayne First version 10 * 11 ******************************************************************************/ 12 13 #ifndef __CCAP_SENSOR_H__ 14 #define __CCAP_SENSOR_H__ 15 16 #include <rtthread.h> 17 #include <rtdevice.h> 18 #include <drv_gpio.h> 19 #include "NuMicro.h" 20 21 typedef enum 22 { 23 evCCAPSNR_HM1055, 24 evCCAPSNR_ADV728X, 25 evCCAPSNR_CNT 26 } ccap_sensor_id; 27 28 typedef enum 29 { 30 CCAP_SENSOR_CMD_RESET, 31 CCAP_SENSOR_CMD_SET_POWER, 32 CCAP_SENSOR_CMD_SET_MODE, 33 CCAP_SENSOR_CMD_GET_SUIT_MODE, 34 } ccap_sensor_cmd; 35 36 typedef struct 37 { 38 uint32_t u32Width; // Horizontal total pixel 39 uint32_t u32Height; // Vertical total pixel 40 uint8_t *pu8FarmAddr; 41 uint32_t u32PixFmt; 42 } ccap_view_info; 43 typedef ccap_view_info *ccap_view_info_t; 44 45 typedef struct 46 { 47 rt_uint16_t u16Addr; 48 rt_uint16_t u16Val; 49 } sensor_reg_val; 50 typedef sensor_reg_val *sensor_reg_val_t; 51 52 typedef struct 53 { 54 ccap_view_info sViewInfo; 55 const sensor_reg_val *psRegArr; 56 rt_uint32_t u32RegArrSize; 57 rt_uint32_t u32SenClk; 58 rt_uint32_t u32Polarity; 59 } sensor_mode_info; 60 typedef sensor_mode_info *sensor_mode_info_t; 61 62 typedef rt_err_t (*ccap_sensor_set_mode)(struct rt_i2c_bus_device *i2cdev, void *pvPriv, sensor_mode_info *psInfo); 63 typedef struct 64 { 65 ccap_sensor_id eId; 66 sensor_mode_info_t psModeInfo; 67 uint32_t ModeInfoSize; 68 rt_uint16_t u16AddrBL; // Address byte length 69 rt_uint16_t u16ValBL; // Address byte length 70 rt_uint16_t u16DevAddr; 71 72 rt_bool_t RstActLow; 73 rt_uint32_t RstHoldTimeInMs; 74 rt_bool_t PwrDwnActLow; 75 76 ccap_sensor_set_mode pfnSetMode; 77 } sensor_priv; 78 typedef sensor_priv *sensor_priv_t; 79 80 typedef struct 81 { 82 rt_base_t RstPin; 83 rt_base_t PwrDwnPin; 84 const char *I2cName; 85 } ccap_sensor_io; 86 typedef ccap_sensor_io *ccap_sensor_io_t; 87 88 typedef struct 89 { 90 struct rt_device device; 91 ccap_sensor_io *psIo; 92 } ccap_sensor_dev; 93 typedef ccap_sensor_dev *ccap_sensor_dev_t; 94 95 rt_err_t ccap_sensor_i2c_write(struct rt_i2c_bus_device *i2cdev, rt_uint16_t addr, rt_uint8_t *puBuf, int i32BufLen); 96 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); 97 rt_err_t ccap_sensor_register(struct rt_device *device, const char *name, void *user_data); 98 rt_err_t nu_ccap_sensor_create(ccap_sensor_io *psIo, ccap_sensor_id evSensorId, const char *szName); 99 ccap_sensor_dev_t nu_create_hm1055(ccap_sensor_io *psIo, const char *szName); 100 ccap_sensor_dev_t nu_create_adv728x(ccap_sensor_io *psIo, const char *szName); 101 102 #endif /* __CCAP_SENSOR_H__ */ 103