23.12.03 최초 작성
/hal/camera_HAL.h
& /hal/camera_HAL.cpp
: control_thread
객체의 dump()
함수 호출하는 toy_camera_dump(void)
추가int toy_camera_dump(void);
...
int toy_camera_dump(void)
{
return control_thread->dump();
}
/hal/ControlThread_HAL.h
& /hal/ControlThread_HAL.cpp
: 호출 시 C++ 연동: 카메라 덤프
를 출력하는 dump()
함수 추가public:
// 사진 찍는 메소드
int takePicture();
int dump();
...
int ControlThread::dump()
{
cout << "C++ 연동: 카메라 덤프." << endl;
return 0;
}
/system/system_server.c
: input
으로부터 메시지 큐의 메시지가 오면 프로세스 정보 출력하는 코드 추가#define DUMP_STATE 2
void dumpstate();
...
// 메시지 큐에서 메시지를 확인하고 DUMP_STATE이면 dumpstate() 호출
int system_server()
{
...
while(1){
if(mq_receive(monitor_queue, (void *)&msg, sizeof(toy_msg_t), 0) < 0){
perror("Message queue recevie error : monitor");
exit(0);
}
printf("Monitor msq arrived\n");
print_msq(&msg);
...
if (msg.msg_type == DUMP_STATE) {
dumpstate();
}
}
}
// 메시지 큐에서 메시지를 확인하고 DUMP_STATE이면 toy_camera_dump() 호출
void *camera_service_thread(){
...
while(1){
...
else if (msg.msg_type == DUMP_STATE) {
toy_camera_dump();
}
}
}
...
// 프로세스 관련 파일의 내용을 읽어 출력하는 함수
void dumpstate()
{
int fd;
char buf[1024];
const char* proc_list[] = {
"/proc/version",
"/proc/meminfo",
"/proc/vmstat",
"/proc/vmallocinfo",
"/proc/slabinfo",
"/proc/zoneinfo",
"/proc/pagetypeinfo",
"/proc/buddyinfo",
"/proc/net/dev",
"/proc/net/route",
"/proc/net/ipv6_route",
"/proc/interrupts"
};
for(int i = 0; i < 12; i++) {
fd = open(proc_list[i], O_RDONLY);
if(fd < 0) {
perror("open failed\n");
return;
}
printf("\n____________%s____________\n", proc_list[i]);
while(read(fd,buf,1024) > 0) {
write(STDOUT_FILENO, buf, 1024);
}
if (close(fd) == -1) {
perror("close failed");
return;
}
printf("\n");
}
}
/ui/input.c
: dump 명령어를 입력받으면 메시지 큐에 관련 메시지를 저장하는 코드 추가#define DUMP_STATE 2
...
int toy_dump_state(char **args);
char *builtin_str[] = {
"send",
"mu",
"sh",
"mq",
"elf",
"dump",
"exit"
};
int (*builtin_func[]) (char **) = {
&toy_send,
&toy_mutex,
&toy_shell,
&toy_message_queue,
&toy_read_elf_header,
&toy_dump_state,
&toy_exit
};
// dump 명령어를 입력받으면 메시지 큐에 메시지 저장하는 코드
int toy_dump_state(char **args)
{
int mqretcode;
toy_msg_t msg;
msg.msg_type = DUMP_STATE;
msg.param1 = 0;
msg.param2 = 0;
mqretcode = mq_send(camera_queue, (char *)&msg, sizeof(msg), 0);
assert(mqretcode == 0);
mqretcode = mq_send(monitor_queue, (char *)&msg, sizeof(msg), 0);
assert(mqretcode == 0);
return 1;
}