void execute_sensor_measurement() { #ifdef PLATFORM_EFM32GG_STK3700 float internal_temp = hw_get_internal_temperature(); lcd_write_temperature(internal_temp*10, 1); uint32_t vdd = hw_get_battery(); fs_write_file(SENSOR_FILE_ID, 0, (uint8_t*)&internal_temp, sizeof(internal_temp)); // File 0x40 is configured to use D7AActP trigger an ALP action which broadcasts this file data on Access Class 0 #endif #if (defined PLATFORM_EFM32HG_STK3400 || defined PLATFORM_EZR32LG_WSTK6200A) char str[30]; float internal_temp = hw_get_internal_temperature(); sprintf(str, "Int T: %2d.%d C", (int)internal_temp, (int)(internal_temp*10)%10); lcd_write_line(2,str); log_print_string(str); uint32_t rhData; uint32_t tData; getHumidityAndTemperature(&rhData, &tData); sprintf(str, "Ext T: %d.%d C", (tData/1000), (tData%1000)/100); lcd_write_line(3,str); log_print_string(str); sprintf(str, "Ext H: %d.%d", (rhData/1000), (rhData%1000)/100); lcd_write_line(4,str); log_print_string(str); uint32_t vdd = hw_get_battery(); sprintf(str, "Batt %d mV", vdd); lcd_write_line(5,str); log_print_string(str); //TODO: put sensor values in array uint8_t sensor_values[8]; uint16_t *pointer = (uint16_t*) sensor_values; *pointer++ = (uint16_t) (internal_temp * 10); *pointer++ = (uint16_t) (tData /100); *pointer++ = (uint16_t) (rhData /100); *pointer++ = (uint16_t) (vdd /10); fs_write_file(SENSOR_FILE_ID, 0, (uint8_t*)&sensor_values,8); #endif timer_post_task_delay(&execute_sensor_measurement, SENSOR_UPDATE); }
int32_t mk_WriteFileResponse(FileServerMessage** fsm){ WriteFileRequest* wfr = (WriteFileRequest*)((*fsm)->payload); fs_write_file(wfr->handle, wfr->offset, wfr->length, wfr->data); /*keine Informationen über Response-Nachricht*/ return 0; }
void execute_sensor_measurement() { #if HW_NUM_LEDS >= 1 led_toggle(0); #endif // use the counter value for now instead of 'real' sensor uint32_t val = timer_get_counter_value(); // file 0x40 is configured to use D7AActP trigger an ALP action which // broadcasts this file data on Access Class 0 fs_write_file(0x40, 0, (uint8_t*)&val, 4); timer_post_task_delay(&execute_sensor_measurement, REPORTING_INTERVAL_TICKS); }
/* Writes the content of the buffer in the file descriptor.*/ int fd_write(int fd, char * buffer, int block_size) { switch(files[fd].type) { case _FD_TTY: if(block_size == 1 && *buffer != EOF) { video_write_c(buffer); } else if (*buffer != EOF){ video_write(buffer, block_size); } break; case _FD_FIFO: return fifo_write((int)files[fd].data, buffer, block_size); break; case _FD_FILE: return fs_write_file((int)files[fd].data, buffer, block_size); break; default: return -1; } return 1; }
// Used to copy a file unsigned int fs_cp(char * name, char * newname, int from_inode, int to_inode) { int i1 = fs_open_file(name, from_inode, O_RD, EXT2_S_IFREG); if(i1 < 0) { return i1; // If there's an error with the first name then there's nothing to do actually. } inode_read(i1, &n); int i2; if(!(n.mode & EXT2_S_IFDIR)) { i2 = fs_open_file(newname, to_inode, O_WR, n.mode & (~EXT2_S_IFDIR)); inode_read(i1, &n); if(i2 < 0) { i2 = fs_open_file(newname, to_inode, O_WR | O_NEW , n.mode & (~EXT2_S_IFDIR)); } if(i2 < 0) { return ERR_EXISTS; } } else { i2 = fs_mkdir(newname, to_inode); if(i2 < 0) { return ERR_EXISTS; } } inode_read(i1, &n); block data; unsigned long offset = 0; while(fs_read_file(i1, (void *) &data, sizeof(block), &offset) > 0) { if(n.mode & EXT2_S_IFDIR) { int off = 0; dir_op_offset = 0; dir_entry * old_dot = NULL; dir_entry * dot = iterate_dir_entry(&data); // Iterates dir entries while (dot != NULL) { if (dot == NULL) { break; } else { if (dot->name_len > 0 && dot->inode != i1 && dot->inode != n._dir_inode && i2 != 0) { int _cp = fs_cp(dot->name, dot->name, i1, i2); if(_cp < 0) { return _cp; } off = dir_op_offset; dot->name_len = 0; dir_op_offset = off; } } old_dot = dot; dot = iterate_dir_entry(&data); } inode_read(i1, &n); } else { fs_write_file(i2, (void *)&data, sizeof(block)); } } return i2; }
int main (int argc, char **argv) { srand(time(NULL)); unsigned char test_data[TEST_DATA_SIZE] = {0}; unsigned char cmp_test_data[TEST_DATA_SIZE] = {0}; createRandomData(test_data,TEST_DATA_SIZE); memcpy(&cmp_test_data, &test_data,TEST_DATA_SIZE); int PASSES = 0; assert (fs_mount() >= 0); assert (fs_create_file("/testDir", DIR_FILE) >= 0); assert (fs_unmount() >= 0); PASS_OK assert (fs_mount() >= 0); assert (fs_create_file("/testDir", DIR_FILE) >= 0); assert (fs_create_file("/testDir/checkMe.txt", REG_FILE) >= 0); assert (fs_unmount() >= 0); PASS_OK assert (fs_mount() >= 0); assert (fs_create_file("/testDir", DIR_FILE) >= 0); assert (fs_create_file("/testDir/checkMe.txt", REG_FILE) >= 0); assert (fs_write_file("/testDir/checkMe.txt", test_data, TEST_DATA_SIZE) >= 0); assert (fs_unmount() >= 0); PASS_OK unsigned char readResults[TEST_DATA_SIZE] = {0}; assert (fs_mount() >= 0); assert (fs_create_file("/testDir", DIR_FILE) >= 0); assert (fs_create_file("/testDir/checkMe.txt", REG_FILE) >= 0); assert (fs_write_file("/testDir/checkMe.txt", test_data, TEST_DATA_SIZE) >= 0); assert (fs_read_file("/testDir/checkMe.txt", readResults, TEST_DATA_SIZE) >= 0); int i = 0; for (;i < TEST_DATA_SIZE; ++i) { assert(readResults[i] == cmp_test_data[i]); } assert (fs_unmount() >= 0); PASS_OK assert (fs_mount() >= 0); assert (fs_create_file("/testDir", DIR_FILE) >= 0); assert (fs_create_file("/testDir/checkMe.txt", REG_FILE) >= 0); assert (fs_create_file("/testDir/secondMe.txt", REG_FILE) >= 0); assert (fs_create_file("/testDir/thirdMe.txt", REG_FILE) >= 0); Directory_t dir; assert (fs_get_directory("/testDir/", &dir) >= 0); assert (dir.size == 3); assert(strncmp(dir.entries[0].filename,"checkMe.txt",strlen("checkMe.txt")) == 0); assert(strncmp(dir.entries[1].filename,"secondMe.txt",strlen("secondMe.txt")) == 0); assert(strncmp(dir.entries[2].filename,"thirdMe.txt",strlen("thirdMe.txt")) == 0); assert (fs_unmount() >= 0); PASS_OK /*NEW TEST ADDED */ assert (fs_mount() >= 0); assert (fs_create_file("/testDir", DIR_FILE) >= 0); assert (fs_create_file("/testDir/checkMe.txt", REG_FILE) >= 0); assert (fs_create_file("/testDir/secondMe.txt", REG_FILE) >= 0); assert (fs_create_file("/testDir/thirdMe.txt", REG_FILE) >= 0); assert (fs_remove_file("/testDir/thirdMe.txt") >= 0); assert (fs_get_directory("/testDir/", &dir) >= 0); assert (dir.size == 2); assert(strncmp(dir.entries[0].filename,"checkMe.txt",strlen("checkMe.txt")) == 0); assert(strncmp(dir.entries[1].filename,"secondMe.txt",strlen("secondMe.txt")) == 0); assert (fs_unmount() >= 0); return 0; }