Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed ros_lib_kinetic
Diff: library/ScrpSlave.cpp
- Revision:
- 1:17051435cfc5
- Parent:
- 0:a8a56075e947
--- a/library/ScrpSlave.cpp Sat May 18 12:09:43 2019 +0000 +++ b/library/ScrpSlave.cpp Tue Jul 09 07:56:07 2019 +0000 @@ -3,48 +3,48 @@ #define STX 0x41 #define DMY 0xff -ScrpSlave::ScrpSlave(PinName TX1,PinName RX1,uint32_t addr):addr(addr){ - mode = 0; +ScrpSlave::ScrpSlave(PinName TX1,PinName RX1,uint32_t addr):address_(addr){ + mode_ = 0; init(TX1,RX1); } -ScrpSlave::ScrpSlave(PinName TX1,PinName RX1,PinName REDE1,uint32_t addr):addr(addr){ - mode = 1; - rede = new DigitalOut(REDE1); +ScrpSlave::ScrpSlave(PinName TX1,PinName RX1,PinName REDE1,uint32_t addr):address_(addr){ + mode_ = 1; + rede_ = new DigitalOut(REDE1); init(TX1,RX1); } -ScrpSlave::ScrpSlave(PinName TX1,PinName RX1,PinName TX2,PinName RX2,uint32_t addr):addr(addr){ - mode = 2; - serial[1] = new Serial(TX2,RX2,115200); - serial[1]->attach(callback(this,&ScrpSlave::port2),Serial::RxIrq); +ScrpSlave::ScrpSlave(PinName TX1,PinName RX1,PinName TX2,PinName RX2,uint32_t addr):address_(addr){ + mode_ = 2; + serial_[1] = new Serial(TX2,RX2,115200); + serial_[1]->attach(callback(this,&ScrpSlave::port2),Serial::RxIrq); init(TX1,RX1); } -ScrpSlave::ScrpSlave(PinName TX1,PinName RX1,PinName REDE1,PinName TX2,PinName RX2,uint32_t addr):addr(addr){ - mode = 3; - rede = new DigitalOut(REDE1); - serial[1] = new Serial(TX2,RX2,115200); - serial[1]->attach(callback(this,&ScrpSlave::port2),Serial::RxIrq); +ScrpSlave::ScrpSlave(PinName TX1,PinName RX1,PinName REDE1,PinName TX2,PinName RX2,uint32_t addr):address_(addr){ + mode_ = 3; + rede_ = new DigitalOut(REDE1); + serial_[1] = new Serial(TX2,RX2,115200); + serial_[1]->attach(callback(this,&ScrpSlave::port2),Serial::RxIrq); init(TX1,RX1); } void ScrpSlave::init(PinName TX,PinName RX){ - timeout = 100; - serial[0] = new Serial(TX,RX,115200); - serial[0]->attach(callback(this,&ScrpSlave::port1),Serial::RxIrq); - flash = new FlashIAP; - if(flash->init()==0){ - if(flash->read(&my_id,addr,1) != 0){ + timeout_ = 100; + serial_[0] = new Serial(TX,RX,115200); + serial_[0]->attach(callback(this,&ScrpSlave::port1),Serial::RxIrq); + flash_ = new FlashIAP; + if(flash_->init()==0){ + if(flash_->read(&my_id_,address_,1) != 0){ send(222,222,222); - my_id = 10; + my_id_ = 10; } }else{ send(111,111,111); - my_id = 10; + my_id_ = 10; } for(int i = 1;i<255;++i){ - procs[i] = 0; + procs_[i] = 0; } } @@ -58,16 +58,16 @@ void ScrpSlave::addCMD(uint8_t cmd, bool (*proc)(int rx_data, int& tx_data)){ if(cmd == 0 || cmd == 254 || cmd == 253)return; - procs[cmd] = proc; + procs_[cmd] = proc; } void ScrpSlave::setTimeout(int time){ - timeout = time; + timeout_ = time; } void ScrpSlave::changeID(uint8_t id){ - flash->erase(addr,flash->get_sector_size(addr)); - flash->program(&id,addr,1); + flash_->erase(address_,flash_->get_sector_size(address_)); + flash_->program(&id,address_,1); } int ScrpSlave::send(uint8_t id,uint8_t cmd,int16_t tx_data){ @@ -75,7 +75,7 @@ } int ScrpSlave::send2(uint8_t id,uint8_t cmd,int16_t tx_data){ - if(mode < 2)return -1; + if(mode_ < 2)return -1; return sending(1,id,cmd,tx_data); } @@ -84,13 +84,20 @@ uint8_t tx_dataH = tx_data >> 8; uint8_t tx_sum = id + cmd + tx_dataL + tx_dataH; - const uint8_t data[] = {DMY, STX, id, cmd, tx_dataL, tx_dataH, tx_sum}; - if(!serial[port]->writeable())return -1; - if(mode%2 == 1 && id == 0)rede->write(1); - for(int i = 0;i<7;i++){ - serial[port]->putc(data[i]); + const uint8_t data[] = {DMY, STX, id, cmd, tx_dataL, tx_dataH, tx_sum, DMY}; + if(!serial_[port]->writeable()){ + return -1; + } + if(mode_%2 == 1 && id == 0){ + rede_->write(1); } - if(mode%2 == 1 && id == 0)rede->write(0); + for(int i = 0;i<8;i++){ + serial_[port]->putc(data[i]); + } + while(!serial_[port]->writeable()); + if(mode_%2 == 1 && id == 0){ + rede_->write(0); + } int i = 0; bool received = false; @@ -98,14 +105,14 @@ uint8_t rx[5]={},sum = 0; Timer out; out.start(); - while(out.read_ms() < timeout && !received){ - while(serial[port]->readable()){ - if(serial[port]->getc() == STX && !stxflag){ + while(out.read_ms() < timeout_ && !received){ + while(serial_[port]->readable()){ + if(serial_[port]->getc() == STX && !stxflag){ stxflag = true; continue; } if(stxflag){ - rx[i] = serial[port]->getc(); + rx[i] = serial_[port]->getc(); sum += rx[i++]; } if(i > 4){/* @@ -121,7 +128,9 @@ } } out.stop(); - if(!received)return -1; + if(!received){ + return -1; + } return (rx[2] + (rx[3] << 8)); } @@ -130,57 +139,80 @@ int16_t rx_data; bool received = false; bool broadcast = false; - while(serial[port]->readable()){ - if(serial[port]->getc() != STX)continue; - uint8_t rx_id = serial[port]->getc(); - uint8_t tmp_rx_cmd = serial[port]->getc(); - uint8_t tmp_rx_dataL = serial[port]->getc(); - uint8_t tmp_rx_dataH = serial[port]->getc(); - uint8_t rx_sum = serial[port]->getc(); + while(serial_[port]->readable()){ + if(serial_[port]->getc() != STX)continue; + uint8_t rx_id = serial_[port]->getc(); + uint8_t tmp_rx_cmd = serial_[port]->getc(); + uint8_t tmp_rx_dataL = serial_[port]->getc(); + uint8_t tmp_rx_dataH = serial_[port]->getc(); + uint8_t rx_sum = serial_[port]->getc(); uint8_t sum = rx_id + tmp_rx_cmd + tmp_rx_dataL + tmp_rx_dataH; - if(sum != rx_sum)continue; + if(sum != rx_sum){ + continue; + } - if(rx_id == 255)broadcast = true; - else if(my_id == rx_id)broadcast = false; - else break; + if(rx_id == 255){ + broadcast = true; + }else if(my_id_ == rx_id){ + broadcast = false; + }else{ + break; + } rx_cmd = tmp_rx_cmd; rx_data = tmp_rx_dataL + ((int16_t)tmp_rx_dataH << 8); received = true; } - if(!received) return; + if(!received){ + return; + } int tx_data = rx_data; if(rx_cmd == 0){ tx_data = rx_data; }else if(rx_cmd == 254){ uint8_t new_id = rx_data; - my_id = new_id; + my_id_ = new_id; changeID(new_id); }else if(rx_cmd == 253){ - tx_data = my_id; + tx_data = my_id_; rx_cmd = 250; broadcast = false; - }else if(procs[rx_cmd] == 0 || !procs[rx_cmd](rx_data,tx_data))return; - if(broadcast)return; + }else if(procs_[rx_cmd] == 0 || !procs_[rx_cmd](rx_data,tx_data)){ + return; + } + if(broadcast){ + return; + } uint8_t tx_dataL = tx_data; uint8_t tx_dataH = tx_data >> 8; - uint8_t tx_sum = my_id + rx_cmd + tx_dataL + tx_dataH; + uint8_t tx_sum = my_id_ + rx_cmd + tx_dataL + tx_dataH; - const uint8_t data[] = {DMY, STX, my_id, rx_cmd, tx_dataL, tx_dataH, tx_sum}; - if(!serial[port]->writeable())return; - if(mode%2 == 1 && port == 0)rede->write(1); - for(int i = 0;i<7;i++){ - serial[port]->putc(data[i]); + const uint8_t data[] = {DMY, STX, my_id_, rx_cmd, tx_dataL, tx_dataH, tx_sum, DMY}; + if(!serial_[port]->writeable()){ + return; + } + if(mode_%2 == 1 && port == 0){ + rede_->write(1); } - if(mode%2 == 1 && port == 0)rede->write(0); + for(int i = 0;i<8;i++){ + serial_[port]->putc(data[i]); + } + while(!serial_[port]->writeable()); + if(mode_%2 == 1 && port == 0){ + rede_->write(0); + } return; } ScrpSlave::~ScrpSlave(){ - delete serial[0]; - delete flash; - if(mode%2 == 1)delete rede; - if(mode >= 2)delete serial[1]; + delete serial_[0]; + delete flash_; + if(mode_%2 == 1){ + delete rede_; + } + if(mode_ >= 2){ + delete serial_[1]; + } } \ No newline at end of file