From e5179d632df4102e980c1ce777e4c622e55fae1d Mon Sep 17 00:00:00 2001 From: atomega Date: Wed, 17 Mar 2021 10:15:40 +0000 Subject: [PATCH] Error manager is also implement as funtion pointer --- developpment/interfacer.cpp | 12 +++--- developpment/interfacer.o | Bin 25712 -> 25756 bytes developpment/management/errorHandling.cpp | 27 ++++++++---- developpment/management/errorHandling.h | 11 +++-- developpment/management/errorHandling.o | Bin 7116 -> 9988 bytes developpment/periferals/i2c/i2c_ch1_pImpL.cpp | 39 +++++++++--------- developpment/periferals/i2c/i2c_ch1_pImpL.hpp | 3 +- developpment/periferals/i2c/i2c_ch1_pImpL.o | Bin 5288 -> 7812 bytes developpment/runtest | Bin 48252 -> 52584 bytes 9 files changed, 53 insertions(+), 39 deletions(-) diff --git a/developpment/interfacer.cpp b/developpment/interfacer.cpp index e396442..c58d028 100644 --- a/developpment/interfacer.cpp +++ b/developpment/interfacer.cpp @@ -20,7 +20,7 @@ unsigned int miliSecond = 1000; ErrorHandler errorHandle; CommandManager commander; -i2c_ch1_pImpL i2c(1); +i2c_ch1_pImpL i2c(1, &errorHandle); Bh1750 lightSens(&i2c); @@ -49,10 +49,12 @@ int main(int argc, char *argv[]) // Init initPlatform(); std::cout << "Main" << std::endl; - //errorHandle.addNewError(-34,"Test eroor 1"); - //errorHandle.handleError(-34); - //commander.addNewCommand("test", "The test command for testing the test", dummy); - //commander(argv[1]); + // errorHandle.addNewError(-34,__FILE__,"Test eroor 1",SPARE); + // errorHandle.addNewError(-34,__FILE__,"Test eroor 2",KILL); + // errorHandle.handleError(-34,__FILE__); + // errorHandle.handleError(-34,"main"); + // commander.addNewCommand("test", "The test command for testing the test", dummy); + // commander(argv[1]); commander.addNewCommand("i2c", "The test command for testing the test", dummy); commander(argv[1]); diff --git a/developpment/interfacer.o b/developpment/interfacer.o index 763439ba9b953d88dd7f97415a2e85dd0e9586de..55dd162099b66c917cee7633e0366db29a00636d 100644 GIT binary patch delta 1603 zcmZA1Ur1Y590%}oZlW{JKR25tYTc^Q=4$6$qL!H=LrY6_(`i<1jYdtT0|n{S2~%*J zu0BjwSl!nLJ7nr(M`6q2Lxnz6SfK$QZ1F`9)?{_)W`{yy7P`6bxwTMs;eLMSd(OQl z_uP|Y_pY3c%B#6@Bb@h1!WYMc$j)#d-5krE+tkGQ*iq(TF}L~e!NH$H>>JYOHhT_p z-(d}~znlGm=lQUnVSf|*>khMY&;OR-es7a!+|4nIJ|C+%9CPzJx0pkE;t{RDi}1O8 z)F!6OI}v~4fz-w<`23~p$WYRXH6_P=Ic^d2G4(`PO)W%SS|&zQlaBmae>t91H4)eO z_!iL=vj~w~fzQ%9G5fMTVoOWcUMcVjA%!~g#jC6Z-pC0(ZcAHZTNAlvUyB9vmJF0+ zpK^|Iif2czSYkuv9Mh`mR`o9-Mk7)8r2KRhHOC*y#k-<2z`hJI*lm3i9OS-CPVI^ zn%+h)eT*skly^C>+N84;YvL+Pk=*Q(R(P7ZvQo4%lw-WvkX5+Ou8dOLXIBlLu&Wq( z7Yw<}VF!X2)D#2ETne>fnNDMyw!nT->7_RiqCrg3MTF@LM;+L`sIw(o4EYO+=sbLM z1tat>7EGgb4SRHzqYk+Jy4*muUu~nBV~lwpQ_K&sdXj zYaRIsfinIaake90_M7*Pb?9tObr}3sFVSJd=n!n3>Q#A6{d5%LbPd<(1nyC8N02KE z>Y6nT&Y)UTZIC;hhCzmDTnnlVS~lILH((E`ZSvAZgy>J^4D%tKtuXT~tkav2ADUZ6 zx8O4!p(|LRyNFV58Qn)#7q=uGr@LI-pI!!QI=*En#8Q`9dyKZg)@>xTIE5I&$?p8j R9ln7_>TmP#Q2(Ur_zxO~=?MS; delta 1709 zcmZ8hT}%{L6ux(G=qk%HRA>-ci-3DgD`rJ)NV7EBU`kUKR#{|$U07tB5QCPc+WN3G zCRO8uq_iJRe89>>NqoSDx@}^U()dt~O_szaw&?>TmAWly*~TWC^59RudlwqhN#;BE z`_8#%?m2U2#=n>MZpzV0IsL`vckF>pLX?;IH)fKR7c-VS1YasE~-;KiNSsu9dDk~dPZ{3lW- zQ!&@?YmoNTAnqx{XrZh0t>6a>HG57iI6PFI2;a#QVqFD3^7LY&pg86A6j{#(yh2E! z?`pB0HsDRY;w-H7+~V32l|~EaVIr>tua>`Dm1K(CRVlvaLh}mR)zC2$nz~YcG;jOj zMj?uscFqz)uh;N7n*T<=#7#}yr}-b`yS%BEO;@a9Kea0Hp|IC+!OM^0&HwCuP>^F9 z9p3BRPjT+9e45i$|3BWBdc7*ojqdFyQn$C?l>6)Tsb7$yQQH@#h|pSVgotXpO^Ud- zwNfOsT@qqI+vlYi)HW-`khWW-IHv7iLYzot{qI?+!JVfz$n*HSxmr%6G^k_(4MCMZ zkS|1o7l(sYasVSiWsTa=#(^G~? z;?J0+zw((?zq{3ujqtWA;=Wd8{o=>bR-fI>0KZ8v#egJc7?4DU0gHZkLO%Nx1DZ@g zbI6ft#6rrt=f|0lPtM^o$+90mk=(_jkdiKJ*{@_hf%T&CXR%a{SEyAvww>ITbK#6h_$B44=F68u$}GMftT8SQXodM zxC3WM{J7k%WB@->y0-(5+kJK;C-0KU6*%ay`rtujFHv(F?HsjbTsUazCkkYVLn!S~ zGK>a;ZxYX9q(j+J&TYNfm+mm{xEIrE=F^AJr8&j6M&^&68f*ZpzGu*@y%n~c{ zfLH@>kFvKFuFi3^$Fb{o3gN=rJ=In;mtd;Lkx|U_D7gn2VgiM|N;Y9P@hV~lPZLA9 z+^g(s|0P@MbvV0^dRb#GQ6TQ|8= z%)3bT>0uq|Q`Wf06qTkhj(LWT!ak(rXQ(BfM?3L0h7C>g7patR)YQ_WM}QC;dFG2jBMltdb)0sE6EAg2IG8;qHX88>@skjJ`y5*)?`5 NtAFJym;Sr!>tCVi^Oyht diff --git a/developpment/management/errorHandling.cpp b/developpment/management/errorHandling.cpp index 9e30a38..5adac38 100644 --- a/developpment/management/errorHandling.cpp +++ b/developpment/management/errorHandling.cpp @@ -5,11 +5,11 @@ ErrorHandler::ErrorHandler(): emptyIndex(0) } -void ErrorHandler::handleError(int errNo) +void ErrorHandler::handleError(int errNo, std::string source) { int index = 0; - index = getLookUpIndex(errNo); + index = getLookUpIndex(errNo, source); if(index < 0) { @@ -17,11 +17,15 @@ void ErrorHandler::handleError(int errNo) exit(1); } - std::cout << "Error | " << errNo << " | \"" << errorLookup[index].errMessage << "\""<> Error << | " << errorLookup[index].errSource << " | " << errNo << " | \"" << errorLookup[index].errMessage << "\""<= MAX_NUMBER_OF_ERRORS) // Check if list is full { @@ -29,14 +33,16 @@ void ErrorHandler::addNewError(const int& no, const std::string& message) exit(1); } - if(getLookUpIndex(no) >= 0) // Check if Error No already exists + if(getLookUpIndex(no, source) >= 0) // Check if Error No already exists { - std::cout << "Error | Intern | Error No: "<< no << " Exists ! PLease choose a different number !" << std::endl; + std::cout << "Error | Intern | Error No: "<< no << " From Source: "<< source <<" Exists ! PLease choose a different number !" << std::endl; exit(1); } errorLookup[emptyIndex].errNo = no; + errorLookup[emptyIndex].errSource = source; errorLookup[emptyIndex].errMessage = message; + errorLookup[emptyIndex].errExit = kill; emptyIndex++; } @@ -44,14 +50,17 @@ void ErrorHandler::addNewError(const int& no, const std::string& message) // Privat memeber functions // -int ErrorHandler::getLookUpIndex(int errNo) +int ErrorHandler::getLookUpIndex(int errNo, std::string source) { int i = 0; for(i = 0; i < emptyIndex; i++) { if(errNo == errorLookup[i].errNo) { - return i; + if(source == errorLookup[i].errSource) + { + return i; + } } } return -1; diff --git a/developpment/management/errorHandling.h b/developpment/management/errorHandling.h index b9dbe92..b12d553 100644 --- a/developpment/management/errorHandling.h +++ b/developpment/management/errorHandling.h @@ -18,24 +18,27 @@ #include #define MAX_NUMBER_OF_ERRORS 255 - +#define KILL 1 +#define SPARE 0 class ErrorHandler { public: ErrorHandler(); - void addNewError(const int& no, const std::string& message); - void handleError(int no); + void addNewError(const int& no, const std::string& source, const std::string& message, const unsigned char kill); + void handleError(int no, std::string source); private: struct error_t { //Struture of error entry for the errorLookup table int errNo; std::string errMessage; + std::string errSource; + unsigned char errExit; }; unsigned int emptyIndex; // Indicates the next empty slot in the errorLookup table. std::array errorLookup; // Where the errors go. - int getLookUpIndex(int errNo); // If error number exists returns the index otherwise -1 + int getLookUpIndex(int errNo, std::string source); // If error number exists returns the index otherwise -1 }; #endif // _ERRORHANDLIG_H_ diff --git a/developpment/management/errorHandling.o b/developpment/management/errorHandling.o index 5826368bc58cef7ff195f7d5f25abb058656ab29..38985d58d3aa20b51b8bc8e251de5cf9ceb97c1c 100644 GIT binary patch literal 9988 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 IqCxZh3(xJJ6951J literal 7116 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 Ad;kCd diff --git a/developpment/periferals/i2c/i2c_ch1_pImpL.cpp b/developpment/periferals/i2c/i2c_ch1_pImpL.cpp index 7818b65..ef4354a 100644 --- a/developpment/periferals/i2c/i2c_ch1_pImpL.cpp +++ b/developpment/periferals/i2c/i2c_ch1_pImpL.cpp @@ -16,15 +16,22 @@ // some curious things https://www.john.geek.nz/2012/12/update-reading-data-from-a-bosch-bmp085-with-a-raspberry-pi/ -i2c_ch1_pImpL::i2c_ch1_pImpL(const uint8_t& mode) +i2c_ch1_pImpL::i2c_ch1_pImpL(const uint8_t& mode, ErrorHandler* err) { + errorHandling = err; char filename[20]; - snprintf(filename, 19, "/dev/i2c-%d", 1); + + + errorHandling->addNewError(-1,__FILE__,"Unable to open device",KILL); + errorHandling->addNewError(-2,__FILE__,"Unable to reach the device",KILL); + errorHandling->addNewError(-3,__FILE__,"Unable to write to device",KILL); + errorHandling->addNewError(-4,__FILE__,"Unable to read from device",KILL); + snprintf(filename, 19, "/dev/i2c-%d", 1); + deviceDescriptor = open(filename, O_RDWR); if (deviceDescriptor < 0) { - std::cout << "unable to open : "<< deviceDescriptor << " ! quiting" << std::endl; - exit(1); + errorHandling->handleError(-1,__FILE__); } } @@ -32,16 +39,14 @@ uint8_t i2c_ch1_pImpL::writeByte(const uint8_t& address, const uint8_t& data) { if (ioctl(deviceDescriptor, I2C_SLAVE, address) < 0) { - std::cout << "Unable to reach device : "<< address << " ! quiting" << std::endl; - exit(1); + errorHandling->handleError(-2,__FILE__); } send_buffer[0] = data; if ((write(deviceDescriptor, send_buffer, 1)) != 1) { - std::cout << "Unable to write quiting" << std::endl; - exit(0); + errorHandling->handleError(-3,__FILE__); } return 0; } @@ -50,16 +55,14 @@ uint8_t i2c_ch1_pImpL::readByte(const uint8_t& address, const uint8_t& reg) { if (ioctl(deviceDescriptor, I2C_SLAVE, address) < 0) { - std::cout << "Unable to reach device : "<< address << " ! quiting" << std::endl; - exit(1); + errorHandling->handleError(-2,__FILE__); } writeByte(address,reg); //Initiate a write to indicate the desired register to read if (read(deviceDescriptor, recieve_buffer, 1) != 1) // An then initare a read request of 1 byte { - std::cout << "Unable to read quiting" << std::endl; - exit(1); + errorHandling->handleError(-4,__FILE__); } return recieve_buffer[0] ; } @@ -70,8 +73,7 @@ uint8_t i2c_ch1_pImpL::writeWord(const uint8_t& address, const uint8_t& reg, con if (ioctl(deviceDescriptor, I2C_SLAVE, address) < 0) { - std::cout << "Unable to reach device : "<< address << " ! quiting" << std::endl; - exit(1); + errorHandling->handleError(-2,__FILE__); } send_buffer[0] = reg; @@ -79,8 +81,7 @@ uint8_t i2c_ch1_pImpL::writeWord(const uint8_t& address, const uint8_t& reg, con if ((write(deviceDescriptor, send_buffer, 2)) != 2) { - std::cout << "Unable to write quiting" << std::endl; - exit(0); + errorHandling->handleError(-3,__FILE__); } return 0; } @@ -90,16 +91,14 @@ uint16_t i2c_ch1_pImpL::readWord(const uint8_t& address, const uint8_t& reg) uint16_t result = 0 ; if (ioctl(deviceDescriptor, I2C_SLAVE, address) < 0) { - std::cout << "Unable to reach device : "<< address << " ! quiting" << std::endl; - exit(1); + errorHandling->handleError(-2,__FILE__); } writeByte(address,reg); //Initiate a write to indicate the desired register to read if (read(deviceDescriptor, recieve_buffer, 2) != 2) // An then initare a read request of 2 bytes { - std::cout << "Unable to read quiting" << std::endl; - exit(1); + errorHandling->handleError(-4,__FILE__); } result = (recieve_buffer[0] << 8) + recieve_buffer[1] ; return result ; diff --git a/developpment/periferals/i2c/i2c_ch1_pImpL.hpp b/developpment/periferals/i2c/i2c_ch1_pImpL.hpp index d53d85f..9c0312c 100644 --- a/developpment/periferals/i2c/i2c_ch1_pImpL.hpp +++ b/developpment/periferals/i2c/i2c_ch1_pImpL.hpp @@ -10,7 +10,7 @@ class i2c_ch1_pImpL { public: - i2c_ch1_pImpL(const uint8_t& mode); // Mode : Master or Slave + i2c_ch1_pImpL(const uint8_t& mode, ErrorHandler* err); // Mode : Master or Slave uint8_t readByte(const uint8_t& address, const uint8_t& reg); uint16_t readWord(const uint8_t& address, const uint8_t& reg); uint8_t writeByte(const uint8_t& address, const uint8_t& data); @@ -18,6 +18,7 @@ class i2c_ch1_pImpL private: + ErrorHandler *errorHandling; int16_t deviceDescriptor; uint8_t device_address; uint8_t device_reg; diff --git a/developpment/periferals/i2c/i2c_ch1_pImpL.o b/developpment/periferals/i2c/i2c_ch1_pImpL.o index 8402b60c4ae72f24d04fdad2f15f8636f47902e8..e2f3341133e8214ad36e55739fbf37e2cd1d3142 100644 GIT binary patch literal 7812 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 Y+${1_O%TM}RA<+U`Tm>^Y6N!w1|eMCX8-^I literal 5288 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π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 literal 48252 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