Skip to content
Snippets Groups Projects
pixel_original.cpp 2.06 KiB
Newer Older
Vipin Thomas's avatar
Vipin Thomas committed
	#include "pixel.hpp"
Vipin Thomas's avatar
Vipin Thomas committed
	
Vipin Thomas's avatar
Vipin Thomas committed
	static int count_streams = 0;
	static long long charIn=0;
	static long long final_char=0;
	int addNum=0;
	
	void pixel(ap_int<32> selector,
			ap_int<32> position1,
			ap_int<32> position2,
			ap_int<32> stream_count,
			ap_int<32> ascii,
			stream &din,
			stream &dout
	
	) {
		#pragma HLS INTERFACE ap_ctrl_none port=return
		#pragma HLS INTERFACE s_axilite port=selector
		#pragma HLS INTERFACE s_axilite port=position1
		#pragma HLS INTERFACE s_axilite port=position2
		#pragma HLS INTERFACE s_axilite port=stream_count
		#pragma HLS INTERFACE s_axilite port=ascii 
		#pragma HLS INTERFACE axis port=din
		#pragma HLS INTERFACE axis port=dout
	
		pkt_t pkt=din.read();
	
		switch(selector)
		{
			case 0:
				
				if (count_streams == 0){
					charIn=convert(ascii);
					final_char=0;
				}
	
				if((count_streams >= 3 * (position1 - 1)) && (count_streams < 3 * (position2) - 1)){
					addNum=0;
					if(charIn!=0){
						addNum=charIn%10;
						charIn=(int)charIn/10;
					}
	
					if(pkt.data % 2 == 0 && addNum == 1){
						pkt.data += 1;
					}else if(pkt.data % 2 != 0 && addNum == 0){
						pkt.data -= 1;
					}
	
				}
	
				break;
	
			case 1:
	
				if((count_streams >= 3 * (position1 - 1)) && (count_streams < 3 * (position2)-1)){
					
					
					decrypt(pkt.data);
				
				}
				break;
	
			default:
				break;
		}
		
		count_streams++;
	
		if (count_streams == stream_count){
			count_streams = 0;
			charIn=0;
			addNum=0;
			ascii=0;
			if(selector == 1){
				ascii= convertBinInt(final_char);
				final_char=0;
			}
	
		}
	
		dout.write(pkt);
Vipin Thomas's avatar
Vipin Thomas committed
	}
Vipin Thomas's avatar
Vipin Thomas committed
	
	
	long long convert(int n) {
		long long bin = 0;
		int rem, i = 1, step = 1;
		while (n != 0) {
			rem = n % 2;
			n /= 2;
			bin += rem * i;
			i *= 10;
		}
		return bin;
	}
	
	void decrypt(int data) {
	int bit;
	if(data % 2 == 0){
	   bit = 0;
	}else if(data % 2 != 0){
		bit=1;
	}
	final_char= final_char*10+bit;
	
	}
	
	int convertBinInt(long long n) {
	int dec = 0, i = 7, b=0,rem=0;
		while (n != 0) {
			b=pow(10,i);
			rem = n / b;
			n =n % b;
			dec += rem * pow(2, 7-i);
			--i;
		}
		return dec;
	}
	
Vipin Thomas's avatar
Vipin Thomas committed