内核开发中,大多是面向对象的思想
本来想仿照内核,抽象出一个驱动加载初始化,用C++ 实现,后来发现,底层逻辑还是有点乱, 读写二级制部分,设备树部分,使用json 文本替代, 分析节点描述使用,但是这个封装,还勉强可用,传参,分析都已解决.platform gpio char dev 这个的逻辑关系还得在顺一下
#include "cJSON.h"
#include "cJSON_Utils.h"
#include <iostream>
#include <string>
#include <fstream>
#include <fcntl.h>
#include <sys/stat.h>
#include <typeinfo>
class file_attr{
public:
const char* name;
file_attr(const char*n):name(n){}
int32_t size(){
struct stat fs;
stat(name,&fs);
return fs.st_size;
}
};
class json: private file_attr{
public:
json(const char* n);
void print();
void find(const char* node,std::string& value);
void find(const char* node,int& value);
void find(const char* node,const char* subnode,std::string& value);
void find(const char* node,const char* subnode,int& value);
~json();
private:
cJSON* root;
FILE* fp;
char* buffer;
};
json::json(const char* n): file_attr(n){
fp = fopen(name,"r");
buffer = new char(this->size());
fread(buffer,this->size(),1,fp);
root = cJSON_Parse(buffer);
}
json::~json() {
delete[] buffer;
buffer = nullptr;
cJSON_free(root);
fclose(fp);
}
void json::print() {
std::cout << buffer << std::endl;
}
void json::find(const char *node, std::string & value) {
cJSON* ptr = cJSON_GetObjectItem(root,node);
if(ptr != nullptr){
value = std::string(ptr->valuestring);
}
}
void json::find(const char *node, int & value) {
cJSON* ptr = cJSON_GetObjectItem(root,node);
if(ptr != nullptr){
value = ptr->valueint;
}
}
void json::find(const char *node, const char *subnode, std::string &value) {
cJSON* ptr = cJSON_GetObjectItem(root,node);
if(ptr != nullptr) {
cJSON *sub_ptr = cJSON_GetObjectItem(ptr, subnode);
if(sub_ptr != nullptr)
value = std::string(sub_ptr->valuestring);
}
}
void json::find(const char *node, const char *subnode, int &value) {
cJSON* ptr = cJSON_GetObjectItem(root,node);
if(ptr != nullptr) {
cJSON *sub_ptr = cJSON_GetObjectItem(ptr, subnode);
if(sub_ptr != nullptr)
value = sub_ptr->valueint;
}
}