void RFM70::initRegisters() { int i=0; // Init bank 0 registers selectBank(0); // The last two regs in the bank0Init list will be handled later for (int i = 0; i < 20; i++) { uint8_t data[] = {RFM70_bank0Init[i][0],RFM70_bank0Init[i][1]}; spiSend(0, data, 2); } // Init address registers in bank 0 spiSend(0, (uint8_t *) RFM70_cmd_adrRX0, NELEMS(RFM70_cmd_adrRX0)); spiSend(0, (uint8_t *) RFM70_cmd_adrRX1, NELEMS(RFM70_cmd_adrRX1)); spiSend(0, (uint8_t *) RFM70_cmd_adrTX, NELEMS(RFM70_cmd_adrTX)); uint8_t data[] = {RFM70_REG_FEATURE, 0x00}; #if 1 i=readRegVal(RFM70_REG_FEATURE); if (i==0) { spiSend(0, (uint8_t *)RFM70_cmd_activate, 2); } #endif // Set Registers 1D and 1C data[0] = RFM70_bank0Init[22][0]; data[1] = RFM70_bank0Init[22][1]; spiSend(0, data, 2); data[0] = RFM70_bank0Init[21][0]; data[1] = RFM70_bank0Init[21][1]; spiSend(0, data, 2); // Init bank 1 registers selectBank(1); for (int i = 0; i < 14; i++) { spiSend(0, (uint8_t *) RFM70_bank1Init[i], NELEMS(RFM70_bank1Init[i])); } // Set ramp curve spiSend(0, (uint8_t *) RFM70_bank1R0EInit, NELEMS(RFM70_bank1R0EInit)); // Do we have to toggle some bits here like in the example code? spiSend(0, (uint8_t *) RFM70_cmd_tog1, NELEMS(RFM70_cmd_tog1)); spiSend(0, (uint8_t *) RFM70_cmd_tog2, NELEMS(RFM70_cmd_tog2)); delayMs(RFM70_END_INIT_WAIT_MS); // Check the ChipID if (readRegVal(0x08) != 0x63) { debug(RFM70_DEBUG_WRONG_CHIP_ID); } printf("chid id is 0x%02x\n", readRegVal(0x08)); // debug(RFM70_SHOW_REGISTERS); selectBank(0); setModeRX(); }
bool initRegisters() { // init bank 0 registers selectBank(0); // !! The last two regs in the bank0Init list will be handled later for (int i = 0; i < 20; i++) writeRegVal(pgm_read_byte(&RFM73_bank0Init[i][0]), pgm_read_byte(&RFM73_bank0Init[i][1])); // init address registers in bank 0 writeRegPgmBuf((uint8_t *)RFM73_cmd_adrRX0, sizeof(RFM73_cmd_adrRX0)); writeRegPgmBuf((uint8_t *)RFM73_cmd_adrRX1, sizeof(RFM73_cmd_adrRX1)); writeRegPgmBuf((uint8_t *)RFM73_cmd_adrTX, sizeof(RFM73_cmd_adrTX)); // activate Feature register if (!readRegVal(RFM73_REG_FEATURE)) writeRegPgmBuf((uint8_t *)RFM73_cmd_activate, sizeof(RFM73_cmd_activate)); // now set Registers 1D and 1C writeRegVal(pgm_read_byte(&RFM73_bank0Init[22][0]), pgm_read_byte(&RFM73_bank0Init[22][1])); writeRegVal(pgm_read_byte(&RFM73_bank0Init[21][0]), pgm_read_byte(&RFM73_bank0Init[21][1])); // init bank 1 registers selectBank(1); for (int i = 0; i < 14; i++) writeRegPgmBuf((uint8_t *)RFM73_bank1Init[i], sizeof(RFM73_bank1Init[i])); // set ramp curve writeRegPgmBuf((uint8_t *)RFM73_bank1R0EInit, sizeof(RFM73_bank1R0EInit)); // do we have to toggle some bits here like in the example code? writeRegPgmBuf((uint8_t *)RFM73_cmd_tog1, sizeof(RFM73_cmd_tog1)); writeRegPgmBuf((uint8_t *)RFM73_cmd_tog2, sizeof(RFM73_cmd_tog2)); _delay_ms(RFM73_END_INIT_WAIT_MS); //Check the ChipID if (readRegVal(0x08) != 0x63) { return false; } selectBank(0); setModeRX(); return true; }
void RFM70::initRegisters() { // Init bank 0 registers selectBank(0); // The last two regs in the bank0Init list will be handled later for (int i = 0; i < 20; i++) { writeRegVal(pgm_read_byte(&RFM70_bank0Init[i][0]), pgm_read_byte(&RFM70_bank0Init[i][1])); } // Init address registers in bank 0 writeRegPgmBuf((uint8_t *) RFM70_cmd_adrRX0, sizeof(RFM70_cmd_adrRX0)); writeRegPgmBuf((uint8_t *) RFM70_cmd_adrRX1, sizeof(RFM70_cmd_adrRX1)); writeRegPgmBuf((uint8_t *) RFM70_cmd_adrTX, sizeof(RFM70_cmd_adrTX)); // Activate Feature register if (!readRegVal(RFM70_REG_FEATURE)) { writeRegPgmBuf((uint8_t *) RFM70_cmd_activate, sizeof(RFM70_cmd_activate)); } // Now set Registers 1D and 1C writeRegVal(pgm_read_byte(&RFM70_bank0Init[22][0]), pgm_read_byte(&RFM70_bank0Init[22][1])); writeRegVal(pgm_read_byte(&RFM70_bank0Init[21][0]), pgm_read_byte(&RFM70_bank0Init[21][1])); // Init bank 1 registers selectBank(1); for (int i = 0; i < 14; i++) { writeRegPgmBuf((uint8_t *) RFM70_bank1Init[i], sizeof(RFM70_bank1Init[i])); } // set ramp curve writeRegPgmBuf((uint8_t *) RFM70_bank1R0EInit, sizeof(RFM70_bank1R0EInit)); // do we have to toggle some bits here like in the example code? writeRegPgmBuf((uint8_t *) RFM70_cmd_tog1, sizeof(RFM70_cmd_tog1)); writeRegPgmBuf((uint8_t *) RFM70_cmd_tog2, sizeof(RFM70_cmd_tog2)); delayMs(RFM70_END_INIT_WAIT_MS); //Check the ChipID if (readRegVal(0x08) != 0x63) { debug(RFM70_DEBUG_WRONG_CHIP_ID); } selectBank(0); setModeRX(); }
void Adafruit_IS31FL3731::writeRegister8(uint8_t b, uint8_t reg, uint8_t data) { selectBank(b); Wire.beginTransmission(_i2caddr); Wire.write((byte)reg); Wire.write((byte)data); Wire.endTransmission(); //Serial.print("$"); Serial.print(reg, HEX); //Serial.print(" = 0x"); Serial.println(data, HEX); }
void RFM70::debug(uint8_t token) { // to be done int i; switch(token){ case RFM70_DEBUG_WRONG_CHIP_ID: DBG(("Wrong chip ID !")); return; case RFM70_DEBUG_FIFO_FULL: DBG(("FIFO full !")); return; case RFM70_SHOW_REGISTERS: selectBank(0); printf("select bank 0\n"); for(i=0; i<10; i++) { DBG(("%x", i)); DBG(("= ")); DBG(("%x", readRegVal(i))); DBG((", ")); } selectBank(1); printf("select bank 1\n"); DBG(("\n")); for(i=0; i<10; i++) { DBG(("[reg 0x%02x]", i)); DBG(("= ")); DBG(("0x%02x", readRegVal(i))); DBG((", ")); } printf("select bank 0\n"); selectBank(0); DBG(("\n")); DBG(("[reg 0x17]")); DBG(("= ")); DBG(("0x%02x", readRegVal(0x17))); DBG((", carrier: ")); DBG(("0x%02x", getCarrierDetect())); DBG(("\n")); return; } }
void Adafruit_IS31FL3731::clear(void) { // all LEDs on & 0 PWM selectBank(_frame); for (uint8_t i=0; i<6; i++) { Wire.beginTransmission(_i2caddr); Wire.write((byte) 0x24+i*24); // write 24 bytes at once for (uint8_t j=0; j<24; j++) { Wire.write((byte) 0); } Wire.endTransmission(); } }
uint8_t Adafruit_IS31FL3731::readRegister8(uint8_t bank, uint8_t reg) { uint8_t x; selectBank(bank); Wire.beginTransmission(_i2caddr); Wire.write((byte)reg); Wire.endTransmission(); Wire.beginTransmission(_i2caddr); Wire.requestFrom(_i2caddr, (byte)1); x = Wire.read(); Wire.endTransmission(); // Serial.print("$"); Serial.print(reg, HEX); // Serial.print(": 0x"); Serial.println(x, HEX); return x; }
void main(void) { // Disable Interrupts INTCONbits.GIE = 0; // Clear PORTs PORTA = 0; PORTB = 0; PORTC = 0; // Switch to bank 1 selectBank(0, 1); // Disable ADC ADCON1 = 0x06; // Disable comparator CMCONbits.CM0 = 1; CMCONbits.CM1 = 1; CMCONbits.CM2 = 1; // Disable T0CKI pin OPTION_REGbits.T0CS = 0; // set PORT directions TRISA = 0; // Set all to output TRISB = 0; TRISC = 0; // INT pin input //TRISBbits.TRISB0 = 1; // RS-232 input RX_PIN_DIR = 1; // configure UART TXSTAbits.TXEN = 0; // disable UART transmit TXSTAbits.SYNC = 0; // asynchrous TXSTAbits.BRGH = 1; // high-baud-rate SPBRG = 25; // 9600 baud at 4MHz // configure SPI port SSPSTATbits.CKE = 1; // transmit on transition from active to idle // Enable RX interrupt PIE1bits.RCIE = 1; // Switch to bank 0 selectBank(0, 0); // Clear PORTs PORTA = 0; PORTB = 0; PORTC = 0; // Enable UART RCSTAbits.RX9 = 0; // 8-bit reception RCSTAbits.ADDEN = 0; // disable address select RCSTAbits.SPEN = 1; // enable serial port RCSTAbits.CREN = 1; // enable continuous receive // Enable SPI port SSPCONbits.CKP = 0; // idle state for clock is 0 SSPCONbits.SSPM = 0b0010; // clock = Fosc/64 SSPCONbits.SSPEN = 1; // enable SPI port // Enable peripheral interrupt INTCONbits.PEIE = 1; PIR1bits.RCIF = 0; // Disable other interrupts INTCONbits.INTE = 1; // external interrupt INTCONbits.INTF = 0; INTCONbits.TMR0IE = 0; // timer interrupt INTCONbits.RBIE = 0; // PORTB change interrupt // Enable PWM output PR2 = 0xFF; // PWM period CCPR1L = 204; // duty cycle MSB ~80% CCP1CONbits.CCP1X = CCP1CONbits.CCP1Y = 0; // duty cycle LSB T2CON = 0; // configure timer T2CONbits.T2CKPS1 = 0; // prescaler 8 T2CONbits.T2CKPS0 = 1; T2CONbits.TMR2ON = 1; CCP1CONbits.CCP1M3 = CCP1CONbits.CCP1M2 = 1; // PWM mode // TX zeros to shift registers //SSPBUF = 0; //SSPBUF = 0; // Enable Interrupts INTCONbits.GIE = 1; // Main Loop while(1) { // Heartbeat heartbeat++; if(heartbeat == 200) { DEBUG_PIN = ~DEBUG_PIN; heartbeat = 0; } countDelay(128); } }
/** * Extra options for the DS2432 * * bank the memory bank to be used. * portnum port number for the device * SNum The serial number for the chosen device. * * @return numeric value entered from the console. */ SMALLINT optionSHAEE(SMALLINT bank, int portnum, uchar *SNum) { int done = FALSE; int try_again = FALSE; int addr,len; uchar data[64]; int i; do { switch(bank) { case 0: case 1: case 2: case 3: done = TRUE; break; case 4: // Load First Secret printf("Enter the address for loading first secret: "); addr = getNumber(0, 152); printf("Enter the Load First Secret data: "); if(menuSelect(ENTRY_MENU,SNum) == MODE_TEXT) len = getData(data,MAX_LEN,MODE_TEXT); else len = getData(data,MAX_LEN,MODE_HEX); if(!loadFirstSecret(portnum,addr,SNum,&data[0],len)) OWERROR_DUMP(stderr); break; case 5: // Compute Next Secret printf("Enter the address for computing next secret: "); addr = getNumber(0,128); if(!computeNextSecret(portnum,addr,SNum,&data[0])) OWERROR_DUMP(stderr); printf("The new secret is: "); for(i=0;i<8;i++) printf("%02X ",data[i]); printf("\n"); break; case 6: // Change Bus Master Secret printf("Enter the new Bus Master Secret: "); try_again = FALSE; do { if(menuSelect(ENTRY_MENU,SNum) == MODE_TEXT) len = getData(data,MAX_LEN,MODE_TEXT); else len = getData(data,MAX_LEN,MODE_HEX); if(len != 8) { printf("The secret is 8 bytes long try again: "); try_again = TRUE; } else try_again = FALSE; } while(try_again); setBusMasterSecret(&data[0]); break; case 7: // Lock Secret data[0] = 0xAA; if(!bankWriteBlock(3,portnum,SNum,8,data,1)) { OWERROR_DUMP(stderr); break; } break; case 8: // Input new challenge for Read Authenticate printf("Enter the New Challenge: "); try_again = FALSE; do { if(menuSelect(ENTRY_MENU,SNum) == MODE_TEXT) len = getData(data,MAX_LEN,MODE_TEXT); else len = getData(data,MAX_LEN,MODE_HEX); if(len != 8) { printf("The challenge is 8 bytes long try again: "); try_again = TRUE; } else try_again = FALSE; } while(try_again); setChallenge(&data[0]); break; case 9: // Write Protect page 0-3 data[0] = 0x00; if(!bankWriteBlock(3,portnum,SNum,9,data,1)) { OWERROR_DUMP(stderr); break; } break; case 10: // Set Page 1 to EEPROM mode data[0] = 0xAA; for(i=5;i<8;i++) data[i] = 0x00; if(!bankWriteBlock(3,portnum,SNum,12,data,1)) { OWERROR_DUMP(stderr); break; } break; case 11: // Write Protect Page 0 data[0] = 0xAA; if(!bankWriteBlock(3,portnum,SNum,13,data,1)) { OWERROR_DUMP(stderr); break; } break; case 12: // Print Current Bus Master Secret returnBusMasterSecret(&data[0]); printf("The current Bus Master Secret is: "); for(i=0;i<8;i++) printf("%02X ",data[i]); printf("\n"); break; default: done = TRUE; break; } if(!done) { printf("\n"); bank = selectBank(bank, SNum); } } while(!done); return bank; }
int main(int argc, char **argv) { int len, addr, page, answer, i; int done = FALSE; SMALLINT bank = 1; uchar data[552]; int portnum = 0; uchar AllSN[MAXDEVICES][8]; int NumDevices; int owd; char msg[132]; // check for required port name if (argc != 2) { sprintf(msg,"1-Wire Net name required on command line!\n" " (example: \"COM1\" (Win32 DS2480),\"/dev/cua0\" " "(Linux DS2480),\"{1,5}\" (Win32 TMEX)\n"); printf("%s\n",msg); return 0; } printf("\n1-Wire Memory utility console application Version 0.01\n"); if((portnum = owAcquireEx(argv[1])) < 0) { OWERROR_DUMP(stdout); return 0; } else { // loop to do menu do { // Main menu switch (menuSelect(MAIN_MENU,&AllSN[0][0])) { case MAIN_SELECT_DEVICE : // find all parts // loop to find all of the devices up to MAXDEVICES NumDevices = 0; do { // perform the search if (!owNext(portnum,TRUE, FALSE)) break; owSerialNum(portnum,AllSN[NumDevices], TRUE); NumDevices++; } while (NumDevices < (MAXDEVICES - 1)); /* for test devices without a serial number if(NumDevices == 0) { for(i=0;i<8;i++) AllSN[0][i] = 0x00; NumDevices++; }*/ // select a device owd = selectDevice(NumDevices,&AllSN[0]); // display device info printDeviceInfo(portnum,&AllSN[owd][0]); // select a bank bank = selectBank(bank, &AllSN[owd][0]); if((AllSN[owd][0] == 0x33) || (AllSN[owd][0] == 0xB3)) bank = optionSHAEE(bank,portnum,&AllSN[owd][0]); // display bank information displayBankInformation(bank,portnum,&AllSN[owd][0]); // loop on bank menu do { switch (menuSelect(BANK_MENU,&AllSN[owd][0])) { case BANK_INFO : // display bank information displayBankInformation(bank,portnum,&AllSN[owd][0]); break; case BANK_READ_BLOCK : // read a block printf("Enter the address to start reading: "); addr = getNumber(0, (owGetSize(bank,&AllSN[owd][0])-1)); printf("\n"); printf("Enter the length of data to read: "); len = getNumber(0, owGetSize(bank, &AllSN[owd][0])); printf("\n"); if(!dumpBankBlock(bank,portnum,&AllSN[owd][0],addr,len)) OWERROR_DUMP(stderr); break; case BANK_READ_PAGE : printf("Enter the page number to read: "); page = getNumber(0, (owGetNumberPages(bank,&AllSN[owd][0])-1)); printf("\n"); if(!dumpBankPage(bank,portnum,&AllSN[owd][0],page)) OWERROR_DUMP(stderr); break; case BANK_READ_UDP : printf("Enter the page number to read: "); page = getNumber(0, (owGetNumberPages(bank,&AllSN[owd][0])-1)); printf("\n"); if(!dumpBankPagePacket(bank,portnum,&AllSN[owd][0],page)) OWERROR_DUMP(stderr); break; case BANK_WRITE_BLOCK : // write a block printf("Enter the address to start writing: "); addr = getNumber(0, (owGetSize(bank,&AllSN[owd][0])-1)); if(menuSelect(ENTRY_MENU,&AllSN[owd][0]) == MODE_TEXT) len = getData(data,MAX_LEN,MODE_TEXT); else len = getData(data,MAX_LEN,MODE_HEX); if(!bankWriteBlock(bank,portnum,&AllSN[owd][0],addr,data,len)) { OWERROR_DUMP(stderr); break; } if(owCanRedirectPage(bank,&AllSN[owd][0])) { printf("Enter if you want to redirect page (0 no, 1 yes): "); answer = getNumber(0,1); if(answer) { printf("What page would you like to redirect:"); page = getNumber(0,255); printf("Where would you like to redirect:"); addr = getNumber(0,255); if(!redirectPage(bank,portnum,&AllSN[owd][0],page,addr)) { OWERROR_DUMP(stderr); break; } } } if(owCanLockPage(bank,&AllSN[owd][0])) { printf("Enter if you want to lock page (0 no, 1 yes):"); answer = getNumber(0,1); if(answer) { printf("What page would you like to lock?"); page = getNumber(0,255); if(!lockPage(bank,portnum,&AllSN[owd][0],page)) { OWERROR_DUMP(stderr); break; } } } if(owCanLockRedirectPage(bank,&AllSN[owd][0])) { printf("Enter if you want to lock redirected page (0 no, 1 yes):"); answer = getNumber(0,1); if(answer) { printf("Which redirected page do you want to lock:"); page = getNumber(0,255); if(!lockRedirectPage(bank,portnum,&AllSN[owd][0],page)) { OWERROR_DUMP(stderr); break; } } } break; case BANK_WRITE_UDP : printf("Enter the page number to write a UDP to: "); page = getNumber(0, (owGetNumberPages(bank,&AllSN[owd][0])-1)); if(menuSelect(ENTRY_MENU,&AllSN[owd][0]) == MODE_TEXT) len = getData(data,MAX_LEN,MODE_TEXT); else len = getData(data,MAX_LEN,MODE_HEX); if(!bankWritePacket(bank,portnum,&AllSN[owd][0],page,data,len)) OWERROR_DUMP(stderr); break; case BANK_BM_READ_PASS: printf("Enter the 8 byte read only password if less 0x00 will be filled in."); if(menuSelect(ENTRY_MENU,&AllSN[owd][0]) == MODE_TEXT) len = getData(data,8,MODE_TEXT); else len = getData(data,8,MODE_HEX); if(len != 8) { for(i=len;i<8;i++) data[i] = 0x00; } if(!owSetBMReadOnlyPassword(portnum,&AllSN[owd][0],data)) OWERROR_DUMP(stderr); break; case BANK_BM_RW_PASS: printf("Enter the 8 byte read/write password if less 0x00 will be filled in."); if(menuSelect(ENTRY_MENU,&AllSN[owd][0]) == MODE_TEXT) len = getData(data,8,MODE_TEXT); else len = getData(data,8,MODE_HEX); if(len != 8) { for(i=len;i<8;i++) data[i] = 0x00; } if(!owSetBMReadWritePassword(portnum,&AllSN[owd][0],data)) OWERROR_DUMP(stderr); break; case BANK_READ_PASS: printf("Enter the 8 byte read only password if less 0x00 will be filled in."); if(menuSelect(ENTRY_MENU,&AllSN[owd][0]) == MODE_TEXT) len = getData(data,8,MODE_TEXT); else len = getData(data,8,MODE_HEX); if(len != 8) { for(i=len;i<8;i++) data[i] = 0x00; } if(!owSetReadOnlyPassword(portnum,&AllSN[owd][0],data)) OWERROR_DUMP(stderr); break; case BANK_RW_PASS: printf("Enter the 8 byte read/write password if less 0x00 will be filled in."); if(menuSelect(ENTRY_MENU,&AllSN[owd][0]) == MODE_TEXT) len = getData(data,8,MODE_TEXT); else len = getData(data,8,MODE_HEX); if(len != 8) { for(i=len;i<8;i++) data[i] = 0x00; } if(!owSetReadWritePassword(portnum,&AllSN[owd][0],data)) OWERROR_DUMP(stderr); break; case BANK_ENABLE_PASS: if(!owSetPasswordMode(portnum,&AllSN[owd][0],ENABLE_PSW)) OWERROR_DUMP(stderr); break; case BANK_DISABLE_PASS: if(!owSetPasswordMode(portnum,&AllSN[owd][0],DISABLE_PSW)) OWERROR_DUMP(stderr); break; case BANK_NEW_BANK : // select a bank bank = selectBank(bank,&AllSN[owd][0]); if((AllSN[owd][0] == 0x33) || (AllSN[owd][0] == 0xB3)) bank = optionSHAEE(bank,portnum,&AllSN[owd][0]); // display bank information displayBankInformation(bank,portnum,&AllSN[owd][0]); break; case BANK_MAIN_MENU : done = TRUE; break; } } while (!done); done = FALSE; break; case MAIN_QUIT : done = TRUE; break; } // Main menu switch } while (!done); // loop to do menu owRelease(portnum); } // else for owAcquire return 1; }
bool RFM75_initRegisters() { // init bank 0 registers selectBank(0); // !! The last two regs in the bank0Init list will be handled later for (int i = 0; i < 20; i++){ writeRegVal(RFM75_bank0Init[i][0], RFM75_bank0Init[i][1]); } // init address registers in bank 0 writeRegPgmBuf((uint8_t *)RFM75_cmd_adrRX0, sizeof(RFM75_cmd_adrRX0)); writeRegPgmBuf((uint8_t *)RFM75_cmd_adrRX1, sizeof(RFM75_cmd_adrRX1)); writeRegPgmBuf((uint8_t *)RFM75_cmd_adrTX, sizeof(RFM75_cmd_adrTX)); // activate Feature register if(!readRegVal(RFM7x_REG_FEATURE)){ writeRegPgmBuf((uint8_t *)RFM75_cmd_activate, sizeof(RFM75_cmd_activate)); } // now set Registers 1D and 1C writeRegVal(RFM75_bank0Init[22][0], RFM75_bank0Init[22][1]); writeRegVal(RFM75_bank0Init[21][0], RFM75_bank0Init[21][1]); // init bank 1 registers selectBank(1); for (int i=0; i < 14; i++){ writeRegPgmBuf((uint8_t *)RFM7x_bank1Init[i], sizeof(RFM7x_bank1Init[i])); } // set ramp curve writeRegPgmBuf((uint8_t *)RFM7x_bank1R0EInit, sizeof(RFM7x_bank1R0EInit)); // do we have to toggle some bits here like in the example code? writeRegPgmBuf((uint8_t *)RFM75_cmd_tog1, sizeof(RFM75_cmd_tog1)); writeRegPgmBuf((uint8_t *)RFM75_cmd_tog2, sizeof(RFM75_cmd_tog2)); delay_ms(50); selectBank(0); RFM75_setModeRX(); delay_ms(5); selectBank(1); delay_ms(5); //Check the ChipID uint8_t ID; ID = readRegVal(0x08); if(ID != 0x63) { return false; } selectBank(0); return true; }