mirror of https://github.com/lumapu/ahoy.git
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							45 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							45 lines
						
					
					
						
							1.2 KiB
						
					
					
				
								#include "common.hpp"
							 | 
						|
								
							 | 
						|
								#include <sstream>
							 | 
						|
								#include <iostream>
							 | 
						|
								#include <iomanip>
							 | 
						|
								
							 | 
						|
								using namespace std;
							 | 
						|
								
							 | 
						|
								/** Convert given 5-byte address to human readable hex string */
							 | 
						|
								string prettyPrintAddr(string &a)
							 | 
						|
								{
							 | 
						|
								    ostringstream o;
							 | 
						|
								    o << hex << setw(2)
							 | 
						|
								      << setfill('0') << setw(2) << int(a[0]) 
							 | 
						|
								      << ":" << setw(2) << int(a[1])
							 | 
						|
								      << ":" << setw(2) << int(a[2])
							 | 
						|
								      << ":" << setw(2) << int(a[3])  
							 | 
						|
								      << ":" << setw(2) << int(a[4]) << dec;
							 | 
						|
								    return o.str(); 
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								/** Convert a Hoymiles inverter/DTU serial number into its
							 | 
						|
								 * corresponding NRF24 address byte sequence (5 bytes).
							 | 
						|
								 *
							 | 
						|
								 * The inverters use a BCD representation of the last 8
							 | 
						|
								 * digits of their serial number, in reverse byte order, 
							 | 
						|
								 * followed by \x01.
							 | 
						|
								 */
							 | 
						|
								string serno2shockburstaddrbytes(uint64_t n)
							 | 
						|
								{
							 | 
						|
								    char b[5];
							 | 
						|
								    b[3] =       (((n/10)%10) << 4) |       ((n/1)%10);
							 | 
						|
								    b[2] =     (((n/1000)%10) << 4) |     ((n/100)%10);
							 | 
						|
								    b[1] =   (((n/100000)%10) << 4) |   ((n/10000)%10);
							 | 
						|
								    b[0] = (((n/10000000)%10) << 4) | ((n/1000000)%10);
							 | 
						|
								    b[4] = 0x01;
							 | 
						|
								
							 | 
						|
								    string s = string(b, sizeof(b));
							 | 
						|
								
							 | 
						|
								    cout << dec << "ser# " << n << " --> addr "
							 | 
						|
								         << prettyPrintAddr(s) << endl;
							 | 
						|
								    return s;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								
							 |