Changeset 279 for EcnlProtoTool/trunk/prototool/src/arduino.c
- Timestamp:
- Apr 29, 2017, 4:33:37 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/prototool/src/arduino.c
r278 r279 1 1 #include <arduino.h> 2 2 #include <mruby.h> 3 #include <stdlib.h> 4 #include <stdio.h> 5 #include <fcntl.h> 3 6 #include "../llbruby.h" 4 7 … … 16 19 i2c_t Wire5; 17 20 18 FATFS RomDisk;19 SD Sd;20 21 21 char ExeFilename[64]; 22 22 … … 27 27 void randomSeed(long seed) 28 28 { 29 srand(seed); 29 30 } 30 31 31 32 long arduino_random(long min, long max) 32 33 { 33 return min;34 return (long)(((double)rand() / (double)RAND_MAX) / ((double)max - (double)min)) + min; 34 35 } 35 36 … … 223 224 int EEP_fopen(FILEEEP *fp, const char *str, char mode) 224 225 { 225 FRESULTret;226 BYTEfm;226 int ret; 227 int fm; 227 228 228 229 switch (mode){ 229 230 case 0: 230 fm = FA_READ;231 fm = O_RDONLY; 231 232 break; 232 233 case 1: 233 fm = FA_READ | FA_WRITE | FA_CREATE_NEW;234 fm = O_RDWR | O_CREAT; 234 235 break; 235 236 case 2: 236 fm = FA_READ | FA_WRITE;237 fm = O_RDWR; 237 238 break; 238 239 default: … … 240 241 } 241 242 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; 245 251 } 246 252 247 253 int EEP_fwrite(FILEEEP *fp, byte *data, int *len) 248 254 { 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; 254 265 } 255 266 256 267 int EEP_fread(FILEEEP *fp) 257 268 { 258 FRESULTret;269 int ret; 259 270 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) 264 274 return -1; 265 275 … … 269 279 void EEP_fclose(FILEEEP *fp) 270 280 { 271 f_close(&fp->fp);281 close(fp->fd); 272 282 } 273 283 274 284 int EEP_fseek(FILEEEP *fp, int pos, int mode) 275 285 { 276 FRESULTret;286 int ret; 277 287 278 288 switch (mode){ 279 289 case EEP_SEEKTOP: 280 ret = f_lseek(&fp->fp, pos);290 ret = lseek(fp->fd, pos, SEEK_SET); 281 291 break; 282 292 case EEP_SEEKCUR: 283 ret = f_lseek(&fp->fp, fp->fp.fptr + pos);293 ret = lseek(fp->fd, pos, SEEK_CUR); 284 294 break; 285 295 case EEP_SEEKEND: 286 ret = f_lseek(&fp->fp, fp->fp.fsize - pos);296 ret = lseek(fp->fd, pos, SEEK_END); 287 297 break; 288 298 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; 297 307 } 298 308 299 309 int EEP_ffilesize(const char *str) 300 310 { 301 FRESULTret;302 FILINFOfno;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) 306 316 return 0; 307 317 308 return fno. fsize;318 return fno.st_size; 309 319 } 310 320 311 321 bool EEP_fEof(FILEEEP *fp) 312 322 { 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; 314 333 } 315 334 316 335 bool EEP_fexist(const char *path) 317 336 { 318 FRESULTret;319 FILINFOfno;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); 324 343 } 325 344 326 345 bool EEP_fcopy(const char *src, const char *dst) 327 346 { 328 FILfsrc, fdst;329 BYTEbuffer[512];330 FRESULT res;331 UINTbr, 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); 340 359 return false; 341 360 } 342 361 343 362 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; 346 366 break; 347 348 res = f_write(&fdst, buffer, br, &bw); 349 if ((res != FR_OK) || bw < br) 367 } 368 if (br == 0) 350 369 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; 357 382 } 358 383 359 384 bool EEP_fdelete(const char *path) 360 385 { 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 393 bool 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; 394 407 return true; 395 408 } 396 409 397 bool SD_ open(File *file, const char *path, int mode)398 { 399 FRESULTret;410 bool SD_rmdir(const char *path) 411 { 412 int ret; 400 413 401 414 if (!SD_begin()) 402 415 return false; 403 416 404 ret = f_open(&file->fp, path, mode);405 406 return ret == FR_OK;407 } 408 409 bool SD_r mdir(const char *path)410 { 411 FRESULTret;417 ret = rmdir(path); 418 419 return ret == 0; 420 } 421 422 bool SD_rename(const char *path1, const char *path2) 423 { 424 int ret; 412 425 413 426 if (!SD_begin()) 414 427 return false; 415 428 416 ret = f_unlink(path);417 418 return ret == FR_OK;419 } 420 421 bool SD_re name(const char *path1, const char *path2)422 { 423 FRESULTret;429 ret = rename(path1, path2); 430 431 return ret == 0; 432 } 433 434 bool SD_remove(const char *path) 435 { 436 int ret; 424 437 425 438 if (!SD_begin()) 426 439 return false; 427 440 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 446 bool SD_exists(const char *path) 447 { 448 int ret; 449 struct stat fno; 436 450 437 451 if (!SD_begin()) 438 452 return false; 439 453 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 459 bool SD_mkdir(const char *path) 460 { 461 int ret; 449 462 450 463 if (!SD_begin()) 451 464 return false; 452 465 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 471 int 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 482 void file_close(File *fp) 483 { 484 close(fp->fd); 485 } 486 487 int 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 499 int 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 511 void file_flush(File *fp) 512 { 513 fsync(fp->fd); 514 } 515 516 bool 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 525 int file_read(File *fp) 526 { 527 int ret; 514 528 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) 519 532 return -1; 520 533 … … 524 537 void system_reboot(int mode) 525 538 { 526 539 exit(mode); 527 540 } 528 541 … … 531 544 return 0; 532 545 } 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.