unsigned char ow_reset(void) { unsigned char presence; // pull DQ line low DDRE |= (1 << PE4); //set for output PORTE &= ~(1 << PE4); //set value low // leave it low for 480us delay_usec(479); // allow line to return high PORTE |= (1 << PE4); //set value high DDRE &= ~(1 << PE4); //set for input //PORTE &= ~(1 << PE4); //set value low? // wait for presence delay_usec(69); // get presence signal presence = !(PINE & (1 << PE4)); //read for presence // wait for end of timeslot delay_usec(229); return(presence); // presence signal returned } // 1=presence, 0=no sensor
static int e1000_hw_reset(struct e1000_hw *hw) { uint32_t ctrl; uint32_t icr; /* Clear interrupt mask to stop board from generating interrupts */ ew32(IMC, 0xffffffff); /* Disable the Transmit and Receive units. Then delay to allow * any pending transactions to complete before we hit the MAC with * the global reset. */ ew32(RCTL, 0); ew32(TCTL, E1000_TCTL_PSP); er32(STATUS); /* wait for complete */ /* Delay to allow any outstanding PCI transactions to complete before * resetting the device */ delay_usec(10000); ctrl = er32(CTRL); /* reset phy */ ew32(CTRL, (ctrl | E1000_CTRL_PHY_RST)); delay_usec(5000); /* Issue a global reset to the MAC. This will reset the chip's * transmit, receive, DMA, and link units. It will not effect * the current PCI configuration. The global reset bit is self- * clearing, and should clear within a microsecond. */ ew32(CTRL, (ctrl | E1000_CTRL_RST)); /* After MAC reset, force reload of EEPROM to restore power-on * settings to device. Later controllers reload the EEPROM * automatically, so just wait for reload to complete. */ delay_usec(20000); /* Clear interrupt mask to stop board from generating interrupts */ ew32(IMC, 0xffffffff); /* Clear any pending interrupt events. */ icr = er32(ICR); return 0; }
int ow_read_temperature(void) { char get[10]; char temp_lsb,temp_msb; int k; char temp_c; //char temp_f; ow_reset(); ow_write_byte(0xCC); //Skip ROM ow_write_byte(0x44); // Start Conversion delay_usec(119); //wait 120us ow_reset(); ow_write_byte(0xCC); // Skip ROM ow_write_byte(0xBE); // Read Scratch Pad for (k=0; k<9; k++) { get[k] = ow_read_byte(); } temp_msb = get[1]; // Sign byte + lsbit temp_lsb = get[0]; // Temp data plus lsb if (temp_msb <= 0x80){temp_lsb = (temp_lsb/2);} // shift to get whole degree temp_msb = temp_msb & 0x80; // mask all but the sign bit if (temp_msb >= 0x80) {temp_lsb = (~temp_lsb)+1;} // twos complement if (temp_msb >= 0x80) {temp_lsb = (temp_lsb/2);}// shift to get whole degree if (temp_msb >= 0x80) {temp_lsb = ((-1)*temp_lsb);} // add sign bit temp_c = temp_lsb; // ready for conversion to Fahrenheit //temp_f = (((int)temp_c)* 9)/5 + 32; return temp_c; }
unsigned char ow_read_byte(void) { unsigned char value = 0; unsigned char i; for (i = 0; i < 8; i++) { if (ow_read_bit()) { value |= 0x01 << i; //reads a bit and left-shifts it into place } delay_usec(19); //wait 20us } return value; }
void ow_write_byte(char val) { unsigned char i; unsigned char temp; for (i = 0; i < 8; i++) { temp = val >> i; temp &= 0x01; ow_write_bit(temp); } delay_usec(119); //wait 120us }
unsigned char ow_read_bit(void) { //pull low DDRE |= (1 << PE4); PORTE &= ~(1 << PE4); //let return to high PORTE |= (1 << PE4); //set value high DDRE &= ~(1 << PE4); //set for input delay_usec(14); //wait 15us return(PINE & (1 << PE4)); }
gpointer x11_event_thread(gpointer data) { GCContext *context = (GCContext*)data; GCX11Context *x11 = &context->X11_context; Movie *movie = context->movie_context; long event_mask = KeyReleaseMask; XSelectInput(x11->display, x11->root_window, event_mask); do { XEvent event; if (XCheckMaskEvent(x11->display, event_mask, &event)) { XKeyEvent *keyEvent = (XKeyEvent*)&event; g_message("Key pressed: %d", keyEvent->keycode); g_mutex_lock(&context->movie_context->tick_lock); /*if (keyEvent->keycode == KEYCODE_RIGHT) { movie->ease_to_frame = get_frame_offset(context, GO_TO_NEXT_DAY, DAY_OFFSET_NOW); movie->ease_to = TRUE; g_cond_broadcast(&context->movie_context->tick_cond); } else */ if (keyEvent->keycode == KEYCODE_LEFT || keyEvent->keycode == KEYCODE_ESC) { exit(1); //movie->ease_to_frame = get_frame_offset(context, GO_TO_RAND_DAY, DAY_OFFSET_NOW); //movie->ease_to = TRUE; //g_cond_broadcast(&context->movie_context->tick_cond); } else if (keyEvent->keycode == KEYCODE_UP) { movie->ease_to_frame = get_frame_offset(context, GO_TO_NEXT_DAY, DAY_OFFSET_NOW); movie->ease_to = TRUE; g_cond_broadcast(&context->movie_context->tick_cond); } else if (keyEvent->keycode == KEYCODE_DOWN) { movie->ease_to_frame = get_frame_offset(context, GO_TO_PREV_DAY, DAY_OFFSET_NOW); movie->ease_to = TRUE; g_cond_broadcast(&context->movie_context->tick_cond); } g_mutex_unlock(&context->movie_context->tick_lock); } g_thread_yield(); delay_usec(10000); } while (!context->exit); return NULL; }
void ow_write_bit(char bitval) { //pull low DDRE |= (1 << PE4); PORTE &= ~(1 << PE4); //if writing a one, go high if (bitval == 1) { PORTE |= (1 << PE4); //set value high } delay_usec(59); //wait 60us PORTE |= (1 << PE4); //set value high DDRE &= ~(1 << PE4); //set for input }