makerbase-byid.service files

Contents:


/usr/lib/systemd/system/makerbase-byid.service

[Unit]
Description=get usb id
After=network.target
Wants=udev.target

[Install]
WantedBy=multi-user.target

[Service]
Type=oneshot
ExecStart=/root/get_id

/root/get_id

Updates serial: from section [mcu] in home/mks/printer_data/config/printer.cfg

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <string.h>
#include <termios.h>

#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <memory>

#define UART_DEVICE_PATH  "/dev/serial/by-id/"
#define KLIPPER_CFG_PATH  "/home/mks/printer_data/config/printer.cfg"

#define MAX_LINE	1024


#include<dirent.h>

char *getDirFileName(char *filedir, char *filename)
{
	DIR *dp;
	struct dirent *dirp;
	
	if((dp = opendir(filedir)) == NULL)
		printf("Can't open %s\n", filedir);
	
	
	if((dirp = readdir(dp)) != NULL)
	{
		while(strcmp(dirp->d_name,".")==0 || strcmp(dirp->d_name,"..")==0) ///current dir OR parrent dir
		{	
			if((dirp = readdir(dp)) == NULL)
				return NULL;
		}
		
		strcpy(filename, filedir);
		strcat(filename, dirp->d_name);
		printf(filename);
		printf("\n");
		return filename;
	}
	
	closedir(dp);
}

int main(int argc, char** argv) {
    FILE *fp;
	int find_node_flag = 0;
	int replace_flag = 0;
	char strLine[MAX_LINE] = {0};
	char fileName[500] = {0};
	
	if(access(UART_DEVICE_PATH, F_OK) == 0)
	{
		getDirFileName(UART_DEVICE_PATH, fileName);
		if ((fp = fopen(KLIPPER_CFG_PATH, "r+"))< 0)
			return -1;
		fseek( fp, 0, SEEK_SET );
		while (!feof(fp))									//循环读取每一行,直到文件尾
		{
			if(replace_flag)
				break;
			memset(strLine, 0, MAX_LINE);
			long offset = ftell(fp);
			fgets(strLine,MAX_LINE,fp);					    //将fp所指向的文件一行内容读到strLine缓冲区
			printf("offset:%d\n", offset);		   					//输出所读到的内容
			if(strstr(strLine, "[mcu]"))
			{
				find_node_flag = 1;
			}
			else if(strLine[0] == '[')
			{
				if((find_node_flag == 1) && (replace_flag == 0))
				{
					char save[1000][1024];
					fseek(fp, offset, SEEK_SET);
					int i = 0; // 清0, 记录后面共有多少行
					while ((fgets(save[i], 1024, fp))) { // 循环读取文件, 直到fgets返回NULL表示读完
						i++;
					}
					//fseek( fp, 0 - strlen(strLine), SEEK_CUR);
					fseek(fp, offset, SEEK_SET);
					
					
					
					fputs("serial:", fp);
					fputs(fileName, fp);
                    fputs("\n", fp);
					
					int j;

						for (j = 0; j < i; j++) { // 之前保存的数据, 依次往后面写
						fputs(save[j], fp);
					}
					replace_flag = 1;
				}
				find_node_flag = 0;
			}
			else if((find_node_flag == 1) && (strncmp(strLine, "serial:", strlen("serial:")) == 0))
			{
				char save[1000][1024];
				//fseek(fp, offset, SEEK_SET);
				int i = 0; // 清0, 记录后面共有多少行
				while ((fgets(save[i], 1024, fp))) { // 循环读取文件, 直到fgets返回NULL表示读完
					i++;
				}
				//fseek( fp, 0 - strlen(strLine), SEEK_CUR);
				fseek(fp, offset, SEEK_SET);
				
				
				
				fputs("serial:", fp);
				fputs(fileName, fp);
                fputs("\n", fp);
				
				int j;

					for (j = 0; j < i; j++) { // 之前保存的数据, 依次往后面写
					fputs(save[j], fp);
				}
				replace_flag = 1;
			}
			
		}
		fclose(fp);
		
	}

    return 0;
}

Back to start