Esempio n. 1
0
int SDEBUG_CMDLARGEParser(struct SerialPortConfigProfile *pSPConfig)
{
	SerialPortConfigProfile_t *SP = (struct SerialPortConfigProfile *)pSPConfig;
	unsigned long value = 0;
	unsigned int RegAddr = 0;

	switch(SP->RequestPacket[2])
	{
		//FF 0E 01 68 05 00 00 00 "00" 00 00 03 31 51   00->0ffset
		//FF 0E 00 68 05 00 00 00 "1B" 00 00 00 22 49   00->Offset
		case READ:
			if(SP->RequestPacket[3] == SPV9200ADDR)
			{
				RegAddr = SP->RegBankAddr + SP->RequestPacket[8] * 4;
				if(SP->UioDevice->uioReadCount > 256)
				{
					SDEBUG_UioClose(SP);
					SDEBUG_UioOpen(SP);	
					SP->UioDevice->uioReadCount = 0;
				}
				SDEBUG_UioRead(SP, CMDLARGE, RegAddr, &value);
				SP->UioDevice->uioReadCount++;
				printf("RegAddr : 0x%x\n",RegAddr + BASE_PHY_ADDR);
				printf("read value: 0x%lX\n",value);
				printf("read count: %u\n",SP->UioDevice->uioReadCount);
				SDEBUG_WriteRegValueCMD(SP, SP->ttyFD, CMDLARGE, value);
			}
					
			break;
		case WRITE:
			if(SP->RequestPacket[3] == SPV9200ADDR)
			{
				RegAddr = SP->RegBankAddr + SP->RequestPacket[8] * 4;
				if(SP->UioDevice->uioReadCount > 256)
				{
					SDEBUG_UioClose(SP);
					SDEBUG_UioOpen(SP);	
					SP->UioDevice->uioReadCount = 0;
				}
				value = (SP->RequestPacket[9] << 24) + (SP->RequestPacket[10] << 16) + (SP->RequestPacket[11] << 8) +SP->RequestPacket[12];
				SDEBUG_UioWrite(SP, CMDLARGE, RegAddr, value);
				SP->UioDevice->uioReadCount++;
				printf("RegAddr : 0x%x\n",RegAddr + BASE_PHY_ADDR);
				printf("write value: 0x%2lX\n",value);
				printf("read count: %u\n",SP->UioDevice->uioReadCount);
				//SDEBUG_WriteRegValueCMD(SP, SP->ttyFD, CMDLARGE, value);
				SDEBUG_WriteFF01CMD(SP->ttyFD); 
			}
			break;
		case REGTYPE:
			// don't need to implement this type
			break;
	}
	

	return 0;
}
Esempio n. 2
0
int main(int argc, char *argv[]) 
{
	int opt; 
	int Daemon_mode;
	struct SerialPortConfigProfile pTTYConfig;

	memset(&pTTYConfig,0,sizeof(struct SerialPortConfigProfile));

	// parser option setting
	while((opt = getopt(argc, argv, "n:dh")) != -1) { 
		switch(opt) { 
			case 'd': 
				Daemon_mode = 1;
				break;
			case 'h':
				SDEBUG_Usage();
				break; 
			case 'n': 
				if(strlen(optarg) == 0)
				{
					exit(1);
				}else{
					printf("tty name: %s\n", optarg); 
					strcpy(pTTYConfig.ttyName,optarg);
				}
				break; 
			case ':': 
				printf("option needs a value\n"); 
				break; 
			case '?': 
				SDEBUG_Usage();
				exit(1);
				break; 
		} 
	} 

	// default tty name is /dev/ttyS0
	if(strlen(pTTYConfig.ttyName) == 0)
	{
		strcpy(pTTYConfig.ttyName,TTYNAME);
	}

	if( SDEBUG_Init(&pTTYConfig) == -1)
	{	
		perror("Initial fail\n");
		exit(1);
	}

	// open device
	if(SDEBUG_OpenDevice(&pTTYConfig) == -1)
	{
		perror("open device fail\n");
		exit(1);	
	}

	// get tty config 
	if(SDEBUG_GetTTYConfig(&pTTYConfig) == -1)
	{
		perror("get tty config fail\n");
		exit(1);
	}
	
	// set tty config 
	if(SDEBUG_SetTTYConfig(&pTTYConfig) == -1)
	{
		perror("set tty config fail\n");
		exit(1);
	}

	// uio device open
	SDEBUG_UioOpen(&pTTYConfig);

	// Sdebug CMD parser
	while(1) {

		if(SDEBUG_ReadRequestCMD(&pTTYConfig, pTTYConfig.ttyFD) == -1)
			break;

		if(SDEBUG_CMDParser(&pTTYConfig) == -1)
		{
			printf("cmd parser fail\n");
		} 
	
	}

	// restore ttyS0 for console
	SDEBUG_RestoreTTYSetting(&pTTYConfig);

	// close device
	if(SDEBUG_CloseDevice(&pTTYConfig) == -1)
	{
		perror("open device fail\n");
		exit(1);	
	}

	// uio device close
	SDEBUG_UioClose(&pTTYConfig);

	// release memory
	SDEBUG_Release(&pTTYConfig);
	return 0;
}
Esempio n. 3
0
// for sdebug 4.5.1.1
int SDEBUG_CMDSMALLParser(struct SerialPortConfigProfile *pSPConfig)
{
	SerialPortConfigProfile_t *SP = (struct SerialPortConfigProfile *)pSPConfig;
	unsigned long value = 0;
	unsigned int RegAddr = 0;

	switch(SP->RequestPacket[2])
	{
		case READ:
			//FF 0A 00 68 0C "00 1A" "00 FF" 6A => offset "00 1A" ,write value "00 FF"
			if(SP->RequestPacket[3] == SPV9200ADDR)
			{
				RegAddr = SP->RegBankAddr +  (SP->RequestPacket[6] * 4);
				if(SP->UioDevice->uioReadCount > 256)
				{
					SDEBUG_UioClose(SP);
					SDEBUG_UioOpen(SP);	
					SP->UioDevice->uioReadCount = 0;
				}
				SDEBUG_UioRead(SP, CMDLARGE, RegAddr, &value);
				SP->UioDevice->uioReadCount++;
				printf("RegAddr : 0x%x\n",RegAddr + BASE_PHY_ADDR);
				printf("read value: 0x%lX\n",value);
				//printf("read count: %u\n",SP->UioDevice->uioReadCount);
				SDEBUG_WriteRegValueCMD(SP, SP->ttyFD, CMDLARGE, value);
			}
					
			break;
		case WRITE:
			//FF 0A 00 68 0C "00 1A" "00 FF" 6A => offset "00 1A" ,write value "00 FF"
			if(SP->RequestPacket[3] == SPV9200ADDR)
			{
				RegAddr = SP->RegBankAddr + SP->RequestPacket[6] * 4;
				if(SP->UioDevice->uioReadCount > 256)
				{
					SDEBUG_UioClose(SP);
					SDEBUG_UioOpen(SP);	
					SP->UioDevice->uioReadCount = 0;
				}
				value = (SP->RequestPacket[7] << 8) +SP->RequestPacket[8];
				SDEBUG_UioWrite(SP, CMDSMALL, RegAddr, value);
				SP->UioDevice->uioReadCount++;
				//printf("RegAddr : 0x%x\n",RegAddr + BASE_PHY_ADDR);
				//printf("write value: 0x%2lX\n",value);
				//printf("read count: %u\n",SP->UioDevice->uioReadCount);
				//SDEBUG_WriteRegValueCMD(SP, SP->ttyFD, CMDSMALL, value);
				SDEBUG_WriteFF01CMD(SP->ttyFD); 
			}
			break;
		case REGTYPE:
			//FF 0A 02 68 0C 00 FF "01 89" F8  => group 393
			if(SP->RequestPacket[3] == SPV9200ADDR)
			{
				if(SP->RequestPacket[4] == 0x00) //Bank00 ~ Bank11
				{
					// Uio map is from 0xBFFE0000 to 0xBFFEF000 
					SP->RegBankAddr = ((SP->RequestPacket[7] << 8) + SP->RequestPacket[8]) * 0x400 + (BANK00 - BASE_PHY_ADDR) ;
				}
				else if(SP->RequestPacket[4] == 0x0C) //Group00 ~ Group255
				{
					SP->RegBankAddr = ((SP->RequestPacket[7] << 8)  + SP->RequestPacket[8]) * 0x80;
				}	
				SDEBUG_WriteFF01CMD(SP->ttyFD); // write 0xff 0x01 to ask next packet
			}
			break;
		default:
			printf("no this type\n");
			break;
	}
	

	return 0;
}
Esempio n. 4
0
int SDEBUG_CMDTINYParser(struct SerialPortConfigProfile *pSPConfig)
{
	SerialPortConfigProfile_t *SP = (struct SerialPortConfigProfile *)pSPConfig;
	unsigned long value = 0;
	unsigned int RegAddr = 0;

	switch(SP->RequestPacket[2])
	{
		case READ:
			if(SP->RequestPacket[3] == SPV9200ADDR)
			{
				RegAddr = SP->RegBankAddr + SP->RequestPacket[5] * 4;
				if(SP->UioDevice->uioReadCount > 256)
				{
					SDEBUG_UioClose(SP);
					SDEBUG_UioOpen(SP);	
					SP->UioDevice->uioReadCount = 0;
				}
				SDEBUG_UioRead(SP, CMDTINY, RegAddr, &value);
				SP->UioDevice->uioReadCount++;
				printf("RegAddr : 0x%x\n",RegAddr + BASE_PHY_ADDR);
				printf("read value: 0x%lX\n",value);
				printf("read count: %u\n",SP->UioDevice->uioReadCount);
				SDEBUG_WriteRegValueCMD(SP, SP->ttyFD, CMDTINY, value);
			}
					
			break;
		case WRITE:
			if(SP->RequestPacket[3] == SPV9200ADDR)
			{
				RegAddr = SP->RegBankAddr + SP->RequestPacket[5] * 4;
				if(SP->UioDevice->uioReadCount > 256)
				{
					SDEBUG_UioClose(SP);
					SDEBUG_UioOpen(SP);	
					SP->UioDevice->uioReadCount = 0;
				}
				value = SP->RequestPacket[6];
				SDEBUG_UioWrite(SP, CMDTINY, RegAddr, value);
				SP->UioDevice->uioReadCount++;
				printf("RegAddr : 0x%x\n",RegAddr + BASE_PHY_ADDR);
				printf("write value: 0x%lX\n",value);
				printf("read count: %u\n",SP->UioDevice->uioReadCount);
				SDEBUG_WriteRegValueCMD(SP, SP->ttyFD, CMDTINY, value);
				SDEBUG_WriteFF01CMD(SP->ttyFD); 
			}
	
			break;
		case REGTYPE:
			//FF 08 02 68 "00" FF "00" 90 => 00->Bank type, 00-> bank number
			//FF 08 02 68 "05" FF "00" 8B =>  05->group, 00-> group number
			if(SP->RequestPacket[3] == SPV9200ADDR)
			{
				if(SP->RequestPacket[4] == 0x00) //Bank00 ~ Bank11
				{
					// Uio map is from 0xBFFE0000 to 0xBFFEF000 
					SP->RegBankAddr = SP->RequestPacket[6] * 0x400 + (BANK00 - BASE_PHY_ADDR) ;
				}
				else if(SP->RequestPacket[4] == 0x05) //Group00 ~ Group255
				{
					SP->RegBankAddr = SP->RequestPacket[6] * 0x80;
				}	
				SDEBUG_WriteFF01CMD(SP->ttyFD); // write 0xff 0x01 to ask next packet
			}
			break;
	}
	

	return 0;
}