bool jsfsInit() {
#ifndef LINUX
    if (!fat_initialised) {
#ifdef SD_CARD_ANYWHERE
        if (!isSdSPISetup()) {
#ifdef SD_SPI
            const char *deviceStr = jshGetDeviceString(SD_SPI);
            JsVar *spi = jsvSkipNameAndUnLock(jspGetNamedVariable(deviceStr));
            JshSPIInfo inf;
            jshSPIInitInfo(&inf);
            inf.pinMISO = SD_DO_PIN;
            inf.pinMOSI = SD_DI_PIN;
            inf.pinSCK = SD_CLK_PIN;
            jshSPISetup(SD_SPI, &inf);
            sdSPISetup(spi, SD_CS_PIN);
            jsvUnLock(spi);
#else
            jsError("SD card must be setup with E.connectSDCard first");
            return false;
#endif
        }
#endif

        FRESULT res;
        if ((res = f_mount(&jsfsFAT, "", 1/*immediate*/)) != FR_OK) {
            jsfsReportError("Unable to mount SD card", res);
            return false;
        }
        fat_initialised = true;
    }
#endif
    return true;
}
Exemple #2
0
/*JSON{
  "type" : "kill",
  "generate" : "jswrap_file_kill"
}*/
void jswrap_file_kill() {
  JsVar *arr = fsGetArray(false);
  if (arr) {
    JsvObjectIterator it;
    jsvObjectIteratorNew(&it, arr);
    while (jsvObjectIteratorHasValue(&it)) {
      JsVar *file = jsvObjectIteratorGetValue(&it);
      jswrap_file_close(file);
      jsvUnLock(file);
      jsvObjectIteratorNext(&it);
    }
    jsvObjectIteratorFree(&it);
    jsvRemoveAllChildren(arr);
    jsvUnLock(arr);
  }
  // close fs library
#ifndef LINUX
  if (fat_initialised) {
    fat_initialised = false;
    f_mount(0, 0, 0);
  }
#endif
#ifdef SD_CARD_ANYWHERE
  sdSPISetup(0, PIN_UNDEFINED);
#endif
}
/*JSON{
  "type" : "staticmethod",
  "class" : "E",
  "name" : "connectSDCard",
  "generate" : "jswrap_E_connectSDCard",
  "ifndef" : "SAVE_ON_FLASH",
  "params" : [
    ["spi","JsVar","The SPI object to use for communication"],
    ["csPin","pin","The pin to use for Chip Select"]
  ]
}
Setup the filesystem so that subsequent calls to `E.openFile` and `require('fs').*` will use an SD card on the supplied SPI device and pin.

It can even work using software SPI - for instance:

```
var spi = new SPI();
spi.setup({mosi:C7,miso:C8,sck:C9});
E.connectSDCard(spi,C6);
console.log(require("fs").readdirSync());
```
*/
void jswrap_E_connectSDCard(JsVar *spi, Pin csPin) {
#ifdef SD_CARD_ANYWHERE
    if (!jsvIsObject(spi)) {
        jsExceptionHere(JSET_ERROR, "First argument is a %t, not an SPI object\n", spi);
        return;
    }
    if (!jshIsPinValid(csPin)) {
        jsExceptionHere(JSET_ERROR, "Second argument is not a valid pin");
        return;
    }
    jswrap_E_unmountSD();
    sdSPISetup(spi, csPin);
#else
    jsExceptionHere(JSET_ERROR, "Unimplemented on Linux");
#endif
}
Exemple #4
0
bool jsfsInit() {
   
#ifndef LINUX
  if (!fat_initialised) {
#ifndef USE_FLASHFS  
#ifdef SD_CARD_ANYWHERE
    if (!isSdSPISetup()) {
#ifdef SD_SPI
      const char *deviceStr = jshGetDeviceString(SD_SPI);
      JsVar *spi = jsvSkipNameAndUnLock(jspGetNamedVariable(deviceStr));
      JshSPIInfo inf;
      jshSPIInitInfo(&inf);
      inf.baudRate = 4000000; // 4Mhz bit rate for onboard SD cards
      inf.pinMISO = SD_DO_PIN;
      inf.pinMOSI = SD_DI_PIN;
      inf.pinSCK = SD_CLK_PIN;
      jshSPISetup(SD_SPI, &inf);
      sdSPISetup(spi, SD_CS_PIN);
      jsvUnLock(spi);
#else
      jsExceptionHere(JSET_ERROR,"SD card must be setup with E.connectSDCard first");
      return false;
#endif // SD_SPI
    }
#endif // SD_CARD_ANYWHER
#endif // USE_FLASHFS 
    FRESULT res;

    if ((res = f_mount(&jsfsFAT, "", 1)) != FR_OK) {
       jsfsReportError("Unable to mount media", res);
       return false;
    }
    fat_initialised = true;
  }
#endif // LINUX
  return true;
}