XBee and XBee-PRO ZigBee RF modules provide cost-effective wireless connectivity to electronic devices. They are interoperable with other ZigBee PRO feature set devices, including devices from other vendors.
Revision 2:700dc65ca3b1, committed 2015-10-22
- Comitter:
- yangcq88517
- Date:
- Thu Oct 22 22:22:12 2015 +0000
- Parent:
- 1:3dc0ec2f9fd6
- Child:
- 3:6b205ec8624b
- Commit message:
- IO sample bug fix
Changed in this revision
--- a/Helper/IOSampleDecoder.cpp Thu Oct 22 20:02:11 2015 +0000 +++ b/Helper/IOSampleDecoder.cpp Thu Oct 22 22:22:12 2015 +0000 @@ -1,21 +1,23 @@ #include "IOSampleDecoder.h" -int IOSampleDecoder::XBeeSamplesParse(IOSamples * samples, const char * IOSamplePayload, int offset) +IOSamples * IOSampleDecoder::samples = NULL; + +IOSamples * IOSampleDecoder::XBeeSamplesParse(const char * IOSamplePayload, int offset) { // at least 3 bytes, 1 byte of [number of samples] + 2 bytes of [digital channel mask] and [analog channel mask]. int numofsamples = IOSamplePayload[offset]; if (numofsamples <= 0) - return 0; + return NULL; - if (samples!= NULL) + if (samples != NULL) delete[] samples; // first byte is the number of sample int index = offset + 1; samples = new IOSamples[numofsamples]; - + int digitMask = ((IOSamplePayload[index] & 0x01) << 8) | IOSamplePayload[index + 1]; int analogMask = IOSamplePayload[index] & 0xFE; @@ -23,27 +25,27 @@ index += 2; for (int i = 0; i < numofsamples; i++) { - map<Pin, int> * analog = (samples + i)->getAnalogs(); - map<Pin, int> * digital = (samples + i)->getDigitals(); + map<Pin *, int> * analog = (samples + i)->getAnalogs(); + map<Pin *, int> * digital = (samples + i)->getDigitals(); if (digitMask != 0) { if ((digitMask & 0x01) == 0x01) - (*digital)[XBeePins::P20_AD0_DIO0] = (IOSamplePayload[index + 1] & 0x01) == 0x01 ? 1 : 0; + (*digital)[&XBeePins::P20_AD0_DIO0] = (IOSamplePayload[index + 1] & 0x01) == 0x01 ? 1 : 0; if ((digitMask & 0x02) == 0x02) - (*digital)[XBeePins::P19_AD1_DIO1] = (IOSamplePayload[index + 1] & 0x02) == 0x02 ? 1 : 0; + (*digital)[&XBeePins::P19_AD1_DIO1] = (IOSamplePayload[index + 1] & 0x02) == 0x02 ? 1 : 0; if ((digitMask & 0x04) == 0x04) - (*digital)[XBeePins::P18_AD2_DIO2] = (IOSamplePayload[index + 1] & 0x04) == 0x04 ? 1 : 0; + (*digital)[&XBeePins::P18_AD2_DIO2] = (IOSamplePayload[index + 1] & 0x04) == 0x04 ? 1 : 0; if ((digitMask & 0x08) == 0x08) - (*digital)[XBeePins::P17_AD3_DIO3] = (IOSamplePayload[index + 1] & 0x08) == 0x08 ? 1 : 0; + (*digital)[&XBeePins::P17_AD3_DIO3] = (IOSamplePayload[index + 1] & 0x08) == 0x08 ? 1 : 0; if ((digitMask & 0x10) == 0x10) - (*digital)[XBeePins::P11_AD4_DIO4] = (IOSamplePayload[index + 1] & 0x10) == 0x10 ? 1 : 0; + (*digital)[&XBeePins::P11_AD4_DIO4] = (IOSamplePayload[index + 1] & 0x10) == 0x10 ? 1 : 0; if ((digitMask & 0x20) == 0x20) - (*digital)[XBeePins::P15_ASSOCIATE_AD5_DIO5] = (IOSamplePayload[index + 1] & 0x20) == 0x20 ? 1 : 0; + (*digital)[&XBeePins::P15_ASSOCIATE_AD5_DIO5] = (IOSamplePayload[index + 1] & 0x20) == 0x20 ? 1 : 0; if ((digitMask & 0x40) == 0x40) - (*digital)[XBeePins::P16_RTS_AD6_DIO6] = (IOSamplePayload[index + 1] & 0x40) == 0x40 ? 1 : 0; + (*digital)[&XBeePins::P16_RTS_AD6_DIO6] = (IOSamplePayload[index + 1] & 0x40) == 0x40 ? 1 : 0; if ((digitMask & 0x80) == 0x80) - (*digital)[XBeePins::P12_CTS_DIO7] = (IOSamplePayload[index + 1] & 0x80) == 0x80 ? 1 : 0; + (*digital)[&XBeePins::P12_CTS_DIO7] = (IOSamplePayload[index + 1] & 0x80) == 0x80 ? 1 : 0; if (((digitMask >> 8) & 0x01) == 0x01) - (*digital)[XBeePins::P9_DTR_SLEEP_DIO8] = (IOSamplePayload[index] & 0x01) == 0x01 ? 1 : 0; + (*digital)[&XBeePins::P9_DTR_SLEEP_DIO8] = (IOSamplePayload[index] & 0x01) == 0x01 ? 1 : 0; //skip the 2 [digital sample] index += 2; @@ -51,29 +53,29 @@ if (analogMask != 0) { if ((analogMask & 0x02) == 0x02) - (*analog)[XBeePins::P20_AD0_DIO0] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; + (*analog)[&XBeePins::P20_AD0_DIO0] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; if ((analogMask & 0x04) == 0x04) - (*analog)[XBeePins::P19_AD1_DIO1] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; + (*analog)[&XBeePins::P19_AD1_DIO1] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; if ((analogMask & 0x08) == 0x08) - (*analog)[XBeePins::P18_AD2_DIO2] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; + (*analog)[&XBeePins::P18_AD2_DIO2] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; if ((analogMask & 0x10) == 0x10) - (*analog)[XBeePins::P17_AD3_DIO3] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; + (*analog)[&XBeePins::P17_AD3_DIO3] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; if ((analogMask & 0x20) == 0x20) - (*analog)[XBeePins::P11_AD4_DIO4] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; + (*analog)[&XBeePins::P11_AD4_DIO4] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; if ((analogMask & 0x40) == 0x40) - (*analog)[XBeePins::P15_ASSOCIATE_AD5_DIO5] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; + (*analog)[&XBeePins::P15_ASSOCIATE_AD5_DIO5] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; } } - return numofsamples; + return samples; } -int IOSampleDecoder::ZigBeeSamplesParse(IOSamples * samples, const char * IOSamplePayload, int offset) +IOSamples * IOSampleDecoder::ZigBeeSamplesParse(const char * IOSamplePayload, int offset) { // at least 4 bytes, 1 byte of [number of samples] + 2 bytes of [digital channel mask] + 1 bytes of [analog channel mask]. @@ -81,9 +83,9 @@ int numofsamples = IOSamplePayload[offset]; if (numofsamples <= 0) - return 0; + return NULL; - if (samples!= NULL) + if (samples != NULL) delete[] samples; int index = offset + 1; @@ -94,53 +96,53 @@ samples = new IOSamples[numofsamples]; for (int i = 0; i < numofsamples; i++) { - map<Pin, int> * analog = (samples + i)->getAnalogs(); - map<Pin, int> * digital = (samples + i)->getDigitals(); + map<Pin *, int> * analog = (samples + i)->getAnalogs(); + map<Pin *, int> * digital = (samples + i)->getDigitals(); if (digitMask != 0) { if ((digitMask & 0x01) == 0x01) - (*digital)[ZigBeePins::P20_AD0_DIO0_COMMISSIONONG_BUTTON] = (IOSamplePayload[index + 1] & 0x01) == 0x01 ? 1 : 0; + (*digital)[&ZigBeePins::P20_AD0_DIO0_COMMISSIONONG_BUTTON] = (IOSamplePayload[index + 1] & 0x01) == 0x01 ? 1 : 0; if ((digitMask & 0x02) == 0x02) - (*digital)[ZigBeePins::P19_AD1_DIO1] = (IOSamplePayload[index + 1] & 0x02) == 0x02 ? 1 : 0; + (*digital)[&ZigBeePins::P19_AD1_DIO1] = (IOSamplePayload[index + 1] & 0x02) == 0x02 ? 1 : 0; if ((digitMask & 0x04) == 0x04) - (*digital)[ZigBeePins::P18_AD2_DIO2] = (IOSamplePayload[index + 1] & 0x04) == 0x04 ? 1 : 0; + (*digital)[&ZigBeePins::P18_AD2_DIO2] = (IOSamplePayload[index + 1] & 0x04) == 0x04 ? 1 : 0; if ((digitMask & 0x08) == 0x08) - (*digital)[ZigBeePins::P17_AD3_DIO3] = (IOSamplePayload[index + 1] & 0x08) == 0x08 ? 1 : 0; + (*digital)[&ZigBeePins::P17_AD3_DIO3] = (IOSamplePayload[index + 1] & 0x08) == 0x08 ? 1 : 0; if ((digitMask & 0x10) == 0x10) - (*digital)[ZigBeePins::P11_DIO4] = (IOSamplePayload[index + 1] & 0x10) == 0x10 ? 1 : 0; + (*digital)[&ZigBeePins::P11_DIO4] = (IOSamplePayload[index + 1] & 0x10) == 0x10 ? 1 : 0; if ((digitMask & 0x20) == 0x20) - (*digital)[ZigBeePins::P15_ASSOCIATE_DIO5] = (IOSamplePayload[index + 1] & 0x20) == 0x20 ? 1 : 0; + (*digital)[&ZigBeePins::P15_ASSOCIATE_DIO5] = (IOSamplePayload[index + 1] & 0x20) == 0x20 ? 1 : 0; if ((digitMask & 0x40) == 0x40) - (*digital)[ZigBeePins::P16_RTS_DIO6] = (IOSamplePayload[index + 1] & 0x40) == 0x40 ? 1 : 0; + (*digital)[&ZigBeePins::P16_RTS_DIO6] = (IOSamplePayload[index + 1] & 0x40) == 0x40 ? 1 : 0; if ((digitMask & 0x80) == 0x80) - (*digital)[ZigBeePins::P12_CTS_DIO7] = (IOSamplePayload[index + 1] & 0x80) == 0x80 ? 1 : 0; + (*digital)[&ZigBeePins::P12_CTS_DIO7] = (IOSamplePayload[index + 1] & 0x80) == 0x80 ? 1 : 0; if (((digitMask >> 8) & 0x04) == 0x04) - (*digital)[ZigBeePins::P6_RSSI_PWM_DIO10] = (IOSamplePayload[index] & 0x04) == 0x04 ? 1 : 0; + (*digital)[&ZigBeePins::P6_RSSI_PWM_DIO10] = (IOSamplePayload[index] & 0x04) == 0x04 ? 1 : 0; if (((digitMask >> 8) & 0x08) == 0x08) - (*digital)[ZigBeePins::P7_PWM_DIO11] = (IOSamplePayload[index] & 0x08) == 0x08 ? 1 : 0; + (*digital)[&ZigBeePins::P7_PWM_DIO11] = (IOSamplePayload[index] & 0x08) == 0x08 ? 1 : 0; if (((digitMask >> 8) & 0x10) == 0x10) - (*digital)[ZigBeePins::P4_DIO12] = (IOSamplePayload[index] & 0x10) == 0x10 ? 1 : 0; + (*digital)[&ZigBeePins::P4_DIO12] = (IOSamplePayload[index] & 0x10) == 0x10 ? 1 : 0; index += 2;// 2 [digital sample] } if (analogMask != 0x00) { //analog mask if ((analogMask & 0x01) == 0x01) - (*analog)[ZigBeePins::P20_AD0_DIO0_COMMISSIONONG_BUTTON] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; + (*analog)[&ZigBeePins::P20_AD0_DIO0_COMMISSIONONG_BUTTON] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; if ((analogMask & 0x02) == 0x02) - (*analog)[ZigBeePins::P19_AD1_DIO1] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; + (*analog)[&ZigBeePins::P19_AD1_DIO1] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; if ((analogMask & 0x04) == 0x04) - (*analog)[ZigBeePins::P18_AD2_DIO2] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; + (*analog)[&ZigBeePins::P18_AD2_DIO2] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; if ((analogMask & 0x08) == 0x08) - (*analog)[ZigBeePins::P17_AD3_DIO3] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; + (*analog)[&ZigBeePins::P17_AD3_DIO3] = (IOSamplePayload[index++] << 8) | IOSamplePayload[index++]; if ((analogMask & 0x80) == 0x80) (samples + i)->setSupplyVoltage((IOSamplePayload[index++] << 8) | IOSamplePayload[index++]); } } - return numofsamples; + return samples; } \ No newline at end of file
--- a/Helper/IOSampleDecoder.h Thu Oct 22 20:02:11 2015 +0000 +++ b/Helper/IOSampleDecoder.h Thu Oct 22 22:22:12 2015 +0000 @@ -8,12 +8,15 @@ class IOSampleDecoder { +private: + static IOSamples * samples; + public : // return the lenght of io ample - static int XBeeSamplesParse(IOSamples * samples, const char * IOSamplePayload, int offset = 0); + static IOSamples * XBeeSamplesParse(const char * IOSamplePayload, int offset = 0); // return the lenght of io ample - static int ZigBeeSamplesParse(IOSamples * samples, const char * IOSamplePayload, int offset = 0); + static IOSamples * ZigBeeSamplesParse(const char * IOSamplePayload, int offset = 0); }; #endif \ No newline at end of file
--- a/Indicator/ISampleResponse.h Thu Oct 22 20:02:11 2015 +0000 +++ b/Indicator/ISampleResponse.h Thu Oct 22 22:22:12 2015 +0000 @@ -8,7 +8,7 @@ class ISampleResponse { protected: - IOSamples * samples; + //IOSamples * samples; public: virtual IOSamples * getIOSamples() = 0; @@ -33,6 +33,8 @@ /// </summary> /// <returns></returns> virtual int getRSSI() = 0; + + }; #endif \ No newline at end of file
--- a/Indicator/XBeeRx16IOSampleIndicator.cpp Thu Oct 22 20:02:11 2015 +0000 +++ b/Indicator/XBeeRx16IOSampleIndicator.cpp Thu Oct 22 22:22:12 2015 +0000 @@ -1,7 +1,8 @@ #include "XBeeRx16IOSampleIndicator.h" XBeeRx16IOSampleIndicator::XBeeRx16IOSampleIndicator(APIFrame *frame) - : RxBase(frame) {} + : RxBase(frame) +{} int XBeeRx16IOSampleIndicator::getRSSI() { @@ -10,8 +11,8 @@ IOSamples * XBeeRx16IOSampleIndicator::getIOSamples() { - IOSampleDecoder::XBeeSamplesParse(samples, data + 5); - return samples; + return IOSampleDecoder::XBeeSamplesParse(data + 5); + //return samples; } int XBeeRx16IOSampleIndicator::getSamplesCount()
--- a/Indicator/XBeeRx64IOSampleIndicator.cpp Thu Oct 22 20:02:11 2015 +0000 +++ b/Indicator/XBeeRx64IOSampleIndicator.cpp Thu Oct 22 22:22:12 2015 +0000 @@ -10,8 +10,8 @@ IOSamples * XBeeRx64IOSampleIndicator::getIOSamples() { - IOSampleDecoder::XBeeSamplesParse(samples, data + 11); - return samples; + return IOSampleDecoder::XBeeSamplesParse(data + 11); + //return samples; } int XBeeRx64IOSampleIndicator::getSamplesCount()
--- a/Indicator/ZigBeeIOSampleIndicator.cpp Thu Oct 22 20:02:11 2015 +0000 +++ b/Indicator/ZigBeeIOSampleIndicator.cpp Thu Oct 22 22:22:12 2015 +0000 @@ -10,8 +10,8 @@ IOSamples * ZigBeeIOSampleIndicator::getIOSamples() { - IOSampleDecoder::ZigBeeSamplesParse(samples, data + 12); - return samples; + return IOSampleDecoder::ZigBeeSamplesParse(data + 12); + //return samples; } int ZigBeeIOSampleIndicator::getSamplesCount()
--- a/Type/IOSamples.cpp Thu Oct 22 20:02:11 2015 +0000 +++ b/Type/IOSamples.cpp Thu Oct 22 22:22:12 2015 +0000 @@ -1,26 +1,26 @@ #include "IOSamples.h" -map<Pin, int> * IOSamples::getAnalogs() +map<Pin *, int> * IOSamples::getAnalogs() { return &analog; } int IOSamples::getAnalog(Pin * pin) { - if (analog.count(*pin)) - return analog[*pin]; + if (analog.count(pin)) + return analog[pin]; else return -1; } -map<Pin, int> * IOSamples::getDigitals() +map<Pin *, int> * IOSamples::getDigitals() { return &digital; } int IOSamples::getDigital(Pin * pin) { - if (digital.count(*pin)) - return digital[*pin]; + if (digital.count(pin)) + return digital[pin]; else return 2; } @@ -32,4 +32,10 @@ void IOSamples::setSupplyVoltage(int voltage) { SUPPLY_VOLTAGE = voltage; +} + +void IOSamples::clear() +{ + analog.clear(); + digital.clear(); } \ No newline at end of file
--- a/Type/IOSamples.h Thu Oct 22 20:02:11 2015 +0000 +++ b/Type/IOSamples.h Thu Oct 22 22:22:12 2015 +0000 @@ -11,19 +11,19 @@ private : int SUPPLY_VOLTAGE; - map<Pin, int> analog; + map<Pin *, int> analog; - map<Pin, int> digital; + map<Pin *, int> digital; public: - map<Pin, int> * getAnalogs(); + map<Pin *, int> * getAnalogs(); /** * -1 means not avaliable */ int getAnalog(Pin * pin); - map<Pin, int> * getDigitals(); + map<Pin *, int> * getDigitals(); /** * LOW = 0, @@ -35,6 +35,8 @@ int getSupplyVoltage(); void setSupplyVoltage(int voltage); + + void clear(); }; #endif \ No newline at end of file