整理代码

This commit is contained in:
蒲爽 2026-09-28 21:33:04 +08:00
commit c7b4e178ec
364 changed files with 59691 additions and 0 deletions

View file

@ -0,0 +1,42 @@
/*
*******************************************************************************
* INCLUDE
*******************************************************************************
*/
#include "../BoardInfo.h"
#include "Board.h"
#include <Poco/Format.h>
#include <Poco/MD5Engine.h>
#include <iostream>
#include <hi_mpi_sys.h>
namespace Hardware
{
namespace Hisilicon
{
/*
*******************************************************************************
* CLASS DEFINE
*******************************************************************************
*/
Board::Board()
{
hi_unique_id id;
hi_mpi_sys_get_unique_id(&id);
for (size_t i = 0; i < HI_UNIQUE_ID_NUM; i++)
{
std::cout << "#" << i << ": " << Poco::format("%08x", id.id[i]) << std::endl;
}
Poco::MD5Engine md5;
md5.update(id.id, sizeof(id.id));
_serialNumber = Poco::DigestEngine::digestToHex(md5.digest());
std::cout << "Serial Number: " << _serialNumber << std::endl;
}
std::string Hisilicon::Board::serialNumber()
{
return _serialNumber;
}
}
}

View file

@ -0,0 +1,33 @@
#ifndef A6A48FAD_A41E_4AF4_A92C_A3CFE3D065B1
#define A6A48FAD_A41E_4AF4_A92C_A3CFE3D065B1
/*
*******************************************************************************
* INCLUDE
*******************************************************************************
*/
#include "../BoardInfo.h"
namespace Hardware
{
namespace Hisilicon
{
/*
*******************************************************************************
* CLASS DECLARE
*******************************************************************************
*/
class Board: public Hardware::Board
{
public:
Board();
~Board();
public:
virtual std::string serialNumber() override;
private:
std::string _serialNumber;
};
}
}
#endif

View file

@ -0,0 +1,51 @@
/*
*******************************************************************************
* INCLUDE
*******************************************************************************
*/
#include "TemperatureSensor.h"
#include "memmap.h"
namespace Hardware
{
namespace Hisilicon
{
/*
*******************************************************************************
* CLASS DEFINE
*******************************************************************************
*/
#define TSENSOR_CTRL_REG_BASE 0x1102A000
TemperatureSensor::TemperatureSensor(): Sensor(Sensor::Type::TEMPERATURE)
{
_pRegisters = getRegisters();
_pRegisters->ctrl0 |= (1 << 31) | (1 << 30);
_pRegisters->ctrl1 |= (3 << 2);
}
TemperatureSensor::~TemperatureSensor()
{
_pRegisters->ctrl0 = 0;
releaseRegisters(_pRegisters);
}
void TemperatureSensor::read(float& value)
{
uint32_t rval = _pRegisters->ctrl2 & 0x3ff;
value = (float)(rval - 117) / 784 * 165 - 40;
}
TemperatureSensor::Registers* TemperatureSensor::getRegisters()
{
return (Registers*)memmap(TSENSOR_CTRL_REG_BASE, sizeof(Registers));
}
void TemperatureSensor::releaseRegisters(Registers* pRegisters)
{
memunmap(pRegisters);
}
}
}

View file

@ -0,0 +1,48 @@
#ifndef CBEF59CE_2DB7_43B5_AFA8_524952A27AF9
#define CBEF59CE_2DB7_43B5_AFA8_524952A27AF9
/*
*******************************************************************************
* INCLUDE
*******************************************************************************
*/
#include "../Sensor.h"
namespace Hardware
{
namespace Hisilicon
{
/*
*******************************************************************************
* CLASS DECLARE
*******************************************************************************
*/
class TemperatureSensor: public Sensor
{
protected:
struct Registers
{
uint32_t ctrl0;
uint32_t ctrl1;
uint32_t ctrl2;
uint32_t ctrl3;
uint32_t ctrl4;
uint32_t ctrl5;
};
public:
TemperatureSensor();
~TemperatureSensor();
public:
virtual void read(float& value) override;
protected:
Registers* getRegisters();
void releaseRegisters(Registers* pRegisters);
private:
Registers* _pRegisters;
};
}
}
#endif

275
hardware/hisilicon/memmap.c Normal file
View file

@ -0,0 +1,275 @@
/************************************************************/
/* file name : memmap.c */
/* linux /dev/mem mmap support func */
/* */
/* */
/* Copyright 2005 huawei com. */
/* Author :zhouaidi(42136) */
/* Create date: 2005-04-07 */
/* Modify history */
/* 2005-12-21: add memunmap function */
/************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
typedef struct tag_MMAP_Node
{
unsigned long Start_P;
unsigned long Start_V;
unsigned long length;
unsigned long refcount;
struct tag_MMAP_Node * next;
}TMMAP_Node_t;
TMMAP_Node_t * pTMMAPNode = NULL;
#define PAGE_SIZE 0x1000
#define PAGE_SIZE_MASK (~(0xfff))
static int fd = -1;
static const char dev[]="/dev/mem";
/*
*******************************************************************************
* MACROS
*******************************************************************************
*/
#define WRITE_LOG_DEBUG(fmt, ...) printf("%05d:[debug] "fmt"\r\n", __LINE__, ##__VA_ARGS__)
#define WRITE_LOG_INFO(fmt, ...) printf("%05d:[info ] "fmt"\r\n", __LINE__, ##__VA_ARGS__)
#define WRITE_LOG_ERROR(fmt, ...) printf("%05d:[error] "fmt"\r\n", __LINE__, ##__VA_ARGS__)
/* no need considering page_size of 4K */
void * memmap(unsigned long phy_addr, unsigned long size)
{
unsigned long phy_addr_in_page;
unsigned long page_diff;
unsigned long size_in_page;
TMMAP_Node_t * pTmp;
TMMAP_Node_t * pNew;
void *addr=NULL;
if(size == 0)
{
WRITE_LOG_ERROR("memmap():size can't be zero!\n");
return NULL;
}
/* check if the physical memory space have been mmaped */
pTmp = pTMMAPNode;
while(pTmp != NULL)
{
if( (phy_addr >= pTmp->Start_P) &&
( (phy_addr + size) <= (pTmp->Start_P + pTmp->length) ) )
{
pTmp->refcount++; /* referrence count increase by 1 */
return (void *)(pTmp->Start_V + phy_addr - pTmp->Start_P);
}
pTmp = pTmp->next;
}
/* not mmaped yet */
if(fd < 0)
{
/* dev not opened yet, so open it */
fd = open (dev, O_RDWR | O_SYNC);
if (fd < 0)
{
WRITE_LOG_ERROR("memmap():open %s error!\n", dev);
return NULL;
}
}
/* addr align in page_size(4K) */
phy_addr_in_page = phy_addr & PAGE_SIZE_MASK;
page_diff = phy_addr - phy_addr_in_page;
/* size in page_size */
size_in_page =((size + page_diff - 1) & PAGE_SIZE_MASK) + PAGE_SIZE;
addr = mmap((void *)0, size_in_page, PROT_READ|PROT_WRITE, MAP_SHARED, fd, phy_addr_in_page);
if (addr == MAP_FAILED)
{
WRITE_LOG_ERROR("memmap():mmap @ 0x%x error!\n", phy_addr_in_page);
return NULL;
}
/* add this mmap to MMAP Node */
pNew = (TMMAP_Node_t *)malloc(sizeof(TMMAP_Node_t));
if(NULL == pNew)
{
WRITE_LOG_ERROR("memmap():malloc new node failed!\n");
return NULL;
}
pNew->Start_P = phy_addr_in_page;
pNew->Start_V = (unsigned long)addr;
pNew->length = size_in_page;
pNew->refcount = 1;
pNew->next = NULL;
if(pTMMAPNode == NULL)
{
pTMMAPNode = pNew;
}
else
{
pTmp = pTMMAPNode;
while(pTmp->next != NULL)
{
pTmp = pTmp->next;
}
pTmp->next = pNew;
}
return (void *)(addr+page_diff);
}
/*****************************************************************************
Prototype : memunmap
Description :
Input : void * addr_mapped
Output : None
Return Value : On success, returns 0, on failure -1
Calls :
Called By :
History :
1.Date : 2005/12/21
Author : Z42136
Modification : Created function
*****************************************************************************/
int memunmap(void * addr_mapped)
{
TMMAP_Node_t * pPre;
TMMAP_Node_t * pTmp;
if(pTMMAPNode == NULL)
{
WRITE_LOG_ERROR("memunmap(): address have not been mmaped!\n");
return -1;
}
/* check if the physical memory space have been mmaped */
pTmp = pTMMAPNode;
pPre = pTMMAPNode;
do
{
if( ((unsigned long)addr_mapped >= pTmp->Start_V) &&
((unsigned long)addr_mapped <= (pTmp->Start_V + pTmp->length)) )
{
pTmp->refcount--; /* referrence count decrease by 1 */
if(0 == pTmp->refcount)
{
// WRITE_LOG_INFO("memunmap(): map node will be remove!\n");
/* delete this map node from pMMAPNode */
if(pTmp == pTMMAPNode)
{
pTMMAPNode = NULL;
}
else
{
pPre->next = pTmp->next;
}
/* munmap */
if(munmap((void *)pTmp->Start_V, pTmp->length) != 0 )
{
WRITE_LOG_INFO("memunmap(): munmap failed!\n");
}
free(pTmp);
}
return 0;
}
pPre = pTmp;
pTmp = pTmp->next;
}while(pTmp != NULL);
WRITE_LOG_ERROR("memunmap(): address have not been mmaped!\n");
return -1;
}
void * mmapfile(char* fn, unsigned long size)
{
int fd;
void * pShm = NULL;
if (fn == NULL)
{
return NULL;
}
/* Open the file. */
fd = open (fn, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG | O_SYNC);
if (fd == -1)
{
WRITE_LOG_DEBUG("Open file %s error: %i.\n",fn, errno );
return NULL;
}
/* Create the memory-mapping. */
pShm = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
close (fd);
if (pShm != NULL)
{
WRITE_LOG_DEBUG("Memory Map OK. Map File: %s, length:%#X, addr:0x%08lX",
fn, size, (unsigned long)pShm);
}
else
{
WRITE_LOG_DEBUG("Memory Map Failure. Map File %s, length:0x%08lX",
fn, size);
}
return pShm;
}
void * mmapfile_r(char* fn, unsigned long size)
{
int fd;
void * pShm = NULL;
if (fn == NULL)
{
return NULL;
}
/* Open the file. */
fd = open (fn, O_RDONLY | O_SYNC);
if (fd == -1)
{
WRITE_LOG_INFO("Open file %s error: %d.\n",fn, errno );
return NULL;
}
/* Create the memory-mapping. */
pShm = mmap(0, size, PROT_READ, MAP_SHARED, fd, 0);
close (fd);
if (pShm != NULL)
{
WRITE_LOG_DEBUG("Memory Map OK. Map File: %s, length:%#X, addr:0x%08lX\n",
fn, size, (unsigned long)pShm);
}
else
{
WRITE_LOG_DEBUG("Memory Map Failure. Map File %s, length:0x%08lX\n",
fn, size);
}
return pShm;
}

View file

@ -0,0 +1,33 @@
/* file name : memmap.h */
/* linux /dev/mem mmap support head file */
/* */
/* */
/* Copyright 2005 huawei com. */
/* Author :zhouaidi(42136) */
/* Create date: 2005-04-07 */
/* Modify history */
/* */
#ifndef __MEM_MAP_H__
#define __MEM_MAP_H__
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
extern void * memmap(unsigned long phy_addr, unsigned long size);
extern int memunmap(void * addr_mapped);
extern void * mmapfile(char* fn, unsigned int size);
extern void * mmapfile_r(char* fn, unsigned int size);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif