/* * Driver ioctl handler */ static int wd_ioctl (struct ifnet *ifp, ioctl_command_t command, caddr_t data) { struct wd_softc *sc = ifp->if_softc; int error = 0; switch (command) { case SIOCGIFADDR: case SIOCSIFADDR: ether_ioctl (ifp, command, data); break; case SIOCSIFFLAGS: switch (ifp->if_flags & (IFF_UP | IFF_RUNNING)) { case IFF_RUNNING: wd_stop (sc); break; case IFF_UP: wd_init (sc); break; case IFF_UP | IFF_RUNNING: wd_stop (sc); wd_init (sc); break; default: break; } break; case SIO_RTEMS_SHOW_STATS: wd_stats (sc); break; /* * FIXME: All sorts of multicast commands need to be added here! */ default: error = EINVAL; break; } return error; }
int main (void){ cpu_wakeup_init(); clock_init(); gpio_init(); gpio_write(GPIO_PD7, 0); gpio_set_output_en(GPIO_PD7, 1); i2c_init(); wd_stop(); sleep_us(50*1000); mouse_sensor_no_fifo_init(); sleep_us(1000*1000); // for L3G, must delay enough time s16 avg_data[6]; calib(64, avg_data); flash_erase_sector(AIRMOUSE_CALIBRATION_ADDR); flash_write_page(AIRMOUSE_CALIBRATION_ADDR, 12, avg_data); while (1); return 0; }