oneofeleven / uv-k5-firmware-custom Goto Github PK
View Code? Open in Web Editor NEWA customized version of https://github.com/DualTachyon/uv-k5-firmware
License: Apache License 2.0
A customized version of https://github.com/DualTachyon/uv-k5-firmware
License: Apache License 2.0
Scan list 1 and list 2 has damaged/overlapped fonts. Item 34.53 and 35.53 in the menu. Overlapped fonts are visible when defined scan list ha different in width channels names. You have to try to view that list to see the issue. The issue was seen earlier. On today's build 230921 it is still occuring
having trouble understand what was those for
F-CALI seems to be adjusting xtal calibration, but why is this need user calibration? is there a hardware problem you found?I see the code is writing some value to bk reg ,but can't figure out what was that doing.
what was defult setting for this calibration(for most users)?
Please fix the audio in TX is too dark.
DTMF Decode works with QuanShang radio but with baofeng for exemple don't decode all characters.
Keep the good job ;)
I followed your instruction and encounterd two issue, consider add some info in readme for other people learning how to do this.
Is it Possible to change the LED light and function
EG Instead of Red for transmission it could be the Blue??
Just curious
Your new AM settings improved airband reception by a lot.
Can you maintain the original settings above 225 MHz and use your new settings below?
Hello.
If we set
ENABLE_BOOT_BEEPS := 0
this message shows up:
app/app.c: In function 'APP_CheckKeys': app/app.c:1189:4: error: 'boot_counter_10ms' undeclared (first use in this function) 1189 | boot_counter_10ms = 0; | ^~~~~~~~~~~~~~~~~ app/app.c:1189:4: note: each undeclared identifier is reported only once for each function it appears in make: *** [Makefile:240: app/app.o] Fehler 1
Two things related to Dual Watch that might be good to have:
So as the title says
ENABLE_TX_WHEN_AM := 0 allow TX (always FM) when RX is set to AM
Does not work properly
It will work until you recieve and AM TX after that it will continue to say TX disabled no matter what FRQ you are using. only way to resolve in most cases is to reboot radio. Sometimes it will work after around a 30sec or so if NO AM has been recieved.
when ever I edit the makefile in VSCode the changes are not applied... if I change the makefile using notepad those changes then work in vscode(as well as win_make.bat)...
Steps don't show right :
exemple step 1,25
i put 446.00000 when press up change to 446.00150 (up) shows 446.00200 (up) 446.00350 (up) 446.00500 so on...
step 6.25 the same and so on
When building with ENABLE_VOICE, ENABLE_ALARM, ENABLE_SHOW_CHARGE_LEVEL and ENABLE_SQUELCH1_LOWER enabled, along with the options enabled by default, the build fails.
Attached are the output of gcc and the Makefile i'm using.
firstly this is a 'me' problem,I feel sorry for border you, but I really can't figure out why. I been struggleing for severa hours.
in this project a code like this can't work:
sprintf(String, "%.5f", gSubMenuSelection * 1e-05);
it will return a "f";
it have to be written like this :
sprintf(String, "%d.%05u", gSubMenuSelection / 100000, abs(gSubMenuSelection) % 100000);
do u know why?
it seems this project is using exactly the same printf with DualTachyon's project. It‘s just Not logical to have different result.
My apology for border u again.
Early days on this one, noticed in VFO mode and changing BW W to N the audio bars appear. Occasionally seen one left most bar pop up randomly.
Cool feature!
Was thinking last night are there any benefits shifting the Bandwidth menu contents W/N to the Mode menu ie AM, NAM, FM, NFM ?
Just an idea. re TG Also please do get a RT-890 their great, got 2, love to see the magic you could weave in technicolor lol
Fun times heehee
-c ui/menu.c -o ui/menu.o
ui/menu.c:43:1: error: missing braces around initializer [-Werror=missing-braces]
43 | {
| ^
......
88 | "AL-MOD", 0, VOICE_ID_INVALID },
| { }
ui/menu.c:90:2: error: expected identifier or '(' before '{' token
90 | {"ANI-ID", 0, VOICE_ID_ANI_CODE },
| ^
ui/menu.c:90:55: error: expected identifier or '(' before ',' token
90 | {"ANI-ID", 0, VOICE_ID_ANI_CODE },
| ^
ui/menu.c:91:55: error: expected identifier or '(' before ',' token
91 | {"UPCODE", 0, VOICE_ID_INVALID },
| ^
ui/menu.c:92:55: error: expected identifier or '(' before ',' token
92 | {"DWCODE", 0, VOICE_ID_INVALID },
| ^
ui/menu.c:93:55: error: expected identifier or '(' before ',' token
93 | {"D-ST", 0, VOICE_ID_INVALID },
| ^
ui/menu.c:94:58: error: expected identifier or '(' before ',' token
94 | {"D-RSP", 0, VOICE_ID_INVALID },
| ^
ui/menu.c:95:55: error: expected identifier or '(' before ',' token
95 | {"D-HOLD", 0, VOICE_ID_INVALID },
| ^
ui/menu.c:96:55: error: expected identifier or '(' before ',' token
96 | {"D-PRE", 0, VOICE_ID_INVALID },
| ^
ui/menu.c:97:55: error: expected identifier or '(' before ',' token
97 | {"PTT-ID", 0, VOICE_ID_INVALID },
| ^
ui/menu.c:98:55: error: expected identifier or '(' before ',' token
98 | {"D-DCD", 0, VOICE_ID_INVALID },
| ^
ui/menu.c:99:55: error: expected identifier or '(' before ',' token
99 | {"D-LIST", 0, VOICE_ID_INVALID },
| ^
ui/menu.c:100:55: error: expected identifier or '(' before ',' token
100 | {"D-LIVE", 0, VOICE_ID_INVALID }, // live DTMF decoder
| ^
ui/menu.c:101:55: error: expected identifier or '(' before ',' token
101 | {"PONMSG", 0, VOICE_ID_INVALID },
| ^
ui/menu.c:102:55: error: expected identifier or '(' before ',' token
102 | {"ROGER", 0, VOICE_ID_INVALID },
| ^
ui/menu.c:103:55: error: expected identifier or '(' before ',' token
103 | {"BATVOL", 0, VOICE_ID_INVALID }, // was "VOL"
| ^
ui/menu.c:104:55: error: expected identifier or '(' before ',' token
104 | {"BATTXT", 0, VOICE_ID_INVALID },
| ^
ui/menu.c:105:55: error: expected identifier or '(' before ',' token
105 | {"MODE", 0, VOICE_ID_INVALID }, // was "AM"
| ^
ui/menu.c:107:55: error: expected identifier or '(' before ',' token
107 | {"NOAA-S", 0, VOICE_ID_INVALID },
| ^
ui/menu.c:109:55: error: expected identifier or '(' before ',' token
109 | {"RESET", 0, VOICE_ID_INITIALISATION }, // might be better to move this to the hidden menu items ?
| ^
ui/menu.c:114:55: error: expected identifier or '(' before ',' token
114 | {"F-LOCK", 1, VOICE_ID_INVALID },
| ^
ui/menu.c:115:55: error: expected identifier or '(' before ',' token
115 | {"TX-200", 1, VOICE_ID_INVALID }, // was "200TX"
| ^
ui/menu.c:116:55: error: expected identifier or '(' before ',' token
116 | {"TX-350", 1, VOICE_ID_INVALID }, // was "350TX"
| ^
ui/menu.c:117:55: error: expected identifier or '(' before ',' token
117 | {"TX-500", 1, VOICE_ID_INVALID }, // was "500TX"
| ^
ui/menu.c:118:55: error: expected identifier or '(' before ',' token
118 | {"350-EN", 1, VOICE_ID_INVALID }, // was "350EN"
| ^
ui/menu.c:119:55: error: expected identifier or '(' before ',' token
119 | {"SCR-EN", 1, VOICE_ID_INVALID }, // was "SCREN"
| ^
ui/menu.c:121:55: error: expected identifier or '(' before ',' token
121 | {"TX-EN", 1, VOICE_ID_INVALID }, // enable TX
| ^
ui/menu.c:122:55: error: expected identifier or '(' before ',' token
122 | {"F-CALI", 1, VOICE_ID_INVALID }, // reference xtal calibration
| ^
ui/menu.c:125:1: error: expected identifier or '(' before '}' token
125 | };
| ^
cc1.exe: all warnings being treated as errors
make: *** [ui/menu.o] Error 1
C:\GnuWin32\uv-k5-firmware-custom-main>del /S /Q *.o 1>nul 2>nul
C:\GnuWin32\uv-k5-firmware-custom-main>del /S /Q *.d 1>nul 2>nul
C:\GnuWin32\uv-k5-firmware-custom-main>pause
Press any key to continue . . .
BK chipset has some gap in supported frequencies. If I remember it is 630-840MHz. It should not be possible to enter that range of frequencies into VFO
the external PTT stops working if the channel opens squelch, while with the inserted squelch it works correctly, please look the video.
I still get distortion when very close to the transmitter.
If you could show the dB value you are using in your lookup table, at least while you are improving on AM reception, we could see where it starts to distort.
Imagine that I get distortion and it reads -10dB. We could try to lower the gain at -10dB and see if it helps.
add menu radio Fm+0
I've been coding in C for a long long time now, but I've recently come across a problem with two very different C/C++ compilers which has confused me (and caused bugs).
I have some small const tables in my code ..
static const int16_t lna_short_dB[] = {-33, -30, -24, 0};
static const int16_t lna_dB[] = {-24, -19, -14, -9, -6, -4, -2, 0};
static const int16_t mixer_dB[] = {-8, -6, -3, 0};
static const int16_t pga_dB[] = {-33, -27, -21, -15, -9, -6, -3, 0};
If you single step when your code reads those values, they are not always the correct values.
If I surround the negative values (all ints) with brackets like this ..
static const int16_t lna_short_dB[] = { (-33), (-30), (-24), 0};
static const int16_t lna_dB[] = { (-24), (-19), (-14), ( -9), (-6), (-4), (-2), 0};
static const int16_t mixer_dB[] = { ( -8), ( -6), ( -3), 0};
static const int16_t pga_dB[] = { (-33), (-27), (-21), (-15), (-9), (-6), (-3), 0};
the code reads the values from the tables correctly.
Am I missing something ??
Hi, I am following your excellent work, many people complain that this version of yours does not receive compared to others (piotr022), but I have seen that it often is' only a problem of low sensitivity of the squelch, in the code you should have the possibility to lower the threshold to eliminate this problem.
Thanks and good work.
Since there is already a T9 library written for another K5 firmware - https://github.com/piotr022/UV_K5_playground/blob/main/libs/keyboard/t9.hpp, perhaps you could extend the current on-screen DTMF decoder with a T9 text parsing capability.
For example, if a DTMF sequence looks like a parsable T9 text, show the parsed text instead of the DTMF digits. Ideally, this should be toggable with a separate switch from the one used for the DTMF decoder.
there is a interesting function at the bottom of this code ↓
https://github.com/piotr022/UV_K5_playground/blob/main/libs/views/rssi_sbar.hpp
it can display battery voltage in the status bar beside the battery icon
I have try to integrate this in your code and bulid my own firmware ,but I'm just not good enough in coding skills.
Hello.
First thank you for the great work!
I am wondering is it possible to add the channel names to SLIST1 and SLIST2 too. Currently only the channel number and the optional priority is displayed. Also, for better user experience maybe the channel name should be placed above the channel number at all menus (channel Delete, SLIST1 SLIST2, etc.).
Best Regards,
Anton
p.s. sorry for the empty issue - my finger slipped to the enter accidentaly :/
Rx expander destroys audio when FM. Just enable RX or TX/RX in menu 31 and listen to FM station.
On the latest build b0794ec some DTMF characters are decoded on screen during FM transmission reception. Some random characters happen on screen. Earlier there was not problem with that issue
in vfo mode . I type in 438.500 00 and set step to 12.5k
then i press up key
i was expecting 438.512 50 but I got a 438.512 00
I have BIG_FREQ enabled
Congratulations again for your excellent results, I wanted to suggest a change that could be made to the firmware : the possibility to transfer the parameters of a memory to the VFO (Mem - > VFO) as used on the most important radio, in order to simplify the operational use of the radio.
Thanks again and good job.
Hi 111 latest build - display related issue when entering frequency in VFO mode. As the last digit is entered the frequency appears to shift a pixel or 2 to the right. Its barely noticeable but once you see it you can't unsee it ha no big deal but possibly fix worthy? Both VFOs suffer from it.
Hi,
I have built 30d6f3b version and noticed that Menu->24 SC-REV option is not persistent. Whatever I change it to, it remains set only until I power off the radio. After Power-On it always reverts to TO setting.
I have also tried official DualTachyon firmware 2023-09-16-no-swd and SC-REV option does remain after reboot.
Could you please check this?
compile failed with FMRADIO enabled
···
GIT_HASH = b0794ec
arm-none-eabi-gcc -Os -Wall -Werror -mcpu=cortex-m0 -fno-builtin -fshort-enums -fno-delete-null-pointer-checks -std=c11 -MMD -DPRINTF_INCLUDE_CONFIG_H -DGIT_HASH="b0794ec" -DENABLE_FMRADIO -DENABLE_OVERLAY -DENABLE_UART -DENABLE_SMALL_BOLD -DENABLE_VOICE -DENABLE_ALARM -DKEEP_MEM_NAME -DENABLE_WIDE_RX -DENABLE_CTCSS_TAIL_PHASE_SHIFT -DENABLE_MAIN_KEY_HOLD -DENABLE_BOOT_BEEPS -DENABLE_COMPANDER -DENABLE_SHOW_CHARGE_LEVEL -DENABLE_REVERSE_BAT_SYMBOL -DENABLE_NO_SCAN_TIMEOUT -DENABLE_AM_FIX -DENABLE_AM_FIX_SHOW_DATA -DENABLE_AUDIO_BAR -DENABLE_COPY_CHAN_TO_VFO -I /home/uv-k5-firmware-custom -I /home/uv-k5-firmware-custom/external/CMSIS_5/CMSIS/Core/Include/ -I /home/uv-k5-firmware-custom/external/CMSIS_5/Device/ARM/ARMCM0/Include -c version.c -o version.o
arm-none-eabi-gcc -mcpu=cortex-m0 -nostartfiles -Wl,-T,firmware.ld start.o init.o sram-overlay.o external/printf/printf.o driver/adc.o driver/aes.o driver/backlight.o driver/bk1080.o driver/bk4819.o driver/crc.o driver/eeprom.o driver/flash.o driver/gpio.o driver/i2c.o driver/keyboard.o driver/spi.o driver/st7565.o driver/system.o driver/systick.o driver/uart.o app/action.o app/app.o app/dtmf.o app/fm.o app/generic.o app/main.o app/menu.o app/scanner.o app/uart.o am_fix.o audio.o bitmaps.o board.o dcs.o font.o frequencies.o functions.o helper/battery.o helper/boot.o misc.o radio.o scheduler.o settings.o ui/battery.o ui/fmradio.o ui/helper.o ui/inputbox.o ui/lock.o ui/main.o ui/menu.o ui/rssi.o ui/scanner.o ui/status.o ui/ui.o ui/welcome.o version.o main.o -o firmware
/usr/lib/gcc/arm-none-eabi/10.3.1/../../../arm-none-eabi/bin/ld: app/fm.o: in function FM_Tune': fm.c:(.text+0x190): undefined reference to
gScheduleFM'
/usr/lib/gcc/arm-none-eabi/10.3.1/../../../arm-none-eabi/bin/ld: app/fm.o: in function FM_Key_UP_DOWN': fm.c:(.text+0x284): undefined reference to
gRequestSaveFM'
/usr/lib/gcc/arm-none-eabi/10.3.1/../../../arm-none-eabi/bin/ld: app/fm.o: in function FM_PlayAndUpdate': fm.c:(.text+0x2b0): undefined reference to
SETTINGS_SaveFM'
/usr/lib/gcc/arm-none-eabi/10.3.1/../../../arm-none-eabi/bin/ld: fm.c:(.text+0x2d8): undefined reference to gScheduleFM' /usr/lib/gcc/arm-none-eabi/10.3.1/../../../arm-none-eabi/bin/ld: app/fm.o: in function
FM_ProcessKeys':
fm.c:(.text+0x5f6): undefined reference to ACTION_FM' /usr/lib/gcc/arm-none-eabi/10.3.1/../../../arm-none-eabi/bin/ld: fm.c:(.text+0x67c): undefined reference to
gAnotherVoiceID'
/usr/lib/gcc/arm-none-eabi/10.3.1/../../../arm-none-eabi/bin/ld: fm.c:(.text+0x684): undefined reference to `gRequestSaveFM'
collect2: error: ld returned 1 exit status
make: *** [Makefile:272: firmware] Error 1
···
I was trying to implement this
to make the FREQ COPY function ([F]+4) run indefinetely or if user press [Exit] button
It seems I can achive this by block this two line
if (gScreenToDisplay == DISPLAY_SCANNER && gScannerEditState == 0 && gScanCssState < SCAN_CSS_STATE_FOUND)
{
if (++gScanProgressIndicator > 32)
{
if (gScanCssState == SCAN_CSS_STATE_SCANNING && !gScanSingleFrequency)
gScanCssState = SCAN_CSS_STATE_FOUND;
/* else
gScanCssState = SCAN_CSS_STATE_FAILED;*/
gUpdateStatus = true;
}
gUpdateDisplay = true;
}
not sure if this is the right way of doing it ,seems works for me
then I got a problem : after scan complete ,the UI of scan result will automatic jump back after about 16second ,I would like the scan result to be there forever until I press Exit or M key, Chould u please help me point out where I can control this?
just start getting this ...
am_fix.c:118:2: error: expected '}' before 'const'
118 | const unsigned int original_index = 1;
| ^~~~~
am_fix.c:105:2: note: to match this '{'
105 | {
| ^
am_fix.c:104:35: error: 'am_fix_gain_table' defined but not used [-Werror=unused-const-variable=]
104 | static const t_am_fix_gain_table am_fix_gain_table[] =
| ^~~~~~~~~~~~~~~~~
am_fix.c:100:23: error: 'pga_dB' defined but not used [-Werror=unused-const-variable=]
100 | static const int16_t pga_dB[] = {-33, -27, -21, -15, -9, -6, -3, 0};
| ^~~~~~
am_fix.c:99:23: error: 'mixer_dB' defined but not used [-Werror=unused-const-variable=]
99 | static const int16_t mixer_dB[] = { -8, -6, -3, 0};
| ^~~~~~~~
am_fix.c:98:23: error: 'lna_dB' defined but not used [-Werror=unused-const-variable=]
98 | static const int16_t lna_dB[] = {-24, -19, -14, -9, -6, -4, -2, 0};
| ^~~~~~
am_fix.c:97:23: error: 'lna_short_dB' defined but not used [-Werror=unused-const-variable=]
97 | static const int16_t lna_short_dB[] = {-33, -30 -24, 0}; // corrected'ish
| ^~~~~~~~~~~~
cc1.exe: all warnings being treated as errors
make: *** [am_fix.o] Error 1
D:_______\uv-k5-firmware-custom>del /S /Q *.o 1>nul 2>nul
Been happening since around the last 3 sets of commits on GH
this happens even when using the win_make.bat
Ok so for the past 24 have compiled a few FW's with varying results... Some good some bad.. but the current build OEFW-ed32177 is by far the worst and oddest.... It wil work on AM for a few minutes before becoming very distorted to then NOT recieve anything again until I turn it off and on again...
I have included a zip here so you can see if you have the issue... I also included in the zip the last Good version that works frigging awesome for me too so you can compare and hopefully understand the issue I am referring too
Hi.
This comes up at commit 06722a2:
ui/main.c: In function 'UI_DisplayMain': ui/main.c:465:7: error: 'center_line_is_free' undeclared (first use in this function) 465 | if (center_line_is_free) | ^~~~~~~~~~~~~~~~~~~ ui/main.c:465:7: note: each undeclared identifier is reported only once for each function it appears in make: *** [Makefile:240: ui/main.o] Fehler 1
Makefile is
`ENABLE_SWD := 0
ENABLE_OVERLAY := 1
ENABLE_UART := 1
ENABLE_AIRCOPY := 0
ENABLE_FMRADIO := 0
ENABLE_NOAA := 0
ENABLE_VOICE := 0
ENABLE_ALARM := 0
ENABLE_BIG_FREQ := 0
ENABLE_KEEP_MEM_NAME := 1
ENABLE_CHAN_NAME_FREQ := 1
ENABLE_WIDE_RX := 1
ENABLE_TX_WHEN_AM := 0
ENABLE_CTCSS_TAIL_PHASE_SHIFT := 0
ENABLE_MAIN_KEY_HOLD := 1
ENABLE_BOOT_BEEPS := 0
ENABLE_DTMF_DECODER := 0
ENABLE_COMPANDER := 0
#ENABLE_SINGLE_VFO_CHAN := 1
#ENABLE_BAND_SCOPE := 1`
app/app.c
line1964
#ifdef ENABLE_FMRADIO
if (gFmRadioMode && gCurrentFunction != FUNCTION_RECEIVE && gCurrentFunction != FUNCTION_MONITOR && gCurrentFunction != FUNCTION_TRANSMIT)
GUI_SelectNextDisplay(DISPLAY_FM);
else
#endif
GUI_SelectNextDisplay(DISPLAY_MAIN);
looks like a harmless bug
Hi 1O11.
if I set BACKL to OFF and want to exit it won't let me exiting. But I like to exit again ;) Values above OFF working.
This enables the user to change a mem ch freq but retain the name? If so, its stopped working as of commit before last. I'm wondering if that got fixed with latest ch tidy commit?? ;-)
Force narrow bandwidth when AM because AM is able to pass only narrow audio. Wide bandwidth increases hissing only on AM
edit new frecuency in scramble menu
Thanks for your custom firmware, is it possible to have rssi bar display? It would be useful.
Bit of a question/idea.
I use side key 1 for Monitor and side key 2 for Scan on/off. Unfortunately Quansheng forgot the off bit! Press SK2, sure enough it scans, press it again it does zilch. Wonder if thats fixable?
While on the subject of scanning and I'm guessing this is far more of a reach. But unless the scan stops on a carrier, the mem channel always reverts to the initial starting point when manually stopped with Exit. This is quite unusual even for Chinese HTs - any ideas?
By the way no need to apologise for bugs, pretty sure we are all thankful for your efforts and afterall we are your beta testers haha
Após instalação do firmware a recepção foi prejudicada, principalmente próximo aos 260MHz. Observei também que antes da atualização, o squelch abria com -131 dBm , tanto em AM quanto FM ... após a atualização, o squelch ficou mais pesado , abre com - 121dBm em AM e - 117dBm em FM.
Hi 111, good work with the AM tweaks current works good for me on civil and mil airband.
Menu issue to report. Sporadic.
eg Start at SQL (after radio boot). Then press 12 WIDE, then 18 CH-DIS etc etc eventually pressing any combo of numbers fails to switch to the menu item. Tried a few times different combos and it happens sooner than other times (average seems to be 5 menu selections one after the other). Rebooting radio each test.
this is you latest build as of the time of this comment
bad distortion gets worse the longer a trans happens
Hi 1O11.
If freq is on 'TX DISABLED' it makes no sense to show L/M/H on display.
can we disable it?
Hi 1O11.
I reorganized menu list. 'cause I want more used menu entries to upper list numbers.
menu.c:
` const char MenuList[][7] =
{
"SQL",
"STEP",
"T-PWR", // was "TXP"
"BACKLT", // was "ABR"
"SLIST",
"S-ADD1",
"S-ADD2",
"SLIST1",
"SLIST2",
`
menu.h:
`enum
{
MENU_SQL = 0,
MENU_STEP,
MENU_TXP,
MENU_ABR,
MENU_S_LIST,
MENU_S_ADD1,
MENU_S_ADD2,
MENU_SLIST1,
MENU_SLIST2,
MENU_R_DCS,`
Works on setting screen (right side). But I'm missing one thing (again). Menus (left side) are the same. But setting screen shows new structure. What ima missing here? I knew what file had to edit, too. But I forgot which it was... I did that weeks a go for my private joy.
Thank you for lettin me stealing your preacous time ;)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.