⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dib2device.cpp

📁 RMI的处理器au1200系列所用的BOOTLOAD,包括SD卡启动USB启动硬盘启动网络启动,并初始化硬件的所有参数,支持内核调试.
💻 CPP
字号:

#include <string>
#include <map>
#include "bitmap.h"
#include "constants.h"
#include "srecord.h"

using namespace std;


int stringToInt(const char* string);
int charToInt(const char ch);

typedef map<char, string> ArgumentMap;
typedef vector<string> InputFileVector;


void parse_arguments(ArgumentMap& args, InputFileVector& inputFiles, int argc, char* argv[])
{
	for(int i = 0; i < argc; ++i)
		if(argv[i][0] == '-')
		{
			switch(argv[i][1])
			{
				case INPUT_DIB:
					for(i++; i < argc && argv[i][0] != '-'; ++i)
					{
						inputFiles.push_back(argv[i]);
					}
					if(i < argc)
						--i;
					break;
				default:
					if(i == argc-1 || argv[i+1][0] == '-')
						args[argv[i][1]] = "";
					else
						args[argv[i][1]] = string(argv[i+1]);
					break;
			}
		}
}

int main(int argc, char* argv[])
{
	ArgumentMap args;
	InputFileVector inputs;
	args[OUTPUT_DDB]	= DEFAULT_OUTPUT_DDB;
	args[BIT_DEPTH]		= DEFAULT_BIT_DEPTH;

	parse_arguments(args, inputs, argc, argv);
			
		//		SRecord srec;
		//		srec.package_binary("hydrogen.ddb", "hydrogen.rec", 0xBFCA0000);

	if(inputs.size() != 0)
	{
		BitmapConverter bmp;
		for(InputFileVector::const_iterator iter = inputs.begin(); iter != inputs.end(); ++iter)
		{
			if(bmp.load(*iter))
				printf("Bitmap Loaded: %s\n", (*iter).c_str());
			else
			{
				printf("Error loading dib bitmap file: %s\n", (*iter).c_str());
				return 0;
			}
		}

		if(bmp.save((*args.find(OUTPUT_DDB)).second, atoi((*args.find(BIT_DEPTH)).second.c_str()) ) )
		{
			printf("Bitmap Conversion Complete: %s (%d bits)\n", (*args.find(OUTPUT_DDB)).second.c_str(), atoi((*args.find(BIT_DEPTH)).second.c_str()) );
			
			if(args.find(OUTPUT_SREC) != args.end())
			{
				SRecordProcessor srec;
				srec.load("booter.rec");
				if(srec.load_binary((*args.find(OUTPUT_DDB)).second, stringToInt((*args.find(SREC_ADDRESS)).second.c_str())))
				{
					if(srec.save_merged((*args.find(OUTPUT_SREC)).second))
						printf("Srecord packaging Complete: %s (0x%X)\n", (*args.find(OUTPUT_SREC)).second.c_str(), stringToInt((*args.find(SREC_ADDRESS)).second.c_str()) );
				}
			}
		}
		else
			printf("Error saving output file: %s\n", (*args.find(OUTPUT_DDB)).second.c_str());
	}
	else
		printf("Usage: %s -%c input_dib1 [input_dib2 ... input_dib3] [-%c output_ddb] [-%c bit_depth]\n", APP_NAME, INPUT_DIB, OUTPUT_DDB, BIT_DEPTH );

	printf("\n");
}


int stringToInt(const char* string)
{
	int value = 0;
	int i;
	
	for(i = 0; string[i] != 0 && string[i] != 'x'; ++i);

	for(++i; string[i] != 0; ++i)
	{
		value = value << 4;
		value |= charToInt(string[i]);
	}
	return value;
}

int charToInt(const char ch)
{
	switch (ch)
	{
		case '0':
		case '1':
		case '2':
		case '3':
		case '4':
		case '5':
		case '6':
		case '7':
		case '8':
		case '9':
			return (ch - '0');
			break;
		case 'A':
		case 'a':
			return 10;
			break;
		case 'B':
		case 'b':
			return 11;
			break;
		case 'C':
		case 'c':
			return 12;
			break;
		case 'D':
		case 'd':
			return 13;
			break;
		case 'E':
		case 'e':
			return 14;
			break;
		case 'F':
		case 'f':
			return 15;
			break;
		default:
			return 0;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -