Newer
Older
#include <stdio.h>
#include <inttypes.h>
Tomasz Wlostowski
committed
#include <stdarg.h>
#include "uart.h"
#include "endpoint.h"
#include "minic.h"
#include "pps_gen.h"
//#include "eeprom.h"
Grzegorz Daniluk
committed
#include "onewire.h"
#include "shell.h"
#include "wrc_ptp.h"
Grzegorz Daniluk
committed
int wrc_ui_mode = UI_SHELL_MODE;
///////////////////////////////////
//Calibration data (from EEPROM if available)
Grzegorz Daniluk
committed
int32_t sfp_alpha = -73622176; //default value if could not read EEPROM
int32_t sfp_deltaTx = 46407; //default value if could not read EEPROM
Grzegorz Daniluk
committed
int32_t sfp_deltaRx = 177093; //default value if could not read EEPROM
uint32_t cal_phase_transition = 2394; //7000;
Tomasz Wlostowski
committed
void wrc_initialize()
int ret, i;
uint8_t mac_addr[6], ds18_id[8] = {0,0,0,0,0,0,0,0};
Grzegorz Daniluk
committed
char sfp_pn[17];
sdb_find_devices();
Wesley W. Terpstra
committed
uart_init();
Wesley W. Terpstra
committed
mprintf("WR Core: starting up...\n");
Wesley W. Terpstra
committed
timer_init(1);
Wesley W. Terpstra
committed
mac_addr[0] = 0x08; //
mac_addr[1] = 0x00; // CERN OUI
mac_addr[2] = 0x30; //
Wesley W. Terpstra
committed
mac_addr[3] = 0xDE; // fallback MAC if get_persistent_mac fails
mac_addr[4] = 0xAD;
mac_addr[5] = 0x42;
Grzegorz Daniluk
committed
own_scanbus(ONEWIRE_PORT);
if (get_persistent_mac(ONEWIRE_PORT, mac_addr) == -1) {
Wesley W. Terpstra
committed
mprintf("Unable to determine MAC address\n");
}
TRACE_DEV("Local MAC address: %x:%x:%x:%x:%x:%x\n", mac_addr[0],mac_addr[1],mac_addr[2],mac_addr[3],mac_addr[4],mac_addr[5]);
wrc_ptp_init();
#if WITH_ETHERBONE
Tomasz Wlostowski
committed
}
#define LINK_WENT_UP 1
#define LINK_WENT_DOWN 2
#define LINK_UP 3
#define LINK_DOWN 4
Tomasz Wlostowski
committed
int wrc_check_link()
{
static int prev_link_state = -1;
Tomasz Wlostowski
committed
int rv = 0;
if(!prev_link_state && link_state)
{
TRACE_DEV("Link up.\n");
gpio_out(GPIO_LED_LINK, 1);
rv = LINK_WENT_UP;
}
else if(prev_link_state && !link_state)
{
TRACE_DEV("Link down.\n");
gpio_out(GPIO_LED_LINK, 0);
rv = LINK_WENT_DOWN;
} else rv = (link_state ? LINK_UP : LINK_DOWN);
prev_link_state = link_state;
return rv;
Tomasz Wlostowski
committed
}
Tomasz Wlostowski
committed
void wrc_debug_printf(int subsys, const char *fmt, ...)
{
va_list ap;
if(wrc_ui_mode) return;
Tomasz Wlostowski
committed
va_start(ap, fmt);
if(wrc_extra_debug || (!wrc_extra_debug && (subsys & TRACE_SERVO)))
vprintf(fmt, ap);
va_end(ap);
}
static int wrc_enable_tracking = 1;
static int ptp_enabled = 1;
Tomasz Wlostowski
committed
int wrc_man_phase = 0;
static void ui_update()
Tomasz Wlostowski
committed
{
if(wrc_ui_mode == UI_GUI_MODE)
{
wrc_mon_gui();
if(uart_read_byte() == 27)
{
shell_init();
wrc_ui_mode = UI_SHELL_MODE;
}
}
Grzegorz Daniluk
committed
else if(wrc_ui_mode == UI_STAT_MODE)
{
wrc_log_stats(0);
if(uart_read_byte() == 27)
{
shell_init();
wrc_ui_mode = UI_SHELL_MODE;
}
}
else
shell_interactive();
}
Tomasz Wlostowski
committed
int main(void)
{
wrc_ui_mode = UI_SHELL_MODE;
Grzegorz Daniluk
committed
wrc_initialize();
wrc_ptp_set_mode(WRC_MODE_SLAVE);
wrc_ptp_start();
//try to read and execute init script from EEPROM
shell_boot_script();
#if WITH_ETHERBONE
#if WITH_ETHERBONE
Grzegorz Daniluk
committed
if( wrc_ptp_get_mode() == WRC_MODE_SLAVE )
spll_init(SPLL_MODE_FREE_RUNNING_MASTER, 0, 1);
spll_update_aux_clocks();
}