#define MODULE #include #include #include #include #include #include #include #include "../include/rt_fix.h" #include "./rt_fix_common.h" RT_TASK rt_task; int msg_handler(unsigned int i) { rt_fix_msg msg; int err; while((err = rtf_get(0, &msg, sizeof(msg))) == sizeof(msg)) { switch(msg.command) { case RT_FIX_ADD: msg.result = rt_fix_add(msg.left_operand, msg.right_operand); rtf_put(1, &msg, sizeof(msg)); break; case RT_FIX_SUB: msg.result = rt_fix_sub(msg.left_operand, msg.right_operand); rtf_put(1, &msg, sizeof(msg)); break; case RT_FIX_MUL: msg.result = rt_fix_mul(msg.left_operand, msg.right_operand); rtf_put(1, &msg, sizeof(msg)); break; case RT_FIX_DIV: msg.result = rt_fix_div(msg.left_operand, msg.right_operand); rtf_put(1, &msg, sizeof(msg)); break; case RT_FIX_SQRT: msg.result = rt_fix_sqrt(msg.left_operand); rtf_put(1, &msg, sizeof(msg)); break; case RT_FIX_SIN: msg.result = rt_fix_sin(msg.left_operand); rtf_put(1, &msg, sizeof(msg)); break; case RT_FIX_ASIN: msg.result = rt_fix_asin(msg.left_operand); rtf_put(1, &msg, sizeof(msg)); break; case RT_FIX_COS: msg.result = rt_fix_cos(msg.left_operand); rtf_put(1, &msg, sizeof(msg)); break; case RT_FIX_ACOS: msg.result = rt_fix_acos(msg.left_operand); rtf_put(1, &msg, sizeof(msg)); break; case RT_FIX_TAN: msg.result = rt_fix_tan(msg.left_operand); rtf_put(1, &msg, sizeof(msg)); break; case RT_FIX_EXP: msg.result = rt_fix_exp(msg.left_operand); rtf_put(1, &msg, sizeof(msg)); break; case RT_FIX_ROUND: msg.result = rt_fix_round(msg.left_operand); rtf_put(1, &msg, sizeof(msg)); break; case RT_FIX_FLOOR: msg.result = rt_fix_floor(msg.left_operand); rtf_put(1, &msg, sizeof(msg)); break; case RT_FIX_CEIL: msg.result = rt_fix_ceil(msg.left_operand); rtf_put(1, &msg, sizeof(msg)); break; case RT_FIX_FRAC: msg.result = rt_fix_frac(msg.left_operand); rtf_put(1, &msg, sizeof(msg)); break; case RT_FIX_ABS: msg.result = rt_fix_abs(msg.left_operand); rtf_put(1, &msg, sizeof(msg)); break; default: return -EINVAL; } } if (err != 0) { return -EINVAL; } return 0; } int init_module(void) { rtf_create(0, 4000); rtf_create(1, 4000); rtf_create_handler(0, msg_handler); return 0; } void cleanup_module(void) { rtf_destroy(0); rtf_destroy(1); }