// 1行毎にLEDの情報を送信 bool sendImage(serial_port& port) { char P[2] = "P"; for(int i = 0; i < NUM_LED; i++){ port.write_some(buffer(P)); //P信号を送信 char dev[3] = "\0\0"; //デバイスの番号, 行数を受け取る if(0 < port.read_some(buffer(dev))){ int dev_num = atoi(dev); printf("dev number[%d] : %s\n", dev_num, dev); //P信号を送信 port.write_some(buffer(P)); dev[0] = dev[1] = '\0'; if(0 < port.read_some(buffer(dev))){ int dev_row = atoi(dev); printf("dev row[%d] : %s\n", dev_row, dev); port.write_some(buffer(P)); //P信号を送信 makeLedArray(dev_row, 0); port.write_some(buffer(led_array)); printLedArray(); char C[2] = "\0"; if(0 < port.read_some(buffer(C)) && 'C' == C[0]){ //printf("\tC received : %s\n", C); port.write_some(buffer(P)); //P信号を送信 makeLedArray(dev_row, 1); port.write_some(buffer(led_array)); printLedArray(); } } } } //終了信号(F)を待って終了 char dev[2] = "\0"; while(1){ if(0 < port.read_some(buffer(dev)) && 'F' == dev[0]){ return true; } } }
// S信号,R信号によるハンドシェーク bool succeedS_R(serial_port& port) { //Sは'S' char S[2] = "S"; if(0 < port.write_some(buffer(S))){ printf("S sent successfully\n"); char R[2] = "0"; //Rを受信して,かつ'R'だったら if(0 < port.read_some(buffer(R)) && 'R' == R[0]){ return true; } } return false; }