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

📄 command.c

📁 DSP 5409 plc应用程序,调试通过,是用在电力线通讯上的演示程序.
💻 C
📖 第 1 页 / 共 5 页
字号:
/*Slave*/			// txUserDataArray[2] = MyAddr - high
/*Slave*/			// txUserDataArray[3] = MyAddr - low
/*Slave*/			// txUserDataArray[4] = SUCCESS
/*Slave*/			//==============================================================================
/*Slave*/			// No command to execute.  Just respond if we get to this point.
/*Slave*/
/*Slave*/			// Fill User Data buffer with zeroes
/*Slave*/			memset(txUserDataArray, 0, DATA_BUFFER_LEN*sizeof(txUserDataArray[0]));	
/*Slave*/
/*Slave*/			txUserDataArray[0] = rxUserDataCopy[2];	// Master address
/*Slave*/			txUserDataArray[1] = rxUserDataCopy[3];	// Master address
/*Slave*/			*(u32*)&txUserDataArray[2] = ulMyAddr;
/*Slave*/			txUserDataArray[4] = SUCCESS;			// command status
/*Slave*/			uTransmitPacketReady = 1;
/*Slave*/			uPlcState = PLC_RECEIVE_COMMAND;
/*Slave*/			break;
/*Slave*/
/*Slave*/		case SC_READ_BLOCK:
/*Slave*/			//==============================================================================
/*Slave*/			// Command:  Read Block.
/*Slave*/			// rxUserDataCopy[0] = dest addr - high
/*Slave*/			// rxUserDataCopy[1] = dest addr - low
/*Slave*/			// rxUserDataCopy[2] = source addr - high
/*Slave*/			// rxUserDataCopy[3] = source addr - low
/*Slave*/			// rxUserDataCopy[4] = command number
/*Slave*/			// rxUserDataCopy[5] = starting address
/*Slave*/			// rxUserDataCopy[6] = block length (words).  <= 60
/*Slave*/			//
/*Slave*/			// Return:
/*Slave*/			// txUserDataArray[0] = Master addr - high
/*Slave*/			// txUserDataArray[1] = Master addr - low
/*Slave*/			// txUserDataArray[2] = MyAddr - high
/*Slave*/			// txUserDataArray[3] = MyAddr - low
/*Slave*/			// txUserDataArray[4] = Status / Error
/*Slave*/			// txUserDataArray[5-] = data
/*Slave*/			//
/*Slave*/			// return:
/*Slave*/			// 		If the requested configuration parameter is valid, SUCCESS is returned
/*Slave*/			//		for an acknowledge followed by the status array values.
/*Slave*/			//==============================================================================
/*Slave*/			// Fill User Data buffer with zeroes
/*Slave*/			memset(txUserDataArray, 0, DATA_BUFFER_LEN*sizeof(txUserDataArray[0]));	
/*Slave*/
/*Slave*/			txUserDataArray[0] = rxUserDataCopy[2];	// Master address
/*Slave*/			txUserDataArray[1] = rxUserDataCopy[3];	// Master address
/*Slave*/			*(u32*)&txUserDataArray[2] = ulMyAddr;
/*Slave*/			txUserDataArray[4] = SUCCESS;	// command status
/*Slave*/
/*Slave*/			// return parms 5-34
/*Slave*/			for(i=0; i<rxUserDataCopy[6]; i++)		// 16-bit parms
/*Slave*/			{
/*Slave*/				txUserDataArray[5+i] = *(u16*)(rxUserDataCopy[5]+i);
/*Slave*/			}
/*Slave*/
/*Slave*/			uTransmitPacketReady = 1;
/*Slave*/			uPlcState = PLC_RECEIVE_COMMAND;
/*Slave*/			break;
/*Slave*/			
/*Slave*/ 		case SC_ERASE_FLASH:
/*Slave*/ 			//==============================================================================
/*Slave*/ 			// Command:  Erase Flash
/*Slave*/			// rxUserDataCopy[0] = dest addr - high
/*Slave*/			// rxUserDataCopy[1] = dest addr - low
/*Slave*/			// rxUserDataCopy[2] = source addr - high
/*Slave*/			// rxUserDataCopy[3] = source addr - low
/*Slave*/			// rxUserDataCopy[4] = command number
/*Slave*/ 			//
/*Slave*/ 			// Only option for target on slave is log space.
/*Slave*/ 			//
/*Slave*/ 			// return:
/*Slave*/ 			// 		Nothing here.  The return is send in dsp_modem.c
/*Slave*/ 			//==============================================================================
/*Slave*/			// Fill User Data buffer with zeroes
/*Slave*/			memset(txUserDataArray, 0, DATA_BUFFER_LEN*sizeof(txUserDataArray[0]));	
/*Slave*/
/*Slave*/			txUserDataArray[0] = rxUserDataCopy[2];	// Master address
/*Slave*/			txUserDataArray[1] = rxUserDataCopy[3];	// Master address
/*Slave*/			*(u32*)&txUserDataArray[2] = ulMyAddr;
/*Slave*/			txUserDataArray[4] = SUCCESS;	// command status
/*Slave*/			uTransmitPacketReady = 1;
/*Slave*/			uPlcState = PLC_RECEIVE_COMMAND;
/*Slave*/ 			uFlashTarget = 2;		// 2 = log space
/*Slave*/ 			uFlashWriteStatus = FLASH_STATUS_ERASING;
/*Slave*/ 			break;
/*Slave*/ 
/*Slave*/ 		case SC_READ_FLASH:
/*Slave*/ 			//==============================================================================
/*Slave*/ 			// Command:  Read Flash
/*Slave*/			// rxUserDataCopy[0] = dest addr - high
/*Slave*/			// rxUserDataCopy[1] = dest addr - low
/*Slave*/			// rxUserDataCopy[2] = source addr - high
/*Slave*/			// rxUserDataCopy[3] = source addr - low
/*Slave*/			// rxUserDataCopy[4] = command number
/*Slave*/			// rxUserDataCopy[5] = starting address - high
/*Slave*/			// rxUserDataCopy[6] = starting address - low
/*Slave*/			// rxUserDataCopy[7] = block length (words).  <= 60
/*Slave*/			//
/*Slave*/			// Return:
/*Slave*/			// txUserDataArray[0] = Master addr - high
/*Slave*/			// txUserDataArray[1] = Master addr - low
/*Slave*/			// txUserDataArray[2] = MyAddr - high
/*Slave*/			// txUserDataArray[3] = MyAddr - low
/*Slave*/			// txUserDataArray[4] = Status / Error
/*Slave*/			// txUserDataArray[5-] = data
/*Slave*/ 			//==============================================================================
/*Slave*/			// Fill User Data buffer with zeroes
/*Slave*/			memset(txUserDataArray, 0, DATA_BUFFER_LEN*sizeof(txUserDataArray[0]));	
/*Slave*/
/*Slave*/			txUserDataArray[0] = rxUserDataCopy[2];	// Master address
/*Slave*/			txUserDataArray[1] = rxUserDataCopy[3];	// Master address
/*Slave*/			*(u32*)&txUserDataArray[2] = ulMyAddr;
/*Slave*/			txUserDataArray[4] = SUCCESS;	// command status
/*Slave*/
/*Slave*/			// return parms 5-34
/*Slave*/ 			ulAddr = (u32)rxUserDataCopy[5]*65536L + (u32)rxUserDataCopy[6];
/*Slave*/ 			for(i=0; i<rxUserDataCopy[7]; i++)
/*Slave*/ 			{
/*Slave*/ 				txUserDataArray[5+i] = ReadFlash(ulAddr++);
/*Slave*/ 			}
/*Slave*/
/*Slave*/			uTransmitPacketReady = 1;
/*Slave*/			uPlcState = PLC_RECEIVE_COMMAND;
/*Slave*/			break;
/*Slave*/
/*Slave*/		case SC_RESET_MSP:
/*Slave*/			//==============================================================================
/*Slave*/			// Reset the MSP.
/*Slave*/			//
/*Slave*/			//	NOTE: There is a fairly long time lag before the MSP comes back!
/*Slave*/			//        The host code must wait, or poll for completion.
/*Slave*/			//
/*Slave*/			// return:
/*Slave*/			// 		Command acknowledge.
/*Slave*/			//==============================================================================
/*Slave*/			ResetEMeter();
/*Slave*/
/*Slave*/			// Fill User Data buffer with zeroes
/*Slave*/			memset(txUserDataArray, 0, DATA_BUFFER_LEN*sizeof(txUserDataArray[0]));	
/*Slave*/
/*Slave*/			txUserDataArray[0] = rxUserDataCopy[2];	// Master address
/*Slave*/			txUserDataArray[1] = rxUserDataCopy[3];	// Master address
/*Slave*/			*(u32*)&txUserDataArray[2] = ulMyAddr;
/*Slave*/			txUserDataArray[4] = SUCCESS;			// command status
/*Slave*/			uTransmitPacketReady = 1;
/*Slave*/			uPlcState = PLC_RECEIVE_COMMAND;
/*Slave*/			break;
/*Slave*/			
/*Slave*/		case SC_EMETER_CMD:
/*Slave*/			//==============================================================================
/*Slave*/			// Command:  Emeter command
/*Slave*/			//
/*Slave*/			//  This is a command to the emeter which does NOT expect a reply.
/*Slave*/			//  	ex:
/*Slave*/			//		'W' Write string to LCD
/*Slave*/			//		'D' Display mode
/*Slave*/			//		+/- Adjust calibration values
/*Slave*/			//		'S' Set time/date
/*Slave*/			//
/*Slave*/			// rxUserDataCopy[0] = dest addr - high
/*Slave*/			// rxUserDataCopy[1] = dest addr - low
/*Slave*/			// rxUserDataCopy[2] = source addr - high
/*Slave*/			// rxUserDataCopy[3] = source addr - low
/*Slave*/			// rxUserDataCopy[4] = command number
/*Slave*/			// rxUserDataCopy[5-9] = String containing command.
/*Slave*/			//
/*Slave*/			// txUserDataArray[0] = Master addr - high
/*Slave*/			// txUserDataArray[1] = Master addr - low
/*Slave*/			// txUserDataArray[2] = MyAddr - high
/*Slave*/			// txUserDataArray[3] = MyAddr - low
/*Slave*/			// txUserDataArray[4] = SUCCESS
/*Slave*/			// txUserDataArray[5-61] = Return data.
/*Slave*/			//
/*Slave*/			// NOTE: Most changes to this function should have corresponding changes made
/*Slave*/			//			in the MC_EMETER_CMD case above.
/*Slave*/			//==============================================================================
/*Slave*/			emeterStringIndex = 0;
/*Slave*/			for(i=5; i<=9; i++)
/*Slave*/			{
/*Slave*/				emeterMsgString[emeterStringIndex++] = (rxUserDataCopy[i]&0xFF00)>>8;
/*Slave*/				emeterMsgString[emeterStringIndex++] = (rxUserDataCopy[i]&0x00FF);
/*Slave*/			}
/*Slave*/			emeterMsgString[emeterStringIndex] = 0;	// Add a null in case the received string didn't have one.
/*Slave*/			WriteUARTString(emeterMsgString);		// send command to emeter.
/*Slave*/			
/*Slave*/			// This is an emeter command which does not return anything.
/*Slave*/			// A fake return of all zeros will sent after the 485 communication is done
/*Slave*/			// if this is sent to a specific slave.  If it is a broadcast message the
/*Slave*/			// Master will have already taken care of the acknowledge, so don't return
/*Slave*/			// anything.
/*Slave*/			if(*(u32*)&rxUserDataArray[0] == 1L)		// This was a broadcast command. Don't respond.
/*Slave*/			{
/*Slave*/				uAckAfter485 = 0;		// Don't send ack.
/*Slave*/				uCommandBlock = 0;		// Re-enable packet reception.
/*Slave*/										// This gets re-enabled in SendPLC() for most other
/*Slave*/										// commands.
/*Slave*/			}
/*Slave*/			else
/*Slave*/			{
/*Slave*/				memset(txUserDataArray, 0, DATA_BUFFER_LEN*sizeof(txUserDataArray[0]));	// Fill User Data buffer with zeroes
/*Slave*/				txUserDataArray[0] = rxUserDataCopy[2];	// Master address
/*Slave*/				txUserDataArray[1] = rxUserDataCopy[3];	// Master address
/*Slave*/				*(u32*)&txUserDataArray[2] = ulMyAddr;
/*Slave*/	  			txUserDataArray[4] = SUCCESS;
/*Slave*/				uAckAfter485 = 1;		// Set flag to send ack after 485 traffic.
/*Slave*/			}
/*Slave*/			break;
/*Slave*/
/*Slave*/		case SC_EMETER_REQ:
/*Slave*/			//==============================================================================
/*Slave*/			// Command:  Emeter request
/*Slave*/			//
/*Slave*/			//  This is a command to the emeter which DOES expect a reply.
/*Slave*/			//
/*Slave*/			// rxUserDataCopy[0] = dest addr - high
/*Slave*/			// rxUserDataCopy[1] = dest addr - low
/*Slave*/			// rxUserDataCopy[2] = source addr - high
/*Slave*/			// rxUserDataCopy[3] = source addr - low
/*Slave*/			// rxUserDataCopy[4] = command number
/*Slave*/			// rxUserDataCopy[5-9] = String containing command.
/*Slave*/			//
/*Slave*/			// txUserDataArray[0] = Master addr - high
/*Slave*/			// txUserDataArray[1] = Master addr - low
/*Slave*/			// txUserDataArray[2] = MyAddr - high
/*Slave*/			// txUserDataArray[3] = MyAddr - low
/*Slave*/			// txUserDataArray[4] = SUCCESS
/*Slave*/			// txUserDataArray[5-61] = Return data.
/*Slave*/			//
/*Slave*/			// NOTE: Most changes to this function should have corresponding changes made
/*Slave*/			//			in the MC_EMETER_CMD case above.
/*Slave*/			//==============================================================================
/*Slave*/			emeterStringIndex = 0;
/*Slave*/			for(i=5; i<=9; i++)
/*Slave*/			{
/*Slave*/				emeterMsgString[emeterStringIndex++] = (rxUserDataCopy[i]&0xFF00)>>8;
/*Slave*/				emeterMsgString[emeterStringIndex++] = (rxUserDataCopy[i]&0x00FF);
/*Slave*/			}
/*Slave*/			emeterMsgString[emeterStringIndex] = 0;	// Add a null in case the received string didn't have one.
/*Slave*/			WriteUARTString(emeterMsgString);
/*Slave*/			
/*Slave*/			memset(txUserDataArray, 0, DATA_BUFFER_LEN*sizeof(txUserDataArray[0]));	// Fill User Data buffer with zeroes
/*Slave*/			txUserDataArray[0] = rxUserDataCopy[2];	// Master address
/*Slave*/			txUserDataArray[1] = rxUserDataCopy[3];	// Master address
/*Slave*/			*(u32*)&txUserDataArray[2] = ulMyAddr;
/*Slave*/	  		txUserDataArray[4] = SUCCESS;
/*Slave*/			
/*Slave*/			uUartResponseIndex = 10;		// Offset in bytes!
/*Slave*/			uUartState = UART_RECEIVE_RESPONSE;
/*Slave*/			memset(upUartResponseBuffer, 0, 61*sizeof(upUartResponseBuffer[0]));	
/*Slave*/			ulUartCounter = 0L;				// Reset counter used for timeout detection.
/*Slave*/			break;
/*Slave*/
/*Slave*/		default:
/*Slave*/			//==============================================================================
/*Slave*/			// Unrecognized command
/*Slave*/			// rxUserDataCopy[0] = dest addr - high
/*Slave*/			// rxUserDataCopy[1] = dest addr - low
/*Slave*/			// rxUserDataCopy[2] = source addr - high
/*Slave*/			// rxUserDataCopy[3] = source addr - low
/*Slave*/

⌨️ 快捷键说明

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