Esempio n. 1
0
void encoderTest(void)
{
	// initialize the encoders
	encoderInit();

	// print a little intro message so we know things are working
	rprintf("\r\nWelcome to the encoder test!\r\n");

	// report encoder position continuously
	while(1)
	{
		rprintfProgStrM("Encoder0: ");
		// print encoder0 position
		// use base-10, 10 chars, signed, pad with spaces
		rprintfNum(10, 10, TRUE, ' ', encoderGetPosition(0));

		rprintfProgStrM("  Encoder1: ");
		// print encoder1 position
		// use base-10, 10 chars, signed, pad with spaces
		rprintfNum(10, 10, TRUE, ' ', encoderGetPosition(1));

		// print carriage return and line feed
		rprintfCRLF();
	}
}
Esempio n. 2
0
unsigned char ataWriteSectorsLBA(	unsigned char Drive, 
												unsigned long lba,
												unsigned int numsectors,
                            			unsigned char *Buffer)
{
	unsigned int cyl, head, sect;
	unsigned char temp;

#ifdef DEBUG_ATA
	rprintfProgStrM("ATA LBA write ");
	rprintfu32(lba); rprintfProgStrM(" ");
	rprintfu16(numsectors); rprintfProgStrM(" ");
	rprintfu16((unsigned int)Buffer); 
	rprintfCRLF();
#endif

	sect = (int) ( lba & 0x000000ffL );
	lba = lba >> 8;
	cyl = (int) ( lba & 0x0000ffff );
	lba = lba >> 16;
	head = ( (int) ( lba & 0x0fL ) ) | ATA_HEAD_USE_LBA;

	temp = ataWriteSectorsCHS( Drive, head, cyl, sect, numsectors, Buffer );

	if(temp)
		ataDiskErr();
	return temp;
}                            		
Esempio n. 3
0
uint8_t edpComposeCommand(uint8_t srcEdpAddr, uint8_t* cmdBuffer)
{
	uint8_t string[80];
	uint8_t len;
	uint8_t i;

	// instructions
	rprintfProgStrM("Enter EDP Command, format [c][p1][p2][p3]...[pN]\r\n");
	rprintfProgStrM("[c] is command char, [px] parameters in 2-digit hex\r\n");

	// get user input
	rprintfProgStrM("EDP Command>");
	len = inputString(0x0D, 80, string);
	rprintfCRLF();

	// check for null user input
	if(!len)
	{
		rprintfProgStrM("ERROR: No command\r\n");
		// return immediately with zero command length
		return 0;
	}

	// prepare command
	cmdBuffer[0] = srcEdpAddr;
	cmdBuffer[1] = string[0];
	for(i=0; i<len/2; i++)
	{
		cmdBuffer[i+2] = asciiHexToByte(&string[1+(i*2)]);
	}

	// return command length
	return 2+(len/2);
}
Esempio n. 4
0
void dumpArgsStr(void)
{
	rprintfCRLF();
	rprintf("Dump arguments as strings\r\n");

	rprintfProgStrM("Arg0: "); rprintfStr(cmdlineGetArgStr(0)); rprintfCRLF();
	rprintfProgStrM("Arg1: "); rprintfStr(cmdlineGetArgStr(1)); rprintfCRLF();
	rprintfProgStrM("Arg2: "); rprintfStr(cmdlineGetArgStr(2)); rprintfCRLF();
	rprintfProgStrM("Arg3: "); rprintfStr(cmdlineGetArgStr(3)); rprintfCRLF();
	rprintfCRLF();
}
Esempio n. 5
0
void ds18b20Print(u16 result, u08 resolution)
{
	// print raw value
	rprintfProgStrM(" 0x");
	rprintfu16(result);
	rprintfChar(' ');

	// print real temp
	rprintfNum(10, 4, TRUE , ' ', result>>4);
	rprintf(".");
	rprintfNum(10, 4, FALSE, '0', (10000*((u32)(result&0x000F)))/16 );
	rprintfProgStrM(" C");
}
Esempio n. 6
0
void ataPrintSector( u08 *Buffer)
{
	u08 i;
	u16 j;
	u08 *buf;
	u08 s;

	buf = Buffer;
	
	// print the low order address indicies
	rprintfProgStrM("     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F  0123456789ABCDEF\r\n");
	rprintfProgStrM("     -----------------------------------------------  ---- ASCII -----\r\n");
	
	// print the data
	for(j=0; j<0x20; j++)
	{
		// print the high order address index for this line
		rprintfu16(j<<4);
		rprintfProgStrM(" ");

		// print the hex data
		for(i=0; i<0x10; i++)
		{
			rprintfu08(buf[(j<<4)+i]);
			rprintfProgStrM(" ");
		}
		
		// leave some space
		rprintfProgStrM(" ");

		// print the ascii data
		for(i=0; i<0x10; i++)
		{
			s = buf[(j<<4)+i]; 
			// make sure character is printable
			if(s >= 0x20)
			{
				rprintfChar(s);
			}
			else
			{
				rprintfChar(0x20);
			}

		}
		rprintfCRLF();
	}
}
void CommandLine(void)
{
	u08 c;
	/* Variable to Run or stop program */
	Run = TRUE;

	/* Clears the screen and sets the cursor under the Title */
	vt100ClearScreen();
	vt100SetCursorPos(1,0);

	rprintfProgStrM("\r\n\t\t\tStepper Motor Driver - Serial Console\r\n");

	cmdlineInit();
	cmdlineSetOutputFunc(uartSendByte);

	cmdlineAddCommand("quit", quitCommandLine);
	cmdlineAddCommand("help", helpDisplay);
	cmdlineAddCommand("step", runMotor);

	cmdlineInputFunc('\r');

	while(Run)
	{
		while( uartReceiveByte(&c) )
			cmdlineInputFunc(c);

		cmdlineMainLoop();

	}

	rprintfCRLF();
	rprintf("Program halted.");


}
Esempio n. 8
0
void spyglassTest(void)
{
	// initializing Spyglass interface and I2C bus
	rprintf("Initializing Spyglass communication...");
	spyglassInit();
	spyglassLcdInit();
	rprintf("Done!\r\n");
	rprintf("Printing 'Hello World!' message to spyglass LCD.\r\n");

	rprintfInit(spyglassLcdWriteChar);
	spyglassLcdGotoXY(0,0);
	rprintfProgStrM("Hello World!");
	rprintfInit(uartSendByte);

	timerPause(1000);

	// initialize systick timer
	rprintf("Initializing Periodic Timer\r\n");
	timer2SetPrescaler(TIMERRTC_CLK_DIV1024);
	// attach the 'systickHandler' so that it gets called every time Timer2 overflows
	timerAttach(TIMER2OVERFLOW_INT, systickHandler);

	rprintf("Starting local command prompt.  Type '?' to get help.\r\n");
	rprintf("cmd>");

	while(1)
	{
		serviceLocal();
	}
}
Esempio n. 9
0
void dhcpRequest(void)
{
	struct netDhcpHeader* packet;
	uint32_t val;

	packet = (struct netDhcpHeader*)&netstackGetBuffer()[ETH_HEADER_LEN+IP_HEADER_LEN+UDP_HEADER_LEN];

	// build BOOTP/DHCP header
	packet->bootp.op = BOOTP_OP_BOOTREQUEST;	// request type
	packet->bootp.htype = BOOTP_HTYPE_ETHERNET;
	packet->bootp.hlen = BOOTP_HLEN_ETHERNET;
	packet->bootp.ciaddr = htonl(ipGetConfig()->ip);
	packet->bootp.yiaddr = HTONL(0l);
	packet->bootp.siaddr = HTONL(0l);
	packet->bootp.giaddr = HTONL(0l);
	nicGetMacAddress(&packet->bootp.chaddr[0]); // fill client hardware address
	packet->bootp.xid = DhcpTransactID;
	packet->bootp.flags = HTONS(1);

	// build DHCP request
	// begin with magic cookie
	packet->cookie = 0x63538263;
	// set operation
	val = DHCP_MSG_DHCPDISCOVER;
	dhcpSetOption(packet->options, DHCP_OPT_DHCPMSGTYPE, 1, &val);

	#ifdef DHCP_DEBUG
	rprintfProgStrM("DHCP: Sending Query\r\n");
	//dhcpPrintHeader(packet);
	#endif

	// send request
	udpSend(0xFFFFFFFF, DHCP_UDP_SERVER_PORT, DHCP_HEADER_LEN+3+1, (uint8_t*)packet);
}
Esempio n. 10
0
//----- Begin Code ------------------------------------------------------------
int main(void)
{
	// initialize our libraries
	// initialize the UART (serial port)
	uartInit();
	uartSetBaudRate(115200);
	// make all rprintf statements use uart for output
	rprintfInit(uartSendByte);
	// initialize the timer system
	timerInit();
	// initialize vt100 terminal
	vt100Init();

	timerPause(100);

	// print welcome message
	vt100ClearScreen();
	vt100SetCursorPos(1,0);
	rprintfProgStrM("\r\nWelcome to the MMC Test Suite!\r\n");

	timerPause(1000);

	mmcTest();

	return 0;
}
Esempio n. 11
0
u08 schedAttach(volatile u08* _signal, u08 _period)
{
  u08 ret;
  u08 cnt;
  u08 found;
  
  ret = 1;
  cnt = 0;
  found = false;

  while ((cnt < MAX_SIGNALS) && (found == false))
  {
    if (signal[cnt] == 0)
    {
      signal[cnt] = _signal;
      *signal[cnt] = false;
      period[cnt] = _period;
      ticks[cnt] = 0;
      ret = 0;
      found = true;
    }
    cnt++;
  }
  #ifdef DEBUG_SCHEDULER
  rprintfProgStrM("\r\n schedAttach %u", ret);
  #endif
 
  return ret;
}
Esempio n. 12
0
int netstackService(void)
{
	int len;
	struct netEthHeader* ethPacket;

	// look for a packet
	len = nicPoll(NETSTACK_BUFFERSIZE, NetBuffer);

	if(len)
	{
		ethPacket = (struct netEthHeader*)&NetBuffer[0];

		#if NET_DEBUG >= 5
		rprintf("Received packet len: %d, type:", len);
		rprintfu16(htons(ethPacket->type));
		rprintfCRLF();
		rprintf("Packet Contents\r\n");
		debugPrintHexTable(len, NetBuffer);
		#endif
		
		if(ethPacket->type == htons(ETHTYPE_IP))
		{
			// process an IP packet
			#ifdef NETSTACK_DEBUG
			rprintfProgStrM("NET Rx: IP packet\r\n");
			#endif
			// add the source to the ARP cache
			// also correctly set the ethernet packet length before processing?
			arpIpIn((struct netEthIpHeader*)&NetBuffer[0]);
			//arpPrintTable();
			
			netstackIPProcess( len-ETH_HEADER_LEN, (ip_hdr*)&NetBuffer[ETH_HEADER_LEN] );
		}
		else if(ethPacket->type == htons(ETHTYPE_ARP))
		{
			// process an ARP packet
			#ifdef NETSTACK_DEBUG
			rprintfProgStrM("NET Rx: ARP packet\r\n");
			#endif
			arpArpIn(len, ((struct netEthArpHeader*)&NetBuffer[0]) );
			#ifdef NETSTACK_DEBUG
			//arpPrintTable();
			#endif
		}
	}
	return len;
}
Esempio n. 13
0
void edpRunCommand(uint8_t destEdpAddr, uint8_t cmdLength, uint8_t* cmdBuffer)
{
	uint8_t response;
	EdpReply* edpReply;

	uint8_t retval;
	
	EdpCommand* edpCommand = (EdpCommand*)cmdBuffer;

	// send command
	rprintf("Sending Command: 0x%x '%c' ->",edpCommand->Command,edpCommand->Command);
	retval = edpSendCommand(destEdpAddr, cmdLength, edpCommand);
	// handle result values
	if(retval == EDP_COMMAND_OK)
	{
		// command sent successfully
		rprintfProgStrM("Send Success!\r\n");
	}
	else if(retval == EDP_COMMAND_NODEV)
	{
		// device did not exist
		rprintfProgStrM("Send Failed->NO DEVICE!\r\n");
		rprintf("No EDP device could be contacted at address 0x%x.\r\n", destEdpAddr);
		rprintfProgStrM("The device may be busy or not responding.\r\n");
		rprintfProgStrM("Check target device and I2C bus cabling.\r\n");
		// return immediately
		return;
	}
	else
	{
		// other error
		rprintfProgStrM("Send Failed->Unspecified Error!\r\n");
		// return immediately
		return;
	}

	// get the reply, if any, from the command
	retval = edpGetCommandReply(&response, &edpReply);
	// handle result values
	if(retval == EDP_REPLY_BADCHKSUM)
	{
		rprintf("**** Reply has bad checksum ****\r\n");
	}
	// display the reply
	edpDisplayReply(response, edpReply);
}
Esempio n. 14
0
void cs8900RegDump(void)
{
	rprintfProgStrM("CS8900 PacketPage Registers\r\n");
	rprintfProgStrM("CHIP ID: ");
	rprintfu16(cs8900ReadReg(PP_ChipID));
	rprintfCRLF();

	rprintfProgStrM("PP_ISAIOB: ");
	rprintfu16(cs8900ReadReg(PP_ISAIOB));
	rprintfCRLF();

	rprintfProgStrM("MAC addr: ");
	rprintfu16(cs8900ReadReg(PP_IA+0));
	rprintfu16(cs8900ReadReg(PP_IA+2));
	rprintfu16(cs8900ReadReg(PP_IA+4));
	rprintfCRLF();
}
Esempio n. 15
0
void ataDriveInit(void)
{
	u08 i;
	unsigned char* buffer = (unsigned char*) SECTOR_BUFFER_ADDR;

	// read drive identity
	rprintfProgStrM("\r\nScanning IDE interface...\r\n");
	// Wait for drive to be ready
	ataStatusWait(ATA_SR_BSY, ATA_SR_BSY);
	// issue identify command
	ataWriteByte(ATA_REG_CMDSTATUS1, 0xEC);
	// wait for drive to request data transfer
	ataStatusWait(ATA_SR_DRQ, ATA_SR_DRQ);
	timerPause(200);
	// read in the data
	ataReadDataBuffer(buffer, 512);

	// set local drive info parameters
	ataDriveInfo.cylinders =		*( ((unsigned int*) buffer) + ATA_IDENT_CYLINDERS );
	ataDriveInfo.heads =			*( ((unsigned int*) buffer) + ATA_IDENT_HEADS );
	ataDriveInfo.sectors =			*( ((unsigned int*) buffer) + ATA_IDENT_SECTORS );
	ataDriveInfo.LBAsupport =		*( ((unsigned int*) buffer) + ATA_IDENT_FIELDVALID );
	ataDriveInfo.sizeinsectors =	*( (unsigned long*) (buffer + ATA_IDENT_LBASECTORS*2) );
	// copy model string
	for(i=0; i<40; i+=2)
	{
		// correct for byte order
		ataDriveInfo.model[i  ] = buffer[(ATA_IDENT_MODEL*2) + i + 1];
		ataDriveInfo.model[i+1] = buffer[(ATA_IDENT_MODEL*2) + i    ];
	}
	// terminate string
	ataDriveInfo.model[40] = 0;

	// process and print info
	if(ataDriveInfo.LBAsupport)
	{
		// LBA support
		rprintf("Drive 0: %dMB ", ataDriveInfo.sizeinsectors/(1000000/512) );
		rprintf("LBA mode -- MODEL: ");
	}
	else
	{
		// CHS, no LBA support
		// calculate drive size
		ataDriveInfo.sizeinsectors = (unsigned long) ataDriveInfo.cylinders*
												ataDriveInfo.heads*ataDriveInfo.sectors;
		rprintf("Drive 0: %dMB ", ataDriveInfo.sizeinsectors/(1000000/512) );
		rprintf("CHS mode C=%d H=%d S=%d -- MODEL: ", ataDriveInfo.cylinders, ataDriveInfo.heads, ataDriveInfo.sectors );
	}
	// print model information	
	rprintfStr(ataDriveInfo.model); rprintfCRLF();

	// initialize local disk parameters
	//ataDriveInfo.cylinders = ATA_DISKPARM_CLYS;
	//ataDriveInfo.heads = ATA_DISKPARM_HEADS;
	//ataDriveInfo.sectors = ATA_DISKPARM_SECTORS;

}
Esempio n. 16
0
void ataDiskErr(void)
{
	unsigned char b;

	b = ataReadByte(ATA_REG_ERROR);	
	rprintfProgStrM("ATA Error: "); 
	rprintfu08(b); 
	rprintfCRLF();
}
Esempio n. 17
0
void dallasPrintROM(dallas_rom_id_T* rom_id)
{
	s08 i;

	// print out the rom in the format: xx xx xx xx xx xx xx xx
	for(i=7;i>=0;i--)
	{
		rprintfu08(rom_id->byte[i]);
		rprintfChar(' ');
	}

	// print out the rom in the format: 0xXXXXXXXXXXXXXXXX
	rprintfProgStrM(" (0x");
	for(i=7;i>=0;i--)
	{
		rprintfu08(rom_id->byte[i]);
	}
	rprintfProgStrM("ULL)");

}
Esempio n. 18
0
int main (void)
{
	// initialize
	uartInit();
	timerInit();
	a2dInit();
	glcdInit();
	outb(DDRA, 0x00);
	
	// send rprintf output to serial port
	rprintfInit(uartSendByte);
	// print welcome message to serial port
	rprintfProgStrM("\r\nWelcome to glcdtest...\r\n");
	// send rprintf output to lcd display
	rprintfInit(glcdWriteChar);

	// perform basic functionality tests
	rprintfProgStrM("All initialized...");

	glcdSetAddress(4,LINE2);
	glcdWriteChar('H');
	glcdWriteChar('E');
	glcdWriteChar('L');
	glcdWriteChar('L');
	glcdWriteChar('O');

	glcdSetAddress(4,LINE3);
	rprintfProgStrM("line 3");
	glcdSetAddress(4,LINE4);
	rprintfProgStrM("line 4");
	glcdSetAddress(4,LINE5);
	rprintfProgStrM("line 5");

	// run application program
	//oscope();
	lcdtest();

	return 0;   
}
Esempio n. 19
0
void netstackIPProcess(unsigned int len, ip_hdr* packet)
{
	// check IP addressing, stop processing if not for me and not a broadcast
	if ((htonl(packet->destipaddr) != ipGetConfig()->ip) &&
		(htonl(packet->destipaddr) != (ipGetConfig()->ip|(~ipGetConfig()->netmask))) &&
		(htonl(packet->destipaddr) != 0xFFFFFFFF))
		return;

	// handle ICMP packet
	if (packet->proto == IP_PROTO_ICMP)
	{
		#ifdef NETSTACK_DEBUG
		rprintfProgStrM("NET Rx: ICMP/IP packet\r\n");
		//icmpPrintHeader((icmpip_hdr*)packet);
		#endif
		icmpIpIn((icmpip_hdr*)packet);
	}
	else if (packet->proto == IP_PROTO_UDP)
	{
		#ifdef NETSTACK_DEBUG
		rprintfProgStrM("NET Rx: UDP/IP packet\r\n");
		//debugPrintHexTable(NeBufferLen-14, &NetBuffer[14]);
		#endif
		netstackUDPIPProcess(len, ((udpip_hdr*)packet));
	}
	else if (packet->proto == IP_PROTO_TCP)
	{
		#ifdef NETSTACK_DEBUG
		rprintfProgStrM("NET Rx: TCP/IP packet\r\n");
		#endif
		netstackTCPIPProcess(len, ((tcpip_hdr*)packet));
	}
	else
	{
		#ifdef NETSTACK_DEBUG
		rprintfProgStrM("NET Rx: IP packet\r\n");
		#endif
	}
}
Esempio n. 20
0
int main(void)
{
	struct netEthAddr myEthAddress;

	timerInit();
	uartInit();
	uartSetBaudRate(9600);
	rprintfInit(uartSendByte);
	timerPause(100);
	rprintf("\r\nNetwork Stack Example\r\n");

	// initialize systick timer
	rprintf("Initializing Periodic Timer\r\n");
	timer2SetPrescaler(TIMER_CLK_DIV1024);
	timerAttach(TIMER2OVERFLOW_INT, systickHandler);

	// init network stack
	rprintf("Initializing Network Stack\r\n");
	netstackInit(IPADDRESS, NETMASK, GATEWAY);

	nicGetMacAddress(&myEthAddress.addr[0]);
	rprintfProgStrM("Eth Addr is: "); netPrintEthAddr(&myEthAddress); rprintfCRLF();
	rprintfProgStrM("IP  Addr is: "); netPrintIPAddr(ipGetConfig()->ip); rprintfCRLF();

	rprintf("Network Stack is up!\r\n");
	rprintf("Starting packet receive loop\r\n");

	while (1)
	{
		// service local stuff
		serviceLocal();
		// service the network
		netstackService();
	}
	return 0;
}
Esempio n. 21
0
void cs8900IORegDump(void)
{
	rprintfProgStrM("CS8900 I/O Registers\r\n");
	rprintfProgStrM(" FRAME   ISQ  ADDR DATA0 DATA1\r\n");
	rprintfProgStrM("-------------------------------\r\n");
	rprintfProgStrM("  ");
	rprintfu16(cs8900Read16(CS8900_IO_RXTX_DATA_PORT0));
	rprintfProgStrM("  ");
	rprintfu16(cs8900Read16(CS8900_IO_ISQ));
	rprintfProgStrM("  ");
	rprintfu16(cs8900Read16(CS8900_IO_PP_PTR));
	rprintfProgStrM("  ");
	rprintfu16(cs8900Read16(CS8900_IO_PP_DATA_PORT0));
	rprintfProgStrM("  ");
	rprintfu16(cs8900Read16(CS8900_IO_PP_DATA_PORT1));
	rprintfCRLF();
}
Esempio n. 22
0
void icmpPrintHeader(icmpip_hdr* packet)
{
	rprintfProgStrM("ICMP Packet:\n");
	// print source IP address
	rprintfProgStrM("SrcIpAddr: ");	netPrintIPAddr(htonl(packet->ip.srcipaddr));	rprintfCRLF();
	// print dest IP address
	rprintfProgStrM("DstIpAddr: ");	netPrintIPAddr(htonl(packet->ip.destipaddr));	rprintfCRLF();
	// print type
	rprintfProgStrM("Type   : ");
	switch(packet->icmp.type)
	{
	case ICMP_TYPE_ECHOREQUEST:		rprintfProgStrM("ECHO REQUEST"); break;
	case ICMP_TYPE_ECHOREPLY:		rprintfProgStrM("ECHO REPLY"); break;
	default:						rprintfProgStrM("UNKNOWN"); break;
	}
	rprintfCRLF();
	// print code
	rprintfProgStrM("Code   : 0x");	rprintfu08(packet->icmp.icode);			rprintfCRLF();
}
Esempio n. 23
0
void dhcpRelease(void)
{
	struct netDhcpHeader* packet;
	uint32_t val;
	uint8_t* optptr;

	packet = (struct netDhcpHeader*)&netstackGetBuffer()[ETH_HEADER_LEN+IP_HEADER_LEN+UDP_HEADER_LEN];

	// build BOOTP/DHCP header
	packet->bootp.op = BOOTP_OP_BOOTREQUEST;	// request type
	packet->bootp.htype = BOOTP_HTYPE_ETHERNET;
	packet->bootp.hlen = BOOTP_HLEN_ETHERNET;
	packet->bootp.ciaddr = htonl(ipGetConfig()->ip);
	packet->bootp.yiaddr = HTONL(0l);
	packet->bootp.siaddr = HTONL(0l);
	packet->bootp.giaddr = HTONL(0l);
	nicGetMacAddress(&packet->bootp.chaddr[0]); // fill client hardware address
	packet->bootp.xid = DhcpTransactID;			// set trans ID (use part of MAC address)
	packet->bootp.flags = HTONS(1);

	// build DHCP request
	// begin with magic cookie
	packet->cookie = 0x63538263;
	// set operation
	val = DHCP_MSG_DHCPRELEASE;
	optptr = dhcpSetOption(packet->options, DHCP_OPT_DHCPMSGTYPE, 1, &val);
	// set the server ID
	val = htonl(DhcpServerIP);
	optptr = dhcpSetOption(optptr, DHCP_OPT_SERVERID, 4, &val);
	// request the IP previously offered
	optptr = dhcpSetOption(optptr, DHCP_OPT_REQUESTEDIP, 4, &packet->bootp.ciaddr);

	#ifdef DHCP_DEBUG
	rprintfProgStrM("DHCP: Sending Release to "); netPrintIPAddr(DhcpServerIP); rprintfCRLF();
	//dhcpPrintHeader(packet);
	#endif

	// send release
	udpSend(DhcpServerIP, DHCP_UDP_SERVER_PORT, DHCP_HEADER_LEN+3+6+6+1, (uint8_t*)packet);

	// deconfigure ip addressing
	ipSetConfig(0,0,0);
	DhcpLeaseTime = 0;
}
Esempio n. 24
0
unsigned char ataWriteSectorsCHS(unsigned char Drive, 
											unsigned char Head, 
											unsigned int Track,
											unsigned char Sector,
											unsigned int numsectors,
											unsigned char *Buffer)
{
  	unsigned char temp;

	// Wait for drive to be ready
	temp = ataStatusWait(ATA_SR_BSY, ATA_SR_BSY);

  	// Prepare parameters...
	ataWriteByte(ATA_REG_HDDEVSEL, 0xA0+(Drive ? 0x10:00)+Head); // CHS mode/Drive/Head
	ataWriteByte(ATA_REG_CYLHI, Track>>8);  		// MSB of track
	ataWriteByte(ATA_REG_CYLLO, Track);     		// LSB of track
  	ataWriteByte(ATA_REG_STARTSEC, Sector);    	// sector
	ataWriteByte(ATA_REG_SECCOUNT, numsectors);	// # of sectors

	// Issue write sector command
  	ataWriteByte(ATA_REG_CMDSTATUS1, 0x31);

	//delay(100);

	// Wait for drive to request data transfer
	ataStatusWait(ATA_SR_DRQ, 0);

	// write data to drive
	ataWriteDataBuffer(Buffer, 512*numsectors);
	
	// Wait for drive to finish write
	temp = ataStatusWait(ATA_SR_BSY, ATA_SR_BSY);

	// check for errors
	if (temp & ATA_SR_ERR)
	{
		rprintfProgStrM("WR ERR\r\n");
		return 1;
	}

	// Return the error bit from the status register...
	return (temp & ATA_SR_ERR) ? 1:0;
}
Esempio n. 25
0
void cmdlineProcessInputString(void)
{
	u08 cmdIndex;
	u08 i=0;

	// save command in history
	cmdlineDoHistory(CMDLINE_HISTORY_SAVE);

	// find the end of the command (excluding arguments)
	// find first whitespace character in CmdlineBuffer
	while( !((CmdlineBuffer[i] == ' ') || (CmdlineBuffer[i] == 0)) ) i++;

	if(!i)
	{
		// command was null or empty
		// output a new prompt

		//cmdlinePrintPrompt();

		// we're done
		return;
	}
	rprintfProgStrM("\", \"data\": ");
	// search command list for match with entered command
	for(cmdIndex=0; cmdIndex<CmdlineNumCommands; cmdIndex++)
	{
		if( !strncmp(CmdlineCommandList[cmdIndex], CmdlineBuffer, i) )
		{
			// user-entered command matched a command in the list (database)
			// run the corresponding function
			CmdlineExecFunction = CmdlineFunctionList[cmdIndex];
			// new prompt will be output after user function runs
			// and we're done
			return;
		}
	}

	// if we did not get a match
	// output an error message
	cmdlinePrintError();
	// output a new prompt
	cmdlinePrintPrompt();
}
Esempio n. 26
0
void goCmdline(void)
{
	u08 c;

	// print welcome message
	vt100ClearScreen();
	vt100SetCursorPos(1,0);
	rprintfProgStrM("\r\nWelcome to the Command Line Test Suite!\r\n");

	// initialize cmdline system
	cmdlineInit();

	// direct cmdline output to uart (serial port)
	cmdlineSetOutputFunc(uartSendByte);

	// add commands to the command database
	cmdlineAddCommand("exit",		exitFunction);
	cmdlineAddCommand("help",		helpFunction);
	cmdlineAddCommand("dumpargs1",	dumpArgsStr);
	cmdlineAddCommand("dumpargs2",	dumpArgsInt);
	cmdlineAddCommand("dumpargs3",	dumpArgsHex);

	// send a CR to cmdline input to stimulate a prompt
	cmdlineInputFunc('\r');

	// set state to run
	Run = TRUE;

	// main loop
	while(Run)
	{
		// pass characters received on the uart (serial port)
		// into the cmdline processor
		while(uartReceiveByte(&c)) cmdlineInputFunc(c);

		// run the cmdline execution functions
		cmdlineMainLoop();
	}

	rprintfCRLF();
	rprintf("Exited program!\r\n");
}
Esempio n. 27
0
unsigned char ataWriteSectors(unsigned char Drive, 
										unsigned long lba,
										unsigned int numsectors,
                            	unsigned char *Buffer)
{
  	unsigned int cyl, head, sect;
  	unsigned char temp;

	// check if drive supports native LBA mode
	if(ataDriveInfo.LBAsupport)
	{
		// drive supports using native LBA
		temp = ataWriteSectorsLBA(Drive, lba, numsectors, Buffer);
	}
	else
	{
		// drive required CHS access
		#ifdef DEBUG_ATA
			// do this defore destroying lba
			rprintfProgStrM("ATA LBA for CHS write: ");
			rprintfProgStrM("LBA="); rprintfu32(lba); rprintfProgStrM(" ");
		#endif

		// convert LBA to pseudo CHS
		// remember to offset the sector count by one
		sect = (u08) (lba % ataDriveInfo.sectors)+1;
		lba = lba / ataDriveInfo.sectors;
		head = (u08) (lba % ataDriveInfo.heads);
		lba = lba / ataDriveInfo.heads;
		cyl = (u16) lba;

		#ifdef DEBUG_ATA
			rprintfProgStrM("C:H:S=");
			rprintfu16(cyl); rprintfProgStrM(":");
			rprintfu08(head); rprintfProgStrM(":");
			rprintfu08(sect); rprintfCRLF();
		#endif

		temp = ataWriteSectorsCHS( Drive, head, cyl, sect, numsectors, Buffer );
	}

	if(temp)
		ataDiskErr();
	return temp;
}                            		
Esempio n. 28
0
void sp5K_writeFunction(void)
{

u08 dateTimeStr[11];
char tmp[3];
RtcTimeType rtcDateTime;
char *p;
u08 devId, address, regValue;
u08 value = 0;
s08 retS = FALSE;
u08  mcp_address = 0;
u08 length = 0;
u08 *nro = NULL;
u08 *msg = NULL;
u08 timeout;
char phase;
u08 chip;
u16 sleepTime;

	memset( cmd_printfBuff, NULL, CHAR128);
	makeargv();

	// Parametros:
	if (!strcmp_P( strupr(argv[1]), PSTR("PARAM\0")))
	{

		// PASSWD
		if (!strcmp_P( strupr(argv[2]), PSTR("PASSWD\0"))) {
			memset(systemVars.passwd, '\0', sizeof(systemVars.passwd));
			memcpy(systemVars.passwd, argv[3], sizeof(systemVars.passwd));
			systemVars.passwd[PASSWD_LENGTH - 1] = '\0';
			pv_snprintfP_OK();
			return;
		}

		// APN
		if (!strcmp_P( strupr(argv[2]), PSTR("APN\0"))) {
			memset(systemVars.apn, '\0', sizeof(systemVars.apn));
			memcpy(systemVars.apn, argv[3], sizeof(systemVars.apn));
			systemVars.apn[APN_LENGTH - 1] = '\0';
			pv_snprintfP_OK();
			return;
		}

		// SERVER PORT
		if (!strcmp_P( strupr(argv[2]), PSTR("PORT\0"))) {
			memset(systemVars.serverPort, '\0', sizeof(systemVars.serverPort));
			memcpy(systemVars.serverPort, argv[3], sizeof(systemVars.serverPort));
			systemVars.serverPort[PORT_LENGTH - 1] = '\0';
			pv_snprintfP_OK();
			return;
		}

		// SERVER IP
		if (!strcmp_P( strupr(argv[2]), PSTR("IP\0"))) {
			memset(systemVars.serverAddress, '\0', sizeof(systemVars.serverAddress));
			memcpy(systemVars.serverAddress, argv[3], sizeof(systemVars.serverAddress));
			systemVars.serverAddress[IP_LENGTH - 1] = '\0';
			pv_snprintfP_OK();
			return;
		}

		// SERVER SCRIPT
		// write param script cgi-bin/oseApp/scripts/oseSp5K001.pl
		if (!strcmp_P( strupr(argv[2]), PSTR("SCRIPT\0"))) {
			memset(systemVars.serverScript, '\0', sizeof(systemVars.serverScript));
			memcpy(systemVars.serverScript, argv[3], sizeof(systemVars.serverScript));
			systemVars.serverScript[SCRIPT_LENGTH - 1] = '\0';
			pv_snprintfP_OK();
			return;
		}

		// MagP ( magnitud  por pulso )
		if (!strcmp_P( strupr(argv[2]), PSTR("MAGP\0"))) {
			retS = setParamMagP(argv[3], argv[4]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}

		// dname X ( digital name X )
		if (!strcmp_P( strupr(argv[2]), PSTR("DNAME\0"))) {
			retS = setParamDname(argv[3], argv[4]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}

		// aname X ( analog name X )
		if (!strcmp_P( strupr(argv[2]), PSTR("ANAME\0"))) {
			retS = setParamAname(argv[3], argv[4]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}

		// imin X
		if (!strcmp_P( strupr(argv[2]), PSTR("IMIN\0"))) {
			retS = setParamImin(argv[3], argv[4]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}

		// imax X
		if (!strcmp_P( strupr(argv[2]), PSTR("IMAX\0"))) {
			retS = setParamImax(argv[3], argv[4]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}

		// Mmin X
		if (!strcmp_P( strupr(argv[2]), PSTR("MMIN\0"))) {
			retS = setParamMmin(argv[3], argv[4]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}

		// Mmax X
		if (!strcmp_P( strupr(argv[2]), PSTR("MMAX\0"))) {
			retS = setParamMmax(argv[3], argv[4]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}

		// offmmin X
		if (!strcmp_P( strupr(argv[2]), PSTR("OFFMMIN\0"))) {
			retS = setParamOffset(0,argv[3], argv[4]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}

		// offmmax X
		if (!strcmp_P( strupr(argv[2]), PSTR("OFFMMAX\0"))) {
			retS = setParamOffset(1,argv[3], argv[4]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}

		/* DebugLevel */
		if (!strcmp_P( strupr(argv[2]), PSTR("DEBUGLEVEL\0"))) {
			retS = setParamDebugLevel(argv[3]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}

		/* LogLevel */
		if (!strcmp_P( strupr(argv[2]), PSTR("LOGLEVEL\0"))) {
			retS = setParamLogLevel(argv[3]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}

		// dlgId
		if (!strcmp_P( strupr(argv[2]), PSTR("DLGID\0"))) {
			memcpy(systemVars.dlgId, argv[3], sizeof(systemVars.dlgId));
			systemVars.dlgId[DLGID_LENGTH - 1] = '\0';
			pv_snprintfP_OK();
			return;
		}

		/* TimerPoll */
		if (!strcmp_P( strupr(argv[2]), PSTR("TIMERPOLL\0"))) {
			retS = setParamTimerPoll(argv[3]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}

		/* TimerDial */
		if (!strcmp_P( strupr(argv[2]), PSTR("TIMERDIAL\0"))) {
			retS = setParamTimerDial(argv[3]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}

		/* Wrkmode */
		if (!strcmp_P( strupr(argv[2]), PSTR("WRKMODE\0"))) {
			retS = setParamWrkMode(argv[3],argv[4]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}

		/* Pwrmode */
		if (!strcmp_P( strupr(argv[2]), PSTR("PWRMODE\0"))) {
			retS = setParamPwrMode(argv[3]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}

/*		// MONITOR
		// write param monitor [sqe|frame]
		if (!strcmp_P( strupr(argv[2]), PSTR("MONITOR\0"))) {
			retS = setParamMonitor(argv[3]);
			if ( retS ) {
				pv_snprintfP_OK();
			} else {
				pv_snprintfP_ERR();
			}
			return;
		}
*/


	}

	// CONSIGNA
	if (!strcmp_P( strupr(argv[2]), PSTR("CONSIGNA\0"))) {
		retS = setParamConsigna(argv[3], argv[4]);
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;
	}

	// ALL SystemVars ( save )
	if (!strcmp_P( strupr(argv[1]), PSTR("SAVE\0"))) {
		retS = saveSystemParamsInEE( &systemVars );
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;
	}

	// RTC
	if (!strcmp_P( strupr(argv[1]), PSTR("RTC\0"))) {
		/* YYMMDDhhmm */
		memcpy(dateTimeStr, argv[2], 10);
		// year
		tmp[0] = dateTimeStr[0]; tmp[1] = dateTimeStr[1];	tmp[2] = '\0';
		rtcDateTime.year = atoi(tmp);
		// month
		tmp[0] = dateTimeStr[2]; tmp[1] = dateTimeStr[3];	tmp[2] = '\0';
		rtcDateTime.month = atoi(tmp);
		// day of month
		tmp[0] = dateTimeStr[4]; tmp[1] = dateTimeStr[5];	tmp[2] = '\0';
		rtcDateTime.day = atoi(tmp);
		// hour
		tmp[0] = dateTimeStr[6]; tmp[1] = dateTimeStr[7];	tmp[2] = '\0';
		rtcDateTime.hour = atoi(tmp);
		// minute
		tmp[0] = dateTimeStr[8]; tmp[1] = dateTimeStr[9];	tmp[2] = '\0';
		rtcDateTime.min = atoi(tmp);

		retS = rtcSetTime(&rtcDateTime);

		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;
	}

	// Si no estoy en modo service no puedo hacer estas tareas administrativas.

	if ( systemVars.wrkMode != WK_SERVICE) {
		snprintf_P( &cmd_printfBuff,CHAR128,PSTR("WARNING: Debe pasar a modo SERVICE !!!\r\n\0"));
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// MCP
	// write mcp 0|1|2 addr value
	if (!strcmp_P( strupr(argv[1]), PSTR("MCP\0"))) {
		devId = atoi(argv[2]);
		address = atoi(argv[3]);
		regValue = strtol(argv[4],NULL,2);

		if ( devId == 0 ) { mcp_address = MCP_ADDR0; }
		if ( devId == 1 ) { mcp_address = MCP_ADDR1; }
		if ( devId == 2 ) { mcp_address = MCP_ADDR2; }

		retS = MCP_write( address,  mcp_address, 1, &regValue);
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;
	}

	// EEPROM
	if (!strcmp_P( strupr(argv[1]), PSTR("EE\0"))) {
		address = atoi(argv[2]);
		p = argv[3];
		while (*p != NULL) {
			p++;
			length++;
			if (length > CMDLINE_BUFFERSIZE )
				break;
		}

		retS = EE_write( address, length, argv[3] );
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;
	}

	// LED
	// write led 0|1
	if (!strcmp_P( strupr(argv[1]), PSTR("LED\0"))) {
		value = atoi(argv[2]);
		retS = MCP_setLed( value );
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;
	}

	// gprsPWR
	if (!strcmp_P( strupr(argv[1]), PSTR("GPRSPWR\0"))) {
		value = atoi(argv[2]);
		retS = MCP_setGprsPwr( value );
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;
	}

	// gprsSW
	if (!strcmp_P( strupr(argv[1]), PSTR("GPRSSW\0"))) {
		value = atoi(argv[2]);
		retS = MCP_setGprsSw( value );
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;
	}

	// termPWR
	if (!strcmp_P( strupr(argv[1]), PSTR("TERMPWR\0"))) {
		value = atoi(argv[2]);
		retS = MCP_setTermPwr( value );
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;
	}

	// sensorPWR
	if (!strcmp_P( strupr(argv[1]), PSTR("SENSORPWR\0"))) {
		value = atoi(argv[2]);
		retS = MCP_setSensorPwr( value );
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;
	}

	// analogPWR
	if (!strcmp_P( strupr(argv[1]), PSTR("ANALOGPWR\0"))) {
		value = atoi(argv[2]);
		retS = MCP_setAnalogPwr( value );
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;
	}

	// SMS
	if (!strcmp_P(argv[1], PSTR("SMS\0"))) {
		nro = argv[2];
		msg = cmdlineGetArgStr(3);

		rprintfStr(GPRS_UART, "AT+CMGS=\"+\0" );
		rprintfStr(GPRS_UART, nro );
		rprintfStr(GPRS_UART, "\r\0");

		// Espero el prompt > para enviar el mensaje.
		timeout = 10;
		xUartQueueFlush(GPRS_UART);
		while (timeout > 0) {
			vTaskDelay( (portTickType)( 1000 / portTICK_RATE_MS ));
			if (strstr( &xUart0RxedCharsBuffer.buffer, ">") != NULL) {
				break;
			}
			timeout--;
		}
		rprintfStr(GPRS_UART, msg );
		rprintfStr(GPRS_UART, "\r");

		rprintfStr(CMD_UART, &xUart0RxedCharsBuffer.buffer );
		rprintfCRLF(CMD_UART);

		rprintfStr(GPRS_UART, "\032");

		return;
	}

	// ATCMD
	if (!strcmp_P(argv[1], PSTR("ATCMD\0"))) {
		msg = argv[2];
		timeout = atoi(argv[3]);
		if (timeout == 0)
			timeout = 1;

		xUartQueueFlush(GPRS_UART);
		rprintfStr(GPRS_UART, msg);
		rprintfStr(GPRS_UART, "\r\0");

		rprintfStr(CMD_UART, "sent>\0");
		rprintfStr(CMD_UART, msg);
		rprintfCRLF(CMD_UART);

		while (timeout > 0) {
			vTaskDelay( (portTickType)( 1000 / portTICK_RATE_MS ));
			timeout--;
		}

		rprintfStr(CMD_UART, &xUart0RxedCharsBuffer.buffer );
		rprintfCRLF(CMD_UART);

		return;
	}

#ifdef CHANNELS_3

	// Valves: Phase
	// write ph A1 1
	if (!strcmp_P( strupr(argv[1]), PSTR("PH\0"))) {

		phase = toupper( argv[2][0]  );
		//(s0)++;
		chip = argv[2][1] - 0x30;
		value = atoi(argv[3]);

		retS = setValvesPhase(phase,chip, value);
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;
	}

	// Valves: Enable
	// write en A1 1
	if (!strcmp_P( strupr(argv[1]), PSTR("EN\0"))) {

		phase = toupper( argv[2][0]  );
		//(s0)++;
		chip = argv[2][1] - 0x30;
		value = atoi(argv[3]);

		retS = setValvesEnable(phase,chip, value);
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;
	}

	// Valves: Reset
	if (!strcmp_P( strupr(argv[1]), PSTR("VRESET\0"))) {

		value = atoi(argv[2]);

		retS = setValvesReset( value );
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;
	}

	// Valves: Sleep
	if (!strcmp_P( strupr(argv[1]), PSTR("VSLEEP\0"))) {

		value = atoi(argv[2]);

		retS = setValvesSleep( value );
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;
	}

	// Valves: Pulse [A/B][1/2] {+|-} {ms}
	if (!strcmp_P( strupr(argv[1]), PSTR("VPULSE\0"))) {

		phase = toupper( argv[2][0]  );
		chip = argv[2][1] - 0x30;
		value = toupper( argv[3][0]  );
		sleepTime = atol(argv[4]);

		if ( sleepTime > 5000 ) {
			sleepTime = 5000;
		}

		retS = setValvesPulse( phase, chip, value, sleepTime );
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;

	}

	// Valves: OPEN
	if (!strcmp_P( strupr(argv[1]), PSTR("OPEN\0"))) {

		phase = toupper( argv[2][0]  );
		chip = argv[2][1] - 0x30;

		retS = setValvesOpen( phase, chip );
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;

	}

	// Valves: CLOSE
	if (!strcmp_P( strupr(argv[1]), PSTR("CLOSE\0"))) {

		phase = toupper( argv[2][0]  );
		chip = argv[2][1] - 0x30;

		retS = setValvesClose( phase, chip );
		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;

	}

	// Valves: Consigna
	if (!strcmp_P( strupr(argv[1]), PSTR("CONSIGNA\0"))) {

		if (!strcmp_P( strupr(argv[2]), PSTR("DIA\0"))) {
			retS = setConsignaDia();
		}

		if (!strcmp_P( strupr(argv[2]), PSTR("NOCHE\0"))) {
			retS = setConsignaNoche();
		}

		if ( retS ) {
			pv_snprintfP_OK();
		} else {
			pv_snprintfP_ERR();
		}
		return;

	}
#endif

	// CMD NOT FOUND
	if (xSemaphoreTake( sem_CmdUart, MSTOTAKECMDUARTSEMPH ) == pdTRUE ) {
		rprintfProgStrM(CMD_UART, "ERROR\r\n");
		rprintfProgStrM(CMD_UART, "CMD NOT DEFINED\r\n");
		xSemaphoreGive( sem_CmdUart );
	}
	return;

}
Esempio n. 29
0
void sp5K_readFunction(void)
{

u08 devId, address, regValue, pin, channel, pcbChannel, adcChannel;
u08 length = 10;
s08 retS;
u08 mcp_address;
RtcTimeType rtcDateTime;
u08 i;
u16 adcRetValue;
char eeRdBuffer[EERDBUFLENGHT];
u16 eeAddress;
u08 pos;
frameDataType rdFrame;
u16 recCount;
double I,M,D;
u08 bdGetStatus;
u16 rcdIndex;
u08 b[9];

	memset( cmd_printfBuff, NULL, CHAR128);
	makeargv();

	// RTC
	// Lee la hora del RTC.
	if (!strcmp_P( strupr(argv[1]), PSTR("RTC\0"))) {
		retS = rtcGetTime(&rtcDateTime);
		if (retS ) {
			pos = snprintf_P( &cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("%02d/%02d/%04d "),rtcDateTime.day,rtcDateTime.month, rtcDateTime.year );
			pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("%02d:%02d:%02d\r\n\0"),rtcDateTime.hour,rtcDateTime.min, rtcDateTime.sec );
		} else {
			snprintf_P( &cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// DCD
	if (!strcmp_P( strupr(argv[1]), PSTR("DCD\0"))) {
		retS = MCP_queryDcd(&pin);
		if (retS ) {
			pos = snprintf_P( &cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			if ( pin == 1 ) { pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("DCD ON\r\n\0")); }
			if ( pin == 0 ) { pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("DCD OFF\r\n\0")); }
		} else {
			snprintf_P( &cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// RI
	if (!strcmp_P( strupr(argv[1]), PSTR("RI\0"))) {
		retS = MCP_queryRi(&pin);
		if (retS ) {
			pos = snprintf_P( &cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			if ( pin == 1 ) { pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("RI ON\r\n\0")); }
			if ( pin == 0 ) { pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("RI OFF\r\n\0")); }
		} else {
			snprintf_P( &cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// DIN0
	if (!strcmp_P( strupr(argv[1]), PSTR("DIN0\0"))) {
		retS = MCP_queryDin0(&pin);
		if (retS ) {
			pos = snprintf_P( &cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("DIN0 %d\r\n\0"), pin);
		} else {
			snprintf_P( &cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// DIN1
	if (!strcmp_P( strupr(argv[1]), PSTR("DIN1\0"))) {
		retS = MCP_queryDin1(&pin);
		if (retS ) {
			pos = snprintf_P( cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("DIN1 %d\r\n\0"), pin);
		} else {
			snprintf_P( cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(cmd_printfBuff);
		return;
	}

	// TERMSW
	if (!strcmp_P( strupr(argv[1]), PSTR("TERMSW\0"))) {
		retS = MCP_queryTermPwrSw(&pin);
		if (retS ) {
			pos = snprintf_P( cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			if ( pin == 1 ) { pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("TERMSW ON\r\n\0")); }
			if ( pin == 0 ) { pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("TERMSW OFF\r\n\0")); }
		} else {
			snprintf_P( cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// MCP
	// read mcp 0|1|2 addr
	if (!strcmp_P( strupr(argv[1]), PSTR("MCP\0"))) {
		devId = atoi(argv[2]);
		address = atoi(argv[3]);

		if ( devId == 0 ) { mcp_address = MCP_ADDR0; }
		if ( devId == 1 ) { mcp_address = MCP_ADDR1; }
		if ( devId == 2 ) { mcp_address = MCP_ADDR2; }

		retS = MCP_read( address, mcp_address, 1, &regValue);
		if (retS ) {
			// Convierto el resultado a binario.
			pos = snprintf_P( cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			strcpy(b,byte_to_binary(regValue));
			pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("mcp %d: reg=[%d] data=[0X%03x] [%s] \r\n\0"),devId, address,regValue, b);
		} else {
			snprintf_P( &cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}
	// *****************************************************************************************************
	// SOLO PARA USO EN MODO SERVICE.
	if ( systemVars.wrkMode != WK_SERVICE) {
		snprintf_P( &cmd_printfBuff,CHAR128,PSTR("WARNING: Debe pasar a modo SERVICE !!!\r\n"));
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// ADC
	// read adc channel
	// El canal es de 0..3/0..7 y representa el canal fisico en el conector, NO
	// EL PROPIO CANAL DEL A/D

	if (!strcmp_P( strupr(argv[1]), PSTR("ADC\0"))) {

		pcbChannel = atoi(argv[2]);

		if ( NRO_CHANNELS == 3 ) {
			switch (pcbChannel ) {
			case 0:
				adcChannel = 3;
				break;
			case 1:
				adcChannel = 5;
				break;
			case 2:
				adcChannel = 7;
				break;
			case 3:
				adcChannel = 1;		// Bateria
				break;
			}
		}

		retS = ADS7828_convert( adcChannel, &adcRetValue );

		if (retS ) {
			pos = snprintf_P( &cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("adc_%d(%d)=[%d]\r\n\0"),pcbChannel, adcChannel, adcRetValue);
		} else {
			snprintf_P( &cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// FRAME
	// Lee todos los canales y presenta el frame.
	if (!strcmp_P( strupr(argv[1]), PSTR("FRAME\0"))) {
		SIGNAL_tkDataReadFrame();
		return;
	}

	// EEPROM
	// read ee addr length
	if (!strcmp_P( strupr(argv[1]), PSTR("EE\0"))) {
		eeAddress = atol(argv[2]);
		length = atoi(argv[3]);
		// Buffer control.
		if (length > EERDBUFLENGHT) {
			length = EERDBUFLENGHT;
		}
		retS = EE_read( eeAddress, length, &eeRdBuffer);
		if (retS ) {
			pos = snprintf_P( &cmd_printfBuff,CHAR128,PSTR("OK\r\n"));
			pos += snprintf_P( &cmd_printfBuff[pos],CHAR128,PSTR("addr=[%d] data=[%s]\r\n\0"),eeAddress,eeRdBuffer);
		} else {
			snprintf_P( &cmd_printfBuff,CHAR128,PSTR("ERROR\r\n\0"));
		}
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// MEMORY DUMP
	if (!strcmp_P( strupr(argv[1]), PSTR("MEMORY\0"))) {

		recCount = 0;

		for (;;) {

			vTaskDelay( (portTickType)(50 / portTICK_RATE_MS) );
			rcdIndex = BD_getRDptr();
			bdGetStatus =  BD_get( &rdFrame, rcdIndex);
			// BD vacia
			if (bdGetStatus == 0) {
				break;
			}

			recCount++;

			// Armo el frame
			memset( cmd_printfBuff, NULL, CHAR128);
			pos = 0;
			pos = snprintf_P( &cmd_printfBuff, CHAR128, PSTR("(%d/%d)>" ), recCount, rcdIndex);
			pos += snprintf_P( &cmd_printfBuff[pos], CHAR128,PSTR( "%04d%02d%02d,"),rdFrame.rtc.year,rdFrame.rtc.month, rdFrame.rtc.day );
			pos += snprintf_P( &cmd_printfBuff[pos], CHAR128, PSTR("%02d%02d%02d,"),rdFrame.rtc.hour,rdFrame.rtc.min, rdFrame.rtc.sec );
			// Valores analogicos
			for ( channel = 0; channel < NRO_CHANNELS; channel++) {
				pos += snprintf_P( &cmd_printfBuff[pos], CHAR128, PSTR("%s=%.2f"),systemVars.aChName[channel],rdFrame.analogIn[channel] );
				pos += snprintf_P( &cmd_printfBuff[pos], CHAR128, PSTR(","));
			}
			// Valores digitales.
			pos += snprintf_P( &cmd_printfBuff[pos], CHAR128, PSTR("%s=%.2f,"), systemVars.dChName[0], rdFrame.din0_pCount );
			pos += snprintf_P( &cmd_printfBuff[pos], CHAR128,PSTR( "%s=%.2f"), systemVars.dChName[1], rdFrame.din0_pCount );
#ifdef CHANNELS_3
			// Bateria
			pos += snprintf_P( &cmd_printfBuff[pos], CHAR128, PSTR(",bt=%.2f"), rdFrame.batt );
#endif
			pos += snprintf_P( &cmd_printfBuff[pos], CHAR128,PSTR("<\r\n\0") );

			// Imprimo
			sp5K_printStr(&cmd_printfBuff);

			BD_delete(-1);
			taskYIELD();
		}

		snprintf_P( &cmd_printfBuff,CHAR128,PSTR("OK\r\n\0"));
		sp5K_printStr(&cmd_printfBuff);
		return;
	}

	// CMD NOT FOUND
	if (xSemaphoreTake( sem_CmdUart, MSTOTAKECMDUARTSEMPH ) == pdTRUE ) {
		rprintfProgStrM(CMD_UART, "ERROR\r\n");
		rprintfProgStrM(CMD_UART, "CMD NOT DEFINED\r\n");
		xSemaphoreGive( sem_CmdUart );
	}
	return;


}
Esempio n. 30
0
//------------------------------------------------------------------------------------
void sp5K_helpFunction(void)
{

	if (xSemaphoreTake( sem_CmdUart, MSTOTAKECMDUARTSEMPH ) == pdTRUE ) {

		rprintfProgStrM(CMD_UART, "Spymovil \0");
		rprintfProgStrM(CMD_UART, SP5K_MODELO);
		rprintfChar(CMD_UART, ' ');
		rprintfProgStrM(CMD_UART, SP5K_VERSION);
		rprintfChar(CMD_UART, ' ');
		rprintfProgStrM(CMD_UART, EE_TYPE);
		rprintfChar(CMD_UART, '-');
		rprintfProgStrM(CMD_UART, FTYPE);
		rprintfChar(CMD_UART, ' ');
		rprintfProgStrM(CMD_UART, SP5K_REV);
		rprintfChar(CMD_UART, ' ');
		rprintfProgStrM(CMD_UART, SP5K_DATE);
		rprintfCRLF(CMD_UART);

		rprintfProgStrM(CMD_UART, "Available commands are:\r\n");
		rprintfProgStrM(CMD_UART, "-cls\r\n\0");
		rprintfProgStrM(CMD_UART, "-help\r\n\0");
		rprintfProgStrM(CMD_UART, "-reset {default ,memory}\r\n\0");
		rprintfProgStrM(CMD_UART, "-status\r\n\0");

		rprintfProgStrM(CMD_UART, "-write rtc YYMMDDhhmm \r\n");
		rprintfProgStrM(CMD_UART, "       param { wrkmode [service | monitor {sqe|frame}], pwrmode [continuo|discreto] } \r\n");
		rprintfProgStrM(CMD_UART, "              timerpoll, timerdial, dlgid \r\n");
		rprintfProgStrM(CMD_UART, "              debuglevel +/-{none,i2c,bd,data,gprs,digital,all} \r\n");
		rprintfProgStrM(CMD_UART, "              loglevel (none, info, all)\r\n");
		rprintfProgStrM(CMD_UART, "              imin|imax|mmin|mmax|magp|offmmin|offmmax X val\r\n");
		rprintfProgStrM(CMD_UART, "              aname, dname\r\n");
		rprintfProgStrM(CMD_UART, "              apn, port, ip, script, passwd\r\n");
#ifdef CHANNELS_3
		rprintfProgStrM(CMD_UART, "              consigna [none|doble], [dia|noche] {hh:mm} \r\n");
#endif
		rprintfProgStrM(CMD_UART, "              save\r\n");

		if ( systemVars.wrkMode == WK_SERVICE) {
			rprintfProgStrM(CMD_UART, "       mcp devId regAddr {xxxxxxxx}\r\n");
			rprintfProgStrM(CMD_UART, "       ee addr string\r\n");
			rprintfProgStrM(CMD_UART, "       led {0|1},gprspwr {0|1},gprssw {0|1},termpwr {0|1},sensorpwr {0|1},analogpwr {0|1}\r\n");
			rprintfProgStrM(CMD_UART, "       sms {nro,msg}, atcmd {atcmd,timeout}\r\n");
#ifdef CHANNELS_3
			rprintfProgStrM(CMD_UART, "       ph [A/B][1/2] {0|1}, en [A/B][1/2] {0|1}, vreset {0|1} vsleep {0|1}\r\n");
			rprintfProgStrM(CMD_UART, "       vpulse [A/B][1/2] {+|-} {ms}\r\n");
			rprintfProgStrM(CMD_UART, "       open [A/B][1/2], close [A/B][1/2], consigna [dia|noche] \r\n");
#endif
		}

		rprintfProgStrM(CMD_UART, "-read rtc\r\n");
		rprintfProgStrM(CMD_UART, "      mcp devId regAddr\r\n");
		rprintfProgStrM(CMD_UART, "      dcd,ri,termsw,din0,din1\r\n");

		if ( systemVars.wrkMode == WK_SERVICE) {

			rprintfProgStrM(CMD_UART, "      adc{channel}, frame\r\n");
			rprintfProgStrM(CMD_UART, "      ee addr lenght\r\n");
			rprintfProgStrM(CMD_UART, "      memory \r\n");
			rprintfCRLF(CMD_UART);
		}

		xSemaphoreGive( sem_CmdUart );
	}
}