Ejemplo n.º 1
0
int make_mmc_partition(int total_block_count, unsigned char *mbr)
{
	int		block_start = 0, block_offset;

	SDInfo		sdInfo;
	PartitionInfo	partInfo[4];

///////////////////////////////////////////////////////////	
	memset((unsigned char *)&sdInfo, 0x00, sizeof(SDInfo));

///////////////////////////////////////////////////////////	
	get_SDInfo(total_block_count, &sdInfo);

///////////////////////////////////////////////////////////
	block_start	= calc_unit(_10MB, sdInfo);
	block_offset	= calc_unit(SYSTEM_PART_SIZE, sdInfo);

	partInfo[0].bootable	= 0x00;
	partInfo[0].partitionId	= 0x83;

	make_partitionInfo(block_start, block_offset, sdInfo, &partInfo[0]);

///////////////////////////////////////////////////////////	
	block_start += block_offset;
	block_offset = calc_unit(USER_DATA_PART_SIZE, sdInfo);
	
	partInfo[1].bootable	= 0x00;
	partInfo[1].partitionId	= 0x83;

	make_partitionInfo(block_start, block_offset, sdInfo, &partInfo[1]);

///////////////////////////////////////////////////////////	
	block_start += block_offset;
	block_offset = calc_unit(CACHE_PART_SIZE, sdInfo);
	
	partInfo[2].bootable	= 0x00;
	partInfo[2].partitionId	= 0x83;

	make_partitionInfo(block_start, block_offset, sdInfo, &partInfo[2]);

///////////////////////////////////////////////////////////	
	block_start += block_offset;
	block_offset = BLOCK_END;

	partInfo[3].bootable	= 0x00;
	partInfo[3].partitionId	= 0x0C;

	make_partitionInfo(block_start, block_offset, sdInfo, &partInfo[3]);

///////////////////////////////////////////////////////////	
	memset(mbr, 0x00, sizeof(mbr));
	mbr[510] = 0x55; mbr[511] = 0xAA;
	
	encode_partitionInfo(partInfo[0], &mbr[0x1CE]);
	encode_partitionInfo(partInfo[1], &mbr[0x1DE]);
	encode_partitionInfo(partInfo[2], &mbr[0x1EE]);
	encode_partitionInfo(partInfo[3], &mbr[0x1BE]);
	
	return 0;
}
Ejemplo n.º 2
0
void make_partitionInfo(int LBA_start, int count, SDInfo sdInfo, PartitionInfo *partInfo)
{
	int		temp = 0;
	int		_10MB_unit;
	
	partInfo->block_start	= LBA_start;

	if (sdInfo.addr_mode == CHS_MODE) {
		partInfo->C_start	= partInfo->block_start / (sdInfo.H_end * sdInfo.S_end);
		temp			= partInfo->block_start % (sdInfo.H_end * sdInfo.S_end);
		partInfo->H_start	= temp / sdInfo.S_end;
		partInfo->S_start	= temp % sdInfo.S_end + 1;

		if (count == BLOCK_END) {
			_10MB_unit = calc_unit(_10MB, sdInfo);
			partInfo->block_end	= sdInfo.C_end * sdInfo.H_end * sdInfo.S_end - _10MB_unit - 1;
			partInfo->block_count	= partInfo->block_end - partInfo->block_start + 1;
	
			partInfo->C_end	= partInfo->block_end / sdInfo.unit;
			partInfo->H_end = sdInfo.H_end - 1;
			partInfo->S_end = sdInfo.S_end;
		} else {
			partInfo->block_count	= count;
	
			partInfo->block_end	= partInfo->block_start + count - 1;
			partInfo->C_end		= partInfo->block_end / sdInfo.unit;
	
			temp				= partInfo->block_end % sdInfo.unit;
			partInfo->H_end		= temp / sdInfo.S_end;
			partInfo->S_end		= temp % sdInfo.S_end + 1;
		}

	} else {
		partInfo->C_start	= 0;
		partInfo->H_start	= 1;
		partInfo->S_start	= 1;

		partInfo->C_end		= 1023;
		partInfo->H_end		= 254;
		partInfo->S_end		= 63;
	
		if (count == BLOCK_END) {
			_10MB_unit = calc_unit(_10MB, sdInfo);
			partInfo->block_end	= sdInfo.total_block_count - _10MB_unit - 1;
			partInfo->block_count	= partInfo->block_end - partInfo->block_start + 1;

		} else {
			partInfo->block_count	= count;
			partInfo->block_end	= partInfo->block_start + count - 1;
		}
	}
}
Ejemplo n.º 3
0
void calc_all(){
    int i,j;
    for(i = 1; i < LAYER_SIZE; i++){
        for(j = 0; j < UNIT_SIZE; j++){
            unit[i][j].value = sigmoid(SIGMOID_PARAM, calc_unit(unit[i][j]));
        }
    }
}
Ejemplo n.º 4
0
// Calculates the angle between atoms i, j, and k in degrees.
// Atom j is the central atom.
double Molecule::calc_angle(int i, int j, int k)
{
  // return acos((calc_unit(i, j, 0) * calc_unit(j, k, 0)) + 
  // 	      (calc_unit(i, j, 1) * calc_unit(j, k, 1)) + 
  // 	      (calc_unit(i, j, 2) * calc_unit(j, k, 2))) * (180.0/acos(-1.0));
  return acos((calc_unit(j,i,0) * calc_unit(j,k,0)) + 
	      (calc_unit(j,i,1) * calc_unit(j,k,1)) + 
	      (calc_unit(j,i,2) * calc_unit(j,k,2))) * (180.0/acos(-1.0));
}
Ejemplo n.º 5
0
int make_mmc_partition(int total_block_count, unsigned char *mbr, int flag, char *argv[])
{
	int		block_start = 0, block_offset;

	SDInfo		sdInfo;
	PartitionInfo	partInfo[4];

///////////////////////////////////////////////////////////	
	memset((unsigned char *)&sdInfo, 0x00, sizeof(SDInfo));

///////////////////////////////////////////////////////////	
	get_SDInfo(total_block_count, &sdInfo);

///////////////////////////////////////////////////////////
// 반드시 Unit단위로 먼저 계산한다.
	block_start = calc_unit(CFG_PARTITION_START, sdInfo);
	if (flag)
		block_offset = calc_unit((unsigned long long)simple_strtoul(argv[3], NULL, 0)*1024*1024, sdInfo);
	else
		block_offset = calc_unit(SYSTEM_PART_SIZE, sdInfo);

	partInfo[0].bootable	= 0x00;
	partInfo[0].partitionId	= 0x83;

	make_partitionInfo(block_start, block_offset, sdInfo, &partInfo[0]);

///////////////////////////////////////////////////////////	
	block_start += block_offset;
	if (flag)
		block_offset = calc_unit((unsigned long long)simple_strtoul(argv[4], NULL, 0)*1024*1024, sdInfo);
	else
		block_offset = calc_unit(USER_DATA_PART_SIZE, sdInfo);
	
	partInfo[1].bootable	= 0x00;
	partInfo[1].partitionId	= 0x83;

	make_partitionInfo(block_start, block_offset, sdInfo, &partInfo[1]);

///////////////////////////////////////////////////////////	
	block_start += block_offset;
	if (flag)
		block_offset = calc_unit((unsigned long long)simple_strtoul(argv[5], NULL, 0)*1024*1024, sdInfo);
	else
		block_offset = calc_unit(CACHE_PART_SIZE, sdInfo);

	partInfo[2].bootable	= 0x00;
	partInfo[2].partitionId	= 0x83;

	make_partitionInfo(block_start, block_offset, sdInfo, &partInfo[2]);

///////////////////////////////////////////////////////////	
	block_start += block_offset;
	block_offset = BLOCK_END;

	partInfo[3].bootable	= 0x00;
	partInfo[3].partitionId	= 0x0C;

	make_partitionInfo(block_start, block_offset, sdInfo, &partInfo[3]);

///////////////////////////////////////////////////////////	
	memset(mbr, 0x00, sizeof(mbr));
	mbr[510] = 0x55; mbr[511] = 0xAA;
	
	encode_partitionInfo(partInfo[0], &mbr[0x1CE]);
	encode_partitionInfo(partInfo[1], &mbr[0x1DE]);
	encode_partitionInfo(partInfo[2], &mbr[0x1EE]);
	encode_partitionInfo(partInfo[3], &mbr[0x1BE]);
	
	return 0;
}
Ejemplo n.º 6
0
int main(int argc, char *argv[])
{
	FILE *fp;
	int	block_start = 0, block_offset = 0;
	int	total_block_count;
	int part_deb = 0;
	int part_android = 0;

	SDInfo sdInfo;
	PartitionInfo partInfo[4];
	unsigned char mbr[512];

	if (argc != 2) {
		printf("Usage: sd_fdisk <device_file>\n");
		return -1;
	}

	if (strcasestr(argv[0], "_deb")) {
		part_deb = 1;
	} else if (strcasestr(argv[0], "_android")) {
		part_android = 1;
	}

	memset((unsigned char *)&sdInfo, 0x00, sizeof(SDInfo));

	total_block_count = get_sd_block_count(argv[1]);
	get_SDInfo(total_block_count, &sdInfo);

	memset(mbr, 0x00, sizeof(mbr));
	mbr[510] = 0x55; mbr[511] = 0xAA;

	/* Reserved area */
	block_offset = calc_unit(154624<<10, sdInfo);

	if (part_deb) {
		printf("Making partition table: Debian\n");

		block_start += block_offset;
		partInfo[0].bootable	= 0x00;
		partInfo[0].partitionId	= 0x0C;
		block_offset = calc_unit(_100MB * 2, sdInfo);
		make_partitionInfo(block_start, block_offset, sdInfo, &partInfo[0]);

		block_start += block_offset;
		partInfo[2].bootable	= 0x00;
		partInfo[2].partitionId	= 0x82;
		block_offset = calc_unit(_100MB * 4, sdInfo);
		make_partitionInfo(block_start, block_offset, sdInfo, &partInfo[2]);

		block_start += block_offset;
		partInfo[1].bootable	= 0x00;
		partInfo[1].partitionId	= 0x83;
		make_partitionInfo(block_start, BLOCK_END, sdInfo, &partInfo[1]);

		encode_partitionInfo(partInfo[0], &mbr[0x1BE]);
		encode_partitionInfo(partInfo[1], &mbr[0x1CE]);
		encode_partitionInfo(partInfo[2], &mbr[0x1DE]);

	} else if (part_android) {
		printf("Making partition table: Android\n");

		block_start += block_offset;
		partInfo[1].bootable	= 0x00;
		partInfo[1].partitionId	= 0x83;
		block_offset = calc_unit(_100MB * 2, sdInfo);
		make_partitionInfo(block_start, block_offset, sdInfo, &partInfo[1]);

		block_start += block_offset;
		partInfo[2].bootable	= 0x00;
		partInfo[2].partitionId	= 0x83;
		block_offset = calc_unit(_100MB * 4, sdInfo);
		make_partitionInfo(block_start, block_offset, sdInfo, &partInfo[2]);

		block_start += block_offset;
		partInfo[3].bootable	= 0x00;
		partInfo[3].partitionId	= 0x83;
		block_offset = calc_unit(_100MB * 4, sdInfo);
		make_partitionInfo(block_start, block_offset, sdInfo, &partInfo[3]);

		block_start += block_offset;
		partInfo[0].bootable	= 0x00;
		partInfo[0].partitionId	= 0x0C;
		make_partitionInfo(block_start, BLOCK_END, sdInfo, &partInfo[0]);

		encode_partitionInfo(partInfo[0], &mbr[0x1BE]);
		encode_partitionInfo(partInfo[1], &mbr[0x1CE]);
		encode_partitionInfo(partInfo[2], &mbr[0x1DE]);
		encode_partitionInfo(partInfo[3], &mbr[0x1EE]);

	} else {
		/* Default partition table */
		block_offset += BLOCK_END;
		partInfo[0].bootable	= 0x00;
		partInfo[0].partitionId	= 0x0C;
		make_partitionInfo(block_start, BLOCK_END, sdInfo, &partInfo[0]);

		encode_partitionInfo(partInfo[0], &mbr[0x1BE]);
	}

	fp = fopen("sd_mbr.dat", "wb");
	fwrite(mbr, 1, sizeof(mbr), fp);
	fclose(fp);

	return 0;
}
Ejemplo n.º 7
0
double Molecule::calc_angle_oop(int i, int j, int k, int l)
{
  // \mathrm{sin } \theta_{ijkl} = \frac{\mathbf{\tilde{e}_{kj}} \times \mathbf{\tilde{e}_{kl}}}{\mathrm{sin } \phi_{jkl}} \cdot \mathbf{\tilde{e}_{ki}}

  // double ekj[3] = {calc_unit(k, j, 0), calc_unit(k, j, 1), calc_unit(k, j, 2)};
  // double ekl[3] = {calc_unit(k, l, 0), calc_unit(k, l, 1), calc_unit(k, l, 2)};
  // double eki[3] = {calc_unit(k, i, 0), calc_unit(k, i, 1), calc_unit(k, i, 2)};

  // double ekj_cross_kl[3];
  // ekj_cross_kl[0] = (ekj[1]*ekl[2]) - (ekj[2]*ekl[1]);
  // ekj_cross_kl[1] = (ekj[2]*ekl[0]) - (ekj[0]*ekl[2]);
  // ekj_cross_kl[2] = (ekj[0]*ekl[1]) - (ekj[1]*ekl[0]);

  // double ekj_cross_kl_dot_ki[3];
  // ekj_cross_kl_dot_ki[0] = ekj_cross_kl[0] * eki[0];
  // ekj_cross_kl_dot_ki[1] = ekj_cross_kl[1] * eki[1];
  // ekj_cross_kl_dot_ki[2] = ekj_cross_kl[2] * eki[2];

  // double theta = (ekj_cross_kl_dot_ki[0] + ekj_cross_kl_dot_ki[1] + ekj_cross_kl_dot_ki[2])/sin(angle(j,k,l));

  // if (theta < -1.0) theta = asin(-1.0);
  // else if (theta > 1.0) theta = asin(1.0);
  // else theta = asin(theta);

  double ejkl_x = (calc_unit(k,j,1) * calc_unit(k,l,2)) - (calc_unit(k,j,2) * calc_unit(k,l,1));
  double ejkl_y = (calc_unit(k,j,2) * calc_unit(k,l,0)) - (calc_unit(k,j,0) * calc_unit(k,l,2));
  double ejkl_z = (calc_unit(k,j,0) * calc_unit(k,l,1)) - (calc_unit(k,j,1) * calc_unit(k,l,0));
  
  double exx = ejkl_x * calc_unit(k,i,0);
  double eyy = ejkl_y * calc_unit(k,i,1);
  double ezz = ejkl_z * calc_unit(k,i,2);

  double theta = (exx + eyy + ezz)/sin(angle(j,k,l));

  if (theta < -1.0) theta = asin(-1.0);
  else if (theta > 1.0) theta = asin(1.0);
  else theta = asin(theta);

  return theta * (180.0/acos(-1.0));
}