Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
H
hddtempserial
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Oleg Nikulin
hddtempserial
Commits
930784b6
Commit
930784b6
authored
Jun 23, 2023
by
Oleg Nikulin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Разбиение прошивки на на разные файлы
parent
e66e6214
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
95 additions
and
72 deletions
+95
-72
crc.h
hddtempserial/crc.h
+68
-0
functions.h
hddtempserial/functions.h
+17
-0
hddtempserial.ino
hddtempserial/hddtempserial.ino
+10
-72
No files found.
hddtempserial/crc.h
0 → 100644
View file @
930784b6
#ifndef CRC_H_
#define CRC_H_
#include "functions.h"
const
unsigned
short
crc16table
[
256
]
=
{
0x0000
,
0xc0c1
,
0xc181
,
0x0140
,
0xc301
,
0x03c0
,
0x0280
,
0xc241
,
0xc601
,
0x06c0
,
0x0780
,
0xc741
,
0x0500
,
0xc5c1
,
0xc481
,
0x0440
,
0xcc01
,
0x0cc0
,
0x0d80
,
0xcd41
,
0x0f00
,
0xcfc1
,
0xce81
,
0x0e40
,
0x0a00
,
0xcac1
,
0xcb81
,
0x0b40
,
0xc901
,
0x09c0
,
0x0880
,
0xc841
,
0xd801
,
0x18c0
,
0x1980
,
0xd941
,
0x1b00
,
0xdbc1
,
0xda81
,
0x1a40
,
0x1e00
,
0xdec1
,
0xdf81
,
0x1f40
,
0xdd01
,
0x1dc0
,
0x1c80
,
0xdc41
,
0x1400
,
0xd4c1
,
0xd581
,
0x1540
,
0xd701
,
0x17c0
,
0x1680
,
0xd641
,
0xd201
,
0x12c0
,
0x1380
,
0xd341
,
0x1100
,
0xd1c1
,
0xd081
,
0x1040
,
0xf001
,
0x30c0
,
0x3180
,
0xf141
,
0x3300
,
0xf3c1
,
0xf281
,
0x3240
,
0x3600
,
0xf6c1
,
0xf781
,
0x3740
,
0xf501
,
0x35c0
,
0x3480
,
0xf441
,
0x3c00
,
0xfcc1
,
0xfd81
,
0x3d40
,
0xff01
,
0x3fc0
,
0x3e80
,
0xfe41
,
0xfa01
,
0x3ac0
,
0x3b80
,
0xfb41
,
0x3900
,
0xf9c1
,
0xf881
,
0x3840
,
0x2800
,
0xe8c1
,
0xe981
,
0x2940
,
0xeb01
,
0x2bc0
,
0x2a80
,
0xea41
,
0xee01
,
0x2ec0
,
0x2f80
,
0xef41
,
0x2d00
,
0xedc1
,
0xec81
,
0x2c40
,
0xe401
,
0x24c0
,
0x2580
,
0xe541
,
0x2700
,
0xe7c1
,
0xe681
,
0x2640
,
0x2200
,
0xe2c1
,
0xe381
,
0x2340
,
0xe101
,
0x21c0
,
0x2080
,
0xe041
,
0xa001
,
0x60c0
,
0x6180
,
0xa141
,
0x6300
,
0xa3c1
,
0xa281
,
0x6240
,
0x6600
,
0xa6c1
,
0xa781
,
0x6740
,
0xa501
,
0x65c0
,
0x6480
,
0xa441
,
0x6c00
,
0xacc1
,
0xad81
,
0x6d40
,
0xaf01
,
0x6fc0
,
0x6e80
,
0xae41
,
0xaa01
,
0x6ac0
,
0x6b80
,
0xab41
,
0x6900
,
0xa9c1
,
0xa881
,
0x6840
,
0x7800
,
0xb8c1
,
0xb981
,
0x7940
,
0xbb01
,
0x7bc0
,
0x7a80
,
0xba41
,
0xbe01
,
0x7ec0
,
0x7f80
,
0xbf41
,
0x7d00
,
0xbdc1
,
0xbc81
,
0x7c40
,
0xb401
,
0x74c0
,
0x7580
,
0xb541
,
0x7700
,
0xb7c1
,
0xb681
,
0x7640
,
0x7200
,
0xb2c1
,
0xb381
,
0x7340
,
0xb101
,
0x71c0
,
0x7080
,
0xb041
,
0x5000
,
0x90c1
,
0x9181
,
0x5140
,
0x9301
,
0x53c0
,
0x5280
,
0x9241
,
0x9601
,
0x56c0
,
0x5780
,
0x9741
,
0x5500
,
0x95c1
,
0x9481
,
0x5440
,
0x9c01
,
0x5cc0
,
0x5d80
,
0x9d41
,
0x5f00
,
0x9fc1
,
0x9e81
,
0x5e40
,
0x5a00
,
0x9ac1
,
0x9b81
,
0x5b40
,
0x9901
,
0x59c0
,
0x5880
,
0x9841
,
0x8801
,
0x48c0
,
0x4980
,
0x8941
,
0x4b00
,
0x8bc1
,
0x8a81
,
0x4a40
,
0x4e00
,
0x8ec1
,
0x8f81
,
0x4f40
,
0x8d01
,
0x4dc0
,
0x4c80
,
0x8c41
,
0x4400
,
0x84c1
,
0x8581
,
0x4540
,
0x8701
,
0x47c0
,
0x4680
,
0x8641
,
0x8201
,
0x42c0
,
0x4380
,
0x8341
,
0x4100
,
0x81c1
,
0x8081
,
0x4040
};
uint16_t
crc16_calc
(
uint8_t
*
data
,
uint16_t
len
)
{
uint16_t
crc
=
0xFFFF
;
uint8_t
nTemp
;
while
(
len
--
)
{
nTemp
=
*
data
++
^
crc
;
crc
>>=
8
;
crc
^=
crc16table
[
nTemp
];
}
return
crc
;
}
uint8_t
add_crc
(
uint8_t
*
buf
,
uint8_t
len
)
{
uint16_t
crc16
=
crc16_calc
(
buf
,
len
);
buf
[
len
]
=
shortMSByte
(
crc16
);
buf
[
len
+
1
]
=
shortLSByte
(
crc16
);
len
+=
2
;
return
len
;
}
#endif
\ No newline at end of file
hddtempserial/functions.h
0 → 100644
View file @
930784b6
#ifndef FUNCTIONS_H_
#define FUNCTIONS_H_
uint8_t
shortMSByte
(
uint16_t
shortVal
)
{
return
shortVal
>>
8
;
}
uint8_t
shortLSByte
(
uint16_t
shortVal
)
{
return
shortVal
&
0xff
;
}
uint16_t
bytesToShort
(
uint8_t
MSByte
,
uint8_t
LSByte
)
{
return
MSByte
<<
8
|
LSByte
;
}
#endif
\ No newline at end of file
hddtempserial/hddtempserial.ino
View file @
930784b6
#include "crc.h"
#include "functions.h"
#define FAN_COUNT 6 //Количество вентиляторов
#define CONTROL_COUNT 3 //Количество групп управления
#define BAUDRATE 19200 //Скорость serial порта
...
...
@@ -159,71 +162,6 @@ bool initialized = false;
const
unsigned
short
crc16table
[
256
]
=
{
0x0000
,
0xc0c1
,
0xc181
,
0x0140
,
0xc301
,
0x03c0
,
0x0280
,
0xc241
,
0xc601
,
0x06c0
,
0x0780
,
0xc741
,
0x0500
,
0xc5c1
,
0xc481
,
0x0440
,
0xcc01
,
0x0cc0
,
0x0d80
,
0xcd41
,
0x0f00
,
0xcfc1
,
0xce81
,
0x0e40
,
0x0a00
,
0xcac1
,
0xcb81
,
0x0b40
,
0xc901
,
0x09c0
,
0x0880
,
0xc841
,
0xd801
,
0x18c0
,
0x1980
,
0xd941
,
0x1b00
,
0xdbc1
,
0xda81
,
0x1a40
,
0x1e00
,
0xdec1
,
0xdf81
,
0x1f40
,
0xdd01
,
0x1dc0
,
0x1c80
,
0xdc41
,
0x1400
,
0xd4c1
,
0xd581
,
0x1540
,
0xd701
,
0x17c0
,
0x1680
,
0xd641
,
0xd201
,
0x12c0
,
0x1380
,
0xd341
,
0x1100
,
0xd1c1
,
0xd081
,
0x1040
,
0xf001
,
0x30c0
,
0x3180
,
0xf141
,
0x3300
,
0xf3c1
,
0xf281
,
0x3240
,
0x3600
,
0xf6c1
,
0xf781
,
0x3740
,
0xf501
,
0x35c0
,
0x3480
,
0xf441
,
0x3c00
,
0xfcc1
,
0xfd81
,
0x3d40
,
0xff01
,
0x3fc0
,
0x3e80
,
0xfe41
,
0xfa01
,
0x3ac0
,
0x3b80
,
0xfb41
,
0x3900
,
0xf9c1
,
0xf881
,
0x3840
,
0x2800
,
0xe8c1
,
0xe981
,
0x2940
,
0xeb01
,
0x2bc0
,
0x2a80
,
0xea41
,
0xee01
,
0x2ec0
,
0x2f80
,
0xef41
,
0x2d00
,
0xedc1
,
0xec81
,
0x2c40
,
0xe401
,
0x24c0
,
0x2580
,
0xe541
,
0x2700
,
0xe7c1
,
0xe681
,
0x2640
,
0x2200
,
0xe2c1
,
0xe381
,
0x2340
,
0xe101
,
0x21c0
,
0x2080
,
0xe041
,
0xa001
,
0x60c0
,
0x6180
,
0xa141
,
0x6300
,
0xa3c1
,
0xa281
,
0x6240
,
0x6600
,
0xa6c1
,
0xa781
,
0x6740
,
0xa501
,
0x65c0
,
0x6480
,
0xa441
,
0x6c00
,
0xacc1
,
0xad81
,
0x6d40
,
0xaf01
,
0x6fc0
,
0x6e80
,
0xae41
,
0xaa01
,
0x6ac0
,
0x6b80
,
0xab41
,
0x6900
,
0xa9c1
,
0xa881
,
0x6840
,
0x7800
,
0xb8c1
,
0xb981
,
0x7940
,
0xbb01
,
0x7bc0
,
0x7a80
,
0xba41
,
0xbe01
,
0x7ec0
,
0x7f80
,
0xbf41
,
0x7d00
,
0xbdc1
,
0xbc81
,
0x7c40
,
0xb401
,
0x74c0
,
0x7580
,
0xb541
,
0x7700
,
0xb7c1
,
0xb681
,
0x7640
,
0x7200
,
0xb2c1
,
0xb381
,
0x7340
,
0xb101
,
0x71c0
,
0x7080
,
0xb041
,
0x5000
,
0x90c1
,
0x9181
,
0x5140
,
0x9301
,
0x53c0
,
0x5280
,
0x9241
,
0x9601
,
0x56c0
,
0x5780
,
0x9741
,
0x5500
,
0x95c1
,
0x9481
,
0x5440
,
0x9c01
,
0x5cc0
,
0x5d80
,
0x9d41
,
0x5f00
,
0x9fc1
,
0x9e81
,
0x5e40
,
0x5a00
,
0x9ac1
,
0x9b81
,
0x5b40
,
0x9901
,
0x59c0
,
0x5880
,
0x9841
,
0x8801
,
0x48c0
,
0x4980
,
0x8941
,
0x4b00
,
0x8bc1
,
0x8a81
,
0x4a40
,
0x4e00
,
0x8ec1
,
0x8f81
,
0x4f40
,
0x8d01
,
0x4dc0
,
0x4c80
,
0x8c41
,
0x4400
,
0x84c1
,
0x8581
,
0x4540
,
0x8701
,
0x47c0
,
0x4680
,
0x8641
,
0x8201
,
0x42c0
,
0x4380
,
0x8341
,
0x4100
,
0x81c1
,
0x8081
,
0x4040
};
uint16_t
crc16_calc
(
uint8_t
*
data
,
uint16_t
len
)
{
uint16_t
crc
=
0xFFFF
;
uint8_t
nTemp
;
while
(
len
--
)
{
nTemp
=
*
data
++
^
crc
;
crc
>>=
8
;
crc
^=
crc16table
[
nTemp
];
}
return
crc
;
}
uint8_t
add_crc
(
uint8_t
*
buf
,
uint8_t
len
)
{
uint16_t
crc16
=
crc16_calc
(
buf
,
len
);
buf
[
len
]
=
crc16
>>
8
;
buf
[
len
+
1
]
=
crc16
&
0xff
;
len
+=
2
;
return
len
;
}
uint16_t
get_avg_rpm
(
fan
*
fan_ptr
)
{
uint32_t
avg_rpm
=
0
;
...
...
@@ -264,11 +202,11 @@ void process_command() {
//читаем команду
if
(
cmd_length
>
0
)
{
//принимаем оставшие
м
ся байты
//принимаем оставшиеся байты
uint8_t
bytes_read
=
Serial
.
readBytes
(
&
cmd_buffer
[
1
],
cmd_length
-
1
);
if
(
bytes_read
==
cmd_length
-
1
)
{
uint16_t
cmd_crc16
=
cmd_buffer
[
cmd_length
-
2
]
<<
8
|
cmd_buffer
[
cmd_length
-
1
]
;
uint16_t
cmd_crc16
=
bytesToShort
(
cmd_buffer
[
cmd_length
-
2
],
cmd_buffer
[
cmd_length
-
1
])
;
uint16_t
check_crc16
=
crc16_calc
(
cmd_buffer
,
cmd_length
-
2
);
if
(
cmd_crc16
==
check_crc16
)
{
...
...
@@ -292,9 +230,9 @@ void process_command() {
break
;
case
pc_command_codes
:
:
poll
:
control_a
.
temperature
=
cmd_buffer
[
1
]
<<
8
|
cmd_buffer
[
2
]
;
control_b
.
temperature
=
cmd_buffer
[
3
]
<<
8
|
cmd_buffer
[
4
]
;
control_c
.
temperature
=
cmd_buffer
[
5
]
<<
8
|
cmd_buffer
[
6
]
;
control_a
.
temperature
=
bytesToShort
(
cmd_buffer
[
1
],
cmd_buffer
[
2
])
;
control_b
.
temperature
=
bytesToShort
(
cmd_buffer
[
3
],
cmd_buffer
[
4
])
;
control_c
.
temperature
=
bytesToShort
(
cmd_buffer
[
5
],
cmd_buffer
[
6
])
;
if
(
initialized
)
response_buffer
[
0
]
=
arduino_response_codes
::
poll_ok
;
...
...
@@ -302,8 +240,8 @@ void process_command() {
response_buffer
[
0
]
=
arduino_response_codes
::
poll_noinit
;
for
(
int
i
=
0
;
i
<
FAN_COUNT
;
i
++
){
uint16_t
rpm
=
get_avg_rpm
(
&
fans
[
i
]);
response_buffer
[
i
*
2
+
1
]
=
rpm
>>
8
;
response_buffer
[
i
*
2
+
2
]
=
rpm
&
0xff
;
response_buffer
[
i
*
2
+
1
]
=
shortMSByte
(
rpm
)
;
response_buffer
[
i
*
2
+
2
]
=
shortLSByte
(
rpm
)
;
}
response_buffer
[
13
]
=
OCR1A
;
response_buffer
[
14
]
=
OCR2A
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment