syn6288

Dependencies:   mbed

Committer:
brainliang
Date:
Wed Nov 13 11:40:28 2019 +0000
Revision:
1:8b32bcbc712a
syn6288

Who changed what in which revision?

UserRevisionLine numberNew 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 }