/* Defined by the application code, but called by FreeRTOS+UDP when the network
 connects/disconnects (if ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 in
 FreeRTOSIPConfig.h). */
void vApplicationIPNetworkEventHook(eIPCallbackEvent_t eNetworkEvent) {
	uint32_t ulIPAddress, ulNetMask, ulGatewayAddress, ulDNSServerAddress;
	static BaseType_t xTasksAlreadyCreated = pdFALSE;
	int8_t cBuffer[16];
	char bufor[100];

	/* Check this was a network up event, as opposed to a network down event. */
	if (eNetworkEvent == eNetworkUp) {
		/* Create the tasks that use the IP stack if they have not already been
		 created. */
		if (xTasksAlreadyCreated == pdFALSE) {
			//if(xTaskCreate(vUDPTransmitCANFramesTask,"Tx CAN/UDP",UDPD_CAN_TX_SIZE,NULL,UDP_CAN_TX_PRIO,NULL)==pdPASS) print_console("Creating UDP/CAN Tx task -- > OK\r\n");
			// else print_console("Creating UDP/CAN Tx -- > failed\r\n");

			SNTP_init();

			//daj znac taskowi do obslugi http/ftp,ze moze utworzyc sockety
#if ipconfigUSE_HTTP==1 || ipconfigUSE_FTP==1
			xTaskNotifyGive(xServerWorkTaskHandle);
#endif

			xTasksAlreadyCreated = pdTRUE;
		}

		/* The network is up and configured.  Print out the configuration,
		 which may have been obtained from a DHCP server. */
		FreeRTOS_GetAddressConfiguration(&ulIPAddress, &ulNetMask, &ulGatewayAddress,
				&ulDNSServerAddress);

		print_console("\r\n-----------------------\r\n\r\n");

		/* Convert the IP address to a string then print it out. */

		FreeRTOS_inet_ntoa(ulIPAddress, cBuffer);
		sprintf(bufor, "IP Address: %s\r\n", cBuffer);
		print_console(bufor);
		gdb.sys.ipaddress = ulIPAddress;

		/* Convert the net mask to a string then print it out. */
		FreeRTOS_inet_ntoa(ulNetMask, cBuffer);
		sprintf(bufor, "Subnet Mask: %s\r\n", cBuffer);
		print_console(bufor);
		gdb.sys.maskaddress = ulNetMask;

		/* Convert the IP address of the gateway to a string then print it out. */
		FreeRTOS_inet_ntoa(ulGatewayAddress, cBuffer);
		sprintf(bufor, "Gateway IP Address: %s\r\n", cBuffer);
		print_console(bufor);
		gdb.sys.gwaddress = ulGatewayAddress;

		/* Convert the IP address of the DNS server to a string then print it out. */
		FreeRTOS_inet_ntoa(ulDNSServerAddress, cBuffer);
		sprintf(bufor, "DNS server IP Address: %s\r\n", cBuffer);
		print_console(bufor);
		gdb.sys.dnsaddress = ulDNSServerAddress;
	}
}
Ejemplo n.º 2
0
int fprintf_utf8(FILE *stream, const char *format, ...)
{
	char *utmp = NULL;
	wchar_t *wout = NULL;
	int ret = -1;

	while (1) {
		va_list argptr;
		if (!(utmp = (char *)malloc(32768*sizeof(char)))) break;
		va_start(argptr, format);
		ret = vsprintf(utmp, format, argptr);
		va_end(argptr);
		if (ret < 0) break;
		if (!(wout = wchar_from_utf8(utmp))) {
			ret = -1;
			break;
		}
		ret = print_console(stream, wout, wcslen(wout));
		break;
	}
	if (utmp) free(utmp);
	if (wout) free(wout);

	return ret;
}
Ejemplo n.º 3
0
/*##########+++ CPU Decode Cycle +++##########*/
void decode(Emulator *emu, uint16_t instruction, bool disassemble)
{  
  Cpu *cpu = emu->cpu;
  Debugger *debugger = emu->debugger;

  int done = 0;
  uint8_t format_id;
  memset(debugger->mnemonic, 0, sizeof debugger->mnemonic);

  format_id = (uint8_t)(instruction >> 12);

  if (format_id == 0x1) {
    // format II (single operand) instruction //
    decode_formatII(emu, instruction, disassemble);  
  }    
  else if (format_id >= 0x2 && format_id <= 3) {
    // format III (jump) instruction //
    decode_formatIII(emu, instruction, disassemble);
  }
  else if (format_id >= 0x4) {
    // format I (two operand) instruction //
    decode_formatI(emu, instruction, disassemble);
  }
  else {
    char inv[100] = {0};

    sprintf(inv, "%04X\t[INVALID INSTRUCTION]\n", instruction);
    print_console(emu, inv);
    printf("%s", inv);
    
    cpu->pc -= 2;
    cpu->running = false;
    debugger->debug_mode = true;
  }
}
Ejemplo n.º 4
0
void SNTP_init(void)
{
	#if ipconfigUSE_SNTP

	 if(xTaskCreate(SNTP_thread,SNTP_THREAD_NAME,SNTP_THREAD_STACK_SIZE,NULL,SNTP_THREAD_PRIO,NULL)==pdPASS)
		 print_console(s_task_create_ok);
	 else
		 print_console(s_task_create_fail);



	#endif



}
Ejemplo n.º 5
0
int printf_utf8(const char *format, ...)
{
	char *utmp = NULL;
	wchar_t *wout = NULL;
	int ret = -1;

	while (1) {
		va_list argptr;
		if (!(utmp = (char *)malloc(UTF8_BUFFER_SIZE*sizeof(char)))) break;
		va_start(argptr, format);
		ret = local_vsnprintf(utmp, UTF8_BUFFER_SIZE, format, argptr);
		va_end(argptr);
		if (ret < 0) break;
		if (!(wout = wchar_from_utf8(utmp))) {
			ret = -1;
			break;
		}
		ret = print_console(stdout, wout, wcslen(wout));
		break;
	}
	if (utmp) free(utmp);
	if (wout) free(wout);

	return ret;
}
Ejemplo n.º 6
0
void interpreter(char *cmd_buf, char len, void *tsm, char* cmd)
{
    int i=0;

    int cmd_len =  sizeof(comm_act)/sizeof(_action_command);

    //potnij stringi wzgledem spacji
    cut_cmd_str(cmd_buf, len);

    //nic nie wpisane, tylko ENTER poszedl ???[lp]
    if(!arg[0][0]) {
        // char str[3] = {' ', 0x08, "\0"}; //spacja, backspace, koniec stringa
        //wyslij spacje i skasuj ja
        print_console("\r\n");
        //po tym wyslij znak zachety
        goto PROMPT;
    }

    // skopiuj komende tylko jesli bylo cos wpisane, sam enter pomija
    add_to_history_cmd(com_cmd_hist, cmd);

    //przeszukaj cala tablice komend
    for (; i< cmd_len; i++)
    {

        if(strncmp((char*)comm_act[i].command, arg[0], MAX_LEX_LEN) == 0)    break;
    }

    //wykonaj komende, jesli wyskoczyl z petli przez: break;
    if(i<cmd_len)
    {
        print_console("\r\n");
        comm_act[i].action(tsm);
    }
    else
    {
        //nie podejmuj akcji, komenda nierozpoznana
        print_console(cmd_not_found);

    }

PROMPT:
    print_console(">");

}
Ejemplo n.º 7
0
int main(int argc, char** argv){
	
	struct termios cfg, old;
	FILE* root = NULL;
	int gdbPort = 0;
	
	if(argc != 3 && argc != 2){
		fprintf(stderr,"usage: %s path_to_disk [gdbPort]\n", argv[0]);
		return -1;	
	}
	
	//setup the terminal
	{
		int ret;
		
		ret = tcgetattr(0, &old);
		cfg = old;
		if(ret) perror("cannot get term attrs");
		
		#ifndef _DARWIN_
		
			cfg.c_iflag &=~ (INLCR | INPCK | ISTRIP | IUCLC | IXANY | IXOFF | IXON);
			cfg.c_oflag &=~ (OPOST | OLCUC | ONLCR | OCRNL | ONOCR | ONLRET);
			cfg.c_lflag &=~ (ECHO | ECHOE | ECHONL | ICANON | IEXTEN | XCASE);
		#else
			cfmakeraw(&cfg);
		#endif
		
		ret = tcsetattr(0, TCSANOW, &cfg);
		if(ret) perror("cannot set term attrs");
	}
	
	root = fopen64(argv[1], "r+b");
	if(!root){
		fprintf(stderr,"Failed to open root device\n");
		exit(-1);
	}
	
	if(argc >= 3) gdbPort = atoi(argv[2]);
	
    start_mongoose();
    init_console();
    print_console();
	//socInit(&soc, socRamModeAlloc, NULL, readchar, writechar, rootOps, root);
	socInit(&soc, socRamModeAlloc, NULL, get_one_keystroke, write_char_to_console, rootOps, root);
	signal(SIGINT, &ctl_cHandler);
	socRun(&soc, gdbPort);
	
	fclose(root);
	tcsetattr(0, TCSANOW, &old);
	
	return 0;
}
void
print_reply(const char *ifname, int count)
{
   unsigned char buf[512];
   size_t len;

   while(1) {
      len = sizeof(buf);
      if(get_reply(ifname, 5, buf, &len) == -1)
         break;
      print_console(buf, len);
   }
}
Ejemplo n.º 9
0
int vfprintf_utf8(FILE *stream, const char *format, va_list argptr)
{
	char *utmp = NULL;
	wchar_t *wout = NULL;
	int ret = -1;

	while (1) {
		if (!(utmp = (char *)malloc(UTF8_BUFFER_SIZE*sizeof(char)))) break;
		if ((ret = local_vsnprintf(utmp, UTF8_BUFFER_SIZE, format, argptr)) < 0) break;
		if (!(wout = wchar_from_utf8(utmp))) {
			ret = -1;
			break;
		}
		ret = print_console(stream, wout, wcslen(wout));
		break;
	}
	if (utmp) free(utmp);
	if (wout) free(wout);

	return ret;
}
Ejemplo n.º 10
0
// Task odbioru i analizy znakow z konsoli
void vConsoleRxTask (void *pvparameters) {


    char special=0;
    char i = 0;

    char command_buffer[CMD_MAX_LEN];
    char *ptr_cmd_buf = command_buffer;
    char onechar;

    //utworz kolejke znakow
    RxQueue = xQueueCreate(100, sizeof( portCHAR ) );


    for (;;)
    {

        //vTaskDelay(10 / portTICK_RATE_MS);
        while(xQueueReceive(RxQueue,&onechar,portMAX_DELAY))
        {

            // sprawdzamy wstepnie czy to znak specjalny (wszelkie strzalki, delete)
            if (onechar == 0x5b ||onechar == 0x1b) {
                special = 1;
            }
            //sprawdz czy to byla strzalka w gore
            else if (special && onechar == 0x41 )
            {
                //skasuj wyswietlona z historii komende i przygotuj dla poprzedniej
                clean_term(ptr_cmd_buf);
                //wczytaj poprzednia komende
                przewinwtyl(com_cmd_hist, ptr_cmd_buf);

                //wyswietla te komnde na rs
                print_console(ptr_cmd_buf);

                //print_char(0, user.prom(&user));
                i= (char)strlen(ptr_cmd_buf);

                // deaktywacja sekwencji sterujacej
                special = 0;

            }

            //przyjmuj tylko znaki z przedzialu a-z 0-9 spacja, enter, backspace,itd.
            //uwaga na strzalki, wysylaja po 2 znaki: A+costam oraz B+costam
            else if(( (onechar >= 'a' && onechar <= 'z') ||
                      (onechar >= 'A' && onechar <= 'Z') ||
                      (onechar >= '0' && onechar <= '9') ||
                      onechar == ' ' || onechar == '.'   ||
                      onechar == '-' || onechar == '_'   ||
                      onechar == '+' || onechar == '?' ||
                      onechar == '@' )&&(!special)  )
            {
                //echo dla wpisanego znaku
                usart_put_char(onechar);

                //zabezpieczenie przed przekroczeniem tablicy
                if(i < CMD_MAX_LEN)
                {
                    *(ptr_cmd_buf + i) = onechar;
                    i++;
                }
            }

            //sprawdz czy to byl backspace
            else if (onechar == BS) //backspace
            {
                //sprawdz czy index jest jeszcze w dopuszczlnym obszarze,
                //z lewej i z prawej strony
                if(i > 0 && i < CMD_MAX_LEN)
                {
                    usart_put_char(BS);

                    //wyczysc ostatni znak
                    *(ptr_cmd_buf + i) = 0x0;
                    //przesun o 1 do tylu aktualny indeks bufora
                    i--;

                }
            }
            //jesli jakikolwiek inny klawisz ze znakow specjalnych
            else if(special)	special = 0;

            //sprawdz czy to byl enter lub koniec transmisji
            else if (onechar == EOT || onechar ==LF ||
                     onechar ==CR_CM || onechar==ETB)
            {
                //usart_put_string("\r\n");
                //usart_put_char((char*)LF);
                //usart_put_char((char*)CMD_PRMT);
                //zakoncz c-stringa znakiem konca= '\0'
                *(ptr_cmd_buf + i) = '\0';

                //skopiuj te komende do kolejki przyjetych komend
                //add_to_history_cmd(com_cmd_hist, ptr_cmd_buf);
                //interpretacja komend
                interpreter(ptr_cmd_buf, i, NULL,ptr_cmd_buf);


                //przygotuj indeks pod nastepna komende na poczatek bufora
                i= 0;

                //byl ENTER, wiec ustaw ze nie kasuje nic STRZALKA W GORE wypisujaca z historii
                was_hist = 0;
            }
        }
    }


}
BaseType_t xNetworkInterfaceInitialise(void) {

	HAL_StatusTypeDef hal_eth_init_status;
	uint8_t status = 0;

	/* Init ETH */

	heth_global.Instance = ETH;
	heth_global.Init.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE;
	heth_global.Init.Speed = ETH_SPEED_100M;
	heth_global.Init.DuplexMode = ETH_MODE_FULLDUPLEX;
	heth_global.Init.PhyAddress = DP83848_PHY_ADDRESS;

	heth_global.Init.MACAddr = &ucMACAddress[0];
	heth_global.Init.RxMode = ETH_RXINTERRUPT_MODE;
#if (ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM == 1) && (ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 1)
	heth_global.Init.ChecksumMode = ETH_CHECKSUM_BY_HARDWARE;
#else
	heth_global.Init.ChecksumMode = ETH_CHECKSUM_BY_SOFTWARE;
#endif

	heth_global.Init.MediaInterface = ETH_MEDIA_INTERFACE_RMII;

	hal_eth_init_status = HAL_ETH_Init(&heth_global);

	if (hal_eth_init_status == HAL_OK) {
		print_console(">> MAC init OK\r\n");
		status = pdPASS;
	}
	else {
		return pdFAIL;
		print_console(">> MAC init failed\r\n");
	}

	probePHY(&heth_global);

	/* Initialize Tx Descriptors list: Chain Mode */
	HAL_ETH_DMATxDescListInit(&heth_global, DMATxDscrTab, &Tx_Buff[0][0],
	ETH_TXBUFNB);
	//HAL_ETH_DMATxDescListInit(&heth_global, DMATxDscrTab, NULL, ETH_TXBUFNB);

	//InitializeZeroCopyBuffersTx(ETH_TXBUFNB,DMATxDscrTab);

	/* Initialize zero copy buffers */
	//uint8_t* zerocopy_bufor_tab[ETH_RXBUFNB]; //  tab to hold pointers to zero copy bufors
	/* Initialize Rx Descriptors list: Chain Mode  */
	HAL_ETH_DMARxDescListInit(&heth_global, DMARxDscrTab, &Rx_Buff[0][0],
	ETH_RXBUFNB);

	/* Enable MAC and DMA transmission and reception */
	HAL_ETH_Start(&heth_global);

	setPHYleds(&heth_global);

#if PHY_LINK_CHANGE_INT

	uint32_t regvalue = 0;

	/**** Configure PHY to generate an interrupt when Eth Link state changes ****/
	/* Read Register Configuration */
	HAL_ETH_ReadPHYRegister(&heth_global, PHY_MICR, &regvalue);

	regvalue |= (PHY_MICR_INT_EN | PHY_MICR_INT_OE);

	/* Enable Interrupts */
	HAL_ETH_WritePHYRegister(&heth_global, PHY_MICR, regvalue );

	/* Read Register Configuration */
	HAL_ETH_ReadPHYRegister(&heth_global, PHY_MISR, &regvalue);

	regvalue |= PHY_MISR_LINK_INT_EN;

	/* Enable Interrupt on change of link status */
	HAL_ETH_WritePHYRegister(&heth_global, PHY_MISR, regvalue);

#endif

	xTaskCreate(prvEMACDeferredInterruptHandlerTask, "EthRcvTask", configMINIMAL_STACK_SIZE, NULL,
			configMAX_PRIORITIES-1, NULL);

	return status;

}