USBLocalFileSystem.lib testing program for LPC11U35
Dependencies: BaseDAP SWD USBDAP USBLocalFileSystem mbed DA14580 SWSPI W25X40BV
USB memory + Writer for DA14580 BLE chip + CMSIS-DAP debugger + USB-UART functions in one chip
One button input loads your application into DA14580 or DA14580 included BLE modules
Quote:
Current compatible hardware description can be found at https://github.com/K4zuki/da14580/releases/tag/MurataBLEr04
main.cpp@11:f6a0c6b3cc7d, 2016-07-07 (annotated)
- Committer:
- k4zuki
- Date:
- Thu Jul 07 01:49:59 2016 +0000
- Revision:
- 11:f6a0c6b3cc7d
- Parent:
- 10:4553fd77a832
- Child:
- 12:417eb27c4146
pinout match with HW-r0.4_aef7891;; libraries update
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
k4zuki | 0:eba731be11fb | 1 | #include "mbed.h" |
k4zuki | 0:eba731be11fb | 2 | #include "USBLocalFileSystem.h" |
k4zuki | 0:eba731be11fb | 3 | #include "BaseDAP.h" |
k4zuki | 0:eba731be11fb | 4 | #include "USB_HID.h" |
k4zuki | 3:6af8771e7f71 | 5 | #include "DA14580.h" |
k4zuki | 6:cb6984367a7a | 6 | #include "W25X40BV.h" |
k4zuki | 6:cb6984367a7a | 7 | #include "loader.h" |
k4zuki | 7:5b78247c45c2 | 8 | #include "mystorage.h" |
k4zuki | 11:f6a0c6b3cc7d | 9 | |
k4zuki | 11:f6a0c6b3cc7d | 10 | /** r0.4_aef7891 |
k4zuki | 6:cb6984367a7a | 11 | - UART - |
k4zuki | 6:cb6984367a7a | 12 | TX = P0_19 |
k4zuki | 6:cb6984367a7a | 13 | RX = P0_18 |
k4zuki | 6:cb6984367a7a | 14 | - SWD - |
k4zuki | 11:f6a0c6b3cc7d | 15 | SWDIO = P0_14 |
k4zuki | 11:f6a0c6b3cc7d | 16 | SWCLK = P0_13 |
k4zuki | 11:f6a0c6b3cc7d | 17 | NSRST = P0_2 |
k4zuki | 6:cb6984367a7a | 18 | TGT_RST = P1_19 |
k4zuki | 11:f6a0c6b3cc7d | 19 | - SPI Flash - |
k4zuki | 11:f6a0c6b3cc7d | 20 | MOSI = P0_16 |
k4zuki | 11:f6a0c6b3cc7d | 21 | MISO = P0_23 |
k4zuki | 11:f6a0c6b3cc7d | 22 | SCK = P0_15 |
k4zuki | 11:f6a0c6b3cc7d | 23 | CS = P1_15 |
k4zuki | 6:cb6984367a7a | 24 | - 580 - |
k4zuki | 11:f6a0c6b3cc7d | 25 | MOSI = P0_9 |
k4zuki | 11:f6a0c6b3cc7d | 26 | MISO = P0_7 |
k4zuki | 11:f6a0c6b3cc7d | 27 | SCK = P0_8 |
k4zuki | 11:f6a0c6b3cc7d | 28 | CS = P0_21 |
k4zuki | 6:cb6984367a7a | 29 | - LED - |
k4zuki | 11:f6a0c6b3cc7d | 30 | RED = P0_5 |
k4zuki | 11:f6a0c6b3cc7d | 31 | GREEN = P0_4 |
k4zuki | 11:f6a0c6b3cc7d | 32 | BLUE = P0_20 |
k4zuki | 6:cb6984367a7a | 33 | */ |
k4zuki | 1:484bd6db1378 | 34 | |
k4zuki | 6:cb6984367a7a | 35 | #undef LOADER_FILE |
k4zuki | 6:cb6984367a7a | 36 | #define LOADER_FILE "/local/loader.bin" |
k4zuki | 1:484bd6db1378 | 37 | |
k4zuki | 6:cb6984367a7a | 38 | #undef TARGET_FILE |
k4zuki | 3:6af8771e7f71 | 39 | #define TARGET_FILE "/local/target.bin" |
k4zuki | 3:6af8771e7f71 | 40 | |
k4zuki | 11:f6a0c6b3cc7d | 41 | /* |
k4zuki | 11:f6a0c6b3cc7d | 42 | - SWD - |
k4zuki | 11:f6a0c6b3cc7d | 43 | SWDIO = P0_14 |
k4zuki | 11:f6a0c6b3cc7d | 44 | SWCLK = P0_13 |
k4zuki | 11:f6a0c6b3cc7d | 45 | NSRST = P0_2 |
k4zuki | 11:f6a0c6b3cc7d | 46 | TGT_RST = P1_19 |
k4zuki | 11:f6a0c6b3cc7d | 47 | */ |
k4zuki | 11:f6a0c6b3cc7d | 48 | SWD swd(P0_14, P0_13, P0_2); // SWDIO,SWCLK,nRESET |
k4zuki | 11:f6a0c6b3cc7d | 49 | InterruptIn TGT_RST_IN(P1_19); |
k4zuki | 6:cb6984367a7a | 50 | volatile bool isISP = false; |
k4zuki | 11:f6a0c6b3cc7d | 51 | void TGT_RST_IN_int(); |
k4zuki | 6:cb6984367a7a | 52 | |
k4zuki | 11:f6a0c6b3cc7d | 53 | /* |
k4zuki | 11:f6a0c6b3cc7d | 54 | - LED - |
k4zuki | 11:f6a0c6b3cc7d | 55 | RED = P0_5 |
k4zuki | 11:f6a0c6b3cc7d | 56 | GREEN = P0_4 |
k4zuki | 11:f6a0c6b3cc7d | 57 | BLUE = P0_20 |
k4zuki | 11:f6a0c6b3cc7d | 58 | */ |
k4zuki | 11:f6a0c6b3cc7d | 59 | DigitalOut connected(P0_5); |
k4zuki | 11:f6a0c6b3cc7d | 60 | DigitalOut running(P0_4); |
k4zuki | 11:f6a0c6b3cc7d | 61 | |
k4zuki | 6:cb6984367a7a | 62 | /* |
k4zuki | 11:f6a0c6b3cc7d | 63 | - 580 - |
k4zuki | 11:f6a0c6b3cc7d | 64 | MOSI = P0_9 |
k4zuki | 11:f6a0c6b3cc7d | 65 | MISO = P0_7 |
k4zuki | 11:f6a0c6b3cc7d | 66 | SCK = P0_8 |
k4zuki | 11:f6a0c6b3cc7d | 67 | CS = P0_21 |
k4zuki | 6:cb6984367a7a | 68 | */ |
k4zuki | 11:f6a0c6b3cc7d | 69 | W25X40BV memory(P0_9, P0_7, P0_8, P0_21); // mosi, miso, sclk, cs |
k4zuki | 11:f6a0c6b3cc7d | 70 | /* |
k4zuki | 11:f6a0c6b3cc7d | 71 | - UART - |
k4zuki | 11:f6a0c6b3cc7d | 72 | TX = P0_19 |
k4zuki | 11:f6a0c6b3cc7d | 73 | RX = P0_18 |
k4zuki | 11:f6a0c6b3cc7d | 74 | */ |
k4zuki | 11:f6a0c6b3cc7d | 75 | DA14580 BLE(P0_19, P0_18, P0_2); // TX, RX, RESET |
k4zuki | 1:484bd6db1378 | 76 | |
k4zuki | 1:484bd6db1378 | 77 | int file_size( FILE *fp ); |
k4zuki | 1:484bd6db1378 | 78 | |
k4zuki | 0:eba731be11fb | 79 | class myDAP : public BaseDAP |
k4zuki | 0:eba731be11fb | 80 | { |
k4zuki | 0:eba731be11fb | 81 | public: |
k4zuki | 0:eba731be11fb | 82 | myDAP(SWD* swd):BaseDAP(swd) {}; |
k4zuki | 0:eba731be11fb | 83 | virtual void infoLED(int select, int value) { |
k4zuki | 0:eba731be11fb | 84 | switch(select) { |
k4zuki | 0:eba731be11fb | 85 | case 0: |
k4zuki | 0:eba731be11fb | 86 | connected = value^1; |
k4zuki | 0:eba731be11fb | 87 | running = 1; |
k4zuki | 0:eba731be11fb | 88 | break; |
k4zuki | 0:eba731be11fb | 89 | case 1: |
k4zuki | 0:eba731be11fb | 90 | running = value^1; |
k4zuki | 0:eba731be11fb | 91 | connected = 1; |
k4zuki | 0:eba731be11fb | 92 | break; |
k4zuki | 0:eba731be11fb | 93 | } |
k4zuki | 0:eba731be11fb | 94 | } |
k4zuki | 0:eba731be11fb | 95 | }; |
k4zuki | 0:eba731be11fb | 96 | |
k4zuki | 11:f6a0c6b3cc7d | 97 | /* |
k4zuki | 11:f6a0c6b3cc7d | 98 | - SPI Flash - |
k4zuki | 11:f6a0c6b3cc7d | 99 | MOSI = P0_16 |
k4zuki | 11:f6a0c6b3cc7d | 100 | MISO = P0_23 |
k4zuki | 11:f6a0c6b3cc7d | 101 | SCK = P0_15 |
k4zuki | 11:f6a0c6b3cc7d | 102 | CS = P1_15 |
k4zuki | 11:f6a0c6b3cc7d | 103 | */ |
k4zuki | 11:f6a0c6b3cc7d | 104 | MyStorage LocalFS(P0_16, P0_23, P0_15, P1_15); // mosi, miso, sclk, cs |
k4zuki | 11:f6a0c6b3cc7d | 105 | //MyStorage LocalFS(P0_15, P0_13, P0_14, P0_16); |
k4zuki | 0:eba731be11fb | 106 | int main() |
k4zuki | 0:eba731be11fb | 107 | { |
k4zuki | 11:f6a0c6b3cc7d | 108 | USBLocalFileSystem* usb_local = new USBLocalFileSystem(&LocalFS, "local"); //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name |
k4zuki | 11:f6a0c6b3cc7d | 109 | |
k4zuki | 10:4553fd77a832 | 110 | USB_HID* _hid = usb_local->getUsb()->getHID(); |
k4zuki | 10:4553fd77a832 | 111 | HID_REPORT recv_report; |
k4zuki | 10:4553fd77a832 | 112 | HID_REPORT send_report; |
k4zuki | 10:4553fd77a832 | 113 | myDAP* dap = new myDAP(&swd); |
k4zuki | 10:4553fd77a832 | 114 | |
k4zuki | 6:cb6984367a7a | 115 | // USBLocalFileSystem* usb_local = new USBLocalFileSystem(P0_8, P0_10, P0_9, P0_7, "local"); //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name |
k4zuki | 11:f6a0c6b3cc7d | 116 | // USBLocalFileSystem* usb_local = new USBLocalFileSystem(&LocalFS, "local"); //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name |
k4zuki | 6:cb6984367a7a | 117 | running.write(1); |
k4zuki | 11:f6a0c6b3cc7d | 118 | TGT_RST_IN.mode(PullUp); |
k4zuki | 11:f6a0c6b3cc7d | 119 | memory.frequency(SPI_FREQ); |
k4zuki | 6:cb6984367a7a | 120 | char hex[]="0123456789ABCDEF"; //DEBUG |
k4zuki | 6:cb6984367a7a | 121 | |
k4zuki | 11:f6a0c6b3cc7d | 122 | int appleCount = 10; |
k4zuki | 11:f6a0c6b3cc7d | 123 | char buf[ 1024 ]; |
k4zuki | 11:f6a0c6b3cc7d | 124 | |
k4zuki | 6:cb6984367a7a | 125 | int read = 0; |
k4zuki | 10:4553fd77a832 | 126 | int result = 0; |
k4zuki | 11:f6a0c6b3cc7d | 127 | TGT_RST_IN.mode(PullUp); |
k4zuki | 11:f6a0c6b3cc7d | 128 | TGT_RST_IN.fall(&TGT_RST_IN_int); |
k4zuki | 6:cb6984367a7a | 129 | |
k4zuki | 6:cb6984367a7a | 130 | bool _hidresult; |
k4zuki | 10:4553fd77a832 | 131 | usb_local->lock(false); |
k4zuki | 0:eba731be11fb | 132 | while(1) { |
k4zuki | 0:eba731be11fb | 133 | usb_local->lock(true); |
k4zuki | 0:eba731be11fb | 134 | usb_local->remount(); |
k4zuki | 6:cb6984367a7a | 135 | connected.write(1); |
k4zuki | 3:6af8771e7f71 | 136 | |
k4zuki | 6:cb6984367a7a | 137 | if(isISP) { |
k4zuki | 11:f6a0c6b3cc7d | 138 | sprintf( buf, "I have %d apples.\r\n", appleCount ); |
k4zuki | 11:f6a0c6b3cc7d | 139 | char *ptr = buf; |
k4zuki | 11:f6a0c6b3cc7d | 140 | while( *ptr != (char)0 ) { |
k4zuki | 11:f6a0c6b3cc7d | 141 | usb_local->putc(*ptr++); |
k4zuki | 11:f6a0c6b3cc7d | 142 | } |
k4zuki | 11:f6a0c6b3cc7d | 143 | sprintf( &buf[0], "\r\nWriting "TARGET_FILE" into SPI flash" ); |
k4zuki | 11:f6a0c6b3cc7d | 144 | ptr = &buf[0]; |
k4zuki | 11:f6a0c6b3cc7d | 145 | while( *ptr != (char)0 ) { |
k4zuki | 11:f6a0c6b3cc7d | 146 | usb_local->putc(*ptr++); |
k4zuki | 11:f6a0c6b3cc7d | 147 | } |
k4zuki | 11:f6a0c6b3cc7d | 148 | // usb_local->puts("\n\r"); |
k4zuki | 11:f6a0c6b3cc7d | 149 | // usb_local->puts("Writing "TARGET_FILE" into SPI flash"); |
k4zuki | 11:f6a0c6b3cc7d | 150 | // BLE.copy_to_flash(&memory); |
k4zuki | 11:f6a0c6b3cc7d | 151 | |
k4zuki | 11:f6a0c6b3cc7d | 152 | int _filesize; |
k4zuki | 11:f6a0c6b3cc7d | 153 | uint8_t Headerbuffer[8] = {0x70,0x50,0x00,0x00,0x00,0x00,0x00,0x00}; |
k4zuki | 11:f6a0c6b3cc7d | 154 | char _data[256]; |
k4zuki | 11:f6a0c6b3cc7d | 155 | FILE* _fp = fopen(TARGET_FILE, "r" ); |
k4zuki | 11:f6a0c6b3cc7d | 156 | if (_fp) { |
k4zuki | 11:f6a0c6b3cc7d | 157 | BLE.init(); |
k4zuki | 11:f6a0c6b3cc7d | 158 | //erase 64KByte |
k4zuki | 11:f6a0c6b3cc7d | 159 | memory.block32Erase(0); |
k4zuki | 11:f6a0c6b3cc7d | 160 | memory.block32Erase(1); |
k4zuki | 11:f6a0c6b3cc7d | 161 | |
k4zuki | 11:f6a0c6b3cc7d | 162 | _filesize = file_size(_fp); |
k4zuki | 11:f6a0c6b3cc7d | 163 | usb_local->puts("\n\r"); |
k4zuki | 11:f6a0c6b3cc7d | 164 | usb_local->puts("filesize: "); |
k4zuki | 11:f6a0c6b3cc7d | 165 | read= 0x0f& (_filesize>>12); |
k4zuki | 11:f6a0c6b3cc7d | 166 | usb_local->putc(hex[read]); |
k4zuki | 11:f6a0c6b3cc7d | 167 | read= 0x0f& (_filesize>>8); |
k4zuki | 11:f6a0c6b3cc7d | 168 | usb_local->putc(hex[read]); |
k4zuki | 11:f6a0c6b3cc7d | 169 | read= 0x0f& (_filesize>>4); |
k4zuki | 11:f6a0c6b3cc7d | 170 | usb_local->putc(hex[read]); |
k4zuki | 11:f6a0c6b3cc7d | 171 | read= 0x0f& (_filesize); |
k4zuki | 11:f6a0c6b3cc7d | 172 | usb_local->putc(hex[read]); |
k4zuki | 11:f6a0c6b3cc7d | 173 | usb_local->puts("\n\r"); |
k4zuki | 11:f6a0c6b3cc7d | 174 | Headerbuffer[6]= (uint8_t)( (_filesize >> 8) & 0xff); |
k4zuki | 11:f6a0c6b3cc7d | 175 | Headerbuffer[7]= (uint8_t)(_filesize & 0xff); |
k4zuki | 11:f6a0c6b3cc7d | 176 | |
k4zuki | 11:f6a0c6b3cc7d | 177 | for(int i=0; i<8; i++) { |
k4zuki | 11:f6a0c6b3cc7d | 178 | read= 0x0f& (Headerbuffer[i]>>4); |
k4zuki | 11:f6a0c6b3cc7d | 179 | usb_local->putc(hex[read]); |
k4zuki | 11:f6a0c6b3cc7d | 180 | read= 0x0f& (Headerbuffer[i]); |
k4zuki | 11:f6a0c6b3cc7d | 181 | usb_local->putc(hex[read]); |
k4zuki | 11:f6a0c6b3cc7d | 182 | usb_local->puts("\n\r"); |
k4zuki | 11:f6a0c6b3cc7d | 183 | } |
k4zuki | 11:f6a0c6b3cc7d | 184 | |
k4zuki | 11:f6a0c6b3cc7d | 185 | memory.writeStream(0, Headerbuffer, 8); |
k4zuki | 11:f6a0c6b3cc7d | 186 | wait_ms(1); |
k4zuki | 11:f6a0c6b3cc7d | 187 | memory.readStream(0, (uint8_t*)_data, 8); |
k4zuki | 11:f6a0c6b3cc7d | 188 | |
k4zuki | 11:f6a0c6b3cc7d | 189 | for(int i=0; i<8; i++) { |
k4zuki | 11:f6a0c6b3cc7d | 190 | read= 0x0f& (_data[i]>>4); |
k4zuki | 11:f6a0c6b3cc7d | 191 | usb_local->putc(hex[read]); |
k4zuki | 11:f6a0c6b3cc7d | 192 | read= 0x0f& (_data[i]); |
k4zuki | 11:f6a0c6b3cc7d | 193 | usb_local->putc(hex[read]); |
k4zuki | 11:f6a0c6b3cc7d | 194 | usb_local->puts("\n\r"); |
k4zuki | 11:f6a0c6b3cc7d | 195 | } |
k4zuki | 11:f6a0c6b3cc7d | 196 | |
k4zuki | 11:f6a0c6b3cc7d | 197 | if(_filesize >= 248) { |
k4zuki | 11:f6a0c6b3cc7d | 198 | fgets(_data, 248,_fp); |
k4zuki | 11:f6a0c6b3cc7d | 199 | memory.writeStream(8, (uint8_t*)_data, (248)); |
k4zuki | 11:f6a0c6b3cc7d | 200 | _filesize -= (256-8); |
k4zuki | 11:f6a0c6b3cc7d | 201 | } else { |
k4zuki | 11:f6a0c6b3cc7d | 202 | fgets(_data, _filesize ,_fp); |
k4zuki | 11:f6a0c6b3cc7d | 203 | memory.writeStream(8, (uint8_t*)_data, (_filesize)); |
k4zuki | 11:f6a0c6b3cc7d | 204 | _filesize = 0; |
k4zuki | 11:f6a0c6b3cc7d | 205 | } |
k4zuki | 11:f6a0c6b3cc7d | 206 | |
k4zuki | 11:f6a0c6b3cc7d | 207 | int i=1; |
k4zuki | 11:f6a0c6b3cc7d | 208 | while(_filesize >= 256) { |
k4zuki | 11:f6a0c6b3cc7d | 209 | fgets(_data, (256), _fp); |
k4zuki | 11:f6a0c6b3cc7d | 210 | memory.writeStream(256*i, (uint8_t*)_data, (256)); |
k4zuki | 11:f6a0c6b3cc7d | 211 | usb_local->putc(hex[i%10]); |
k4zuki | 11:f6a0c6b3cc7d | 212 | i++; |
k4zuki | 11:f6a0c6b3cc7d | 213 | _filesize -= (256); |
k4zuki | 11:f6a0c6b3cc7d | 214 | } |
k4zuki | 11:f6a0c6b3cc7d | 215 | if(_filesize > 0) { |
k4zuki | 11:f6a0c6b3cc7d | 216 | fgets(_data, _filesize, _fp); |
k4zuki | 11:f6a0c6b3cc7d | 217 | memory.writeStream(256*i, (uint8_t*)_data, (_filesize)); |
k4zuki | 11:f6a0c6b3cc7d | 218 | } |
k4zuki | 11:f6a0c6b3cc7d | 219 | } |
k4zuki | 11:f6a0c6b3cc7d | 220 | fclose(_fp); |
k4zuki | 11:f6a0c6b3cc7d | 221 | #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler |
k4zuki | 11:f6a0c6b3cc7d | 222 | #warning "free(_fp)" |
k4zuki | 11:f6a0c6b3cc7d | 223 | free(_fp); |
k4zuki | 11:f6a0c6b3cc7d | 224 | #endif |
k4zuki | 11:f6a0c6b3cc7d | 225 | |
k4zuki | 6:cb6984367a7a | 226 | usb_local->puts("\n\r"); |
k4zuki | 6:cb6984367a7a | 227 | usb_local->puts("Try BLE.load(): "); |
k4zuki | 6:cb6984367a7a | 228 | running.write(0); |
k4zuki | 6:cb6984367a7a | 229 | result = BLE.load(); |
k4zuki | 6:cb6984367a7a | 230 | running.write(1); |
k4zuki | 6:cb6984367a7a | 231 | usb_local->putc(result); |
k4zuki | 11:f6a0c6b3cc7d | 232 | usb_local->putc(0x07); //bell |
k4zuki | 6:cb6984367a7a | 233 | usb_local->puts("\n\r"); |
k4zuki | 6:cb6984367a7a | 234 | isISP = false; |
k4zuki | 11:f6a0c6b3cc7d | 235 | /* |
k4zuki | 10:4553fd77a832 | 236 | while(BLE._ble.readable()) { |
k4zuki | 6:cb6984367a7a | 237 | usb_local->putc(BLE._ble.getc()); |
k4zuki | 0:eba731be11fb | 238 | } |
k4zuki | 11:f6a0c6b3cc7d | 239 | */ |
k4zuki | 10:4553fd77a832 | 240 | } else { |
k4zuki | 11:f6a0c6b3cc7d | 241 | ; |
k4zuki | 11:f6a0c6b3cc7d | 242 | // usb_local->putc('.'); |
k4zuki | 0:eba731be11fb | 243 | } |
k4zuki | 0:eba731be11fb | 244 | |
k4zuki | 10:4553fd77a832 | 245 | usb_local->lock(false); |
k4zuki | 6:cb6984367a7a | 246 | |
k4zuki | 11:f6a0c6b3cc7d | 247 | // int i=10; |
k4zuki | 11:f6a0c6b3cc7d | 248 | // while(i>0) { |
k4zuki | 11:f6a0c6b3cc7d | 249 | // i--; |
k4zuki | 11:f6a0c6b3cc7d | 250 | _hidresult = _hid->readNB(&recv_report); |
k4zuki | 11:f6a0c6b3cc7d | 251 | if( _hidresult ) { |
k4zuki | 11:f6a0c6b3cc7d | 252 | dap->Command(recv_report.data, send_report.data); |
k4zuki | 11:f6a0c6b3cc7d | 253 | send_report.length = 64; |
k4zuki | 11:f6a0c6b3cc7d | 254 | _hid->send(&send_report); |
k4zuki | 11:f6a0c6b3cc7d | 255 | } |
k4zuki | 11:f6a0c6b3cc7d | 256 | if(BLE._ble.readable()) { |
k4zuki | 11:f6a0c6b3cc7d | 257 | usb_local->putc(BLE._ble.getc()); |
k4zuki | 11:f6a0c6b3cc7d | 258 | } |
k4zuki | 11:f6a0c6b3cc7d | 259 | wait_us(1000); |
k4zuki | 11:f6a0c6b3cc7d | 260 | // } |
k4zuki | 6:cb6984367a7a | 261 | connected = 0; |
k4zuki | 0:eba731be11fb | 262 | } |
k4zuki | 1:484bd6db1378 | 263 | } |
k4zuki | 1:484bd6db1378 | 264 | |
k4zuki | 1:484bd6db1378 | 265 | int file_size( FILE *fp ) |
k4zuki | 1:484bd6db1378 | 266 | { |
k4zuki | 1:484bd6db1378 | 267 | int size; |
k4zuki | 1:484bd6db1378 | 268 | |
k4zuki | 1:484bd6db1378 | 269 | fseek( fp, 0, SEEK_END ); // seek to end of file |
k4zuki | 1:484bd6db1378 | 270 | size = ftell( fp ); // get current file pointer |
k4zuki | 1:484bd6db1378 | 271 | fseek( fp, 0, SEEK_SET ); // seek back to beginning of file |
k4zuki | 1:484bd6db1378 | 272 | |
k4zuki | 1:484bd6db1378 | 273 | return size; |
k4zuki | 1:484bd6db1378 | 274 | } |
k4zuki | 1:484bd6db1378 | 275 | |
k4zuki | 11:f6a0c6b3cc7d | 276 | void TGT_RST_IN_int() |
k4zuki | 3:6af8771e7f71 | 277 | { |
k4zuki | 6:cb6984367a7a | 278 | isISP = true; |
k4zuki | 1:484bd6db1378 | 279 | } |