Ignore:
Timestamp:
Apr 29, 2017, 4:33:37 PM (7 years ago)
Author:
coas-nagasima
Message:

ファイルを追加、更新。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/prototool/src/arduino.c

    r278 r279  
    11#include <arduino.h>
    22#include <mruby.h>
     3#include <stdlib.h>
     4#include <stdio.h>
     5#include <fcntl.h>
    36#include "../llbruby.h"
    47
     
    1619i2c_t Wire5;
    1720
    18 FATFS RomDisk;
    19 SD Sd;
    20 
    2121char ExeFilename[64];
    2222
     
    2727void randomSeed(long seed)
    2828{
     29        srand(seed);
    2930}
    3031
    3132long arduino_random(long min, long max)
    3233{
    33         return min;
     34        return (long)(((double)rand() / (double)RAND_MAX) / ((double)max - (double)min)) + min;
    3435}
    3536
     
    223224int EEP_fopen(FILEEEP *fp, const char *str, char mode)
    224225{
    225         FRESULT ret;
    226         BYTE fm;
     226        int ret;
     227        int fm;
    227228
    228229        switch (mode){
    229230        case 0:
    230                 fm = FA_READ;
     231                fm = O_RDONLY;
    231232                break;
    232233        case 1:
    233                 fm = FA_READ | FA_WRITE | FA_CREATE_NEW;
     234                fm = O_RDWR | O_CREAT;
    234235                break;
    235236        case 2:
    236                 fm = FA_READ | FA_WRITE;
     237                fm = O_RDWR;
    237238                break;
    238239        default:
     
    240241        }
    241242
    242         ret = f_open(&fp->fp, str, fm);
    243 
    244         return (ret == FR_OK) ? 0 : -1;
     243        ret = open(str, fm);
     244        if (ret < 0) {
     245                fp->fd = 0;
     246                return -1;
     247        }
     248        fp->fd = ret;
     249
     250        return 0;
    245251}
    246252
    247253int EEP_fwrite(FILEEEP *fp, byte *data, int *len)
    248254{
    249         FRESULT ret;
    250 
    251         ret = f_write(&fp->fp, data, (UINT)*len, (UINT *)len);
    252 
    253         return (ret == FR_OK) ? 1 : -1;
     255        int ret;
     256
     257        ret = write(fp->fd, data, *len);
     258        if (ret < 0) {
     259                *len = 0;
     260                return -1;
     261        }
     262        *len = ret;
     263
     264        return 0;
    254265}
    255266
    256267int EEP_fread(FILEEEP *fp)
    257268{
    258         FRESULT ret;
     269        int ret;
    259270        char c;
    260         UINT br;
    261 
    262         ret = f_read(&fp->fp, &c, 1, &br);
    263         if (ret != FR_OK)
     271
     272        ret = read(fp->fd, &c, 1);
     273        if (ret < 0)
    264274                return -1;
    265275
     
    269279void EEP_fclose(FILEEEP *fp)
    270280{
    271         f_close(&fp->fp);
     281        close(fp->fd);
    272282}
    273283
    274284int EEP_fseek(FILEEEP *fp, int pos, int mode)
    275285{
    276         FRESULT ret;
     286        int ret;
    277287
    278288        switch (mode){
    279289        case EEP_SEEKTOP:
    280                 ret = f_lseek(&fp->fp, pos);
     290                ret = lseek(fp->fd, pos, SEEK_SET);
    281291                break;
    282292        case EEP_SEEKCUR:
    283                 ret = f_lseek(&fp->fp, fp->fp.fptr + pos);
     293                ret = lseek(fp->fd, pos, SEEK_CUR);
    284294                break;
    285295        case EEP_SEEKEND:
    286                 ret = f_lseek(&fp->fp, fp->fp.fsize - pos);
     296                ret = lseek(fp->fd, pos, SEEK_END);
    287297                break;
    288298        default:
    289                 ret = FR_INVALID_PARAMETER;
    290                 break;
    291         }
    292 
    293         if (ret != FR_OK)
    294                 f_lseek(&fp->fp, 0);
    295 
    296         return fp->fp.fptr;
     299                return -1;
     300                break;
     301        }
     302
     303        if (ret < 0)
     304                return false;
     305
     306        return true;
    297307}
    298308
    299309int EEP_ffilesize(const char *str)
    300310{
    301         FRESULT ret;
    302         FILINFO fno;
    303 
    304         ret = f_stat(str, &fno);
    305         if (ret != FR_OK)
     311        int ret;
     312        struct stat fno;
     313
     314        ret = stat(str, &fno);
     315        if (ret < 0)
    306316                return 0;
    307317
    308         return fno.fsize;
     318        return fno.st_size;
    309319}
    310320
    311321bool EEP_fEof(FILEEEP *fp)
    312322{
    313         return f_tell(&fp->fp) == f_size(&fp->fp);
     323        int ret, pos;
     324        struct stat fno;
     325
     326        ret = fstat(fp->fd, &fno);
     327        if (ret < 0)
     328                return false;
     329
     330        pos = lseek(fp->fd, 0, SEEK_CUR);
     331
     332        return pos == fno.st_size;
    314333}
    315334
    316335bool EEP_fexist(const char *path)
    317336{
    318         FRESULT ret;
    319         FILINFO fno;
    320 
    321         ret = f_stat(path, &fno);
    322 
    323         return (ret == FR_OK);
     337        int ret;
     338        struct stat fno;
     339
     340        ret = stat(path, &fno);
     341
     342        return (ret == 0);
    324343}
    325344
    326345bool EEP_fcopy(const char *src, const char *dst)
    327346{
    328         FIL fsrc, fdst;
    329         BYTE buffer[512];
    330         FRESULT res;
    331         UINT br, bw;
    332 
    333         res = f_open(&fsrc, src, FA_OPEN_EXISTING | FA_READ);
    334         if (res != FR_OK)
    335                 return false;
    336 
    337         res = f_open(&fdst, dst, FA_CREATE_ALWAYS | FA_WRITE);
    338         if (res != FR_OK){
    339                 f_close(&fsrc);
     347        int fsrc, fdst;
     348        unsigned char buffer[512];
     349        int res = true;
     350        int br, bw;
     351
     352        fsrc = open(src, O_RDONLY);
     353        if (fsrc < 0)
     354                return false;
     355
     356        fdst = open(dst, O_RDWR | O_CREAT);
     357        if (fdst < 0){
     358                close(fsrc);
    340359                return false;
    341360        }
    342361
    343362        for (;;) {
    344                 res = f_read(&fsrc, buffer, sizeof(buffer), &br);
    345                 if ((res != FR_OK) || br == 0)
     363                br = read(fsrc, buffer, sizeof(buffer));
     364                if (br < 0) {
     365                        res = false;
    346366                        break;
    347 
    348                 res = f_write(&fdst, buffer, br, &bw);
    349                 if ((res != FR_OK) || bw < br)
     367                }
     368                if (br == 0)
    350369                        break;
    351         }
    352 
    353         f_close(&fsrc);
    354         f_close(&fdst);
    355 
    356         return (res == FR_OK);
     370
     371                bw = write(fdst, buffer, br);
     372                if ((bw < 0) || bw < br) {
     373                        res = false;
     374                        break;
     375                }
     376        }
     377
     378        close(fsrc);
     379        close(fdst);
     380
     381        return res;
    357382}
    358383
    359384bool EEP_fdelete(const char *path)
    360385{
    361         FRESULT res;
    362 
    363         res = f_unlink(path);
    364 
    365         return (res == FR_OK);
    366 }
    367 
    368 bool SD_begin()
    369 {
    370         DSTATUS dst;
    371         FRESULT res;
    372         BYTE pdrv = 1, type;
    373 
    374         if (Sd.FatFs.fs_type != 0)
    375                 return true;
    376 
    377         if ((dst = disk_initialize(pdrv)) != RES_OK) {
    378                 return false;
    379         }
    380 
    381         if ((dst = disk_ioctl(pdrv, MMC_GET_TYPE, &type)) != RES_OK) {
    382                 Sd.dst = dst;
    383                 Sd.type = 0;
    384         }
    385         else {
    386                 Sd.dst = RES_OK;
    387                 Sd.type = type;
    388         }
    389 
    390         if ((res = f_mount(&Sd.FatFs, "1:", 1)) != FR_OK) {
    391                 return false;
    392         }
    393 
     386        int res;
     387
     388        res = unlink(path);
     389
     390        return (res == 0);
     391}
     392
     393bool SD_open(File *file, const char *path, int mode)
     394{
     395        int ret;
     396
     397        if (!SD_begin())
     398                return false;
     399
     400        ret = open(path, mode);
     401        if (ret < 0) {
     402                file->fd = 0;
     403                return false;
     404        }
     405
     406        file->fd = ret;
    394407        return true;
    395408}
    396409
    397 bool SD_open(File *file, const char *path, int mode)
    398 {
    399         FRESULT ret;
     410bool SD_rmdir(const char *path)
     411{
     412        int ret;
    400413
    401414        if (!SD_begin())
    402415                return false;
    403416
    404         ret = f_open(&file->fp, path, mode);
    405 
    406         return ret == FR_OK;
    407 }
    408 
    409 bool SD_rmdir(const char *path)
    410 {
    411         FRESULT ret;
     417        ret = rmdir(path);
     418
     419        return ret == 0;
     420}
     421
     422bool SD_rename(const char *path1, const char *path2)
     423{
     424        int ret;
    412425
    413426        if (!SD_begin())
    414427                return false;
    415428
    416         ret = f_unlink(path);
    417 
    418         return ret == FR_OK;
    419 }
    420 
    421 bool SD_rename(const char *path1, const char *path2)
    422 {
    423         FRESULT ret;
     429        ret = rename(path1, path2);
     430       
     431        return ret == 0;
     432}
     433
     434bool SD_remove(const char *path)
     435{
     436        int ret;
    424437
    425438        if (!SD_begin())
    426439                return false;
    427440
    428         ret = f_rename(path1, path2);
    429        
    430         return ret == FR_OK;
    431 }
    432 
    433 bool SD_remove(const char *path)
    434 {
    435         FRESULT ret;
     441        ret = unlink(path);
     442
     443        return ret == 0;
     444}
     445
     446bool SD_exists(const char *path)
     447{
     448        int ret;
     449        struct stat fno;
    436450
    437451        if (!SD_begin())
    438452                return false;
    439453
    440         ret = f_unlink(path);
    441 
    442         return ret == FR_OK;
    443 }
    444 
    445 bool SD_exists(const char *path)
    446 {
    447         FRESULT ret;
    448         FILINFO fno;
     454        ret = stat(path, &fno);
     455
     456        return ret == 0;
     457}
     458
     459bool SD_mkdir(const char *path)
     460{
     461        int ret;
    449462
    450463        if (!SD_begin())
    451464                return false;
    452465
    453         ret = f_stat(path, &fno);
    454 
    455         return ret == FR_OK;
    456 }
    457 
    458 bool SD_mkdir(const char *path)
    459 {
    460         FRESULT ret;
    461 
    462         if (!SD_begin())
    463                 return false;
    464 
    465         ret = f_mkdir(path);
    466 
    467         return ret == FR_OK;
    468 }
    469 
    470 int file_write(File *fd, unsigned char *str, int len)
    471 {
    472         FRESULT ret;
    473         UINT bw;
    474 
    475         ret = f_write(&fd->fp, str, len, &bw);
    476         if (ret != FR_OK)
    477                 return -1;
    478 
    479         return bw;
    480 }
    481 
    482 void file_close(File *fd)
    483 {
    484         f_close(&fd->fp);
    485 }
    486 
    487 int file_size(File *fd)
    488 {
    489         return f_size(&fd->fp);
    490 }
    491 
    492 int file_position(File *fd)
    493 {
    494         return fd->fp.fptr;
    495 }
    496 
    497 void file_flush(File *fd)
    498 {
    499         f_flush(&fd->fp);
    500 }
    501 
    502 bool file_seek(File *fd, int pos)
    503 {
    504         FRESULT ret;
    505 
    506         ret = f_lseek(&fd->fp, pos);
    507 
    508         return ret != FR_OK;
    509 }
    510 
    511 int file_read(File *fd)
    512 {
    513         FRESULT ret;
     466        ret = mkdir(path, 0777);
     467
     468        return ret == 0;
     469}
     470
     471int file_write(File *fp, unsigned char *str, int len)
     472{
     473        int ret;
     474
     475        ret = write(fp->fd, str, len);
     476        if (ret < 0)
     477                return -1;
     478
     479        return ret;
     480}
     481
     482void file_close(File *fp)
     483{
     484        close(fp->fd);
     485}
     486
     487int file_size(File *fp)
     488{
     489        int ret;
     490        struct stat fno;
     491
     492        ret = fstat(fp->fd, &fno);
     493        if (ret < 0)
     494                return -1;
     495
     496        return fno.st_size;
     497}
     498
     499int file_position(File *fp)
     500{
     501        int ret;
     502        struct stat fno;
     503
     504        ret = lseek(fp->fd, 0, SEEK_CUR);
     505        if (ret < 0)
     506                return -1;
     507
     508        return ret;
     509}
     510
     511void file_flush(File *fp)
     512{
     513        fsync(fp->fd);
     514}
     515
     516bool file_seek(File *fp, int pos)
     517{
     518        int ret;
     519
     520        ret = lseek(fp->fd, pos, SEEK_SET);
     521
     522        return ret == 0;
     523}
     524
     525int file_read(File *fp)
     526{
     527        int ret;
    514528        char c;
    515         UINT br;
    516 
    517         ret = f_read(&fd->fp, &c, 1, &br);
    518         if (ret != FR_OK)
     529
     530        ret = read(fp->fd, &c, 1);
     531        if (ret < 0)
    519532                return -1;
    520533
     
    524537void system_reboot(int mode)
    525538{
    526 
     539        exit(mode);
    527540}
    528541
     
    531544        return 0;
    532545}
    533 
    534 DWORD get_fattime(void)
    535 {
    536         time_t temp;
    537         struct tm _tm;
    538 
    539         time(&temp);
    540         gmtime_r(&temp, &_tm);
    541 
    542         return    ((DWORD)(_tm.tm_year - 1980) << 25)
    543                 | ((DWORD)_tm.tm_mon << 21)
    544                 | ((DWORD)_tm.tm_mday << 16)
    545                 | ((DWORD)_tm.tm_hour << 11)
    546                 | ((DWORD)_tm.tm_min << 5)
    547                 | ((DWORD)_tm.tm_sec >> 1);
    548 }
    549 
    550 void mrb_gr_peach_gem_init(mrb_state *mrb)
    551 {
    552 }
    553 
    554 void mrb_gr_peach_gem_final(mrb_state *mrb)
    555 {
    556 
    557 }
Note: See TracChangeset for help on using the changeset viewer.