aboutsummaryrefslogtreecommitdiff
path: root/src/buffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buffer.cpp')
-rw-r--r--src/buffer.cpp173
1 files changed, 173 insertions, 0 deletions
diff --git a/src/buffer.cpp b/src/buffer.cpp
new file mode 100644
index 0000000..9c0ffec
--- /dev/null
+++ b/src/buffer.cpp
@@ -0,0 +1,173 @@
+/*
+ Copyright (C) 2014 BARRATERO Laurent
+
+ AeroUp is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ Aeroup is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+/*
+ * Filename: buffer.cpp
+ *
+ * Description:
+ *
+ * Version: 0.2
+ * Created: 28/12/2013 07:06:20
+ * Revision: none
+ * Compiler: gcc
+ *
+ * Author: BARATTERO Laurent, laurentba<at>larueluberlu.net
+ * Organization: La rue Luberlu
+ *
+ */
+
+#include <buffer.hpp>
+
+using namespace std;
+
+Buffer::Buffer():
+ size(0)
+{
+ //memset(buff, 0, sizeof(buff));
+}
+
+int Buffer::addChr(unsigned char val)
+{
+ verify_size();
+ //buff[size++] = val;
+ //strcpy((char*)buff[size],(const char *)val);
+ buff[size] = val;
+ size++;
+ return 1;
+
+}
+
+ string
+Buffer::addDefsubToBuff()
+{
+ for(auto itr = sub_position.begin(); itr != sub_position.end(); ++itr)
+ {
+ while(((*itr).second.empty()) == false )
+ {
+ auto it = defsub_position.find((*itr).first);
+ if(it != defsub_position.end())
+ {
+ buff[(*itr).second.back()] = defsub_position[(*itr).first][0];
+ buff[(*itr).second.back() + 1] = defsub_position[(*itr).first][1];
+ (*itr).second.pop_back();
+ }
+ else
+ {
+ return (*itr).first ;
+ }
+ }
+ }
+ return "";
+}
+
+ int
+Buffer::addDefsubPos(string defsubName)
+{
+ auto it = defsub_position.find(defsubName);
+ if(it == defsub_position.end())
+ {
+ defsub_position[defsubName][0] = (uint8_t)(size & 0xff);
+ defsub_position[defsubName][1] = (uint8_t)(size >> 8);
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+}
+
+ void
+Buffer::addSubPos(string subName)
+{
+ sub_position[subName].push_back(size);
+}
+
+ void
+Buffer::printDefsubPos()
+{
+ cout << endl
+ << "(Debug function) print map defsub_position :" << endl
+ << "============================================" << endl;
+ for(auto itr = defsub_position.begin(); itr != defsub_position.end(); ++itr)
+ {
+ cout << "Key : " << (*itr).first << endl
+ << "Lsb : " << dec << (int)(*itr).second[0] << endl
+ << "Msb : " << dec << (int)(*itr).second[1] << endl ;
+ }
+}
+
+ void
+Buffer::printSubPos()
+{
+ cout << endl
+ << "(Debug function) print map sub_position :" << endl
+ << "=========================================" << endl;
+ for(auto itr = sub_position.begin(); itr != sub_position.end(); ++itr)
+ {
+ cout << "Key : " << (*itr).first << endl
+ << "Value : " ;
+ for (auto itr_vect = (*itr).second.begin();
+ itr_vect != (*itr).second.end();
+ ++itr_vect)
+ {
+ cout << (*itr_vect) << " ";
+ }
+
+ cout << endl;
+ }
+}
+
+ void
+Buffer::printBuff(void) const
+{
+ for (unsigned int i = 0; i < size ; i++)
+ {
+ printf("buff[%d] : %d\n", i, buff[i]);
+
+ }
+
+}
+
+ void
+Buffer::verify_size(void)
+{
+ if (size > BUFF_SIZE_MAX)
+ {
+ printf ("Error glow file too big !");
+ exit (EXIT_FAILURE);
+ }
+}
+
+
+/*
+ * where is sub map string vector int subnamekey, (byte,...)
+ * defsub defsubname, localisation subfunction
+ *
+ * if sub define 2 times error
+ *
+ * */
+ unsigned char*
+Buffer::getSizeUpCmd()
+{
+ lsb_msb[0]= 100;
+ lsb_msb[1]= (uint8_t)(size & 0xff);
+ lsb_msb[2]= (uint8_t)(size >> 8);
+ return lsb_msb;
+
+
+}