This commit is contained in:
Victor Oliveira 2020-11-11 04:54:29 +00:00 committed by GitHub
commit 197367552c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -44,7 +44,8 @@ extern "C" void u8g_10MicroDelay() {
extern "C" void u8g_Delay(uint16_t val) { extern "C" void u8g_Delay(uint16_t val) {
delay(val); delay(val);
} }
//************************//
//************************
// return free heap space // return free heap space
int freeMemory() { int freeMemory() {
@ -57,9 +58,9 @@ int freeMemory() {
return result; return result;
} }
// scan command line for code // Scan command line for code
// return index into pin map array if found and the pin is valid. // Return index into pin map array if found and the pin is valid.
// return dval if not found or not a valid pin. // Return dval if not found or not a valid pin.
int16_t PARSED_PIN_INDEX(const char code, const int16_t dval) { int16_t PARSED_PIN_INDEX(const char code, const int16_t dval) {
const uint16_t val = (uint16_t)parser.intval(code, -1), port = val / 100, pin = val % 100; const uint16_t val = (uint16_t)parser.intval(code, -1), port = val / 100, pin = val % 100;
const int16_t ind = (port < ((NUM_DIGITAL_PINS) >> 5) && pin < 32) ? ((port << 5) | pin) : -2; const int16_t ind = (port < ((NUM_DIGITAL_PINS) >> 5) && pin < 32) ? ((port << 5) | pin) : -2;
@ -79,4 +80,106 @@ uint8_t HAL_get_reset_source(void) {
return RST_POWER_ON; return RST_POWER_ON;
} }
// Overwrite DiskIO functions from LPC framework to use Marlin Sd2Card API.
// TODO: need a define to enable/disable it... maybe a file only for this code!
#include <chanfs/diskio.h>
#include "../../sd/cardreader.h"
DRESULT disk_read (
BYTE drv, // Physical drive number (0)
BYTE *buff, // Pointer to the data buffer to store read data
DWORD sector, // Start sector number (LBA)
UINT count // Number of sectors to read (1..128)
) {
auto sd2card = card.getSd2Card();
if (count == 1) {
sd2card.readBlock(sector, buff);
return RES_OK;
}
sd2card.readStart(sector);
while (count--) {
sd2card.readData(buff);
buff += 512;
}
sd2card.readStop();
return RES_OK;
}
DSTATUS disk_status(BYTE drv) { // Physical drive number (0)
return 0;
}
DSTATUS disk_initialize(BYTE drv) { // Physical drive number (0)
// If already mounted, it's already initialized!
if (!card.isMounted()) {
auto sd2card = card.getSd2Card();
if (!sd2card.init(SPI_SPEED, SDSS)
#if defined(LCD_SDSS) && (LCD_SDSS != SDSS)
&& !sd2card.init(SPI_SPEED, LCD_SDSS)
#endif
) {
return RES_ERROR;
}
}
return RES_OK;
}
#if _DISKIO_WRITE
DRESULT disk_write(
BYTE drv, // Physical drive number (0)
const BYTE *buff, // Ponter to the data to write
DWORD sector, // Start sector number (LBA)
UINT count // Number of sectors to write (1..128)
) {
auto sd2card = card.getSd2Card();
if (count == 1) {
sd2card.writeBlock(sector, buff);
return RES_OK;
}
sd2card.writeStart(sector, count);
while (count--)
{
sd2card.writeData(buff);
buff += 512;
}
sd2card.writeStop();
return RES_OK;
}
#endif // _DISKIO_WRITE
#if _DISKIO_IOCTL
DRESULT disk_ioctl(
BYTE drv, // Physical drive number (0)
BYTE cmd, // Control command code
void *buff // Pointer to the conrtol data
) {
DWORD *dp, st, ed;
auto sd2card = card.getSd2Card();
switch (cmd) {
case CTRL_SYNC: // Wait for end of internal write process of the drive
break;
case GET_SECTOR_COUNT: // Get drive capacity in unit of sector (DWORD)
*(int32_t*)buff = sd2card.cardSize();
break;
case GET_BLOCK_SIZE: // Get erase block size in unit of sector (DWORD)
break;
case CTRL_TRIM: // Erase a block of sectors (used when _USE_TRIM in ffconf.h is 1)
dp = (DWORD*)buff; st = dp[0]; ed = dp[1]; // Load sector block
sd2card.erase(st, ed);
break;
}
return RES_OK;
}
#endif // _DISKIO_IOCTL
#endif // TARGET_LPC1768 #endif // TARGET_LPC1768