int tmlib(MS_Mon_Tmlib_Fun_Type fun, MS_Mon_Transid_Type transid, MS_Mon_Transid_Type *transid_out) { const char *funp; MS_Mon_Transid_Type ltransid; if (exp_fun < 0) { printf("client=%d, cb not expected\n", client); assert(false); // callback not expected } else fun_check(fun); switch (fun) { case TMLIB_FUN_REG_TX: funp = "REG"; trans_set_curr(transid); break; case TMLIB_FUN_CLEAR_TX: funp = "CLEAR"; TRANSID_SET_NULL(ltransid); trans_set_curr(ltransid); break; case TMLIB_FUN_REINSTATE_TX: funp = "REINSTATE"; if (client) trans_check(transid); trans_set_curr(transid); break; case TMLIB_FUN_GET_TX: funp = "GET"; break; default: funp = "<unknown>"; TRANSID_SET_NULL(ltransid); trans_set_curr(ltransid); break; } if (print) { char transidbuf[100]; char curr_transidbuf[100]; const char *clientp = client ? "client" : "server"; util_format_transid(transidbuf, transid); util_format_transid(curr_transidbuf, curr_transid); printf("%s tmlib callback, fun=%s(%d), transid=%s, curr-transid=%s\n", clientp, funp, fun, transidbuf, curr_transidbuf); } fun_set(exp_fun_next, -1); if (fun == TMLIB_FUN_GET_TX) *transid_out = curr_transid; return 0; }
int main(void) { // Initialize I/O, Timer, ADC, CAN, and SPI sys_init(); /* Begin Main Program Loop */ while(1) { /* TRANSCEIVER COMMUNICATION */ trans_check(); if(msg_received) { // Do stuff with the message in trans_msg[]. // Blink LED // Wait for button // Forward the message } } }
int main(int argc, char *argv[]) { void *buf; _xcc_status cc; unsigned short count_read; unsigned short count_written; unsigned short count_xferred; int ferr; short filenum; short lasterr; int inx; int loop = 10; char my_name[BUFSIZ]; bool nowait = false; int nid; char *p; int pid; char recv_buffer[BUFSIZ]; char send_buffer[BUFSIZ]; SB_Tag_Type tag; short tfilenum; int tm_seq; int timeout = -1; MS_Mon_Transid_Type transid; TAD zargs[] = { { "-client", TA_Bool, TA_NOMAX, &client }, { "-loop", TA_Int, TA_NOMAX, &loop }, { "-nowait", TA_Bool, TA_NOMAX, &nowait }, { "-print", TA_Bool, TA_NOMAX, &print }, { "-server", TA_Ign, TA_NOMAX, NULL }, { "", TA_End, TA_NOMAX, NULL } }; TRANSID_SET_NULL(curr_transid); TRANSID_SET_NULL(exp_trans); ferr = file_init(&argc, &argv); TEST_CHK_FEOK(ferr); msfs_util_init_fs(&argc, &argv, file_debug_hook); arg_proc_args(zargs, false, argc, argv); util_test_start(client); ferr = file_mon_process_startup(!client); // system messages TEST_CHK_FEOK(ferr); util_gethostname(my_name, sizeof(my_name)); ferr = msg_mon_trans_register_tmlib(tmlib); TEST_CHK_FEOK(ferr); ferr = msg_mon_get_process_info(NULL, &nid, &pid); TEST_CHK_FEOK(ferr); if (client) { ferr = XFILE_OPEN_((char *) "$srv", 4, &filenum, 0, 0, nowait ? (short) 1 : (short) 0, 0, 0, 0, 0, NULL); TEST_CHK_FEOK(ferr); for (inx = 0; inx < loop; inx++) { ferr = msg_mon_get_tm_seq(&tm_seq); TEST_CHK_FEOK(ferr); if (inx & 1) cc = XSETMODE(filenum, 117, 1, 0, NULL); // suppress else cc = XSETMODE(filenum, 117, 0, 0, NULL); // normal TEST_CHK_CCEQ(cc); ferr = XFILE_GETINFO_(-1, &lasterr, NULL, 0, NULL, NULL, NULL); assert(lasterr == XZFIL_ERR_OK); sprintf(send_buffer, "hello, greetings from %s, inx=%d, trans=%d", my_name, inx, tm_seq); if (print) printf("client enlist, transid=%d\n", tm_seq); TRANSID_SET_SEQ(transid, tm_seq); trans_set_curr(transid); if ((inx & 1) == 0) { ferr = msg_mon_trans_enlist(nid, pid, transid); TEST_CHK_FEOK(ferr); } if ((inx & 1) == 0) fun_set(TMLIB_FUN_GET_TX, TMLIB_FUN_REINSTATE_TX); else fun_set(-1, -1); trans_set(transid); cc = XWRITEREADX(filenum, send_buffer, (short) (strlen(send_buffer) + 1), BUFSIZ, &count_read, 0); if (nowait) { TEST_CHK_CCEQ(cc); tfilenum = filenum; cc = XAWAITIOX(&tfilenum, &buf, &count_xferred, &tag, timeout, NULL); } TEST_CHK_CCEQ(cc); fun_check(-1); if (print) printf("client end, transid=%d\n", tm_seq); if ((inx & 1) == 0) { ferr = msg_mon_trans_end(nid, pid, transid); TEST_CHK_FEOK(ferr); TRANSID_SET_NULL(transid); trans_set_curr(transid); // no more trans } printf("%s\n", send_buffer); } ferr = XFILE_CLOSE_(filenum, 0); TEST_CHK_FEOK(ferr); } else { ferr = XFILE_OPEN_((char *) "$RECEIVE", 8, &filenum, 0, 0, nowait ? (short) 1 : (short) 0, 1, 1, // no sys msg 0, 0, NULL); TEST_CHK_FEOK(ferr); for (inx = 0; inx < loop; inx++) { if ((inx & 1) == 0) fun_set(TMLIB_FUN_REG_TX, -1); else fun_set(-1, -1); cc = XREADUPDATEX(filenum, recv_buffer, BUFSIZ, &count_read, 0); TEST_CHK_CCEQ(cc); if (nowait) { tfilenum = filenum; cc = XAWAITIOX(&tfilenum, &buf, &count_xferred, &tag, timeout, NULL); TEST_CHK_CCEQ(cc); } if (inx & 1) { TRANSID_SET_NULL(transid); } else { p = &recv_buffer[strlen(recv_buffer)]; while ((p > recv_buffer) && (*p != '=')) p--; if (*p == '=') { p++; sscanf(p, "%d", &tm_seq); TRANSID_SET_SEQ(transid, tm_seq); } else TRANSID_SET_NULL(transid); } if (inx & 1) { MS_Mon_Transid_Type ltransid; TRANSID_SET_NULL(ltransid); trans_set_curr(ltransid); } trans_set(transid); trans_check(curr_transid); fun_check(-1); if ((inx & 1) == 0) fun_set(TMLIB_FUN_CLEAR_TX, -1); else fun_set(-1, -1); strcat(recv_buffer, "- reply from "); strcat(recv_buffer, my_name); count_read = (short) (strlen(recv_buffer) + 1); cc = XREPLYX(recv_buffer, count_read, &count_written, 0, XZFIL_ERR_OK); TEST_CHK_FEOK(ferr); fun_check(-1); } ferr = XFILE_CLOSE_(filenum, 0); TEST_CHK_FEOK(ferr); } ferr = file_mon_process_shutdown(); TEST_CHK_FEOK(ferr); util_test_finish(client); return 0; }