void main_inputtest(void) { backlightInit(); char nick[20]; memset(nick,0,20); strcpy(nick,"iggy"); while(1) { input("Nick?", nick, 0x20, 0x7f, 20); lcdFill(0); font=&Font_Orbitron14pt; DoString(20,20,nick); lcdDisplay(); while(getInput() != BTN_ENTER){} } }
void main_sec(void) { backlightInit(); //disable the JTAG on PIO3_3 IOCON_PIO3_3 = 0x10; int yctr=8; int dx=0; font_direction = FONT_DIR_LTR; // LeftToRight is the default yctr=18; uint8_t trigger; trigger=20; uint32_t ctr=0; char key; while (1) { ctr++; lcdDisplay(0); delayms(10); key= getInput(); if(key==BTN_UP){ trigger +=1; }else if (key ==BTN_DOWN){ trigger -=1; }; font=&Font_7x8; dx=DoString(0,0,"Trig:"); dx=DoInt(dx,0,trigger); DoString(dx,0," "); // Easy flashing if(key==BTN_LEFT){ DoString(0,8,"Enter ISP!"); lcdDisplay(0); ISPandReset(5); }; // Display nickname font = &Font_Ubuntu36pt; dx=DoString(0,0,"Sec"); // Blink LED if(ctr++>trigger){ ctr=0; if (gpioGetValue(RB_LED2) == CFG_LED_OFF){ gpioSetValue (RB_LED2, CFG_LED_ON); } else { gpioSetValue (RB_LED2, CFG_LED_OFF); }; }; // Print Voltage font = &Font_7x8; dx=DoString(0,yctr+28,"Voltage:"); DoInt(dx,yctr+28,GetVoltage()); } return; }
int main() { uint8_t index = 0; uint8_t maxhsize = DISPLAY_CHAR_WIDTH; FRESULT fr; uint32_t state = ST_START; uint32_t nameCount = 0; uint32_t vpos = 0; uint32_t hpos = 0; #if defined(PCBTARANIS) wdt_reset(); RCC_AHB1PeriphClockCmd(PWR_RCC_AHB1Periph | KEYS_RCC_AHB1Periph | LCD_RCC_AHB1Periph | BACKLIGHT_RCC_AHB1Periph | I2C_RCC_AHB1Periph | SD_RCC_AHB1Periph, ENABLE); RCC_APB1PeriphClockCmd(LCD_RCC_APB1Periph | BACKLIGHT_RCC_APB1Periph | INTERRUPT_5MS_APB1Periph | I2C_RCC_APB1Periph | SD_RCC_APB1Periph, ENABLE); RCC_APB2PeriphClockCmd(BACKLIGHT_RCC_APB2Periph, ENABLE); #endif pwrInit(); delaysInit(); //needed for lcdInit() lcdInit(); backlightInit(); lcd_clear(); lcd_putsn(0, 0, (const char *)bootloaderVersion, 0); // trick to avoid bootloaderVersion to be optimized out ... lcd_putsLeft(0, BOOTLOADER_TITLE); lcd_invert_line(0); lcdRefresh(); keysInit(); i2cInit(); __enable_irq(); init10msTimer(); #if defined(PCBTARANIS) // SD card detect pin sdInit(); usbInit(); #endif for (;;) { wdt_reset(); if (Tenms) { Tenms = 0; lcdRefreshWait(); lcd_clear(); lcd_putsLeft(0, BOOTLOADER_TITLE); lcd_invert_line(0); uint8_t event = getEvent(); if (state != ST_USB) { if (usbPlugged()) { state = ST_USB; if (!unlocked) { unlocked = 1; unlockFlash(); } usbPluggedIn(); } } if (state == ST_START) { lcd_putsLeft(2*FH, "\010Write Firmware"); lcd_putsLeft(3*FH, "\010Restore EEPROM"); lcd_putsLeft(4*FH, "\010Exit"); lcd_invert_line(2+vpos); lcd_putsLeft(7*FH, INDENT "Or plug in a USB cable for mass storage"); if (event == EVT_KEY_FIRST(BOOT_KEY_DOWN)) { vpos == 2 ? vpos = 0 : vpos = vpos+1; } else if (event == EVT_KEY_FIRST(BOOT_KEY_UP)) { vpos == 0 ? vpos = 2 : vpos = vpos-1; } else if (event == EVT_KEY_BREAK(BOOT_KEY_MENU)) { switch (vpos) { case 0: state = ST_FLASH_MENU; break; case 1: state = ST_RESTORE_MENU; break; default: state = ST_REBOOT; } } } if (state == ST_USB) { lcd_putsLeft(4*FH, "\026USB Connected"); if (usbPlugged() == 0) { vpos = 0; if (unlocked) { lockFlash(); unlocked = 0; } state = ST_START; } #if defined(PCBSKY9X) usbMassStorage(); #endif } if (state == ST_FLASH_MENU || state == ST_RESTORE_MENU) { sdInit(); memoryType = (state == ST_RESTORE_MENU ? MEM_EEPROM : MEM_FLASH); state = ST_DIR_CHECK; } else if (state == ST_DIR_CHECK) { fr = f_chdir(getBinaryPath()); if (fr == FR_OK) { state = ST_OPEN_DIR; } else { lcd_putsLeft(2*FH, INDENT "Directory is missing!"); if (event == EVT_KEY_BREAK(BOOT_KEY_EXIT) || event == EVT_KEY_BREAK(BOOT_KEY_MENU)) { vpos = 0; state = ST_START; } } } if (state == ST_OPEN_DIR) { index = 0; fr = f_opendir(&Dj, "."); if (fr == FR_OK) { state = ST_FILE_LIST; nameCount = fillNames(0); hpos = 0; vpos = 0; } } if (state == ST_FILE_LIST) { uint32_t limit = 6; if (nameCount < limit) { limit = nameCount; } maxhsize = 0; for (uint32_t i=0; i<limit; i++) { uint32_t x; x = strlen(Filenames[i]); if (x > maxhsize) { maxhsize = x; } if (x > DISPLAY_CHAR_WIDTH) { if (hpos + DISPLAY_CHAR_WIDTH > x) { x = x - DISPLAY_CHAR_WIDTH; } else { x = hpos; } } else { x = 0; } lcd_putsnAtt(INDENT_WIDTH, 16 + FH * i, &Filenames[i][x], DISPLAY_CHAR_WIDTH, 0); } if (event == EVT_KEY_REPT(BOOT_KEY_DOWN) || event == EVT_KEY_FIRST(BOOT_KEY_DOWN)) { if (vpos < limit - 1) { vpos += 1; } else { if (nameCount > limit) { index += 1; nameCount = fillNames(index); } } } else if (event == EVT_KEY_REPT(BOOT_KEY_UP) || event == EVT_KEY_FIRST(BOOT_KEY_UP)) { if (vpos > 0) { vpos -= 1; } else { if (index) { index -= 1; nameCount = fillNames(index); } } } #if !defined(PCBTARANIS) else if (event == EVT_KEY_REPT(BOOT_KEY_RIGHT) || event == EVT_KEY_FIRST(BOOT_KEY_RIGHT)) { if (hpos + DISPLAY_CHAR_WIDTH < maxhsize) { hpos += 1; } } else if (event == EVT_KEY_REPT(BOOT_KEY_LEFT) || event == EVT_KEY_FIRST(BOOT_KEY_LEFT)) { if (hpos) { hpos -= 1; } } #endif else if (event == EVT_KEY_BREAK(BOOT_KEY_MENU)) { // Select file to flash state = ST_FLASH_CHECK; Valid = 0; } else if (event == EVT_KEY_FIRST(BOOT_KEY_EXIT)) { state = ST_START; vpos = 0; } lcd_invert_line(2 + vpos); } else if (state == ST_FLASH_CHECK) { int result = menuFlashFile(vpos, event); FirmwareSize = FileSize[vpos] - BOOTLOADER_SIZE; if (result == 0) { // canceled state = ST_FILE_LIST; } else if (result == 1) { // confirmed firmwareAddress = FIRMWARE_ADDRESS + BOOTLOADER_SIZE; firmwareWritten = 0; eepromAddress = 0; eepromWritten = 0; state = ST_FLASHING; } } else if (state == ST_FLASHING) { // commit to flashing lcd_putsLeft(4*FH, "\032Writing..."); if (!unlocked && (memoryType == MEM_FLASH)) { unlocked = 1; unlockFlash(); } int progress; if (memoryType == MEM_FLASH) { writeFlashBlock(); firmwareWritten += sizeof(Block_buffer); progress = (200*firmwareWritten) / FirmwareSize; } else { writeEepromBlock(); eepromWritten += sizeof(Block_buffer); progress = (200*eepromWritten) / EESIZE; } lcd_rect( 3, 6*FH+4, 204, 7); lcd_hline(5, 6*FH+6, progress, FORCE); lcd_hline(5, 6*FH+7, progress, FORCE); lcd_hline(5, 6*FH+8, progress, FORCE); fr = f_read(&FlashFile, (BYTE *)Block_buffer, sizeof(Block_buffer), &BlockCount); if (BlockCount == 0) { state = ST_FLASH_DONE; // EOF } if (firmwareWritten >= FLASHSIZE - BOOTLOADER_SIZE) { state = ST_FLASH_DONE; // Backstop } if (eepromWritten >= EESIZE) { state = ST_FLASH_DONE; // Backstop } } if (state == ST_FLASH_DONE) { if (unlocked) { lockFlash(); unlocked = 0; } lcd_putsLeft(4*FH, "\024Writing Complete"); if (event == EVT_KEY_FIRST(BOOT_KEY_EXIT) || event == EVT_KEY_BREAK(BOOT_KEY_MENU)) { state = ST_START; vpos = 0; } } if (event == EVT_KEY_LONG(BOOT_KEY_EXIT)) { state = ST_REBOOT; } lcdRefresh(); if (PowerUpDelay < 20) { // 200 mS PowerUpDelay += 1; } else { sdPoll10ms(); } } if (state != ST_FLASHING && state != ST_USB) { #if defined(REV9E) if (pwrPressed()) { #else if (pwrCheck() == e_power_off) { #endif lcdOff(); // this drains LCD caps pwrOff(); for (;;) { // Wait for power to go off } } } if (state == ST_REBOOT) { if (readKeys() == 0) { lcd_clear(); lcdRefresh(); lcdRefreshWait(); RCC->CSR |= RCC_CSR_RMVF; //clear the reset flags in RCC clock control & status register NVIC_SystemReset(); } } } return 0; }
void boardInit() { RCC_AHB1PeriphClockCmd(PWR_RCC_AHB1Periph | KEYS_RCC_AHB1Periph | LCD_RCC_AHB1Periph | BACKLIGHT_RCC_AHB1Periph | ADC_RCC_AHB1Periph | I2C_RCC_AHB1Periph | SD_RCC_AHB1Periph | HAPTIC_RCC_AHB1Periph | INTMODULE_RCC_AHB1Periph | EXTMODULE_RCC_AHB1Periph | TELEMETRY_RCC_AHB1Periph | SERIAL_RCC_AHB1Periph | TRAINER_RCC_AHB1Periph | HEARTBEAT_RCC_AHB1Periph, ENABLE); RCC_APB1PeriphClockCmd(LCD_RCC_APB1Periph | BACKLIGHT_RCC_APB1Periph | INTERRUPT_5MS_APB1Periph | TIMER_2MHz_APB1Periph | I2C_RCC_APB1Periph | SD_RCC_APB1Periph | TRAINER_RCC_APB1Periph | TELEMETRY_RCC_APB1Periph | SERIAL_RCC_APB1Periph, ENABLE); RCC_APB2PeriphClockCmd(BACKLIGHT_RCC_APB2Periph | ADC_RCC_APB2Periph | HAPTIC_RCC_APB2Periph | INTMODULE_RCC_APB2Periph | EXTMODULE_RCC_APB2Periph | HEARTBEAT_RCC_APB2Periph, ENABLE); #if !defined(REV9E) // some REV9E boards need that the pwrInit() is moved a little bit later pwrInit(); #endif keysInit(); adcInit(); delaysInit(); lcdInit(); // delaysInit() must be called before audioInit(); init2MhzTimer(); init5msTimer(); __enable_irq(); i2cInit(); usbInit(); #if defined(HAPTIC) hapticInit(); #endif #if defined(REV9E) bluetoothInit(BLUETOOTH_DEFAULT_BAUDRATE); #endif #if defined(DEBUG) DBGMCU_APB1PeriphConfig(DBGMCU_IWDG_STOP|DBGMCU_TIM1_STOP|DBGMCU_TIM2_STOP|DBGMCU_TIM3_STOP|DBGMCU_TIM6_STOP|DBGMCU_TIM8_STOP|DBGMCU_TIM10_STOP|DBGMCU_TIM13_STOP|DBGMCU_TIM14_STOP, ENABLE); #endif #if defined(REV9E) if (!WAS_RESET_BY_WATCHDOG_OR_SOFTWARE()) { lcd_clear(); lcd_bmp(76, 2, bmp_lock, 0, 60); lcdRefresh(); lcdRefreshWait(); tmr10ms_t start = get_tmr10ms(); tmr10ms_t duration = 0; uint8_t pwr_on = 0; while (pwrPressed()) { duration = get_tmr10ms() - start; if (duration < PWR_PRESS_DURATION_MIN) { unsigned index = duration / (PWR_PRESS_DURATION_MIN / 4); lcd_clear(); lcd_bmp(76, 2, bmp_startup, index*60, 60); } else if (duration >= PWR_PRESS_DURATION_MAX) { displaySleepBitmap(); turnBacklightOff(); } else { if (pwr_on != 1) { pwr_on = 1; pwrInit(); backlightInit(); haptic.play(15, 3, PLAY_NOW); } } lcdRefresh(); lcdRefreshWait(); } if (duration < PWR_PRESS_DURATION_MIN || duration >= PWR_PRESS_DURATION_MAX) { boardOff(); } } else { pwrInit(); backlightInit(); } topLcdInit(); #else backlightInit(); #endif }
void rbInit() { // TODO FIXME special port disable ? LEDs BTNs ? // prepare power // TODO FIXME more power init needed ? chrg + volt input ? // enable external vcc gpioSetDir(RB_PWR_GOOD, gpioDirection_Output); gpioSetValue (RB_PWR_GOOD, 0); // Disable USB Connect (we don't want USB by default) gpioSetDir(USB_CONNECT, gpioDirection_Output); gpioSetValue(USB_CONNECT, 1); // prepare buttons gpioSetDir(RB_BTN0, gpioDirection_Input); gpioSetPullup (&RB_BTN0_IO, gpioPullupMode_PullUp); gpioSetDir(RB_BTN1, gpioDirection_Input); gpioSetPullup (&RB_BTN1_IO, gpioPullupMode_PullUp); gpioSetDir(RB_BTN2, gpioDirection_Input); gpioSetPullup (&RB_BTN2_IO, gpioPullupMode_PullUp); gpioSetDir(RB_BTN3, gpioDirection_Input); gpioSetPullup (&RB_BTN3_IO, gpioPullupMode_PullUp); gpioSetDir(RB_BTN4, gpioDirection_Input); gpioSetPullup (&RB_BTN4_IO, gpioPullupMode_PullUp); // prepate chrg_stat gpioSetDir(RB_PWR_CHRG, gpioDirection_Input); gpioSetPullup (&RB_PWR_CHRG_IO, gpioPullupMode_PullUp); // prepare LEDs IOCON_JTAG_TDI_PIO0_11 &= ~IOCON_JTAG_TDI_PIO0_11_FUNC_MASK; IOCON_JTAG_TDI_PIO0_11 |= IOCON_JTAG_TDI_PIO0_11_FUNC_GPIO; gpioSetDir(RB_LED0, gpioDirection_Output); gpioSetValue (RB_LED0, 0); gpioSetDir(RB_LED1, gpioDirection_Output); gpioSetValue (RB_LED1, 0); gpioSetDir(RB_LED2, gpioDirection_Output); gpioSetValue (RB_LED2, 0); gpioSetDir(RB_LED3, gpioDirection_Output); gpioSetValue (RB_LED3, 0); // Set LED3 to ? IOCON_PIO1_11 = 0x41; // prepare lcd // TODO FIXME more init needed ? gpioSetDir(RB_LCD_BL, gpioDirection_Output); gpioSetValue (RB_LCD_BL, 0); // Set P0.0 to GPIO RB_PWR_LCDBL_IO&= ~RB_PWR_LCDBL_IO_FUNC_MASK; RB_PWR_LCDBL_IO|= RB_PWR_LCDBL_IO_FUNC_GPIO; gpioSetDir(RB_PWR_LCDBL, gpioDirection_Input); gpioSetPullup(&RB_PWR_LCDBL_IO, gpioPullupMode_Inactive); // prepare I2C #ifdef __I2C_h i2cInit(I2CMASTER); // TODO FIXME via define ? #endif // prepare SPI/SS // TODO FIXME init miso/mosi/sck somehow ? gpioSetDir(RB_SPI_SS0, gpioDirection_Output); gpioSetValue (RB_SPI_SS0, 1); gpioSetDir(RB_SPI_SS1, gpioDirection_Output); gpioSetValue (RB_SPI_SS1, 1); gpioSetDir(RB_SPI_SS2, gpioDirection_Output); gpioSetValue (RB_SPI_SS2, 1); gpioSetDir(RB_SPI_SS3, gpioDirection_Output); gpioSetValue (RB_SPI_SS3, 1); gpioSetDir(RB_SPI_SS4, gpioDirection_Output); gpioSetValue (RB_SPI_SS4, 1); gpioSetDir(RB_SPI_SS5, gpioDirection_Output); gpioSetValue (RB_SPI_SS5, 1); // prepare hackerbus gpioSetDir(RB_HB0, gpioDirection_Output); gpioSetValue (RB_HB0, 1); gpioSetDir(RB_HB1, gpioDirection_Output); gpioSetValue (RB_HB1, 1); gpioSetDir(RB_HB2, gpioDirection_Output); gpioSetValue (RB_HB2, 1); gpioSetDir(RB_HB3, gpioDirection_Output); gpioSetValue (RB_HB3, 1); gpioSetDir(RB_HB4, gpioDirection_Output); gpioSetValue (RB_HB4, 1); gpioSetDir(RB_HB5, gpioDirection_Output); gpioSetValue (RB_HB5, 1); // prepare BUSINT interrupt gpioSetDir(RB_BUSINT, gpioDirection_Input); gpioSetPullup (&RB_BUSINT_IO, gpioPullupMode_PullUp); gpioSetInterrupt(RB_BUSINT, gpioInterruptSense_Edge, gpioInterruptEdge_Single, gpioInterruptEvent_ActiveLow); gpioIntEnable(RB_BUSINT); //nrf_init(); backlightInit(); font=&Font_7x8; ECIES_setup(); }
void rbInit() { // TODO FIXME special port disable ? LEDs BTNs ? // prepare power // TODO FIXME more power init needed ? chrg + volt input ? // enable external vcc gpioSetDir(RB_PWR_GOOD, gpioDirection_Output); gpioSetValue (RB_PWR_GOOD, 0); // Disable USB Connect (we don't want USB by default) gpioSetDir(USB_CONNECT, gpioDirection_Output); gpioSetValue(USB_CONNECT, 1); static uint8_t ports[] = { RB_BTN0, RB_BTN1, RB_BTN2, RB_BTN3, RB_BTN4, RB_LED0, RB_LED1, RB_LED2, RB_SPI_SS0, RB_SPI_SS1, RB_SPI_SS2, RB_SPI_SS3, RB_SPI_SS4, RB_SPI_SS5, RB_HB0, RB_HB1, RB_HB2, RB_HB3, RB_HB4, RB_HB5}; volatile uint32_t * regs[] = {&RB_BTN0_IO, &RB_BTN1_IO, &RB_BTN2_IO, &RB_BTN3_IO, &RB_BTN4_IO}; int i = 0; while( i<10 ){ gpioSetDir(ports[i], ports[i+1], gpioDirection_Input); gpioSetPullup(regs[i/2], gpioPullupMode_PullUp); i+=2; } // prepate chrg_stat gpioSetDir(RB_PWR_CHRG, gpioDirection_Input); gpioSetPullup (&RB_PWR_CHRG_IO, gpioPullupMode_PullUp); gpioSetDir(RB_LED3, gpioDirection_Input); IOCON_PIO1_11 = 0x41; // prepare LEDs IOCON_JTAG_TDI_PIO0_11 &= ~IOCON_JTAG_TDI_PIO0_11_FUNC_MASK; IOCON_JTAG_TDI_PIO0_11 |= IOCON_JTAG_TDI_PIO0_11_FUNC_GPIO; while( i<16 ){ gpioSetDir(ports[i],ports[i+1], gpioDirection_Output); gpioSetValue (ports[i], ports[i+1], 0); i+=2; } // Set LED3 to ? IOCON_PIO1_11 = 0x41; // prepare lcd // TODO FIXME more init needed ? gpioSetDir(RB_LCD_BL, gpioDirection_Output); gpioSetValue (RB_LCD_BL, 0); // Set P0.0 to GPIO RB_PWR_LCDBL_IO&= ~RB_PWR_LCDBL_IO_FUNC_MASK; RB_PWR_LCDBL_IO|= RB_PWR_LCDBL_IO_FUNC_GPIO; gpioSetDir(RB_PWR_LCDBL, gpioDirection_Input); gpioSetPullup(&RB_PWR_LCDBL_IO, gpioPullupMode_Inactive); // prepare I2C #ifdef __I2C_h i2cInit(I2CMASTER); // TODO FIXME via define ? #endif // prepare SPI/SS // TODO FIXME init miso/mosi/sck somehow ? // prepare hackerbus while(i<sizeof(ports)){ gpioSetDir(ports[i],ports[i+1], gpioDirection_Output); gpioSetValue (ports[i], ports[i+1], 1); i+=2; } // prepare BUSINT interrupt //gpioSetDir(RB_BUSINT, gpioDirection_Input); //gpioSetPullup (&RB_BUSINT_IO, gpioPullupMode_PullUp); //gpioSetInterrupt(RB_BUSINT, gpioInterruptSense_Edge, gpioInterruptEdge_Single, gpioInterruptEvent_ActiveLow); //gpioIntEnable(RB_BUSINT); //nrf_init(); backlightInit(); font=&Font_7x8; }