mirror of https://github.com/lumapu/ahoy.git
				
				
			
			
			
				Browse Source
			
			
			
			
				
		fix Prometheus and JSON endpoints (`config_override.h`) #561 publish MQTT with fixed interval even if inverter is not available #542 added JSON settings upload. NOTE: settings JSON download changed, so only settings should be uploaded starting from version `0.5.70` #551 MQTT topic and inverter name have more allowed characters: `[A-Za-z0-9./#$%&=+_-]+`, thx: @Mo Demman improved potential issue with `checkTicker`, thx @cbscpe MQTT option for reset values on midnight / not avail / communication stop #539 small fix in `tickIVCommunication` #534 add `YieldTotal` correction, eg. to have the option to zero at year start #512pull/566/head
				 16 changed files with 344 additions and 216 deletions
			
			
		| @ -1,110 +0,0 @@ | |||
| //-----------------------------------------------------------------------------
 | |||
| // 2022 Ahoy, https://ahoydtu.de
 | |||
| // Lukas Pusch, lukas@lpusch.de
 | |||
| // Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
 | |||
| //-----------------------------------------------------------------------------
 | |||
| #ifndef __LIST_H__ | |||
| #define __LIST_H__ | |||
| 
 | |||
| template<class T, class... Args> | |||
| struct node_s { | |||
|     typedef T dT; | |||
|     node_s *pre; | |||
|     node_s *nxt; | |||
|     uint8_t id; | |||
|     dT d; | |||
|     node_s() : pre(NULL), nxt(NULL), d() {} | |||
|     node_s(Args... args) : id(0), pre(NULL), nxt(NULL), d(args...) {} | |||
| }; | |||
| 
 | |||
| template<int MAX_NUM, class T, class... Args> | |||
| class llist { | |||
|     typedef node_s<T, Args...> elmType; | |||
|     typedef T dataType; | |||
|     public: | |||
|         llist() : root(mPool) { | |||
|             root = NULL; | |||
|             elmType *p = mPool; | |||
|             for(uint32_t i = 0; i < MAX_NUM; i++) { | |||
|                 p->id = i; | |||
|                 p++; | |||
|             } | |||
|             mFill = mMax = 0; | |||
|         } | |||
| 
 | |||
|         elmType *add(Args... args) { | |||
|             elmType *p = root, *t; | |||
|             if(NULL == (t = getFreeNode())) | |||
|                 return NULL; | |||
|             if(++mFill > mMax) | |||
|                 mMax = mFill; | |||
| 
 | |||
|             if(NULL == root) { | |||
|                 p = root = t; | |||
|                 p->pre = p; | |||
|                 p->nxt = p; | |||
|             } | |||
|             else { | |||
|                 p = root->pre; | |||
|                 t->pre = p; | |||
|                 p->nxt->pre = t; | |||
|                 t->nxt = p->nxt; | |||
|                 p->nxt = t; | |||
|             } | |||
|             t->d = dataType(args...); | |||
|             return p; | |||
|         } | |||
| 
 | |||
|         elmType *getFront() { | |||
|             return root; | |||
|         } | |||
| 
 | |||
|         elmType *get(elmType *p) { | |||
|             p = p->nxt; | |||
|             return (p == root) ? NULL : p; | |||
|         } | |||
| 
 | |||
|         elmType *rem(elmType *p) { | |||
|             if(NULL == p) | |||
|                 return NULL; | |||
|             elmType *t = p->nxt; | |||
|             p->nxt->pre = p->pre; | |||
|             p->pre->nxt = p->nxt; | |||
|             if((root == p) && (p->nxt == p)) | |||
|                 root = NULL; | |||
|             else | |||
|                 root = p->nxt; | |||
|             p->nxt = NULL; | |||
|             p->pre = NULL; | |||
|             p = NULL; | |||
|             mFill--; | |||
|             return (NULL == root) ? NULL : ((t == root) ? NULL : t); | |||
|         } | |||
| 
 | |||
|         uint16_t getFill(void) { | |||
|             return mFill; | |||
|         } | |||
| 
 | |||
|         uint16_t getMaxFill(void) { | |||
|             return mMax; | |||
|         } | |||
| 
 | |||
|     protected: | |||
|         elmType *root; | |||
| 
 | |||
|     private: | |||
|         elmType *getFreeNode(void) { | |||
|             elmType *n = mPool; | |||
|             for(uint32_t i = 0; i < MAX_NUM; i++) { | |||
|                 if(NULL == n->nxt) | |||
|                     return n; | |||
|                 n++; | |||
|             } | |||
|             return NULL; | |||
|         } | |||
| 
 | |||
|         elmType mPool[MAX_NUM]; | |||
|         uint16_t mFill, mMax; | |||
| }; | |||
| 
 | |||
| #endif /*__LIST_H__*/ | |||
					Loading…
					
					
				
		Reference in new issue