mirror of
				https://github.com/davidgiven/fluxengine.git
				synced 2025-10-24 11:11:02 -07:00 
			
		
		
		
	
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "lib/core/globals.h"
 | |
| #include "lib/data/fluxmap.h"
 | |
| #include "lib/external/kryoflux.h"
 | |
| #include "protocol.h"
 | |
| #include "lib/external/flx.h"
 | |
| 
 | |
| std::unique_ptr<Fluxmap> readFlxBytes(const Bytes& bytes)
 | |
| {
 | |
|     ByteReader br(bytes);
 | |
| 
 | |
|     /* Skip header. */
 | |
| 
 | |
|     for (;;)
 | |
|     {
 | |
|         if (br.eof())
 | |
|             error("malformed FLX stream");
 | |
|         uint8_t b = br.read_8();
 | |
|         if (b == 0)
 | |
|             break;
 | |
|     }
 | |
| 
 | |
|     auto fluxmap = std::make_unique<Fluxmap>();
 | |
|     while (!br.eof())
 | |
|     {
 | |
|         uint8_t b = br.read_8();
 | |
|         switch (b)
 | |
|         {
 | |
|             case FLX_INDEX:
 | |
|                 fluxmap->appendIndex();
 | |
|                 continue;
 | |
| 
 | |
|             case FLX_STOP:
 | |
|                 goto stop;
 | |
| 
 | |
|             default:
 | |
|             {
 | |
|                 if (b < 32)
 | |
|                     error("unknown FLX opcode 0x{:2x}", b);
 | |
|                 nanoseconds_t interval = b * FLX_TICK_NS;
 | |
|                 fluxmap->appendInterval(interval / NS_PER_TICK);
 | |
|                 fluxmap->appendPulse();
 | |
|                 break;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| stop:
 | |
| 
 | |
|     return fluxmap;
 | |
| }
 |