static void send_selected_rom(void) { #if ONLY_1_DEVICE_ON_THE_BUS == 1 ow_read_rom(ds18x20_rom_code); ow_command(OW_SKIP_ROM); #elif ONLY_1_DEVICE_ON_THE_BUS == 0 unsigned char x=0; ow_command(OW_MATCH_ROM); for(x=0; x<8; x++) { ow_put_byte(ds18x20_rom_code[x]); } #endif return; }
/*---------------------------------------------------------------------------*/ PROCESS_THREAD(ds18b20_poll_process, ev, data) { static struct etimer et; static uint8_t scratchpad[DS18B20_SCRATCHPAD_SIZE]; static ow_rom_code_t id; PROCESS_BEGIN(); printf("\nDS18B20 test\n"); printf("VSEC ON\n"); power_control_vsec_set(1); /* initialize the DS18B20 hardware */ printf("Initialize 1-wire\n"); ow_init(); printf("1-wire READ ROM\n"); id = ow_read_rom(); printf("Initialize DS18B20\n"); ds18b20_init(); printf("DS18B20 init done\n"); /* Poll at 1Hz */ etimer_set(&et, CLOCK_SECOND); while(1) { PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); /* Reset the etimer to trig again */ etimer_reset(&et); ds18b20_read_scratchpad(id, scratchpad); ds18b20_convert_temperature(id); } PROCESS_END(); }
u8 ow_task() { u8 payload_len, code; if (mailbox_head(&ow_taskinfo.mailbox, &code, &payload_len)) { switch(code) { case ONEWIRE_CMD_RESET: { u8 rombuf[8]; u8 result; if (payload_len == 1) { u8 flags = disable_interrupts(); result = ow_read_rom(rombuf); restore_flags(flags); } else { result = ow_read_rom(rombuf); } if (result) { send_msg(BROADCAST_NODE_ID, TASK_ID_ONEWIRE<<4|ONEWIRE_CMD_RESET, 1, &result, 0); } else { send_msg(BROADCAST_NODE_ID, TASK_ID_ONEWIRE<<4|ONEWIRE_CMD_RESET, 8, rombuf, 0); } } break; case ONEWIRE_READ_2760: { u8 buf[15]; u8 buflen; u8 result; if (payload_len == 2) { mailbox_copy_payload(&ow_taskinfo.mailbox, buf, 2, 0); buflen=buf[1]; result = ow_2760_read_reg(buf[0], buf, buflen); } else { result = 0xEE; } if (result) { send_msg(BROADCAST_NODE_ID, TASK_ID_ONEWIRE<<4|ONEWIRE_READ_2760, 1, &result, 0); } else { send_msg(BROADCAST_NODE_ID, TASK_ID_ONEWIRE<<4|ONEWIRE_READ_2760, buflen, buf, 0); } } break; case ONEWIRE_WRITE_2760: { u8 buf[2]; u8 result; if (payload_len == 2) { mailbox_copy_payload(&ow_taskinfo.mailbox, buf, 2, 0); result = ow_2760_write_reg(buf[0], buf[1]); } else if (payload_len == 3) { u8 flag = disable_interrupts(); mailbox_copy_payload(&ow_taskinfo.mailbox, buf, 2, 0); result = ow_2760_write_reg(buf[0], buf[1]); restore_flags(flag); } else { result = 0xEE; } send_msg(BROADCAST_NODE_ID, TASK_ID_ONEWIRE<<4|ONEWIRE_WRITE_2760, 1, &result, 0); } break; case ONEWIRE_RECALL_2760: { u8 buf[1]; u8 result; if (payload_len == 1) { mailbox_copy_payload(&ow_taskinfo.mailbox, buf, 1, 0); result = ow_2760_recall_data(buf[0]); } else { result = 0xEE; } send_msg(BROADCAST_NODE_ID, TASK_ID_ONEWIRE<<4|ONEWIRE_RECALL_2760, 1, &result, 0); } break; case ONEWIRE_COPY_2760: { u8 buf[1]; u8 result; if (payload_len == 1) { mailbox_copy_payload(&ow_taskinfo.mailbox, buf, 1, 0); result = ow_2760_copy_data(buf[0]); } else { result = 0xEE; } send_msg(BROADCAST_NODE_ID, TASK_ID_ONEWIRE<<4|ONEWIRE_COPY_2760, 1, &result, 0); } break; } mailbox_advance(&ow_taskinfo.mailbox); } return 0; }