Skip to content
Snippets Groups Projects
pixel_original.cpp 1.98 KiB
	#include "pixel.hpp"

	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 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);
	}


	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;
	}