Ejemplo n.º 1
0
Archivo: file.c Proyecto: 12019/YCOS
uint16 as_create_cyclic(asgard_handle * handle, uint16 fid, uchar ACC_READ, uchar ACC_WRT, uchar ACC_INC, uchar ACC_INV, uchar ACC_RHB, uchar total_rec, uchar rec_size) {
	ef_rec_header header;
	uchar * buffer;
	uchar i;
	fs_file * file = as_get_current_directory(handle);				//get currently selected directory
	if(file == NULL) return APDU_NO_EF_SELECTED;
	if((file->entry.type & FS_TYPE_DIR) == 0) return APDU_COMMAND_INVALID;
	header.structure = EF_CYCLIC;
	header.status = EF_VALID;
	header.access_rw = ACC_READ << 4 | ACC_WRT;
	header.access_inc = ACC_INC;
	header.access_ri = ACC_RHB << 4 | ACC_INV;
	header.num_of_records = total_rec;
	header.rec_size = rec_size;
	header.first = 0;
	file = fs_fcreate(file, fid, handle->mode);
	fs_fwrite(file, &header, sizeof(ef_rec_header));				//write header first
	buffer = (uchar *)malloc(rec_size);
	memset(buffer, 0xff, rec_size);
	for(i=0;i<total_rec;i++) {
		fs_fwrite(file, buffer, rec_size);
	}
	free(buffer);
	as_set_current_file(handle, file);								//automatically select new file
	return APDU_SUCCESS;
}
Ejemplo n.º 2
0
Archivo: file.c Proyecto: 12019/YCOS
uint16 as_create_binary(asgard_handle * handle, uint16 fid, uchar ACC_READ, uchar ACC_WRT, uchar ACC_INC, uchar ACC_INV, uchar ACC_RHB, uchar * buffer, uint16 size) {
	ef_bin_header header;
	fs_file * file = as_get_current_directory(handle);				//get currently selected directory
	if(file == NULL) return APDU_NO_EF_SELECTED;
	if((file->entry.type & FS_TYPE_DIR) == 0) return APDU_COMMAND_INVALID;
	header.structure = EF_TRANSPARENT;
	header.size = size;
	header.status = EF_VALID;
	header.access_rw = ACC_READ << 4 | ACC_WRT;
	header.access_inc = ACC_INC;
	header.access_ri = ACC_RHB << 4 | ACC_INV;
	file = fs_fcreate(file, fid, handle->mode);
	fs_fwrite(file, &header, sizeof(ef_bin_header));				//write header first
	fs_fwrite(file, buffer, size);									//write content (should i write content first to default??)
	as_set_current_file(handle, file);								//automatically select new file
	return APDU_SUCCESS;
}
Ejemplo n.º 3
0
Archivo: file.c Proyecto: 12019/YCOS
//uint16 _write_new_rec(uint16 rec_no, uchar size, uchar *buffer);
uint16 as_write_record(asgard_handle * handle, uint16 rec_no, uchar *buffer, uchar size) {
	ef_rec_header header;
	fs_file * file = as_get_current_file(handle);
	uchar bytes_wrote;
	uint16 offset;
	//uchar actual_index;
	if(file == NULL) return APDU_NO_EF_SELECTED;
	if(file->entry.type & FS_TYPE_DIR) return APDU_COMMAND_INVALID;
	fs_fseek(file, 0);
	fs_fread(file, &header, sizeof(ef_rec_header));							//getting ef information from ef header first
	if(header.structure == EF_LINFIX || header.structure == EF_CYCLIC) {
		return APDU_INSTRUCTION_INVALID;									//wrong command
	}
	if(header.status != EF_VALID) {
		return APDU_INVALID_STATUS;
	}
	if(size != header.rec_size) return APDU_OUT_OF_RANGE;					//check for record size
	if(header.structure == EF_LINFIX) {										//read operation for linier fixed
		offset = sizeof(ef_rec_header) + (header.rec_size * rec_no);		//calculate offset for linier fixed
		handle->cur_rec_index = rec_no;										//update handle current record
		fs_fseek(file, offset);
		bytes_wrote = fs_fwrite(file, buffer, header.rec_size);
		if(bytes_wrote == header.rec_size) return APDU_SUCCESS;
		//return APDU_FATAL_ERROR;
	} else if(header.structure == EF_CYCLIC) {								//read operation for cyclic
		if(rec_no == 0xffff) rec_no = header.num_of_records - 1;			//check if rec_no is negative
		rec_no = ((rec_no + header.first) % header.num_of_records);			//calculate modded record number
		handle->cur_rec_index = rec_no;										//update handle current record
		offset = sizeof(ef_rec_header) + (header.rec_size * rec_no);		//calculate offset for cyclic
		fs_fseek(file, offset);
		bytes_wrote = fs_fwrite(file, buffer, header.rec_size);
		if(bytes_wrote == header.rec_size) { 
			header.first = rec_no;
			fs_fseek(file, 0);
			fs_fwrite(file, &header, sizeof(ef_rec_header));				//set new ef information
			//handle->cur_rec_index = 0;									//should current record index set to 0 for relative positioning
			return APDU_SUCCESS;
		}
		//return APDU_FATAL_ERROR;
	}
	return APDU_FATAL_ERROR;
}
Ejemplo n.º 4
0
//ethan_20110801_add
ER Cal_SaveAWBGS(void)
{
    ER ercode = 0;
    FLGPTN  uiFlag = 0;
    HNVT_FILE *pFile;
    Cal_ClearOSD(_OSD_INDEX_TRANSPART);

    if(AAA_Adjust.AWB_Status == _AWB_Status)
    {
        AAA_Adjust.AWBGS_Status = _AWB_Status;
        AAA_Adjust.AWBGS.Rgain = AAA_Adjust.AWB.Rgain;
        AAA_Adjust.AWBGS.Bgain = AAA_Adjust.AWB.Bgain;
        sprintf(CalStringBuffer,"AWB GS: Rgain:%d Bgain:%d",AAA_Adjust.AWBGS.Rgain,AAA_Adjust.AWBGS.Bgain);
        Cal_ShowStringWithColor(CalStringBuffer,20, 100, 4);
        ercode =  E_OK;
    }
    else
        ercode =  E_SYS;
    sprintf(CalStringBuffer,"Press SHUTTER to return");
    Cal_ShowStringWithColor(CalStringBuffer,20, 120, 4);

    if(ercode == E_OK)
    {
        FilesysWaitCmdFinish(FST_TIME_INFINITE);
        pFile = fs_fopen("A:\\AWBGS.txt","w");
        if(pFile == NULL)
        {
            sprintf(CalStringBuffer, "create  AWBGS.txt fail");
            Cal_ShowStringWithColor(CalStringBuffer,20, 40, 4);
            TimerDelayMs(2000);
        }
        else
        {
            sprintf(CalStringBuffer, "%d %d",AAA_Adjust.AWBGS.Rgain,AAA_Adjust.AWBGS.Bgain);
            fs_fwrite(CalStringBuffer, 1, 7, pFile);
            fs_fclose(pFile);
            g_CalStringRect.uiLeft    = 20;
            g_CalStringRect.uiTop     = 200;
            g_CalStringRect.uiWidth   = 300;
            g_CalStringRect.uiHeight  = 30;
            sprintf(CalStringBuffer, "AWBGS.txt OK");
            Cal_ShowStringWithColor(CalStringBuffer,20, 40, 4);
            TimerDelayMs(2000);
        }

        Cal_WriteCalData(PSTORE_SEC_SENSOR);
    }
    clr_flg(FLG_ID_KEY, FLGKEY_SHUTTER2);
    wai_flg(&uiFlag, FLG_ID_KEY, FLGKEY_SHUTTER2, TWF_ORW | TWF_CLR);
    return ercode;
}
Ejemplo n.º 5
0
Archivo: file.c Proyecto: 12019/YCOS
/* rehabilitate currently selected file */
uint16 as_rehabilitate(asgard_handle * handle) {
	ef_bin_header header;														//standard ef header
	uchar bytes_wrote = 0;
	fs_file * file = as_get_current_file(handle);
	if(file == NULL) return APDU_NO_EF_SELECTED;
	fs_fseek(file, 0);
	fs_fread(file, &header, sizeof(ef_bin_header));								//getting ef information from ef header first
	if((header.status & EF_VALID) == 0) {
		return APDU_INVALID_STATUS;
	}
	header.status |= EF_VALID;
	fs_fseek(file, 0);
	bytes_wrote = fs_fwrite(file, &header, sizeof(ef_bin_header));				//set new ef information
	if(bytes_wrote != sizeof(ef_bin_header)) return APDU_FATAL_ERROR;
	return APDU_SUCCESS;
}
Ejemplo n.º 6
0
Archivo: file.c Proyecto: 12019/YCOS
uint16 as_write_binary(asgard_handle * handle, uint16 offset, uchar * buffer, uchar size) {
	ef_bin_header header;
	fs_file * file = as_get_current_file(handle);
	if(file == NULL) return APDU_NO_EF_SELECTED;
	if(file->entry.type & FS_TYPE_DIR) return APDU_COMMAND_INVALID;
	fs_fseek(file, 0);
	fs_fread(file, &header, sizeof(ef_bin_header));					//getting ef information from ef header first
	if(header.structure == EF_TRANSPARENT) {
		return APDU_INSTRUCTION_INVALID;							//wrong command
	}
	if(header.status != EF_VALID) {
		return APDU_INVALID_STATUS;
	}
	if(offset + size <= (header.size + sizeof(ef_bin_header))) {
		fs_fseek(file, offset + sizeof(ef_bin_header));
		fs_fwrite(file, buffer, size);
		return APDU_SUCCESS;										//read success
	}
	return APDU_OUT_OF_RANGE;										//wrong offset and length	
}