static void reflash_led_blinker(void *parameters) { (void)parameters; while(!end_led) { led_set_red(0); led_set_green(1); vTaskDelay(100/portTICK_RATE_MS); led_set_red(1); led_set_green(0); vTaskDelay(100/portTICK_RATE_MS); } led_set_red(0); led_set_green(1); while(1) { vTaskDelay(1000/portTICK_RATE_MS); } }
////////////////////////////////////////////////////////////////////////////// /// Inizialization. This function is called once before entering /// main loop. /// ////////////////////////////////////////////////////////////////////////////// void init() { VMC_INT_16 motorID; init_aisc167b(); init_asccom(); init_cycletime_counter(); i2c_init(); init_bioport(); if (can_init(CAN_BAUD, 0)) while(1){led_swap_green();} led_set_green(0); led_set_red(0); ledseq_init(); ais_system_init(); //init_Thermic(); init_error(); init_calculatestate(); init_motorcontrol(); init_controller(); init_current_limiter(); mpwr_init(); set_default_configuration(); for (motorID = 0; motorID < 3; motorID++) { // init_Limiter(i, 100); init_encoder(motorID); } }
void PtCmdInit (void) { /* enable firmware defaults button */ AT91F_PIO_CfgInputFilter (EXT_BUTTON_PIO, EXT_BUTTON_PIN); AT91F_PIO_CfgInput (EXT_BUTTON_PIO, EXT_BUTTON_PIN); /* enable power LED */ led_set_red (1); xTaskCreate (vCmdTask, (signed portCHAR *) "CMD", TASK_CMD_STACK, NULL, TASK_CMD_PRIORITY, NULL); }
/* Reflash the controller flash if all of the following conditions are satisfied: * + We have new flash content in eink_flash_content * + The flash identification indicates our custom built controller and not the stock Epson one * + The first 4 bytes of the existing flash content do not match eink_flash_content * * If this function returns a positive value then the controller was reset and the application * should wait 5ms before proceeding; if the function returns 0, no change was done; if the * function returns a negative value it is an error code */ int eink_flash_conditional_reflash(void) { if(sizeof(eink_flash_content) == 0) return 0; int r = eink_flash_acquire(); if(r>=0) { unsigned int ident = eink_flash_read_identification(); xTaskHandle led_task_handle; #ifdef DEBUG_REFLASH printf("Device identification: %06X\n", ident); #endif if( ident != 0x202016 ) { /* Only for our own flash, not the pre-assembled */ goto out_done; } eink_flash_read(0, flash_tmpbuf, sizeof(flash_tmpbuf)); #ifdef DEBUG_REFLASH printf("%02X %02X %02X %02X\n", flash_tmpbuf[0], flash_tmpbuf[1], flash_tmpbuf[2], flash_tmpbuf[3]); #endif if(memcmp(flash_tmpbuf, eink_flash_content, sizeof(flash_tmpbuf)) != 0) { printf("Flash content not correct, starting reflash cycle\nDO NOT POWER OFF\n"); xTaskCreate( reflash_led_blinker, (signed char*)"LED BLINKER", 128, NULL, tskIDLE_PRIORITY+1, &led_task_handle); printf("Starting bulk erase\n"); eink_flash_write_enable(); eink_flash_bulk_erase(); printf("Done bulk erase\n"); printf("Starting programming (%i bytes)\n", sizeof(eink_flash_content)); eink_flash_program(eink_flash_content, sizeof(eink_flash_content)); printf("Done\n"); end_led = 1; vTaskDelay(150/portTICK_RATE_MS); vTaskDelete(led_task_handle); led_set_red(0); led_set_green(1); } } else { return r; } out_done: eink_flash_release(); return 1; }
void show_color(unsigned char dig){ switch(dig){ case 0: led_set_yellow(POWER); led_set_black(); led_set_black(); led_set_black(); led_set_black(); sound_start(dig); break; case 1: led_set_black(); led_set_red(POWER); led_set_black(); led_set_black(); led_set_black(); sound_start(dig); break; case 2: led_set_black(); led_set_black(); led_set_green(POWER); led_set_black(); led_set_black(); sound_start(dig); break; case 3: led_set_black(); led_set_black(); led_set_black(); led_set_blue(POWER); led_set_black(); sound_start(dig); break; } }
static void vCmdTask (void *pvParameters) { (void) pvParameters; unsigned int t = 0; portCHAR cByte; portBASE_TYPE len = 0; static char next_command[MAX_CMD_LINE_LENGTH]; for (;;) { if (vUSBRecvByte (&cByte, 1, 100)) { vDebugSendHook (cByte); switch (cByte) { case '\n': case '\r': if (len) { next_command[len] = 0; vCmdProcess (next_command); len = 0; } break; default: next_command[len++] = cByte; } } else if (AT91F_PIO_GetInput (EXT_BUTTON_PIO) & EXT_BUTTON_PIN) { if (t < 30) t++; else { for (t = 0; t < 10; t++) { vTaskDelay (500 / portTICK_RATE_MS); led_set_red (0); vTaskDelay (500 / portTICK_RATE_MS); led_set_red (1); } /* backup reader id */ t = env.e.reader_id; vNetworkResetDefaultSettings (); /* restore reader id */ env.e.reader_id = t; /* store the configuration */ env_store (); /* wait a bit before the reset */ debug_printf ("restoring original settings" " after reset pin triggerd & reboot...\n"); vTaskDelay (1000 / portTICK_RATE_MS); /*force watchdog reset */ while (1); } } else t = 0; } }
static inline void vCmdProcess (const char *cmdline) { unsigned char cmd, assign; unsigned int t; cmd = (unsigned char) (*cmdline++); if ((cmd >= 'a') && (cmd <= 'z')) cmd -= ('a' - 'A'); switch (*cmdline) { case '=': case ' ': assign = 1; cmdline++; break; case 0: assign = 0; break; default: assign = 1; } switch (cmd) { case 'A': vNetworkSetIP (&env.e.ip_host, assign ? cmdline : NULL, "reader"); break; case 'B': debug_printf ("rebooting...\n"); vTaskDelay (1000 / portTICK_RATE_MS); /*force watchdog reset */ while (1); break; case 'C': vNetworkDumpConfig (); debug_printf ("System configuration:\n" "\tFirmware Version: v" PROGRAM_VERSION "\n" "\tReader ID: %i\n" "\tRF packet duplicate filter: %s\n\n", env.e.reader_id, env.e.filter_duplicates ? "ON" : "OFF"); break; case 'D': if (assign) { t = atoiEx (cmdline); debug_printf ("setting debug level to %u\n", t); PtSetDebugLevel (t); } else debug_printf ("usage: 'd' - set debug level ('d[disable=0, lowest=1]')\n"); break; case 'F': if (assign) { t = atoiEx (cmdline) ? 1 : 0; debug_printf ("%s duplicate filtering\n", t ? "enabled" : "disabled"); env.e.filter_duplicates = t; } else debug_printf ("usage: 'f' - set RF packet duplicate filtering\n" " ('f[disable=0, enable=1]')\n"); break; case 'G': vNetworkSetIP (&env.e.ip_gateway, assign ? cmdline : NULL, "gateway"); break; case 'I': if (assign) { #ifndef ALLOW_READER_ID_CHANGE if (env.e.reader_id) debug_printf ("ERROR: reader id already set!\n"); else { #endif /*ALLOW_READER_ID_CHANGE */ t = atoiEx (cmdline); if (t > 0 && t < MAC_IAB_MASK) env.e.reader_id = t; else debug_printf ("error: reader_id needs to be between 1 and %u (used '%s')\n", MAC_IAB_MASK, cmdline); #ifndef ALLOW_READER_ID_CHANGE } #endif /*ALLOW_READER_ID_CHANGE */ } debug_printf ("reader_id=%i\n", env.e.reader_id); break; case 'L': if (assign) { t = atoiEx (cmdline) > 0; debug_printf ("red_led=%i\n", t); led_set_red (t); } else debug_printf ("usage: 'l' - red LED ('l[enable=0, disable=1]')\n"); break; case 'M': vNetworkSetIP (&env.e.ip_netmask, assign ? cmdline : NULL, "netmask"); break; case 'N': if (assign) env.e.ip_autoconfig = atoiEx (cmdline); debug_printf ("ip_autoconfig=%i\n", env.e.ip_autoconfig); break; case 'P': if (assign) env.e.ip_server_port = atoiEx (cmdline); debug_printf ("server UDP port=%i\n", env.e.ip_server_port); break; case 'R': /* backup reader id */ t = env.e.reader_id; vNetworkResetDefaultSettings (); /* restore reader id */ env.e.reader_id = t; debug_printf ("restoring original settings & reboot...\n"); vNetworkDumpConfig (); vTaskDelay (1000 / portTICK_RATE_MS); env_store (); /*force watchdog reset */ while (1); break; case 'S': debug_printf ("storing configuration & reboot...\n"); vTaskDelay (1000 / portTICK_RATE_MS); env_store (); /*force watchdog reset */ while (1); break; case 'T': vNetworkSetIP (&env.e.ip_server, assign ? cmdline : NULL, "server"); break; case 'U': debug_printf ("resetting reader to firmware update mode...\n"); vTaskDelay (1000 / portTICK_RATE_MS); env_reboot_to_update (); break; case 'H': case '?': vCmdHelp (); break; case 'X': vCmdDumpStatistics (); PtStatusRxTx (); break; default: debug_printf ("Unkown CMD:'%c'\n", cmd); } }