static int logCreateBlock(unsigned char id, struct ops_setting * settings, int len) { int i; for (i=0; i<LOG_MAX_BLOCKS; i++) if (id == logBlocks[i].id) return EEXIST; for (i=0; i<LOG_MAX_BLOCKS; i++) if (logBlocks[i].id == BLOCK_ID_FREE) break; if (i == LOG_MAX_BLOCKS) return ENOMEM; logBlocks[i].id = id; //logBlocks[i].timer = xTimerCreate( (const signed char *)"logTimer", M2T(1000), // pdRT_TRUE, &logBlocks[i], logBlockTimed ); logBlocks[i].timer = rt_timer_create("logTimer", logBlockTimed, &logBlocks[i], M2T(1000), RT_TIMER_FLAG_PERIODIC | RT_TIMER_FLAG_SOFT_TIMER); logBlocks[i].ops = RT_NULL; if (logBlocks[i].timer == RT_NULL) { logBlocks[i].id = BLOCK_ID_FREE; return ENOMEM; } DEBUG("Added block ID %d\n", id); return logAppendBlock(id, settings, len); }
static int logCreateBlock(unsigned char id, struct ops_setting * settings, int len) { int i; for (i=0; i<LOG_MAX_BLOCKS; i++) if (id == logBlocks[i].id) return EEXIST; for (i=0; i<LOG_MAX_BLOCKS; i++) if (logBlocks[i].id == BLOCK_ID_FREE) break; if (i == LOG_MAX_BLOCKS) return ENOMEM; logBlocks[i].id = id; logBlocks[i].timer = xTimerCreate( (const signed char *)"logTimer", M2T(1000), pdTRUE, &logBlocks[i], logBlockTimed ); logBlocks[i].ops = NULL; if (logBlocks[i].timer == NULL) { logBlocks[i].id = BLOCK_ID_FREE; return ENOMEM; } DEBUG("Added block ID %d\n", id); return logAppendBlock(id, settings, len); }
void logControlProcess() { int ret = ENOEXEC; switch (p.data[0]) { case CONTROL_CREATE_BLOCK: ret = logCreateBlock(p.data[1], (struct ops_setting*) &p.data[2], (p.size - 2) / sizeof(struct ops_setting)); break; case CONTROL_APPEND_BLOCK: ret = logAppendBlock(p.data[1], (struct ops_setting*) &p.data[2], (p.size - 2) / sizeof(struct ops_setting)); break; case CONTROL_DELETE_BLOCK: ret = logDeleteBlock(p.data[1]); break; case CONTROL_START_BLOCK: ret = logStartBlock(p.data[1], p.data[2] * 10); break; case CONTROL_STOP_BLOCK: ret = logStopBlock(p.data[1]); break; case CONTROL_RESET: logReset(); ret = 0; break; } //Commands answer p.data[2] = ret; p.size = 3; crtpSendPacket(&p); }