-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhal.c
147 lines (125 loc) · 1.86 KB
/
hal.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include "hal.h"
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#pragma warning(disable:4996)
DTYPE* device_open(char *device_name)
{
DTYPE *fp = fopen(device_name, "rb+");
return fp;
}
/*
硬件抽象层
关闭设备
*/
void device_close(DTYPE *fp)
{
fclose(fp);
}
/*
硬件抽象层
文件读操作
*/
bool device_read(DTYPE *fp, int pos, void *buffer, size_t size)
{
int nPos = fseek(fp, pos, SEEK_SET);
if (nPos == -1)
{
return false;
}
size_t sSize = fread(buffer, size, 1, fp);
if (sSize == 0)
{
if (feof(fp) != 0)
{
puts("Error : >> 已到文件末尾 <<");
}
return false;
}
return true;
}
/*
硬件抽象层
文件写操作
*/
bool device_write(DTYPE *fp, int pos, void *buffer, size_t size)
{
int nPos = fseek(fp, pos, SEEK_SET);
if (nPos == -1)
{
return false;
}
if (size == 0)
{
return true;
}
size_t sSize = fwrite(buffer, size, 1, fp);
if (sSize == 0)
{
printf("write error,error code : %d\r\n", ferror(fp));
if (feof(fp) != 0)
{
puts("Error : >> 已到文件末尾 <<");
}
return false;
}
return true;
}
//读设备信息
int _get_info(PDEVICE_INFO info)
{
struct stat st;
int ret = stat(DEVICE_NAME, &st);
info->size = st.st_size;
return 0;
}
/*
创建偏移数据文件设备
*/
bool create_offset_bin()
{
FILE *fp = fopen(OFFSET_DEVICE_NAME, "wb+");
if (fp == NULL)
{
return false;
}
puts("start write ...");
for (int i = 0; i < CONFIGFILESIZE; i++)
{
fputc(0, fp);
}
puts("write end!");
if (NULL != fp)
{
fclose(fp);
}
return true;
}
/*
创建数据文件
*/
bool create_data_bin()
{
FILE *fp = fopen(DEVICE_NAME, "wb+");
if (fp == NULL)
{
return false;
}
puts("start write ...");
for (int i = 0; i < DATAFILESIZE; i++)
{
fputc(-1, fp);
}
int nT = 0;
fseek(fp, 0, SEEK_SET);
if (fwrite(&nT, sizeof(nT), 1, fp) == 0)
{
return false;
}
puts("write end!");
if (NULL != fp)
{
fclose(fp);
}
return true;
}