1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2022 Chipsea Technologies (Shenzhen) Corp., Ltd.
3094332d3Sopenharmony_ci *
4094332d3Sopenharmony_ci * HDF is dual licensed: you can use it either under the terms of
5094332d3Sopenharmony_ci * the GPL, or the BSD license, at your option.
6094332d3Sopenharmony_ci * See the LICENSE file in the root of this repository for complete details.
7094332d3Sopenharmony_ci */
8094332d3Sopenharmony_ci
9094332d3Sopenharmony_ci#ifndef PPG_CS1262_SPI_H
10094332d3Sopenharmony_ci#define PPG_CS1262_SPI_H
11094332d3Sopenharmony_ci
12094332d3Sopenharmony_ci#include "hdf_types.h"
13094332d3Sopenharmony_ci#include "sensor_platform_if.h"
14094332d3Sopenharmony_ci/***************************************** TYPEDEF ******************************************/
15094332d3Sopenharmony_citypedef enum {
16094332d3Sopenharmony_ci    CS1262_REG_BIT_RESET = 0,
17094332d3Sopenharmony_ci    CS1262_REG_BIT_SET = 1,
18094332d3Sopenharmony_ci} Cs1262BitStatus;
19094332d3Sopenharmony_ci
20094332d3Sopenharmony_citypedef struct {
21094332d3Sopenharmony_ci    uint16_t regAddr;
22094332d3Sopenharmony_ci    union {
23094332d3Sopenharmony_ci        uint16_t regVal;
24094332d3Sopenharmony_ci        uint16_t *regValGroup;
25094332d3Sopenharmony_ci    };
26094332d3Sopenharmony_ci    uint16_t regLen;
27094332d3Sopenharmony_ci} Cs1262RegGroup;
28094332d3Sopenharmony_ci
29094332d3Sopenharmony_citypedef struct {
30094332d3Sopenharmony_ci    uint32_t reserve : 2;
31094332d3Sopenharmony_ci    uint32_t adc_data : 22;
32094332d3Sopenharmony_ci    uint32_t tl : 2;
33094332d3Sopenharmony_ci    uint32_t rx : 2;
34094332d3Sopenharmony_ci    uint32_t phaseGroup : 4;
35094332d3Sopenharmony_ci} Cs1262FifoVal;
36094332d3Sopenharmony_ci
37094332d3Sopenharmony_ci/****************************************** DEFINE ******************************************/
38094332d3Sopenharmony_ci// lock reg
39094332d3Sopenharmony_ci#define CS1262_LOCK 0x0000
40094332d3Sopenharmony_ci// unlock reg
41094332d3Sopenharmony_ci#define CS1262_UN_LOCK1 0x0059
42094332d3Sopenharmony_ci#define CS1262_UN_LOCK2 0x0016
43094332d3Sopenharmony_ci#define CS1262_UN_LOCK3 0x0088
44094332d3Sopenharmony_ci
45094332d3Sopenharmony_ci/****************************************** OFFSET ******************************************/
46094332d3Sopenharmony_ci// PRF
47094332d3Sopenharmony_ci#define PRF_START_BIT (0x0000)
48094332d3Sopenharmony_ci// REG WR PROT
49094332d3Sopenharmony_ci#define LOCK_REG_OFFSET (0x01u << 0)
50094332d3Sopenharmony_ci
51094332d3Sopenharmony_ci// RESET CON
52094332d3Sopenharmony_ci#define FIFORST_REG_OFFSET (0x01u << 1)
53094332d3Sopenharmony_ci#define TERST_REG_OFFSET   (0x01u << 2)
54094332d3Sopenharmony_ci#define ADCRST_REG_OFFSET  (0x01u << 3)
55094332d3Sopenharmony_ci
56094332d3Sopenharmony_ci// IER IFR
57094332d3Sopenharmony_ci#define INT_MODE_TRIGER (0 << 15) // 0 trigger
58094332d3Sopenharmony_ci
59094332d3Sopenharmony_ci#define LED_WARN_IER_OFFSET 5
60094332d3Sopenharmony_ci#define REG_ERR_IER_OFFSET  4
61094332d3Sopenharmony_ci#define TS_RDY_IER_OFFSET   3
62094332d3Sopenharmony_ci#define DATA_RDY_IER_OFFSET 2
63094332d3Sopenharmony_ci#define THR_DET_IER_OFFSET  1
64094332d3Sopenharmony_ci#define FIFO_RDY_IER_OFFSET 0
65094332d3Sopenharmony_ci
66094332d3Sopenharmony_ci#define LED_WARN_IFR_OFFSET 5
67094332d3Sopenharmony_ci#define REG_ERR_IFR_OFFSET  4
68094332d3Sopenharmony_ci#define TS_RDY_IFR_OFFSET   3
69094332d3Sopenharmony_ci#define DATA_RDY_IFR_OFFSET 2
70094332d3Sopenharmony_ci#define THR_DET_IFR_OFFSET  1
71094332d3Sopenharmony_ci#define FIFO_RDY_IFR_OFFSET 0
72094332d3Sopenharmony_ci
73094332d3Sopenharmony_ci#define IFR_RDY_FLAG 0x0001
74094332d3Sopenharmony_ci// TE CTRL
75094332d3Sopenharmony_ci#define PRF_START_OFFSET (0x01u << 0)
76094332d3Sopenharmony_ci
77094332d3Sopenharmony_ci// FIFO STATE
78094332d3Sopenharmony_ci#define FIFO_FULL_OFFSET  (0x01u << 12)
79094332d3Sopenharmony_ci#define FIFO_EMPTY_OFFSET (0x01u << 11)
80094332d3Sopenharmony_ci#define FIFO_NUM_OFFSET   0x3FF
81094332d3Sopenharmony_ci
82094332d3Sopenharmony_ci// RESET OFFSET
83094332d3Sopenharmony_ci#define CS1262_FIFO_RST_OFFSET 1
84094332d3Sopenharmony_ci#define CS1262_TE_RST_OFFSET   2
85094332d3Sopenharmony_ci#define CS1262_ADC_RST_OFFSET  3
86094332d3Sopenharmony_ci
87094332d3Sopenharmony_ci/******************************************* REGS *******************************************/
88094332d3Sopenharmony_ci// SYS_BA
89094332d3Sopenharmony_ci#define CS1262_SYS_BA         (0x0000)
90094332d3Sopenharmony_ci#define CS1262_WRPROT_REG     (CS1262_SYS_BA + 0x00)
91094332d3Sopenharmony_ci#define CS1262_CLOCK_REG      (CS1262_SYS_BA + 0x01)
92094332d3Sopenharmony_ci#define CS1262_RSTCON_REG     (CS1262_SYS_BA + 0x02)
93094332d3Sopenharmony_ci#define CS1262_IER_REG        (CS1262_SYS_BA + 0x03)
94094332d3Sopenharmony_ci#define CS1262_IFR_REG        (CS1262_SYS_BA + 0x04)
95094332d3Sopenharmony_ci#define CS1262_SYS_STATE_REG  (CS1262_SYS_BA + 0x05)
96094332d3Sopenharmony_ci// TL_BA
97094332d3Sopenharmony_ci#define CS1262_TL_BA          (0x0010)
98094332d3Sopenharmony_ci// TX_BA
99094332d3Sopenharmony_ci#define CS1262_TX_BA          (0x0050)
100094332d3Sopenharmony_ci// RX_BA
101094332d3Sopenharmony_ci#define CS1262_RX_BA          (0x0070)
102094332d3Sopenharmony_ci// TE_BA
103094332d3Sopenharmony_ci#define CS1262_TE_BA          (0x00E0)
104094332d3Sopenharmony_ci#define CS1262_TE_CTRL_REG    (CS1262_TE_BA + 0x00)
105094332d3Sopenharmony_ci// TE_BA
106094332d3Sopenharmony_ci#define CS1262_WEAR_BA         (0x0120)
107094332d3Sopenharmony_ci// FIFO & ADC
108094332d3Sopenharmony_ci#define CS1262_ADC_BA          (0x140)
109094332d3Sopenharmony_ci#define CS1262_FIFO_DATA_REG   (CS1262_ADC_BA + 0x00)
110094332d3Sopenharmony_ci#define CS1262_FIFO_STATE_REG  (CS1262_ADC_BA + 0x01)
111094332d3Sopenharmony_ci#define CS1262_FIFO_OFFSET_REG (CS1262_ADC_BA + 0x02)
112094332d3Sopenharmony_ci// ID_BA
113094332d3Sopenharmony_ci#define CS1262_ID_BA           (0x1F0)
114094332d3Sopenharmony_ci#define CS1262_CHIP_ID1_REG    (CS1262_ID_BA + 0x01)
115094332d3Sopenharmony_ci
116094332d3Sopenharmony_ci#define CS1262_ENTER_DEEPSLEEP_CMD 0x08C4
117094332d3Sopenharmony_ci#define CS1262_EXIT_DEEPSLEEP_CMD  0x08C1
118094332d3Sopenharmony_ci#define CS1262_CHIP_REST_CMD       0xC2
119094332d3Sopenharmony_ci
120094332d3Sopenharmony_ci/****************************************** DEFINE ******************************************/
121094332d3Sopenharmony_ci#define CS1262_SPI_NOCHECK_SINGLEWRITE        0x95
122094332d3Sopenharmony_ci#define CS1262_SPI_CKSUNCHECK_SINGLEWRITE     0x96 // checksum for single write
123094332d3Sopenharmony_ci#define CS1262_SPI_NOCHECK_CONTINUOUSWRITE    0x99
124094332d3Sopenharmony_ci#define CS1262_SPI_CKSUNCHECK_CONTINUOUSWRITE 0x9A // checksum for continuous write
125094332d3Sopenharmony_ci
126094332d3Sopenharmony_ci#define CS1262_SPI_NOCHECK_SINGLEREAD         0x65
127094332d3Sopenharmony_ci#define CS1262_SPI_CKSUNCHECK_SINGLEREAD      0x66 // checksum for single read
128094332d3Sopenharmony_ci#define CS1262_SPI_NOCHECK_CONTINUOUSREAD     0x69
129094332d3Sopenharmony_ci#define CS1262_SPI_CKSUNCHECK_CONTINUOUSREAD  0x6A // checksum for continuous read
130094332d3Sopenharmony_ci
131094332d3Sopenharmony_ci#define CS1262_SPI_ACK_ADDR  0xA3
132094332d3Sopenharmony_ci#define CS1262_SPI_NACK_ADDR 0xA3
133094332d3Sopenharmony_ci#define CS1262_SPI_ACK_DATA  0xA5
134094332d3Sopenharmony_ci#define CS1262_SPI_NACK_DATA 0xAA
135094332d3Sopenharmony_ci
136094332d3Sopenharmony_ci#define CS1262_SPI_DUMMY_DATA 0x00
137094332d3Sopenharmony_ci/*********************************** function prototypes *************************************/
138094332d3Sopenharmony_ciint32_t Cs1262ReadRegs(uint16_t regAddr, uint16_t *dataBuf, uint16_t dataLen);
139094332d3Sopenharmony_ciint32_t Cs1262WriteReg(uint16_t regAddr, uint16_t data);
140094332d3Sopenharmony_ciint32_t Cs1262WriteRegs(uint16_t regAddr, uint16_t *dataBuf, uint16_t dataLen);
141094332d3Sopenharmony_ciint32_t Cs1262WriteRegbit(uint16_t regAddr, uint16_t setbit, Cs1262BitStatus bitval);
142094332d3Sopenharmony_ciint32_t Cs1262WriteData(uint8_t *data, uint16_t dataLen);
143094332d3Sopenharmony_ciint32_t Cs1262WriteGroup(Cs1262RegGroup *regGroup, uint16_t groupLen);
144094332d3Sopenharmony_ciint32_t Cs1262ReadFifoReg(Cs1262FifoVal *fifoBuf, uint16_t fifoLen);
145094332d3Sopenharmony_ciint32_t Cs1262InitSpi(struct SensorBusCfg *busCfg);
146094332d3Sopenharmony_civoid Cs1262ReleaseSpi(struct SensorBusCfg *busCfg);
147094332d3Sopenharmony_ci#endif /* CS1262_SPI_H */
148