Kazuki Yamamoto / Mbed 2 deprecated 11u35_usbLocalFilesystem Featured

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

Committer:
k4zuki
Date:
Wed Aug 19 13:23:10 2015 +0000
Revision:
2:228291df190e
11U35 CMSIS-DAP; add DA14580.h/.cpp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
k4zuki 2:228291df190e 1 #include "mbed.h"
k4zuki 2:228291df190e 2 #include "DA14580.h"
k4zuki 2:228291df190e 3
k4zuki 2:228291df190e 4 /*
k4zuki 2:228291df190e 5
k4zuki 2:228291df190e 6 DigitalOut myled(LED1);
k4zuki 2:228291df190e 7
k4zuki 2:228291df190e 8 Serial pc(USBTX,USBRX);
k4zuki 2:228291df190e 9 Serial ble(p28,p27);
k4zuki 2:228291df190e 10
k4zuki 2:228291df190e 11 LocalFileSystem local( "local" );
k4zuki 2:228291df190e 12
k4zuki 2:228291df190e 13 #define SOURCE_FILE "/local/_loader"
k4zuki 2:228291df190e 14 #define TARGET_FILE "/local/_bin"
k4zuki 2:228291df190e 15
k4zuki 2:228291df190e 16 int file_size( FILE *fp );
k4zuki 2:228291df190e 17 enum XMODEM_CONST{
k4zuki 2:228291df190e 18 SOH = (0x01),
k4zuki 2:228291df190e 19 STX = (0x02),
k4zuki 2:228291df190e 20 EOT = (0x04),
k4zuki 2:228291df190e 21 ACK = (0x06),
k4zuki 2:228291df190e 22 DLE = (0x10),
k4zuki 2:228291df190e 23 NAK = (0x15),
k4zuki 2:228291df190e 24 CAN = (0x18),
k4zuki 2:228291df190e 25 };
k4zuki 2:228291df190e 26 */
k4zuki 2:228291df190e 27 DA14580::DA14580( PinName TX, PinName RX, PinName RESET ) : _ble(TX,RX), _reset(RESET)
k4zuki 2:228291df190e 28 {
k4zuki 2:228291df190e 29 init();
k4zuki 2:228291df190e 30 ;
k4zuki 2:228291df190e 31 }
k4zuki 2:228291df190e 32
k4zuki 2:228291df190e 33 DA14580::DA14580( Serial &ble, PinName RESET ) : _ble(ble), _reset(RESET)
k4zuki 2:228291df190e 34 {
k4zuki 2:228291df190e 35 init();
k4zuki 2:228291df190e 36 ;
k4zuki 2:228291df190e 37 }
k4zuki 2:228291df190e 38
k4zuki 2:228291df190e 39 void DA14580::init(){
k4zuki 2:228291df190e 40
k4zuki 2:228291df190e 41 _ble.baud(57600);
k4zuki 2:228291df190e 42 _crc = 0x00;
k4zuki 2:228291df190e 43 _recieve = 0;
k4zuki 2:228291df190e 44 _read = 0;
k4zuki 2:228291df190e 45 _filesize = 0;
k4zuki 2:228291df190e 46 _reset = 0;
k4zuki 2:228291df190e 47 _timeout = 100;
k4zuki 2:228291df190e 48 _status = SUCCESS;
k4zuki 2:228291df190e 49 }
k4zuki 2:228291df190e 50
k4zuki 2:228291df190e 51 int DA14580::load(){
k4zuki 2:228291df190e 52
k4zuki 2:228291df190e 53 _status = SUCCESS;
k4zuki 2:228291df190e 54
k4zuki 2:228291df190e 55 _fp = fopen( LOADER_FILE, "rb" );
k4zuki 2:228291df190e 56 if (_fp) {
k4zuki 2:228291df190e 57 _filesize = file_size(_fp);
k4zuki 2:228291df190e 58 // pc.printf("0x%04X\n\r",_filesize);
k4zuki 2:228291df190e 59 while((_timeout--) >0){
k4zuki 2:228291df190e 60 if( _ble.readable() ){
k4zuki 2:228291df190e 61 _recieve = _ble.getc();
k4zuki 2:228291df190e 62 if(_recieve == STX) {
k4zuki 2:228291df190e 63 _ble.putc(SOH);
k4zuki 2:228291df190e 64 // pc.putc('!');
k4zuki 2:228291df190e 65 break;
k4zuki 2:228291df190e 66 }
k4zuki 2:228291df190e 67 }
k4zuki 2:228291df190e 68 }
k4zuki 2:228291df190e 69 if(_timeout <= 0){
k4zuki 2:228291df190e 70 _status = E_TIMEOUT_STX;
k4zuki 2:228291df190e 71 }else{
k4zuki 2:228291df190e 72 _timeout = 100;
k4zuki 2:228291df190e 73 _ble.putc(_filesize & 0xff);
k4zuki 2:228291df190e 74 _ble.putc( (_filesize >> 8) & 0xff);
k4zuki 2:228291df190e 75 while((_timeout--) >0){
k4zuki 2:228291df190e 76 if( _ble.readable() ){
k4zuki 2:228291df190e 77 _recieve = _ble.getc();
k4zuki 2:228291df190e 78 if(_recieve == ACK) {
k4zuki 2:228291df190e 79 // pc.printf("ok!\n\r");
k4zuki 2:228291df190e 80 break;
k4zuki 2:228291df190e 81 }
k4zuki 2:228291df190e 82 }
k4zuki 2:228291df190e 83 }
k4zuki 2:228291df190e 84 if(_timeout <= 0){
k4zuki 2:228291df190e 85 _status = E_ACK_NOT_RETURNED;
k4zuki 2:228291df190e 86 }else{
k4zuki 2:228291df190e 87 _timeout = 100;
k4zuki 2:228291df190e 88 for(int i = 0; i < _filesize; i++){
k4zuki 2:228291df190e 89 _read = getc(_fp);
k4zuki 2:228291df190e 90 _ble.putc(_read);
k4zuki 2:228291df190e 91 _crc = _crc ^ _read;
k4zuki 2:228291df190e 92 if((i % 16) == 0){
k4zuki 2:228291df190e 93 // pc.printf("\n\r");
k4zuki 2:228291df190e 94 }
k4zuki 2:228291df190e 95 // pc.printf("%02X ",_read);
k4zuki 2:228291df190e 96 }
k4zuki 2:228291df190e 97 // pc.printf("\n\r0x%02X ",_crc);
k4zuki 2:228291df190e 98 while((_timeout--) >0){
k4zuki 2:228291df190e 99 if( _ble.readable() ){
k4zuki 2:228291df190e 100 _recieve = _ble.getc();
k4zuki 2:228291df190e 101 if(_recieve == _crc) {
k4zuki 2:228291df190e 102 _ble.putc(ACK);
k4zuki 2:228291df190e 103 // pc.printf("-=-=DONE=-=-\n\r");
k4zuki 2:228291df190e 104 break;
k4zuki 2:228291df190e 105 }
k4zuki 2:228291df190e 106 }
k4zuki 2:228291df190e 107 }
k4zuki 2:228291df190e 108 if(_timeout <= 0){
k4zuki 2:228291df190e 109 _status = E_ACK_NOT_RETURNED;
k4zuki 2:228291df190e 110 }
k4zuki 2:228291df190e 111 }
k4zuki 2:228291df190e 112 }
k4zuki 2:228291df190e 113 fclose(_fp);
k4zuki 2:228291df190e 114 #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler
k4zuki 2:228291df190e 115 free(_fp);
k4zuki 2:228291df190e 116 #endif
k4zuki 2:228291df190e 117 }else{
k4zuki 2:228291df190e 118 _status = E_FILE_NOT_FOUND;
k4zuki 2:228291df190e 119 }
k4zuki 2:228291df190e 120 return _status;
k4zuki 2:228291df190e 121
k4zuki 2:228291df190e 122
k4zuki 2:228291df190e 123 }
k4zuki 2:228291df190e 124
k4zuki 2:228291df190e 125 int DA14580::file_size( FILE *fp )
k4zuki 2:228291df190e 126 {
k4zuki 2:228291df190e 127 int size;
k4zuki 2:228291df190e 128
k4zuki 2:228291df190e 129 fseek( fp, 0, SEEK_END ); // seek to end of file
k4zuki 2:228291df190e 130 size = ftell( fp ); // get current file pointer
k4zuki 2:228291df190e 131 fseek( fp, 0, SEEK_SET ); // seek back to beginning of file
k4zuki 2:228291df190e 132
k4zuki 2:228291df190e 133 return size;
k4zuki 2:228291df190e 134 }
k4zuki 2:228291df190e 135
k4zuki 2:228291df190e 136 /*
k4zuki 2:228291df190e 137 int main()
k4zuki 2:228291df190e 138 {
k4zuki 2:228291df190e 139 uint8_t recieve;
k4zuki 2:228291df190e 140 uint8_t read;
k4zuki 2:228291df190e 141 int filesize=0;
k4zuki 2:228291df190e 142 FILE* fp;
k4zuki 2:228291df190e 143 ble.baud(57600);
k4zuki 2:228291df190e 144 int crc=0x00;
k4zuki 2:228291df190e 145
k4zuki 2:228291df190e 146 fp = fopen( SOURCE_FILE, "rb" );
k4zuki 2:228291df190e 147 if (fp) {
k4zuki 2:228291df190e 148 filesize=file_size(fp);
k4zuki 2:228291df190e 149 pc.printf("0x%04X\n\r",filesize);
k4zuki 2:228291df190e 150 }
k4zuki 2:228291df190e 151
k4zuki 2:228291df190e 152 while(1) {
k4zuki 2:228291df190e 153 recieve=ble.getc();
k4zuki 2:228291df190e 154 if(recieve == STX) {
k4zuki 2:228291df190e 155 ble.putc(SOH);
k4zuki 2:228291df190e 156 pc.putc('!');
k4zuki 2:228291df190e 157 break;
k4zuki 2:228291df190e 158 }
k4zuki 2:228291df190e 159 }
k4zuki 2:228291df190e 160 ble.putc(filesize&0xff);
k4zuki 2:228291df190e 161 ble.putc( (filesize>>8)&0xff);
k4zuki 2:228291df190e 162 while(1) {
k4zuki 2:228291df190e 163 recieve=ble.getc();
k4zuki 2:228291df190e 164 if(recieve == ACK) {
k4zuki 2:228291df190e 165 pc.printf("ok!\n\r");
k4zuki 2:228291df190e 166 // ble.putc(0x01);
k4zuki 2:228291df190e 167 break;
k4zuki 2:228291df190e 168 }
k4zuki 2:228291df190e 169 }
k4zuki 2:228291df190e 170 for(int i=0;i<filesize;i++){
k4zuki 2:228291df190e 171 read=getc(fp);
k4zuki 2:228291df190e 172 ble.putc(read);
k4zuki 2:228291df190e 173 crc=crc^read;
k4zuki 2:228291df190e 174 if((i%16)==0){
k4zuki 2:228291df190e 175 pc.printf("\n\r");
k4zuki 2:228291df190e 176 }
k4zuki 2:228291df190e 177 pc.printf("%02X ",read);
k4zuki 2:228291df190e 178 }
k4zuki 2:228291df190e 179 pc.printf("\n\r0x%02X ",crc);
k4zuki 2:228291df190e 180 while(1) {
k4zuki 2:228291df190e 181 recieve=ble.getc();
k4zuki 2:228291df190e 182 if(recieve == crc) {
k4zuki 2:228291df190e 183 ble.putc(ACK);
k4zuki 2:228291df190e 184 pc.printf("-=-=DONE=-=-\n\r");
k4zuki 2:228291df190e 185 break;
k4zuki 2:228291df190e 186 }
k4zuki 2:228291df190e 187 }
k4zuki 2:228291df190e 188 fclose(fp);
k4zuki 2:228291df190e 189 myled = 1;
k4zuki 2:228291df190e 190 while(1) {
k4zuki 2:228291df190e 191 recieve=ble.getc();
k4zuki 2:228291df190e 192 pc.putc(recieve);
k4zuki 2:228291df190e 193 wait_ms(20);
k4zuki 2:228291df190e 194 }
k4zuki 2:228291df190e 195 }
k4zuki 2:228291df190e 196
k4zuki 2:228291df190e 197 */