BERG Cloud / BERGCloud

Dependents:   LittleCounter-Example

Committer:
nickludlam
Date:
Tue Nov 12 14:38:30 2013 +0000
Revision:
0:b4ccb530b9eb
Child:
3:02b6b91ae6de
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nickludlam 0:b4ccb530b9eb 1 /*
nickludlam 0:b4ccb530b9eb 2
nickludlam 0:b4ccb530b9eb 3 BERGCloud library for mbed
nickludlam 0:b4ccb530b9eb 4
nickludlam 0:b4ccb530b9eb 5 Copyright (c) 2013 BERG Cloud Ltd. http://bergcloud.com/
nickludlam 0:b4ccb530b9eb 6
nickludlam 0:b4ccb530b9eb 7 Permission is hereby granted, free of charge, to any person obtaining a copy
nickludlam 0:b4ccb530b9eb 8 of this software and associated documentation files (the "Software"), to deal
nickludlam 0:b4ccb530b9eb 9 in the Software without restriction, including without limitation the rights
nickludlam 0:b4ccb530b9eb 10 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
nickludlam 0:b4ccb530b9eb 11 copies of the Software, and to permit persons to whom the Software is
nickludlam 0:b4ccb530b9eb 12 furnished to do so, subject to the following conditions:
nickludlam 0:b4ccb530b9eb 13
nickludlam 0:b4ccb530b9eb 14 The above copyright notice and this permission notice shall be included in
nickludlam 0:b4ccb530b9eb 15 all copies or substantial portions of the Software.
nickludlam 0:b4ccb530b9eb 16
nickludlam 0:b4ccb530b9eb 17 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
nickludlam 0:b4ccb530b9eb 18 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
nickludlam 0:b4ccb530b9eb 19 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
nickludlam 0:b4ccb530b9eb 20 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
nickludlam 0:b4ccb530b9eb 21 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
nickludlam 0:b4ccb530b9eb 22 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
nickludlam 0:b4ccb530b9eb 23 THE SOFTWARE.
nickludlam 0:b4ccb530b9eb 24
nickludlam 0:b4ccb530b9eb 25 */
nickludlam 0:b4ccb530b9eb 26
nickludlam 0:b4ccb530b9eb 27 #include <cstdint>
nickludlam 0:b4ccb530b9eb 28 #include <cstddef>
nickludlam 0:b4ccb530b9eb 29 #include <cstdarg>
nickludlam 0:b4ccb530b9eb 30
nickludlam 0:b4ccb530b9eb 31 #include "BERGCloudMbed.h"
nickludlam 0:b4ccb530b9eb 32
nickludlam 0:b4ccb530b9eb 33 uint16_t BERGCloudMbed::SPITransaction(uint8_t *dataOut, uint8_t *dataIn, uint16_t dataSize, bool finalCS)
nickludlam 0:b4ccb530b9eb 34 {
nickludlam 0:b4ccb530b9eb 35 uint16_t i;
nickludlam 0:b4ccb530b9eb 36
nickludlam 0:b4ccb530b9eb 37 if ( (dataOut == NULL) || (dataIn == NULL) || (spi == NULL) )
nickludlam 0:b4ccb530b9eb 38 {
nickludlam 0:b4ccb530b9eb 39 _LOG("Invalid parameter (CBERGCloud::SPITransaction)\r\n");
nickludlam 0:b4ccb530b9eb 40 return 0;
nickludlam 0:b4ccb530b9eb 41 }
nickludlam 0:b4ccb530b9eb 42
nickludlam 0:b4ccb530b9eb 43 nSSELPin->write(0);
nickludlam 0:b4ccb530b9eb 44
nickludlam 0:b4ccb530b9eb 45 for (i = 0; i < dataSize; i++)
nickludlam 0:b4ccb530b9eb 46 {
nickludlam 0:b4ccb530b9eb 47 *dataIn++ = spi->write(*dataOut++);
nickludlam 0:b4ccb530b9eb 48 }
nickludlam 0:b4ccb530b9eb 49
nickludlam 0:b4ccb530b9eb 50 if (finalCS)
nickludlam 0:b4ccb530b9eb 51 {
nickludlam 0:b4ccb530b9eb 52 nSSELPin->write(1);
nickludlam 0:b4ccb530b9eb 53 }
nickludlam 0:b4ccb530b9eb 54
nickludlam 0:b4ccb530b9eb 55 return dataSize;
nickludlam 0:b4ccb530b9eb 56 }
nickludlam 0:b4ccb530b9eb 57
nickludlam 0:b4ccb530b9eb 58 void BERGCloudMbed::timerReset(void)
nickludlam 0:b4ccb530b9eb 59 {
nickludlam 0:b4ccb530b9eb 60 timer->reset();
nickludlam 0:b4ccb530b9eb 61 }
nickludlam 0:b4ccb530b9eb 62
nickludlam 0:b4ccb530b9eb 63 uint32_t BERGCloudMbed::timerRead_mS(void)
nickludlam 0:b4ccb530b9eb 64 {
nickludlam 0:b4ccb530b9eb 65 return timer->read_ms();
nickludlam 0:b4ccb530b9eb 66 }
nickludlam 0:b4ccb530b9eb 67
nickludlam 0:b4ccb530b9eb 68 void BERGCloudMbed::begin(PinName _MOSIPin, PinName _MISOPin, PinName _SCLKPin, PinName _nSSELPin)
nickludlam 0:b4ccb530b9eb 69 {
nickludlam 0:b4ccb530b9eb 70 /* Call base class method */
nickludlam 0:b4ccb530b9eb 71 BERGCloudBase::begin();
nickludlam 0:b4ccb530b9eb 72
nickludlam 0:b4ccb530b9eb 73 /* Configure nSSEL control pin */
nickludlam 0:b4ccb530b9eb 74 nSSELPin = new DigitalOut(_nSSELPin);
nickludlam 0:b4ccb530b9eb 75
nickludlam 0:b4ccb530b9eb 76 if (nSSELPin == NULL)
nickludlam 0:b4ccb530b9eb 77 {
nickludlam 0:b4ccb530b9eb 78 _LOG("nSSELPin is NULL (CBERGCloud::begin)\r\n");
nickludlam 0:b4ccb530b9eb 79 return;
nickludlam 0:b4ccb530b9eb 80 }
nickludlam 0:b4ccb530b9eb 81
nickludlam 0:b4ccb530b9eb 82 nSSELPin->write(1);
nickludlam 0:b4ccb530b9eb 83
nickludlam 0:b4ccb530b9eb 84 /* Configure SPI */
nickludlam 0:b4ccb530b9eb 85 spi = new SPI(_MOSIPin, _MISOPin, _SCLKPin);
nickludlam 0:b4ccb530b9eb 86
nickludlam 0:b4ccb530b9eb 87 if (spi == NULL)
nickludlam 0:b4ccb530b9eb 88 {
nickludlam 0:b4ccb530b9eb 89 _LOG("spi is NULL (CBERGCloud::begin)\r\n");
nickludlam 0:b4ccb530b9eb 90 delete nSSELPin;
nickludlam 0:b4ccb530b9eb 91 return;
nickludlam 0:b4ccb530b9eb 92 }
nickludlam 0:b4ccb530b9eb 93
nickludlam 0:b4ccb530b9eb 94 spi->format(8, 0); /* 8-bits; SPI MODE 0 */
nickludlam 0:b4ccb530b9eb 95 spi->frequency(4000000); /* 4MHz */
nickludlam 0:b4ccb530b9eb 96
nickludlam 0:b4ccb530b9eb 97 /* Configure timer */
nickludlam 0:b4ccb530b9eb 98 timer = new Timer();
nickludlam 0:b4ccb530b9eb 99
nickludlam 0:b4ccb530b9eb 100 if (timer == NULL)
nickludlam 0:b4ccb530b9eb 101 {
nickludlam 0:b4ccb530b9eb 102 _LOG("timer is NULL (CBERGCloud::begin)\r\n");
nickludlam 0:b4ccb530b9eb 103 delete nSSELPin;
nickludlam 0:b4ccb530b9eb 104 delete spi;
nickludlam 0:b4ccb530b9eb 105 return;
nickludlam 0:b4ccb530b9eb 106 }
nickludlam 0:b4ccb530b9eb 107
nickludlam 0:b4ccb530b9eb 108 timer->start();
nickludlam 0:b4ccb530b9eb 109 }
nickludlam 0:b4ccb530b9eb 110
nickludlam 0:b4ccb530b9eb 111 void BERGCloudMbed::end()
nickludlam 0:b4ccb530b9eb 112 {
nickludlam 0:b4ccb530b9eb 113 if (nSSELPin != NULL)
nickludlam 0:b4ccb530b9eb 114 {
nickludlam 0:b4ccb530b9eb 115 delete nSSELPin;
nickludlam 0:b4ccb530b9eb 116 }
nickludlam 0:b4ccb530b9eb 117
nickludlam 0:b4ccb530b9eb 118 if (spi != NULL)
nickludlam 0:b4ccb530b9eb 119 {
nickludlam 0:b4ccb530b9eb 120 delete spi;
nickludlam 0:b4ccb530b9eb 121 }
nickludlam 0:b4ccb530b9eb 122
nickludlam 0:b4ccb530b9eb 123 if (timer != NULL)
nickludlam 0:b4ccb530b9eb 124 {
nickludlam 0:b4ccb530b9eb 125 delete timer;
nickludlam 0:b4ccb530b9eb 126 }
nickludlam 0:b4ccb530b9eb 127
nickludlam 0:b4ccb530b9eb 128 /* Call base class method */
nickludlam 0:b4ccb530b9eb 129 BERGCloudBase::end();
nickludlam 0:b4ccb530b9eb 130 }
nickludlam 0:b4ccb530b9eb 131
nickludlam 0:b4ccb530b9eb 132 bool BERGCloudMbed::display(std::string& s)
nickludlam 0:b4ccb530b9eb 133 {
nickludlam 0:b4ccb530b9eb 134 return display(s.c_str());
nickludlam 0:b4ccb530b9eb 135 }
nickludlam 0:b4ccb530b9eb 136
nickludlam 0:b4ccb530b9eb 137 uint16_t BERGCloudMbed::getHostType(void)
nickludlam 0:b4ccb530b9eb 138 {
nickludlam 0:b4ccb530b9eb 139 return BC_HOST_MBED;
nickludlam 0:b4ccb530b9eb 140 }
nickludlam 0:b4ccb530b9eb 141
nickludlam 0:b4ccb530b9eb 142 #ifdef BERGCLOUD_PACK_UNPACK
nickludlam 0:b4ccb530b9eb 143
nickludlam 0:b4ccb530b9eb 144 bool BERGCloudMessage::pack(std::string& s)
nickludlam 0:b4ccb530b9eb 145 {
nickludlam 0:b4ccb530b9eb 146 return pack(s.c_str());
nickludlam 0:b4ccb530b9eb 147 }
nickludlam 0:b4ccb530b9eb 148
nickludlam 0:b4ccb530b9eb 149 bool BERGCloudMessage::unpack(std::string& s)
nickludlam 0:b4ccb530b9eb 150 {
nickludlam 0:b4ccb530b9eb 151 uint16_t sizeInBytes;
nickludlam 0:b4ccb530b9eb 152
nickludlam 0:b4ccb530b9eb 153 if (!unpack_raw_header(&sizeInBytes))
nickludlam 0:b4ccb530b9eb 154 {
nickludlam 0:b4ccb530b9eb 155 return false;
nickludlam 0:b4ccb530b9eb 156 }
nickludlam 0:b4ccb530b9eb 157
nickludlam 0:b4ccb530b9eb 158 if (!remaining(sizeInBytes))
nickludlam 0:b4ccb530b9eb 159 {
nickludlam 0:b4ccb530b9eb 160 _LOG_UNPACK_ERROR_NO_DATA;
nickludlam 0:b4ccb530b9eb 161 return false;
nickludlam 0:b4ccb530b9eb 162 }
nickludlam 0:b4ccb530b9eb 163
nickludlam 0:b4ccb530b9eb 164 std::string tmp(buffer[bytesRead], sizeInBytes);
nickludlam 0:b4ccb530b9eb 165 bytesRead += sizeInBytes;
nickludlam 0:b4ccb530b9eb 166
nickludlam 0:b4ccb530b9eb 167 s = tmp;
nickludlam 0:b4ccb530b9eb 168
nickludlam 0:b4ccb530b9eb 169 return true;
nickludlam 0:b4ccb530b9eb 170 }
nickludlam 0:b4ccb530b9eb 171
nickludlam 0:b4ccb530b9eb 172 #endif // #ifdef BERGCLOUD_PACK_UNPACK
nickludlam 0:b4ccb530b9eb 173