![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
copy
SYN6288.h@1:8b32bcbc712a, 2019-11-13 (annotated)
- Committer:
- brainliang
- Date:
- Wed Nov 13 11:40:28 2019 +0000
- Revision:
- 1:8b32bcbc712a
- Child:
- 2:a2acba0829a8
syn6288
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
brainliang | 1:8b32bcbc712a | 1 | #include <string> |
brainliang | 1:8b32bcbc712a | 2 | typedef bool boolean; |
brainliang | 1:8b32bcbc712a | 3 | typedef std::string String; |
brainliang | 1:8b32bcbc712a | 4 | |
brainliang | 1:8b32bcbc712a | 5 | void voice_play(String value_, Serial* ser) { |
brainliang | 1:8b32bcbc712a | 6 | const char* value = value_.c_str(); |
brainliang | 1:8b32bcbc712a | 7 | int size = strlen(value); |
brainliang | 1:8b32bcbc712a | 8 | int data_length = 1+2+1+1+size; |
brainliang | 1:8b32bcbc712a | 9 | int* data = (int*)malloc(sizeof(int)*(data_length+1)); |
brainliang | 1:8b32bcbc712a | 10 | |
brainliang | 1:8b32bcbc712a | 11 | int start = 0xfd; |
brainliang | 1:8b32bcbc712a | 12 | int length = size + 3; |
brainliang | 1:8b32bcbc712a | 13 | int length_h = length / 256; |
brainliang | 1:8b32bcbc712a | 14 | int length_l = length % 256; |
brainliang | 1:8b32bcbc712a | 15 | int command = 0x01; |
brainliang | 1:8b32bcbc712a | 16 | int param = 0x01; |
brainliang | 1:8b32bcbc712a | 17 | |
brainliang | 1:8b32bcbc712a | 18 | data[0] = start; |
brainliang | 1:8b32bcbc712a | 19 | data[1] = length_h; |
brainliang | 1:8b32bcbc712a | 20 | data[2] = length_l; |
brainliang | 1:8b32bcbc712a | 21 | data[3] = command; |
brainliang | 1:8b32bcbc712a | 22 | data[4] = param; |
brainliang | 1:8b32bcbc712a | 23 | |
brainliang | 1:8b32bcbc712a | 24 | for (int i=5; i<5+size; i++) { |
brainliang | 1:8b32bcbc712a | 25 | data[i] = value[i-5]; |
brainliang | 1:8b32bcbc712a | 26 | } |
brainliang | 1:8b32bcbc712a | 27 | |
brainliang | 1:8b32bcbc712a | 28 | // calculate check bit |
brainliang | 1:8b32bcbc712a | 29 | int check_bit = data[0]; |
brainliang | 1:8b32bcbc712a | 30 | for (int i=1; i<data_length; i++) { |
brainliang | 1:8b32bcbc712a | 31 | check_bit ^= data[i]; |
brainliang | 1:8b32bcbc712a | 32 | } |
brainliang | 1:8b32bcbc712a | 33 | data[data_length] = check_bit; |
brainliang | 1:8b32bcbc712a | 34 | |
brainliang | 1:8b32bcbc712a | 35 | for (int i=0; i<=data_length; i++) { |
brainliang | 1:8b32bcbc712a | 36 | ser->putc(data[i]); |
brainliang | 1:8b32bcbc712a | 37 | } |
brainliang | 1:8b32bcbc712a | 38 | |
brainliang | 1:8b32bcbc712a | 39 | free(data); |
brainliang | 1:8b32bcbc712a | 40 | |
brainliang | 1:8b32bcbc712a | 41 | //int recv = ser->getc(); |
brainliang | 1:8b32bcbc712a | 42 | //PC.printf("%c", recv); |
brainliang | 1:8b32bcbc712a | 43 | //int done = ser->getc(); |
brainliang | 1:8b32bcbc712a | 44 | //PC.printf("%c", done); |
brainliang | 1:8b32bcbc712a | 45 | } |