wowow

Dependencies:   C12832 ESP-call FXOS8700Q

Committer:
201710861
Date:
Mon Jun 13 13:43:28 2022 +0000
Revision:
1:e34e9d7420a0
Parent:
0:851ebdb20ae7
The program used during demo; This is the program used on the board with Esp attached

Who changed what in which revision?

UserRevisionLine numberNew contents of line
201710861 0:851ebdb20ae7 1 #include "mbed.h"
201710861 0:851ebdb20ae7 2 int test;
201710861 0:851ebdb20ae7 3 using namespace std;
201710861 0:851ebdb20ae7 4 Thread thread1;
201710861 0:851ebdb20ae7 5 Thread thread2;
201710861 0:851ebdb20ae7 6 Thread thread3;
201710861 0:851ebdb20ae7 7 Mutex mutex;
201710861 0:851ebdb20ae7 8 #define ligthmultiple 7
201710861 0:851ebdb20ae7 9 int interval = 0;
201710861 0:851ebdb20ae7 10 bool ack=false;
201710861 0:851ebdb20ae7 11 struct ByteData{
201710861 0:851ebdb20ae7 12 uint8_t* data;
201710861 0:851ebdb20ae7 13 int length;
201710861 0:851ebdb20ae7 14 ByteData(uint8_t* Data,int Length):data(Data),length(Length){};
201710861 0:851ebdb20ae7 15 ByteData(){};
201710861 0:851ebdb20ae7 16 };
201710861 0:851ebdb20ae7 17 struct Datatype{
201710861 0:851ebdb20ae7 18 char* typename4;
201710861 0:851ebdb20ae7 19 char* type2name4;
201710861 0:851ebdb20ae7 20 Datatype(char* type1,char* type2):typename4(type1),type2name4(type2){};
201710861 0:851ebdb20ae7 21 Datatype(){};
201710861 0:851ebdb20ae7 22 };
201710861 0:851ebdb20ae7 23 struct Datastorage{
201710861 0:851ebdb20ae7 24 uint8_t* data = new uint8_t[3];
201710861 0:851ebdb20ae7 25 bool check;
201710861 0:851ebdb20ae7 26 Datastorage(uint8_t* Data,bool Check):data(Data),check(Check){};
201710861 0:851ebdb20ae7 27 Datastorage(){};
201710861 0:851ebdb20ae7 28 };
201710861 0:851ebdb20ae7 29 ByteData DatatoByte(void* data, int length, int typesize, char* typename4, const char* type2name4) {
201710861 0:851ebdb20ae7 30 int a = 0;
201710861 0:851ebdb20ae7 31 int Extensionlength2 = sizeof(type2name4); // img pdf
201710861 0:851ebdb20ae7 32 uint8_t* byte = new uint8_t[length*typesize + 1 + 8 + 2];
201710861 0:851ebdb20ae7 33 switch (typesize) {
201710861 0:851ebdb20ae7 34 case 1:
201710861 0:851ebdb20ae7 35 for (; a < length; a++) {
201710861 0:851ebdb20ae7 36 byte[a] = *((uint8_t*)data + sizeof(uint8_t) * a);
201710861 0:851ebdb20ae7 37 }
201710861 0:851ebdb20ae7 38 case 2:
201710861 0:851ebdb20ae7 39 for (; a < length; a++) {
201710861 0:851ebdb20ae7 40 byte[a] = *((uint16_t*)data + sizeof(uint8_t) * a);
201710861 0:851ebdb20ae7 41 byte[a + 1] = *((uint16_t*)data + sizeof(uint8_t) * a) >> 4;
201710861 0:851ebdb20ae7 42 a++;
201710861 0:851ebdb20ae7 43 }
201710861 0:851ebdb20ae7 44 case 4:
201710861 0:851ebdb20ae7 45 for (; a < length; a++) {
201710861 0:851ebdb20ae7 46 byte[a] = *((uint32_t*)data + sizeof(uint8_t) * a);
201710861 0:851ebdb20ae7 47 byte[a + 1] = *((uint32_t*)data + sizeof(uint8_t) * a) >> 4;
201710861 0:851ebdb20ae7 48 byte[a + 2] = *((uint32_t*)data + sizeof(uint8_t) * a) >> 8;
201710861 0:851ebdb20ae7 49 byte[a + 3] = *((uint32_t*)data + sizeof(uint8_t) * a) >> 12;
201710861 0:851ebdb20ae7 50 a += 3;
201710861 0:851ebdb20ae7 51 }
201710861 0:851ebdb20ae7 52 case 8:
201710861 0:851ebdb20ae7 53 for (; a < length; a++) {
201710861 0:851ebdb20ae7 54 byte[a] = *((uint64_t*)data + sizeof(uint8_t) * a);
201710861 0:851ebdb20ae7 55 byte[a + 1] = *((uint64_t*)data + sizeof(uint8_t) * a) >> 4;
201710861 0:851ebdb20ae7 56 byte[a + 2] = *((uint64_t*)data + sizeof(uint8_t) * a) >> 8;
201710861 0:851ebdb20ae7 57 byte[a + 3] = *((uint64_t*)data + sizeof(uint8_t) * a) >> 12;
201710861 0:851ebdb20ae7 58 byte[a + 4] = *((uint64_t*)data + sizeof(uint8_t) * a) >> 16;
201710861 0:851ebdb20ae7 59 byte[a + 5] = *((uint64_t*)data + sizeof(uint8_t) * a) >> 20;
201710861 0:851ebdb20ae7 60 byte[a + 6] = *((uint64_t*)data + sizeof(uint8_t) * a) >> 24;
201710861 0:851ebdb20ae7 61 byte[a + 7] = *((uint64_t*)data + sizeof(uint8_t) * a) >> 32;
201710861 0:851ebdb20ae7 62 a += 7;
201710861 0:851ebdb20ae7 63 }
201710861 0:851ebdb20ae7 64 }
201710861 0:851ebdb20ae7 65 byte[a++] = uint8_t('.');
201710861 0:851ebdb20ae7 66 printf("%0x", uint8_t('.'));
201710861 0:851ebdb20ae7 67 for (int i = 0; a < length + 5; a++, i++) {
201710861 0:851ebdb20ae7 68 byte[a] = uint8_t((typename4[i]));
201710861 0:851ebdb20ae7 69 }
201710861 0:851ebdb20ae7 70 for (int i = 0; a < length + 9; a++, i++) {
201710861 0:851ebdb20ae7 71 byte[a] = uint8_t((type2name4[i]));
201710861 0:851ebdb20ae7 72 }
201710861 0:851ebdb20ae7 73 byte[a++] = uint8_t('.');
201710861 0:851ebdb20ae7 74 byte[a++] = uint8_t('.');
201710861 0:851ebdb20ae7 75 for (int i = 0; i < a; i++) {
201710861 0:851ebdb20ae7 76 printf("%02x = %c\n", byte[i],char(byte[i]));
201710861 0:851ebdb20ae7 77 }
201710861 0:851ebdb20ae7 78 return ByteData(byte, a);
201710861 0:851ebdb20ae7 79 }
201710861 0:851ebdb20ae7 80 Datatype ExtractionDatatype(uint8_t* reciveData,int datalength){
201710861 0:851ebdb20ae7 81 char *type1 = (char*)malloc(sizeof(char)*4);
201710861 0:851ebdb20ae7 82 char *type2 = (char*)malloc(sizeof(char)*4);
201710861 0:851ebdb20ae7 83 for(int i = datalength - 8,j=0; i < datalength-4;i++,j++){
201710861 0:851ebdb20ae7 84 type1[j] = reciveData[i];
201710861 0:851ebdb20ae7 85 }
201710861 0:851ebdb20ae7 86 for(int i = datalength - 4,j=0; i < datalength;i++,j++){
201710861 0:851ebdb20ae7 87 type2[j] = reciveData[i];
201710861 0:851ebdb20ae7 88 }
201710861 0:851ebdb20ae7 89 return Datatype(type1,type2);
201710861 0:851ebdb20ae7 90 }
201710861 0:851ebdb20ae7 91 void Sending(uint8_t Data1, uint8_t Data2, uint8_t Data3,DigitalOut D) {
201710861 0:851ebdb20ae7 92 bool* send = new bool[32];
201710861 0:851ebdb20ae7 93 uint8_t checksum = Data1 + Data2 + Data3;
201710861 0:851ebdb20ae7 94 printf("%c,%c ,%c\n",(char)Data1,(char)Data2,(char)Data3);
201710861 0:851ebdb20ae7 95 uint8_t Data[4] = { Data1, Data2, Data3, checksum};
201710861 0:851ebdb20ae7 96 printf("%s",Data);
201710861 0:851ebdb20ae7 97 for (int i = 0,j=0; i < 4; i++) {
201710861 0:851ebdb20ae7 98 send[j++] = (Data[i] & 1)/1;
201710861 0:851ebdb20ae7 99 send[j++] = (Data[i] & 2)/2;
201710861 0:851ebdb20ae7 100 send[j++] = (Data[i] & 4)/4;
201710861 0:851ebdb20ae7 101 send[j++] = (Data[i] & 8)/8;
201710861 0:851ebdb20ae7 102 send[j++] = (Data[i] & 16)/16;
201710861 0:851ebdb20ae7 103 send[j++] = (Data[i] & 32)/32;
201710861 0:851ebdb20ae7 104 send[j++] = (Data[i] & 64)/64;
201710861 0:851ebdb20ae7 105 send[j++] = (Data[i] & 128)/128;
201710861 0:851ebdb20ae7 106 /*send[j++] = (Data[i] & 128)/128;
201710861 0:851ebdb20ae7 107 send[j++] = (Data[i] & 64)/64;
201710861 0:851ebdb20ae7 108 send[j++] = (Data[i] & 32)/32;
201710861 0:851ebdb20ae7 109 send[j++] = (Data[i] & 16)/16;
201710861 0:851ebdb20ae7 110 send[j++] = (Data[i] & 8)/8;
201710861 0:851ebdb20ae7 111 send[j++] = (Data[i] & 4)/4;
201710861 0:851ebdb20ae7 112 send[j++] = (Data[i] & 2)/2;
201710861 0:851ebdb20ae7 113 send[j++] = (Data[i] & 1)/1;*/
201710861 0:851ebdb20ae7 114 }
201710861 0:851ebdb20ae7 115 printf("now really sendingready\r\n");
201710861 0:851ebdb20ae7 116 D = 1;
201710861 0:851ebdb20ae7 117 thread_sleep_for(interval*10);
201710861 0:851ebdb20ae7 118 printf("now really sending\r\n");
201710861 0:851ebdb20ae7 119 D = 0;
201710861 0:851ebdb20ae7 120 thread_sleep_for(interval);
201710861 0:851ebdb20ae7 121 for(int j = 31;j >=0;j--){
201710861 0:851ebdb20ae7 122 D = send[j];
201710861 0:851ebdb20ae7 123 thread_sleep_for(interval);
201710861 0:851ebdb20ae7 124 }
201710861 0:851ebdb20ae7 125 D = 0;
201710861 0:851ebdb20ae7 126 for(int j = 31;j >=0;j--){
201710861 0:851ebdb20ae7 127 printf("%d",send[j]);
201710861 0:851ebdb20ae7 128 }
201710861 0:851ebdb20ae7 129 }
201710861 0:851ebdb20ae7 130 void onoff(DigitalOut* D){
201710861 0:851ebdb20ae7 131 while(true){
201710861 0:851ebdb20ae7 132 thread_sleep_for(interval);
201710861 0:851ebdb20ae7 133 *D = 1;
201710861 0:851ebdb20ae7 134 thread_sleep_for(interval);
201710861 0:851ebdb20ae7 135 *D = 0;
201710861 0:851ebdb20ae7 136 }
201710861 0:851ebdb20ae7 137 }
201710861 0:851ebdb20ae7 138 void Recvack(AnalogIn* A){
201710861 0:851ebdb20ae7 139 float val[8];
201710861 0:851ebdb20ae7 140 bool test = true;
201710861 0:851ebdb20ae7 141 uint8_t result = 0;
201710861 0:851ebdb20ae7 142 while(true){
201710861 0:851ebdb20ae7 143 printf("start recvack\n\r");
201710861 0:851ebdb20ae7 144 val[0] = A->read() * ligthmultiple;
201710861 0:851ebdb20ae7 145 printf("wow\n\r");
201710861 0:851ebdb20ae7 146 for(int i = 0;i<8;i++){
201710861 0:851ebdb20ae7 147 val[i] = A->read() * ligthmultiple;
201710861 0:851ebdb20ae7 148 thread_sleep_for(interval);
201710861 0:851ebdb20ae7 149 }
201710861 0:851ebdb20ae7 150 for(int i = 0;i<8;i+=2){
201710861 0:851ebdb20ae7 151 test &= (val[i] > 0.5 )? true : false;
201710861 0:851ebdb20ae7 152 printf("%d",(bool)val[i]);
201710861 0:851ebdb20ae7 153 }
201710861 0:851ebdb20ae7 154 if(test)
201710861 0:851ebdb20ae7 155 printf("wow3\n\r");
201710861 0:851ebdb20ae7 156 return;
201710861 0:851ebdb20ae7 157 /*val[0] = (val[0] > 0.5 )? true : false;*/
201710861 0:851ebdb20ae7 158 thread_sleep_for(interval*2);
201710861 0:851ebdb20ae7 159 /*if(true == val[0]){
201710861 0:851ebdb20ae7 160 printf("==============");
201710861 0:851ebdb20ae7 161 for(int i = 0;i<8;i++){
201710861 0:851ebdb20ae7 162 val[i] = A->read() * ligthmultiple;
201710861 0:851ebdb20ae7 163 val[i] = (val[i] > 0.5 )? true : false;
201710861 0:851ebdb20ae7 164 thread_sleep_for(interval);
201710861 0:851ebdb20ae7 165 }
201710861 0:851ebdb20ae7 166 result |= (int)val[0];
201710861 0:851ebdb20ae7 167 result |= (int)val[1]*2;
201710861 0:851ebdb20ae7 168 result |= (int)val[2]*4;
201710861 0:851ebdb20ae7 169 result |= (int)val[3]*8;
201710861 0:851ebdb20ae7 170 result |= (int)val[4]*16;
201710861 0:851ebdb20ae7 171 result |= (int)val[5]*32;
201710861 0:851ebdb20ae7 172 result |= (int)val[6]*64;
201710861 0:851ebdb20ae7 173 result |= (int)val[7]*128;
201710861 0:851ebdb20ae7 174 if(result == 0x55){
201710861 0:851ebdb20ae7 175 printf("scuuscusc");
201710861 0:851ebdb20ae7 176 ack = true;
201710861 0:851ebdb20ae7 177 printf("start recvack");
201710861 0:851ebdb20ae7 178 }
201710861 0:851ebdb20ae7 179 }*/
201710861 0:851ebdb20ae7 180 }
201710861 0:851ebdb20ae7 181 }
201710861 0:851ebdb20ae7 182 bool Synchronizesender(DigitalOut D,AnalogIn A){
201710861 0:851ebdb20ae7 183 thread1.start(callback(onoff, &D));
201710861 0:851ebdb20ae7 184 thread2.start(callback(Recvack, &A));
201710861 0:851ebdb20ae7 185 printf("nb");
201710861 0:851ebdb20ae7 186 thread2.join();
201710861 0:851ebdb20ae7 187 D = 0;
201710861 0:851ebdb20ae7 188 printf("hie");
201710861 0:851ebdb20ae7 189 thread1.terminate();
201710861 0:851ebdb20ae7 190 D = 0;
201710861 0:851ebdb20ae7 191 return true;
201710861 0:851ebdb20ae7 192 /*if(ack == true){
201710861 0:851ebdb20ae7 193 ack = false;
201710861 0:851ebdb20ae7 194 return true;
201710861 0:851ebdb20ae7 195 }else{
201710861 0:851ebdb20ae7 196 return false;
201710861 0:851ebdb20ae7 197 } */
201710861 0:851ebdb20ae7 198 }
201710861 0:851ebdb20ae7 199 void Findclock(AnalogIn *A){
201710861 0:851ebdb20ae7 200 float val;
201710861 0:851ebdb20ae7 201 bool start;
201710861 0:851ebdb20ae7 202 bool result;
201710861 0:851ebdb20ae7 203 int Cycle;
201710861 0:851ebdb20ae7 204 int intervaltime;
201710861 0:851ebdb20ae7 205 Timer t;
201710861 0:851ebdb20ae7 206 t.reset();
201710861 0:851ebdb20ae7 207 printf("now find interval\n\r");
201710861 0:851ebdb20ae7 208 while(true){
201710861 0:851ebdb20ae7 209 val = A->read() * ligthmultiple;
201710861 0:851ebdb20ae7 210 if(val < 0.5){
201710861 0:851ebdb20ae7 211 break;
201710861 0:851ebdb20ae7 212 }
201710861 0:851ebdb20ae7 213 }
201710861 0:851ebdb20ae7 214 while(true){
201710861 0:851ebdb20ae7 215 val = A->read() * ligthmultiple;
201710861 0:851ebdb20ae7 216 if(val > 0.5){
201710861 0:851ebdb20ae7 217 t.start();
201710861 0:851ebdb20ae7 218 break;
201710861 0:851ebdb20ae7 219 }
201710861 0:851ebdb20ae7 220 }
201710861 0:851ebdb20ae7 221 while(true){
201710861 0:851ebdb20ae7 222 val = A->read() * ligthmultiple;
201710861 0:851ebdb20ae7 223 if(val < 0.5){
201710861 0:851ebdb20ae7 224 t.stop();
201710861 0:851ebdb20ae7 225 interval = t.read_ms();
201710861 0:851ebdb20ae7 226 break;
201710861 0:851ebdb20ae7 227 }
201710861 0:851ebdb20ae7 228 }
201710861 0:851ebdb20ae7 229 t.reset();
201710861 0:851ebdb20ae7 230 while(true){
201710861 0:851ebdb20ae7 231 val = A->read() * ligthmultiple;
201710861 0:851ebdb20ae7 232 if(val < 0.5){
201710861 0:851ebdb20ae7 233 break;
201710861 0:851ebdb20ae7 234 }
201710861 0:851ebdb20ae7 235 }
201710861 0:851ebdb20ae7 236 while(true){
201710861 0:851ebdb20ae7 237 val = A->read() * ligthmultiple;
201710861 0:851ebdb20ae7 238 if(val > 0.5){
201710861 0:851ebdb20ae7 239 t.start();
201710861 0:851ebdb20ae7 240 break;
201710861 0:851ebdb20ae7 241 }
201710861 0:851ebdb20ae7 242 }
201710861 0:851ebdb20ae7 243 while(true){
201710861 0:851ebdb20ae7 244 val = A->read() * ligthmultiple;
201710861 0:851ebdb20ae7 245 if(val < 0.5){
201710861 0:851ebdb20ae7 246 t.stop();
201710861 0:851ebdb20ae7 247 intervaltime = t.read_ms();
201710861 0:851ebdb20ae7 248 break;
201710861 0:851ebdb20ae7 249 }
201710861 0:851ebdb20ae7 250 }
201710861 0:851ebdb20ae7 251 printf("interval time = %d,%d\n\r",intervaltime,interval);
201710861 0:851ebdb20ae7 252 printf("now find interval suc\n\r");
201710861 0:851ebdb20ae7 253 if(intervaltime==interval){
201710861 0:851ebdb20ae7 254 interval = interval - (interval %10);
201710861 0:851ebdb20ae7 255 printf("return");
201710861 0:851ebdb20ae7 256 }
201710861 0:851ebdb20ae7 257 else{
201710861 0:851ebdb20ae7 258 printf("fail");
201710861 0:851ebdb20ae7 259 }
201710861 0:851ebdb20ae7 260 }
201710861 0:851ebdb20ae7 261 void Findlight(AnalogIn* A){
201710861 0:851ebdb20ae7 262 float val;
201710861 0:851ebdb20ae7 263 float val2;
201710861 0:851ebdb20ae7 264 while(true){
201710861 0:851ebdb20ae7 265 val = A->read() * ligthmultiple;
201710861 0:851ebdb20ae7 266 printf("%2.2f\r\n",val);
201710861 0:851ebdb20ae7 267 if(val > 0.5){
201710861 0:851ebdb20ae7 268 break;
201710861 0:851ebdb20ae7 269 }
201710861 0:851ebdb20ae7 270 thread_sleep_for(100);
201710861 0:851ebdb20ae7 271 }
201710861 0:851ebdb20ae7 272 /*ack=true*/ // 이거 오류나는데 왜지 ?
201710861 0:851ebdb20ae7 273 return;
201710861 0:851ebdb20ae7 274 }
201710861 0:851ebdb20ae7 275 void SendAck(DigitalOut *D){
201710861 0:851ebdb20ae7 276 printf("start sendack");
201710861 0:851ebdb20ae7 277 *D = 0;
201710861 0:851ebdb20ae7 278 for(int i = 0;i < 20; i++ ){
201710861 0:851ebdb20ae7 279 *D = !(*D);
201710861 0:851ebdb20ae7 280 thread_sleep_for(interval);
201710861 0:851ebdb20ae7 281 }
201710861 0:851ebdb20ae7 282 }
201710861 0:851ebdb20ae7 283 bool Synchronizereciver(DigitalOut D,AnalogIn A){
201710861 0:851ebdb20ae7 284 float val[8];
201710861 0:851ebdb20ae7 285 Findlight(&A);
201710861 0:851ebdb20ae7 286 printf("find!!");
201710861 0:851ebdb20ae7 287 printf("now find interval");
201710861 0:851ebdb20ae7 288 thread3.start(callback(Findclock, &A));
201710861 0:851ebdb20ae7 289 /*Findclock(A); //왜 안되징*/
201710861 0:851ebdb20ae7 290 thread3.join();
201710861 0:851ebdb20ae7 291 printf("error?");//여기가 왜 sendack부터 보내버리고 안에있는걸 출력할까
201710861 0:851ebdb20ae7 292 /*SendAck(D);*/
201710861 0:851ebdb20ae7 293 printf("now send ack\n\r");
201710861 0:851ebdb20ae7 294 thread3.start(callback(SendAck, &D));
201710861 0:851ebdb20ae7 295 thread3.join();
201710861 0:851ebdb20ae7 296 printf("send ack suc\n\r");
201710861 0:851ebdb20ae7 297 ack = false;
201710861 0:851ebdb20ae7 298 return true;
201710861 0:851ebdb20ae7 299 }
201710861 0:851ebdb20ae7 300 Datastorage Recieving(AnalogIn sensor) {
201710861 0:851ebdb20ae7 301 float val[32];
201710861 0:851ebdb20ae7 302 uint8_t* Data = new uint8_t[4];
201710861 0:851ebdb20ae7 303 printf("ready\r\n");
201710861 0:851ebdb20ae7 304 printf("now really ready\r\n");
201710861 0:851ebdb20ae7 305 while(true){
201710861 0:851ebdb20ae7 306 if((sensor.read() * ligthmultiple)> 0.5){
201710861 0:851ebdb20ae7 307 break;
201710861 0:851ebdb20ae7 308 }
201710861 0:851ebdb20ae7 309 }
201710861 0:851ebdb20ae7 310 while(true){
201710861 0:851ebdb20ae7 311 if((sensor.read() * ligthmultiple)< 0.5){
201710861 0:851ebdb20ae7 312 thread_sleep_for(interval*1.5);
201710861 0:851ebdb20ae7 313 break;
201710861 0:851ebdb20ae7 314 }
201710861 0:851ebdb20ae7 315 }
201710861 0:851ebdb20ae7 316 for(int i = 0;i < 32;i++){
201710861 0:851ebdb20ae7 317 val[i] = sensor.read() * ligthmultiple;
201710861 0:851ebdb20ae7 318 thread_sleep_for(interval);
201710861 0:851ebdb20ae7 319 }
201710861 0:851ebdb20ae7 320 for(int i = 0;i < 32;i++){
201710861 0:851ebdb20ae7 321 val[i] = (val[i] > 0.5 )? true : false;
201710861 0:851ebdb20ae7 322 }
201710861 0:851ebdb20ae7 323 printf("now receive = ");
201710861 0:851ebdb20ae7 324 for(int i = 0;i < 32 ;i++){
201710861 0:851ebdb20ae7 325 printf("%d",(int)val[i]);
201710861 0:851ebdb20ae7 326 }
201710861 0:851ebdb20ae7 327 int j = 4;
201710861 0:851ebdb20ae7 328 for (; j >= 0; j--) {
201710861 0:851ebdb20ae7 329 Data[j] = 0;
201710861 0:851ebdb20ae7 330 Data[j] |= (int)val[j * 8 + 7];
201710861 0:851ebdb20ae7 331 Data[j] |= (int)val[j * 8 + 6] * 2;
201710861 0:851ebdb20ae7 332 Data[j] |= (int)val[j * 8 + 5] * 4;
201710861 0:851ebdb20ae7 333 Data[j] |= (int)val[j * 8 + 4] * 8;
201710861 0:851ebdb20ae7 334 Data[j] |= (int)val[j * 8 + 3] * 16;
201710861 0:851ebdb20ae7 335 Data[j] |= (int)val[j * 8 + 2] * 32;
201710861 0:851ebdb20ae7 336 Data[j] |= (int)val[j * 8 + 1] * 64;
201710861 0:851ebdb20ae7 337 Data[j] |= (int)val[j * 8] * 128;
201710861 0:851ebdb20ae7 338 }
201710861 0:851ebdb20ae7 339 printf("%c%c%c",(char)Data[3],(char)Data[2],(char)Data[1]);
201710861 0:851ebdb20ae7 340 printf("=%0x%0x%0x",Data[3],Data[2],Data[1]);
201710861 0:851ebdb20ae7 341 if (Data[0] == (Data[1] + Data[2] + Data[3])) {
201710861 0:851ebdb20ae7 342 //SendSucData();
201710861 0:851ebdb20ae7 343 Datastorage returnvalue;
201710861 0:851ebdb20ae7 344 returnvalue.data[0] = Data[3];
201710861 0:851ebdb20ae7 345 returnvalue.data[1] = Data[2];
201710861 0:851ebdb20ae7 346 returnvalue.data[2] = Data[1];
201710861 0:851ebdb20ae7 347 returnvalue.check = true;
201710861 0:851ebdb20ae7 348 return returnvalue;
201710861 0:851ebdb20ae7 349 }
201710861 0:851ebdb20ae7 350 else {
201710861 0:851ebdb20ae7 351 return Datastorage(Data,false);
201710861 0:851ebdb20ae7 352 //SendFailData();
201710861 0:851ebdb20ae7 353 }
201710861 0:851ebdb20ae7 354 //32bit
201710861 0:851ebdb20ae7 355 }
201710861 0:851ebdb20ae7 356 void send(DigitalOut D,AnalogIn sensor){
201710861 0:851ebdb20ae7 357 interval = 100; //이거 임시
201710861 0:851ebdb20ae7 358 char* inputvalue = new char[50];
201710861 0:851ebdb20ae7 359 char* name = new char[4];
201710861 0:851ebdb20ae7 360 name = (char*)"char";
201710861 0:851ebdb20ae7 361 printf("hellow input here\n\r");
201710861 0:851ebdb20ae7 362 scanf("%s", inputvalue);
201710861 0:851ebdb20ae7 363 printf("input interval speed\n\r");
201710861 0:851ebdb20ae7 364 scanf("%d", &interval);
201710861 0:851ebdb20ae7 365 printf("success\n");
201710861 0:851ebdb20ae7 366 ByteData send = DatatoByte(inputvalue, strlen(inputvalue),sizeof(inputvalue[0]),name,"null");
201710861 0:851ebdb20ae7 367 if(!Synchronizesender(D,sensor)){
201710861 0:851ebdb20ae7 368 printf("fail sending");
201710861 0:851ebdb20ae7 369 }
201710861 0:851ebdb20ae7 370 else{
201710861 0:851ebdb20ae7 371 int nulldata = send.length%3;
201710861 0:851ebdb20ae7 372 printf("now sending\n");
201710861 0:851ebdb20ae7 373 thread_sleep_for(interval*5);
201710861 0:851ebdb20ae7 374 //scanf("%d",&test);
201710861 0:851ebdb20ae7 375 printf("........\n");
201710861 0:851ebdb20ae7 376 for(int j = 0; j < send.length;j++){
201710861 0:851ebdb20ae7 377 printf("{%d}{%c=%0x}", j,send.data[j],send.data[j]);
201710861 0:851ebdb20ae7 378 }
201710861 0:851ebdb20ae7 379 printf("........\n");
201710861 0:851ebdb20ae7 380 printf("sendlength =%d,cycle = %d",send.length,send.length/3);
201710861 0:851ebdb20ae7 381 printf("........\n");
201710861 0:851ebdb20ae7 382 int i = 0;
201710861 0:851ebdb20ae7 383 for(; i < send.length-nulldata;){
201710861 0:851ebdb20ae7 384 printf("==%c,%c,%c-cycle = %d-==",send.data[i],send.data[i+1],send.data[i+2],i);
201710861 0:851ebdb20ae7 385 Sending(send.data[i],send.data[i+1],send.data[i+2],D);
201710861 0:851ebdb20ae7 386 D = 0;
201710861 0:851ebdb20ae7 387 Recvack(&sensor);
201710861 0:851ebdb20ae7 388 D = 0;
201710861 0:851ebdb20ae7 389 if(ack == false){
201710861 0:851ebdb20ae7 390 thread_sleep_for(interval*30);
201710861 0:851ebdb20ae7 391 i+=3;
201710861 0:851ebdb20ae7 392 continue;
201710861 0:851ebdb20ae7 393 }
201710861 0:851ebdb20ae7 394 ack = false;
201710861 0:851ebdb20ae7 395 i+=3;
201710861 0:851ebdb20ae7 396 }
201710861 0:851ebdb20ae7 397 for(int j=0;j<1;){
201710861 0:851ebdb20ae7 398 switch(nulldata){
201710861 0:851ebdb20ae7 399 case 0:
201710861 0:851ebdb20ae7 400 Sending(0x00,0x00,0x00,D);
201710861 0:851ebdb20ae7 401 //Sendcheckbit
201710861 0:851ebdb20ae7 402 break;
201710861 0:851ebdb20ae7 403 case 1:
201710861 0:851ebdb20ae7 404 i++;
201710861 0:851ebdb20ae7 405 Sending(send.data[i],0x00,0x00,D);
201710861 0:851ebdb20ae7 406 //Sendcheckbit
201710861 0:851ebdb20ae7 407 break;
201710861 0:851ebdb20ae7 408 case 2:
201710861 0:851ebdb20ae7 409 i++;
201710861 0:851ebdb20ae7 410 Sending(send.data[i],send.data[i+1],0x00,D);
201710861 0:851ebdb20ae7 411 //Sendcheckbit
201710861 0:851ebdb20ae7 412 break;
201710861 0:851ebdb20ae7 413 }
201710861 0:851ebdb20ae7 414 D = 0;
201710861 0:851ebdb20ae7 415 Recvack(&sensor);
201710861 0:851ebdb20ae7 416 D = 0;
201710861 0:851ebdb20ae7 417 if(ack == false){
201710861 0:851ebdb20ae7 418 continue;
201710861 0:851ebdb20ae7 419 }
201710861 0:851ebdb20ae7 420 ack = false;
201710861 0:851ebdb20ae7 421 }
201710861 0:851ebdb20ae7 422 printf("send suc\n");
201710861 0:851ebdb20ae7 423 }
201710861 0:851ebdb20ae7 424 }
201710861 0:851ebdb20ae7 425 void recv(DigitalOut D,AnalogIn sensor){
201710861 0:851ebdb20ae7 426 uint8_t* reciveData = (uint8_t*)malloc(sizeof(uint8_t)*256);
201710861 0:851ebdb20ae7 427 Datastorage reciveData3;
201710861 0:851ebdb20ae7 428 int length;
201710861 0:851ebdb20ae7 429 printf("start\n");
201710861 0:851ebdb20ae7 430 if(Synchronizereciver(D,sensor)){
201710861 0:851ebdb20ae7 431 int i = 0;
201710861 0:851ebdb20ae7 432 printf("1now receiveing1\n");
201710861 0:851ebdb20ae7 433 thread_sleep_for(interval*7);
201710861 0:851ebdb20ae7 434 while(true){
201710861 0:851ebdb20ae7 435 printf("start recieve");
201710861 0:851ebdb20ae7 436 reciveData3 = Recieving(sensor);
201710861 0:851ebdb20ae7 437 if(!(reciveData3.check)){
201710861 0:851ebdb20ae7 438 printf("continue");
201710861 0:851ebdb20ae7 439 SendAck(&D);
201710861 0:851ebdb20ae7 440 continue;//연산으로 시간차이때문에 대기시간도 필요한데
201710861 0:851ebdb20ae7 441 }
201710861 0:851ebdb20ae7 442 else{
201710861 0:851ebdb20ae7 443 SendAck(&D);//sendfail
201710861 0:851ebdb20ae7 444 }
201710861 0:851ebdb20ae7 445 if(reciveData3.data[0] == 0x00)
201710861 0:851ebdb20ae7 446 length = i;
201710861 0:851ebdb20ae7 447 break;
201710861 0:851ebdb20ae7 448 if(reciveData3.data[1] == 0x00){
201710861 0:851ebdb20ae7 449 reciveData[i++] = reciveData3.data[0];
201710861 0:851ebdb20ae7 450 length = i;
201710861 0:851ebdb20ae7 451 break;
201710861 0:851ebdb20ae7 452 }
201710861 0:851ebdb20ae7 453 if(reciveData3.data[2] == 0x00){
201710861 0:851ebdb20ae7 454 reciveData[i++] = reciveData3.data[0];
201710861 0:851ebdb20ae7 455 reciveData[i++] = reciveData3.data[1];
201710861 0:851ebdb20ae7 456 length = i;
201710861 0:851ebdb20ae7 457 break;
201710861 0:851ebdb20ae7 458 }
201710861 0:851ebdb20ae7 459 reciveData[i++] = reciveData3.data[0];
201710861 0:851ebdb20ae7 460 reciveData[i++] = reciveData3.data[1];
201710861 0:851ebdb20ae7 461 reciveData[i++] = reciveData3.data[2];
201710861 0:851ebdb20ae7 462 }
201710861 0:851ebdb20ae7 463 Datatype type = ExtractionDatatype(reciveData,length);
201710861 0:851ebdb20ae7 464 printf("suc here\n");
201710861 0:851ebdb20ae7 465 for(int i = 0;i < length-8;i++){
201710861 0:851ebdb20ae7 466 printf("%c",reciveData[i]);
201710861 0:851ebdb20ae7 467 }
201710861 0:851ebdb20ae7 468 printf("suc here\n");
201710861 0:851ebdb20ae7 469 scanf("%d",&test);
201710861 0:851ebdb20ae7 470 }else{
201710861 0:851ebdb20ae7 471 printf("fail\n");
201710861 0:851ebdb20ae7 472 }
201710861 0:851ebdb20ae7 473 }