初版
This commit is contained in:
@@ -0,0 +1,221 @@
|
||||
#include "includes.h"
|
||||
#include "uart.h"
|
||||
#include "debug.h"
|
||||
#include "gpio.h"
|
||||
#include "bank_switch.h"
|
||||
#include "usr_timer.h"
|
||||
#include "iic_api.h"
|
||||
#include "main.h"
|
||||
#include "bsp.h"
|
||||
#include "sensor/sensor_driver.h"
|
||||
|
||||
/*
|
||||
function: m2p消息处理,主循环不会收到ack消息
|
||||
param index:等待返回ack的消息序号
|
||||
return val:1, 收到对应ack消息 0,未收到对应ack消息
|
||||
*/
|
||||
int m2p_msg_hdl(u32 index)
|
||||
{
|
||||
struct lp_msg_handler *p;
|
||||
u8 msg[32];
|
||||
struct lp_msg_head head;
|
||||
|
||||
int ret = m2p_get_msg(&head, (u8 *)msg, ARRAY_SIZE(msg));
|
||||
|
||||
//成功读取到消息
|
||||
if (ret == MSG_NO_ERROR) {
|
||||
list_for_each_m2p_msg_handler(p) {
|
||||
if (p->type == head.type) {
|
||||
if (head.ack) {
|
||||
config_post_ack_flag(0);
|
||||
}
|
||||
p->handler(p->priv, (u8 *)msg, head.len);
|
||||
if (head.ack) {
|
||||
//若是应答消息则返回应答
|
||||
p11_ack_msys(head.index);
|
||||
config_post_ack_flag(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (ret == MSG_NO_MSG) {
|
||||
//未读取到消息
|
||||
|
||||
} else {
|
||||
ASSERT(0, "ret: %d, type: %d, ack: %d, index: %d, len: %d\n", ret, head.type, head.ack, head.index, head.len);
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void callback(u32 *priv)
|
||||
{
|
||||
printf("function: callback, %d\n", (u32)priv);
|
||||
}
|
||||
|
||||
|
||||
#include "circular_buf.h"
|
||||
#include "ipc_spin_lock.h"
|
||||
#define P11_CBUF_TEST 0
|
||||
|
||||
#if P11_CBUF_TEST
|
||||
|
||||
static cbuffer_t cbuffer;
|
||||
static u8 cbuf_test[256];
|
||||
static cbuffer_child_t entry[3];//支持3个成员读取
|
||||
|
||||
static void p11_cbuf_test_init()
|
||||
{
|
||||
int msg[2];
|
||||
msg[0] = MSG_P11_SYS_RAM_INIT;
|
||||
msg[1] = (int)&cbuffer;
|
||||
p2m_post_msg(MSG_APP, 0, (u8 *)msg, sizeof(msg));
|
||||
cbuf_mult_read_init(&cbuffer, cbuf_test, sizeof(cbuf_test), 3, entry);
|
||||
|
||||
|
||||
cbuf_mult_entry_enable(&cbuffer, 0, 1); //开启节点
|
||||
cbuf_mult_entry_enable(&cbuffer, 1, 1);
|
||||
cbuf_mult_entry_enable(&cbuffer, 2, 1);
|
||||
|
||||
printf("%s %d %x\n", __func__, __LINE__, (int)&cbuffer);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void p11_cbuf_write_test()
|
||||
{
|
||||
u8 test[50];
|
||||
static int count_add = 0;
|
||||
int count = count_add;
|
||||
|
||||
for (int i = 0; i < 50; i++) {
|
||||
test[i] = (count++) & 0xff;
|
||||
}
|
||||
|
||||
|
||||
int len = cbuf_write(&cbuffer, test, 50);
|
||||
/* int len = 0; */
|
||||
if (len == 50) {
|
||||
printf("\nwrite succ %x\n", count_add);
|
||||
count_add += 50;
|
||||
} else {
|
||||
/* printf("falil \n"); */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
void app_main()
|
||||
{
|
||||
bsp_init();
|
||||
usr_timer_init();
|
||||
|
||||
lptmr1_init();
|
||||
|
||||
#if CONFIG_SENSOR_DRIVER_ENABLE
|
||||
sensor_driver_check();
|
||||
#endif
|
||||
|
||||
#if P11_CBUF_TEST
|
||||
p11_cbuf_test_init();
|
||||
p11_cbuf_write_test();
|
||||
#endif
|
||||
/* task_post_msg(NULL,1,MSG_P11_SYS_KICK); */
|
||||
while (1) {
|
||||
m2p_msg_hdl(0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
function: 主循环回调处理
|
||||
*/
|
||||
void app_handler_add(void (*callback)(u32 *priv), u32 *priv)
|
||||
{
|
||||
u8 msg[9];
|
||||
u32 msg_cb = (u32)callback;
|
||||
u32 msg_priv = (u32)priv;
|
||||
|
||||
msg[0] = MSG_APP_CALLBACK;
|
||||
memcpy(msg + 1, &msg_cb, 4);
|
||||
|
||||
if (priv != NULL) {
|
||||
memcpy(msg + 5, &msg_priv, 4);
|
||||
m2p_post_msg(MSG_APP, 0, msg, 9);
|
||||
} else {
|
||||
m2p_post_msg(MSG_APP, 0, msg, 5);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
int task_post_msg(char *name, int argc, ...)
|
||||
{
|
||||
int msg[16];
|
||||
va_list argptr;
|
||||
va_start(argptr, argc);
|
||||
int param;
|
||||
ASSERT(argc < sizeof(msg) / sizeof(msg[0]))
|
||||
for (int i = 0; i < argc; ++i) {
|
||||
param = va_arg(argptr, int);
|
||||
msg[i] = param;
|
||||
}
|
||||
m2p_post_msg(MSG_APP, 0, (u8 *)msg, argc * sizeof(int));
|
||||
va_end(argptr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void app_msg_handler(void *priv, u8 *msg, u32 len)
|
||||
{
|
||||
|
||||
printf("app_msg_handler = %d\n", msg[0]);
|
||||
if (msg[0] == MSG_APP_CALLBACK) {
|
||||
u32 *msg_priv;
|
||||
void (*msg_cb)(u32 * priv);
|
||||
memcpy(&msg_cb, msg + 1, 4);
|
||||
memcpy(&msg_priv, msg + 5, 4);
|
||||
msg_cb(msg_priv);
|
||||
}
|
||||
|
||||
|
||||
switch (msg[0]) {
|
||||
#if CONFIG_SENSOR_DRIVER_ENABLE
|
||||
case MSG_P11_SYS_KICK:
|
||||
printf("MSG_P11_SYS_KICK\n");
|
||||
sensor_driver_run();
|
||||
break;
|
||||
case MSG_P11_SENSOR_SLEEP:
|
||||
printf("MSG_P11_SENSOR_SLEEP\n");
|
||||
sensor_driver_sleep(msg[1], msg[2]);
|
||||
break;
|
||||
|
||||
case MSG_P11_SENSOR_IRQ:
|
||||
printf("MSG_P11_SENSOR_IRQ\n");
|
||||
sensor_driver_irq_handle();
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if P11_CBUF_TEST
|
||||
p11_cbuf_write_test();
|
||||
#endif
|
||||
//test
|
||||
break;
|
||||
case MSG_P11_SENSOR_INIT: {
|
||||
printf("m2p_post_msg len=%d\n", len);
|
||||
#if CONFIG_SENSOR_DRIVER_ENABLE
|
||||
sensor_driver_init(msg[1], msg[2], msg[3] << 8 | msg[4], msg[5]);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
case MSG_P11_SOFF_EVENT: {
|
||||
lptmr1_set_wkup_time(0, P11_LPTMR_WKUP_EVENT);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
REGISTER_M2P_MSG_HANDLER(0, MSG_APP, app_msg_handler);
|
||||
Reference in New Issue
Block a user