/******************************************************************************
版权所有：	@copyright (C) 2024-2034 HaiYang Technology Corp. All rights reserved.
文件名称：	shm.c
文件版本：	01.01
创建作者：	zhaoyang
创建日期：	2025-08-21
功能说明：	共享内存驱动头文件
其它说明：
修改记录：
*/
#ifndef _BSP_SHM_H_
#define _BSP_SHM_H_

#include <stdlib.h>
#include <stdint.h>

#define SHM_ADDR_U_ADC_1             		0x00040000 //第一片AD7616 采样数据区
#define SHM_ADDR_U_ADC_2             		0x00060000 //第二片AD7616 采样数据区
#define SHM_ADDR_U_ADC_3             		0x00080000 //第三片AD7616 采样数据区
#define SHM_ADDR_U_ADC_4             		0x000A0000 //第四片AD7616 采样数据区


#define SHM_ADC_SIZE      (SHM_ADDR_U_ADC_2 - SHM_ADDR_U_ADC_1)

/*
noted by zhaoyang:
共享内存使用说明：
共享内存总大小为4M，每为读空间和写空间，各4M；
读空间为linux核向裸核读取数据的空间，linux核只读，裸核只写；
写空间为linux核向裸核写入数据的空间，linux核只写，裸核只读；

如：
	u8 a = SHM_BASE_R[0]; ----- linux核读取共享内存的第1个字节数据
	SHM_BASE_W[0] = 0x55; ----- linux核向共享内存的第1个字节写入数据

可以用接口函数操作，shm_read 和shm_write；
也可以直接操作SHM_BASE_R和SHM_BASE_W；

注意：
	因为读空间和写空间是不一样的，所以shm_read(addr=0)和shm_read(addr=0),
	他们操作的空间是不一样的。

*/

#define SHM_MAX_SIZE		0x400000 //共享内存的大小，读和写空间各有4M

extern uint8_t *SHM_BASE_R; //共享内存---读(从裸核读取数据)---开始地址
extern uint8_t *SHM_BASE_W; //共享内存---写(向裸核写入数据)---开始地址

/******************************************************************************
函数名称：	shm_read
函数版本：	01.01
创建作者：	zhaoyang
创建日期：	2025-08-21
函数说明：	读取共享内存的数据.
参数说明：	
addr：所以读取共享内存的地址
len：需要读取数据的长度
out_data：输出buf
out_data_size:输出buf的长度

返回值：	成功返回读取数据的长度, 失败返回-1
修改记录：	
*/
int shm_read(uint32_t addr, uint32_t len, uint8_t *out_data, uint32_t out_data_size);

/******************************************************************************
函数名称：	shm_write
函数版本：	01.01
创建作者：	zhaoyang
创建日期：	2025-08-21
函数说明：	向共享内存写入数据.
参数说明：	
addr：共享内存的地址
data：写入数据
len:写入数据长度

返回值：	成功返回写入数据的长度, 失败返回-1
修改记录：	
*/
int shm_write(uint32_t addr, uint8_t *data, uint32_t len);


/******************************************************************************
函数名称：	shm_init
函数版本：	01.01
创建作者：	zhaoyang
创建日期：	2025-08-21
函数说明：	shm初始化.
参数说明：	
					无					
返回值：	成功返回0, 失败返回-1
修改记录：	
*/
int shm_init(void);

/******************************************************************************
函数名称：	shm_exit
函数版本：	01.01
创建作者：	zhaoyang
创建日期：	2025-08-21
函数说明：	shm反初始化.
参数说明：	
					无					
返回值：	总是返回0.
修改记录：	
*/
int shm_exit(void);

 
#endif
/*------------------------------ 文件结束 -------------------------------------
*/
