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: DAQ mbed-rtos mbed
Module.cpp
- Committer:
- leysenkobe
- Date:
- 2014-04-23
- Revision:
- 0:6ee88b4152dc
- Child:
- 1:fa51edf89e71
File content as of revision 0:6ee88b4152dc:
#include "Module.h" Serial pl(USBTX, USBRX); Module::Module() { pl.baud(230400); //objects this->daq = new DummyDAQ(); this->uart = new Uart(this); //local variables this->ID[0] = 0; this->ID[1] = 1; this->IP[0] = 0xff; this->IP[1] = 0xff; this->IP[2] = 0xff; this->IP[3] = 0xff; this->version[0] = 0; this->version[1] = 0; this->enableData= false; this->packageSize = 20; this->sampleNumber = 0; this->sampleRate = 250; //default waarde - let op, digitale filters moeten herberekend worden bij het veranderen van de sampleRate this->dataPacket = NULL; this->wifiEnabled = false; this->creatDataPacket(); } Module::~Module(void) { delete uart; delete daq; } //main loop void Module::mainLoop(void) { this->sendAlivePacket(); } void Module::sendAlivePacket() { uint8_t *reserved = new uint8_t[2]; reserved[0] = 0x00; reserved[1] = 0x00; Packet *alive = new Packet(this->ID, PACKET_ALIVE, reserved); this->sendPacket(alive); } void Module::meting_thread() { if(this->dataPacket->addMeasurement(this->daq->measure())) { this->sampleNumber++; } else { //printf("false \n"); this->sendPacket(this->dataPacket); this->creatDataPacket(); } } //PACKET WORKER void Module::packetWorker(Packet *p) { switch(p->getCMD()) { //S2C packets case PACKET_ACK : this->sendPacket(p); break; case PACKET_NACK : this->sendPacket(p); break; case PACKET_ERROR : this->sendPacket(p); break; case PACKET_ALIVE : this->sendPacket(p); break; case PACKET_DATA : this->sendPacket(p); break; case PACKET_GET_IP_REPLY : this->sendPacket(p); break; //C2S packets case PACKET_INIT : this->HandleInit(p); break; case PACKET_ENABLE_DATA : this->HandleEnableData(p); break; case PACKET_CHANGE_IP : this->HandleChangeIP(p); break; case PACKET_REMOVE_IP : this->removeIP(); break; case PACKET_GET_IP : this->IpReply(); break; case PACKET_VERSION : this->VersionReply(); break; //case PACKET_VERSION_REPLY : --> zelf versturen! // break; case PACKET_SET_PACKAGE_SIZE : HandleSetPackageSize(p); break; case PACKET_GET_SETTINGS : this->SettingsReply(); break; //case PACKET_GET_SETTINGS_REPLY : --> moet verstuurd worden! // break; case PACKET_SET_ID : uint8_t *cmdData = p->getCMD_DATA(); this->ID[0] = cmdData[0]; this->ID[1] = cmdData[1]; delete cmdData; this->Acknowledge(); break; case PACKET_TEST_MODE : this->uart->send(p); //uitsturen via beide interfaces //this->wifi->send(p); break; case PACKET_LED_TEST_MODE : uint8_t *ledData = p->getCMD_DATA(); uint8_t ledInfo = ledData[0]; this->LedTest(ledInfo); delete ledData; break; default: /// packet dat ik binnen krijg !!!!! break; } delete p; } void Module::sendPacket(Packet *p) { if(wifiEnabled) { //this->wifi->send(p); } else { this->uart->send(p); } } void Module::creatDataPacket() { //printf("MAAK PACKET !! \n"); uint8_t *reserved = new uint8_t[2]; reserved[0] = 0x00; reserved[1] = 0x00; int activeChannels = 0; //Het aantal actieve kanalen int nActiveChannels = 0; //Voor te versturen in het datapakket (zie verder) for(int i = 0; i < 16; i++) { if(this->daq->ChannelEnabled(i) == true) { nActiveChannels++; activeChannels |= 1 << (15 - i); } } this->dataPacket = new Packet(this->ID,this->sampleNumber,this->packageSize,this->sampleRate,activeChannels,nActiveChannels,reserved); delete [] reserved; } void Module::HandleInit(Packet *p) { uint8_t cmdSize = p->getCMD_SIZE(); /* //eventueel controle nog uitvoeren.. if(cmdSize != 33){ Packet *error = new Packet(); this->sendPacket(error); delete packet; return; }*/ uint8_t *cmdData = p->getCMD_DATA(); uint8_t sampleRate = cmdData[0]; uint8_t channelGainByte; uint8_t channelEnabledByte; this->sampleRate = sampleRate; for(int i = 0; i < 16; i++){ channelGainByte = cmdData[1 + i * 2]; channelEnabledByte = cmdData[1 + i * 2 + 1]; switch(channelGainByte){ default: //0x00 this->daq->setChannelGain(i, 1); break; case 0x01: this->daq->setChannelGain(i, 10); break; case 0x02: this->daq->setChannelGain(i, 100); break; case 0x03: this->daq->setChannelGain(i, 1000); break; } if(channelEnabledByte == 0x01){ //enabled this->daq->enableChannel(i); } else{ //disabled this->daq->disableChannel(i); } } delete cmdData; } void Module::HandleEnableData(Packet *p){ uint8_t *data = p->getCMD_DATA(); if(data[0] == 0x00){ this->EnableData(); } else{ this->DisableData(); } delete data; } void Module::HandleSetPackageSize(Packet *p){ uint8_t *data = p->getCMD_DATA(); this->setPackageSize(data[0]); //data[0] = packageSize! delete data; } void Module::HandleChangeIP(Packet *p){ int cmdSize = p->getCMD_SIZE(); if(cmdSize != 4){ Packet *errorPacket = new Packet(this->ID); this->sendPacket(errorPacket); delete errorPacket; return; } uint8_t* data = p->getCMD_DATA(); this->setIP(data); delete data; } void Module::IpReply(){ uint8_t cmdDataLengte = 4; uint8_t *cmdData = new uint8_t[cmdDataLengte]; uint8_t *reserved = new uint8_t[2]; cmdData[0] = this->IP[0]; cmdData[1] = this->IP[1]; cmdData[2] = this->IP[2]; cmdData[3] = this->IP[3]; reserved[0] = 0x00; reserved[1] = 0x00; Packet *ipInfoPacket = new Packet(this->ID, PACKET_GET_IP_REPLY, cmdData, cmdDataLengte, reserved); this->sendPacket(ipInfoPacket); delete ipInfoPacket; delete reserved; delete cmdData; } void Module::VersionReply(){ uint8_t cmdDataLengte = 2; uint8_t *cmdData = new uint8_t[cmdDataLengte]; uint8_t *reserved = new uint8_t[2]; cmdData[0] = this->version[0]; cmdData[1] = this->version[1]; reserved[0] = 0x00; reserved[1] = 0x00; Packet *versionPacket = new Packet(this->ID, PACKET_VERSION_REPLY, cmdData, cmdDataLengte, reserved); this->sendPacket(versionPacket); delete reserved; delete versionPacket; delete cmdData; } void Module::SettingsReply(){ uint8_t cmdDataLengte = 41; uint8_t *cmdData = new uint8_t[cmdDataLengte]; uint8_t *reserved = new uint8_t[2]; cmdData[0] = this->IP[0]; cmdData[1] = this->IP[1]; cmdData[2] = this->IP[2]; cmdData[3] = this->IP[3]; if(enableData){ cmdData[4] = 0x01; } else{ cmdData[4] = 0x00; } cmdData[5] = this->version[0]; cmdData[6] = this->version[1]; for(int i = 0; i < 16; i++){ cmdData[7 + i * 2] = this->daq->getChannelGain(i); if(this->daq->ChannelEnabled(i) == true){ cmdData[7 + i * 2 + 1] = 0x01; } else{ cmdData[7 + i * 2 + 1] = 0x00; } } cmdData[39] = this->sampleRate; cmdData[40] = this->packageSize; reserved[0] = 0x00; reserved[1] = 0x00; Packet *settingsPacket = new Packet(this->ID, PACKET_GET_SETTINGS_REPLY, cmdData, cmdDataLengte, reserved); this->sendPacket(settingsPacket); delete settingsPacket; delete cmdData; delete reserved; } void Module::LedTest(uint8_t ledInfo){ for(int i = 4; i < 8; i++){ if(((ledInfo >> i) & 1) == 1){ //LED moet aan! switch(i){ case 4: //LED0 aanzetten break; case 5: //LED1 aanzetten break; case 6: //LED2 aanzetten break; case 7: //LED3 aanzetten break; default: break; } } } } void Module::Acknowledge(uint8_t RESERVED[2]) { Packet *ack = new Packet(this->ID, PACKET_ACK, RESERVED); this->sendPacket(ack); delete ack; //delete reserved; //moet weggedaan worden waar deze array aangemaakt wordt! } void Module::Acknowledge() { uint8_t *reserved = new uint8_t[2]; reserved[0] = 0x00; reserved[1] = 0x00; Packet *ack = new Packet(this->ID, PACKET_ACK, reserved); this->sendPacket(ack); delete ack; delete reserved; } //GETTERS Uart* Module::getUart(void) { return(this->uart); } uint8_t* Module::getID(void) { return(this->ID); } uint8_t* Module::getIP(void) { return(this->IP); } uint8_t* Module::getVersion(void) { return(this->version); } bool Module::dataEnabled(void) { return(this->enableData); } uint8_t Module::getPackageSize(void) { return(this->packageSize); } unsigned int Module::getSampleNumber(void) { return(this->sampleNumber); } uint8_t Module::getSampleRate(void) { return(this->sampleRate); } //SETTERS void Module::setID(uint8_t ID[2]) { this->ID[0] = ID[0]; this->ID[1] = ID[1]; } void Module::setIP(uint8_t IP[4]) { this->IP[0] = IP[0]; this->IP[1] = IP[1]; this->IP[2] = IP[2]; this->IP[3] = IP[3]; } void Module::removeIP(){ this->IP[0] = 0xff; this->IP[1] = 0xff; this->IP[2] = 0xff; this->IP[3] = 0xff; } void Module::setVersion(uint8_t version[2]) { this->version[0] = version[0]; this->version[1] = version[1]; } void Module::EnableData(void) { this->enableData = true; } void Module::DisableData(void) { this->enableData = false; } void Module::setPackageSize(uint8_t packageSize) { this->packageSize = packageSize; } void Module::setSampleNumber(unsigned int sampleNumber) { this->sampleNumber = sampleNumber; } void Module::setSampleRate(uint8_t sampleRate) { this->sampleRate = sampleRate; }