Пример #1
0
DDSChatModule::~DDSChatModule()
{
    DDS_ReturnCode_t    retCode;

    printf("Shutting down chat module...\n");
    retCode = pDomainParticipant->delete_contained_entities();
    CHECK_RETCODE(retCode,DDS_RETCODE_OK,"Can't delete domain participant's entities\n");
    retCode = DDSTheParticipantFactory->delete_participant(pDomainParticipant);
    CHECK_RETCODE(retCode,DDS_RETCODE_OK,"Can't delete domain participant\n");
}
Пример #2
0
void DDSDPBuiltinListener::on_data_available(DDSDataReader *pGenericReader)
{
    DDSParticipantBuiltinTopicDataDataReader   *dpBuiltinReader = NULL;
    DDS_ParticipantBuiltinTopicDataSeq          seqDiscovery;
    DDS_SampleInfoSeq                           seqInfo;
    DDS_ReturnCode_t                            retCode;
    char                                       *userData = NULL;
    char                                       *newUserName = new char [100];
    long                                        newUserId;

    dpBuiltinReader = (DDSParticipantBuiltinTopicDataDataReader *) pGenericReader;
    retCode = dpBuiltinReader->take(seqDiscovery,seqInfo,DDS_LENGTH_UNLIMITED,
                DDS_ANY_SAMPLE_STATE,DDS_NEW_VIEW_STATE,DDS_ANY_INSTANCE_STATE);

    if(retCode!=DDS_RETCODE_NO_DATA)
    {
        CHECK_RETCODE(retCode,DDS_RETCODE_OK,"Builtin reader take() error\n");
        for(int iSeq=0; iSeq<seqDiscovery.length(); iSeq++)
        {
            if(seqInfo[iSeq].valid_data)
            {
                if(seqDiscovery[iSeq].user_data.value.length()>0)
                {
                    userData = (char *) &(seqDiscovery[iSeq].user_data.value[0]);
                    sscanf(userData,"%ld,%s",&newUserId,newUserName);
                    printf("%s (User ID: %ld) has come online...\n",newUserName,newUserId);
                }
            }
        }
    }

    dpBuiltinReader->return_loan(seqDiscovery,seqInfo);
    delete [] newUserName;
}
int mipid_hx8369_lcd_setup(struct mipi_dsi_info *mipi_dsi)
{
	u32 buf[DSI_CMD_BUF_MAXSIZE];
	int err;

	dev_dbg(&mipi_dsi->pdev->dev, "MIPI DSI LCD setup.\n");
	buf[0] = HX8369_CMD_SETEXTC | (HX8369_CMD_SETEXTC_PARAM_1 << 8);
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_LONG_WRITE,
					buf, HX8369_CMD_SETEXTC_LEN);
	CHECK_RETCODE(err);
	buf[0] = MIPI_DSI_MAX_RET_PACK_SIZE;
	err = mipi_dsi_pkt_write(mipi_dsi,
				MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE,
				buf, 0);
	CHECK_RETCODE(err);
	buf[0] = HX8369_CMD_GETHXID;
	err =  mipi_dsi_pkt_read(mipi_dsi,
			MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM,
			buf, HX8369_CMD_GETHXID_LEN);
	if (!err && ((buf[0] & HX8369_ID_MASK) == HX8369_ID)) {
		dev_info(&mipi_dsi->pdev->dev,
				"MIPI DSI LCD ID:0x%x.\n", buf[0]);
	} else {
		dev_err(&mipi_dsi->pdev->dev,
			"mipi_dsi_pkt_read err:%d, data:0x%x.\n",
			err, buf[0]);
		dev_info(&mipi_dsi->pdev->dev,
				"MIPI DSI LCD not detected!\n");
		return err;
	}

	/* set LCD resolution as 480RGBx800, DPI interface,
	 * display operation mode: RGB data bypass GRAM mode.
	 */
	buf[0] = HX8369_CMD_SETDISP | (HX8369_CMD_SETDISP_1_HALT << 8) |
			(HX8369_CMD_SETDISP_2_RES_MODE << 16) |
			(HX8369_CMD_SETDISP_3_BP << 24);
	buf[1] = HX8369_CMD_SETDISP_4_FP | (HX8369_CMD_SETDISP_5_SAP << 8) |
			 (HX8369_CMD_SETDISP_6_GENON << 16) |
			 (HX8369_CMD_SETDISP_7_GENOFF << 24);
	buf[2] = HX8369_CMD_SETDISP_8_RTN | (HX8369_CMD_SETDISP_9_TEI << 8) |
			 (HX8369_CMD_SETDISP_10_TEP_UP << 16) |
			 (HX8369_CMD_SETDISP_11_TEP_LOW << 24);
	buf[3] = HX8369_CMD_SETDISP_12_BP_PE |
			(HX8369_CMD_SETDISP_13_FP_PE << 8) |
			 (HX8369_CMD_SETDISP_14_RTN_PE << 16) |
			 (HX8369_CMD_SETDISP_15_GON << 24);
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_LONG_WRITE,
						buf, HX8369_CMD_SETDISP_LEN);
	CHECK_RETCODE(err);

	/* Set display waveform cycle */
	buf[0] = HX8369_CMD_SETCYC | (HX8369_CMD_SETCYC_PARAM_1 << 8);
	buf[1] = HX8369_CMD_SETCYC_PARAM_2;
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_LONG_WRITE,
						buf, HX8369_CMD_SETCYC_LEN);
	CHECK_RETCODE(err);

	/* Set GIP timing output control */
	buf[0] = HX8369_CMD_SETGIP | (HX8369_CMD_SETGIP_PARAM_1 << 8);
	buf[1] = HX8369_CMD_SETGIP_PARAM_2;
	buf[2] = HX8369_CMD_SETGIP_PARAM_3;
	buf[3] = HX8369_CMD_SETGIP_PARAM_4;
	buf[4] = HX8369_CMD_SETGIP_PARAM_5;
	buf[5] = HX8369_CMD_SETGIP_PARAM_6;
	buf[6] = HX8369_CMD_SETGIP_PARAM_7;
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_LONG_WRITE, buf,
				HX8369_CMD_SETGIP_LEN);
	CHECK_RETCODE(err);

	/* Set power: standby, DC etc. */
	buf[0] = HX8369_CMD_SETPOWER | (HX8369_CMD_SETPOWER_PARAM_1 << 8);
	buf[1] = HX8369_CMD_SETPOWER_PARAM_2;
	buf[2] = HX8369_CMD_SETPOWER_PARAM_3;
	buf[3] = HX8369_CMD_SETPOWER_PARAM_4;
	buf[4] = HX8369_CMD_SETPOWER_PARAM_5;
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_LONG_WRITE, buf,
				HX8369_CMD_SETPOWER_LEN);
	CHECK_RETCODE(err);

	/* Set VCOM voltage. */
	buf[0] = HX8369_CMD_SETVCOM | (HX8369_CMD_SETVCOM_PARAM_1 << 8);
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_LONG_WRITE, buf,
				HX8369_CMD_SETVCOM_LEN);
	CHECK_RETCODE(err);

	/* Set Panel: BGR/RGB or Inversion. */
	buf[0] = HX8369_CMD_SETPANEL | (HX8369_CMD_SETPANEL_PARAM_1 << 8);
	err = mipi_dsi_pkt_write(mipi_dsi,
		MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM, buf, 0);
	CHECK_RETCODE(err);

	/* Set gamma curve related setting */
	buf[0] = HX8369_CMD_SETGAMMA | (HX8369_CMD_SETGAMMA_PARAM_1 << 8);
	buf[1] = HX8369_CMD_SETGAMMA_PARAM_2;
	buf[2] = HX8369_CMD_SETGAMMA_PARAM_3;
	buf[3] = HX8369_CMD_SETGAMMA_PARAM_4;
	buf[4] = HX8369_CMD_SETGAMMA_PARAM_5;
	buf[5] = HX8369_CMD_SETGAMMA_PARAM_6;
	buf[7] = HX8369_CMD_SETGAMMA_PARAM_7;
	buf[7] = HX8369_CMD_SETGAMMA_PARAM_8;
	buf[8] = HX8369_CMD_SETGAMMA_PARAM_9;
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_LONG_WRITE, buf,
				HX8369_CMD_SETGAMMA_LEN);
	CHECK_RETCODE(err);

	/* Set MIPI: DPHYCMD & DSICMD, data lane number */
	buf[0] = HX8369_CMD_SETMIPI | (HX8369_CMD_SETMIPI_PARAM_1 << 8);
	buf[1] = HX8369_CMD_SETMIPI_PARAM_2;
	buf[2] = HX8369_CMD_SETMIPI_PARAM_3;
	if (lcd_config.data_lane_num == HX8369_ONE_DATA_LANE)
		buf[2] |= HX8369_CMD_SETMIPI_ONELANE;
	else
		buf[2] |= HX8369_CMD_SETMIPI_TWOLANE;
	buf[3] = HX8369_CMD_SETMIPI_PARAM_4;
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_LONG_WRITE, buf,
				HX8369_CMD_SETMIPI_LEN);
	CHECK_RETCODE(err);

	/* Set pixel format:24bpp */
	buf[0] = HX8369_CMD_SETPIXEL_FMT;
	switch (lcd_config.dpi_fmt) {
	case MIPI_RGB565_PACKED:
	case MIPI_RGB565_LOOSELY:
	case MIPI_RGB565_CONFIG3:
		buf[0] |= (HX8369_CMD_SETPIXEL_FMT_16BPP << 8);
		break;

	case MIPI_RGB666_LOOSELY:
	case MIPI_RGB666_PACKED:
		buf[0] |= (HX8369_CMD_SETPIXEL_FMT_18BPP << 8);
		break;

	case MIPI_RGB888:
		buf[0] |= (HX8369_CMD_SETPIXEL_FMT_24BPP << 8);
		break;

	default:
		buf[0] |= (HX8369_CMD_SETPIXEL_FMT_24BPP << 8);
		break;
	}
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM,
			buf, 0);
	CHECK_RETCODE(err);

	/* Set column address: 0~479 */
	buf[0] = HX8369_CMD_SETCLUMN_ADDR |
		(HX8369_CMD_SETCLUMN_ADDR_PARAM_1 << 8);
	buf[1] = HX8369_CMD_SETCLUMN_ADDR_PARAM_2;
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_LONG_WRITE,
				buf, HX8369_CMD_SETCLUMN_ADDR_LEN);
	CHECK_RETCODE(err);

	/* Set page address: 0~799 */
	buf[0] = HX8369_CMD_SETPAGE_ADDR |
		(HX8369_CMD_SETPAGE_ADDR_PARAM_1 << 8);
	buf[1] = HX8369_CMD_SETPAGE_ADDR_PARAM_2;
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_LONG_WRITE,
					buf, HX8369_CMD_SETPAGE_ADDR_LEN);
	CHECK_RETCODE(err);

	/* Set display brightness related */
	buf[0] = HX8369_CMD_WRT_DISP_BRIGHT |
			(HX8369_CMD_WRT_DISP_BRIGHT_PARAM_1 << 8);
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM,
		buf, 0);
	CHECK_RETCODE(err);

	buf[0] = HX8369_CMD_WRT_CABC_CTRL |
		(HX8369_CMD_WRT_CABC_CTRL_PARAM_1 << 8);
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM,
		buf, 0);
	CHECK_RETCODE(err);

	buf[0] = HX8369_CMD_WRT_CTRL_DISP |
		(HX8369_CMD_WRT_CTRL_DISP_PARAM_1 << 8);
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM,
		buf, 0);
	CHECK_RETCODE(err);

	/* exit sleep mode and set display on */
	buf[0] = MIPI_DCS_EXIT_SLEEP_MODE;
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM,
		buf, 0);
	CHECK_RETCODE(err);
	/* To allow time for the supply voltages
	 * and clock circuits to stabilize.
	 */
	msleep(5);
	buf[0] = MIPI_DCS_SET_DISPLAY_ON;
	err = mipi_dsi_pkt_write(mipi_dsi, MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM,
		buf, 0);
	CHECK_RETCODE(err);

	err = mipid_init_backlight(mipi_dsi);
	return err;
}
Пример #4
0
void DDSChatModule::startupDomainParticipant(int domainId)
{
    char                                       *clientIdentity = NULL;
    DDS_ReturnCode_t                            retCode;
    DDS_DomainParticipantFactoryQos             dpFactoryQos;
    DDS_DomainParticipantQos                    dpQos;
    DDSParticipantBuiltinTopicDataDataReader   *dpBuiltinReader = NULL;
    DDSDPBuiltinListener                       *dpBuiltinListener = NULL;

    // By default, the domain participant is enabled upon creation. So
    // the automatic enabling has to be turned off so that the listener
    // for builtin topic is attached.
    retCode = DDSTheParticipantFactory->get_qos(dpFactoryQos);
    CHECK_RETCODE(retCode,DDS_RETCODE_OK,"Cannot obtain QOS for domain participant factory\n");
    dpFactoryQos.entity_factory.autoenable_created_entities = DDS_BOOLEAN_FALSE;
    retCode = DDSTheParticipantFactory->set_qos(dpFactoryQos);
    CHECK_RETCODE(retCode,DDS_RETCODE_OK,"Cannot set QOS for domain participant factory\n");

    // Obtain refrence to a domain participant from the participant factory
    pDomainParticipant = DDSTheParticipantFactory->create_participant(
                            domainId,DDS_PARTICIPANT_QOS_DEFAULT,
                            NULL, DDS_STATUS_MASK_NONE);
    CHECK_HANDLE(pDomainParticipant,"Cannot create domain participant\n");

    // Use user_data QOS to advertise identity
    retCode = pDomainParticipant->get_qos(dpQos);
    CHECK_RETCODE(retCode,DDS_RETCODE_OK,"Cannot obtain QOS for domain participant\n");
    clientIdentity = new char [100];
    sprintf(clientIdentity,"%ld,%s",id,name);
    dpQos.user_data.value.from_array(reinterpret_cast<const DDS_Octet*>(clientIdentity),
                                     strlen(clientIdentity)+1); //Room for '\0'
    retCode = pDomainParticipant->set_qos(dpQos);
    CHECK_RETCODE(retCode,DDS_RETCODE_OK,"Cannot set QOS for domain participant\n");
    delete [] clientIdentity;

    // Get participant's builtin subscriber and datareader
    pBuiltinSub = pDomainParticipant->get_builtin_subscriber();
    CHECK_HANDLE(pBuiltinSub,"Cannot obtain domain participant's builtin subscriber\n");
    pReader[TOPIC_DISCOVERY] = pBuiltinSub->lookup_datareader(DDS_PARTICIPANT_TOPIC_NAME);
    CHECK_HANDLE(pReader[TOPIC_DISCOVERY],"Cannot obtain builtin subscriber's datareader\n");
    dpBuiltinReader = (DDSParticipantBuiltinTopicDataDataReader *) pReader[TOPIC_DISCOVERY];

    // Attach listener to builtin datareader and enable domain participant
    dpBuiltinListener = new DDSDPBuiltinListener();
    dpBuiltinReader->set_listener(dpBuiltinListener,DDS_DATA_AVAILABLE_STATUS);
    retCode = pDomainParticipant->enable();
    CHECK_RETCODE(retCode,DDS_RETCODE_OK,"Cannot attach listener to builtin reader\n");
    printf("Created domain participant\n" );

    // Register types for respective topics and then create the topics
    for(int iTopic=0; iTopic<(MAX_TOPICS-1); iTopic++)  // pTopi[MAX_TOPICS-1] is builtin publisher topic
    {
        pCChar typeName = ChatMessageTypeSupport::get_type_name();
        retCode = ChatMessageTypeSupport::register_type(pDomainParticipant,typeName);
        CHECK_RETCODE(retCode,DDS_RETCODE_OK,"Cannot register type for topic\n");
        printf("Registered type %s\n", typeName);

        pTopic[iTopic] = pDomainParticipant->create_topic(typeName,typeName,
                            DDS_TOPIC_QOS_DEFAULT,NULL,DDS_STATUS_MASK_NONE);
        CHECK_HANDLE(pTopic[iTopic],"Cannot create topic\n");
    }
}